GitHub check
256 KB of 607 KB loaded Download the full log (607 KB)
351 KB of earlier output not loaded
:04:53.8024438Z ╰────
2026-10-25T01:04:53.8024440Z
2026-10-25T01:04:53.8024892Z ⚠ 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-25T01:04:53.8025022Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7]
2026-10-25T01:04:53.8025081Z 321 │ );
2026-10-25T01:04:53.8025335Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) {
2026-10-25T01:04:53.8025441Z 323 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8025574Z 324 │ ╰─▶ }
2026-10-25T01:04:53.8025632Z 325 │
2026-10-25T01:04:53.8025689Z ╰────
2026-10-25T01:04:53.8025692Z
2026-10-25T01:04:53.8026140Z ⚠ 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-25T01:04:53.8026270Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7]
2026-10-25T01:04:53.8026433Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient)));
2026-10-25T01:04:53.8026678Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-25T01:04:53.8026786Z 331 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8026919Z 332 │ ╰─▶ }
2026-10-25T01:04:53.8027025Z 333 │ yield* Fiber.interrupt(subscriptionFiber);
2026-10-25T01:04:53.8027076Z ╰────
2026-10-25T01:04:53.8027078Z
2026-10-25T01:04:53.8027327Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used.
2026-10-25T01:04:53.8027445Z ╭─[apps/web/src/lib/terminalContext.ts:56:10]
2026-10-25T01:04:53.8027503Z 55 │
2026-10-25T01:04:53.8027602Z 56 │ function normalizeTerminalContextSelection(
2026-10-25T01:04:53.8027719Z · ────────────────┬────────────────
2026-10-25T01:04:53.8027911Z · ╰── 'normalizeTerminalContextSelection' is declared here
2026-10-25T01:04:53.8028001Z 57 │ selection: TerminalContextSelection,
2026-10-25T01:04:53.8028053Z ╰────
2026-10-25T01:04:53.8028206Z help: Consider removing this declaration.
2026-10-25T01:04:53.8028238Z
2026-10-25T01:04:53.8028687Z ⚠ 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-25T01:04:53.8028822Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3]
2026-10-25T01:04:53.8028886Z 225 │ ) {
2026-10-25T01:04:53.8029086Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-25T01:04:53.8029201Z 227 │ │ const socket = sockets[index];
2026-10-25T01:04:53.8029291Z 228 │ │ if (socket) {
2026-10-25T01:04:53.8029393Z 229 │ │ return socket;
2026-10-25T01:04:53.8029468Z 230 │ │ }
2026-10-25T01:04:53.8029572Z 231 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8029702Z 232 │ ╰─▶ }
2026-10-25T01:04:53.8029878Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket."));
2026-10-25T01:04:53.8029927Z ╰────
2026-10-25T01:04:53.8029930Z
2026-10-25T01:04:53.8030430Z ⚠ 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-25T01:04:53.8030563Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3]
2026-10-25T01:04:53.8030621Z 239 │ ) {
2026-10-25T01:04:53.8030824Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-25T01:04:53.8031042Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index];
2026-10-25T01:04:53.8031135Z 242 │ │ if (request) {
2026-10-25T01:04:53.8031232Z 243 │ │ return request;
2026-10-25T01:04:53.8031312Z 244 │ │ }
2026-10-25T01:04:53.8031412Z 245 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8031537Z 246 │ ╰─▶ }
2026-10-25T01:04:53.8031705Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request."));
2026-10-25T01:04:53.8031761Z ╰────
2026-10-25T01:04:53.8031764Z
2026-10-25T01:04:53.8032020Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-25T01:04:53.8032188Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40]
2026-10-25T01:04:53.8032267Z 89 │ let cursor = prompt.length;
2026-10-25T01:04:53.8032372Z 90 │ for (const occurrence of occurrences.reverse()) {
2026-10-25T01:04:53.8032478Z · ───────
2026-10-25T01:04:53.8032562Z 91 │ let { start, end } = occurrence;
2026-10-25T01:04:53.8032616Z ╰────
2026-10-25T01:04:53.8032876Z help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-25T01:04:53.8032878Z
2026-10-25T01:04:53.8033083Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-25T01:04:53.8033217Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8]
2026-10-25T01:04:53.8033292Z 2 │ AuthFilesystemReadScope,
2026-10-25T01:04:53.8033363Z 3 │ type AuthSessionState,
2026-10-25T01:04:53.8033447Z · ────────┬───────
2026-10-25T01:04:53.8033594Z · ╰── 'AuthSessionState' is imported here
2026-10-25T01:04:53.8033671Z 4 │ type FilesystemBrowseEntry,
2026-10-25T01:04:53.8033723Z ╰────
2026-10-25T01:04:53.8033820Z help: Consider removing this import.
2026-10-25T01:04:53.8033823Z
2026-10-25T01:04:53.8034011Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops
2026-10-25T01:04:53.8034138Z ╭─[packages/client-runtime/src/state/shell.ts:189:5]
2026-10-25T01:04:53.8034255Z 186 │ let waiting = yield* Ref.get(awaitingCompletion);
2026-10-25T01:04:53.8034325Z 187 │ let next = initial;
2026-10-25T01:04:53.8034400Z · ──┬─
2026-10-25T01:04:53.8034527Z · ╰── From this accumulator
2026-10-25T01:04:53.8034611Z 188 │ let receivedSnapshot = false;
2026-10-25T01:04:53.8034685Z 189 │ for (const item of items) {
2026-10-25T01:04:53.8034757Z · ─┬─
2026-10-25T01:04:53.8034865Z · ╰── For this loop
2026-10-25T01:04:53.8034958Z 190 │ if (item.kind === "synchronized") {
2026-10-25T01:04:53.8035027Z 191 │ waiting = false;
2026-10-25T01:04:53.8035121Z 192 │ if (Option.isSome(next.snapshot)) {
2026-10-25T01:04:53.8035240Z 193 │ next = { ...next, status: "live", error: Option.none() };
2026-10-25T01:04:53.8035338Z · ───┬───
2026-10-25T01:04:53.8035469Z · ╰── From this spread
2026-10-25T01:04:53.8035532Z 194 │ }
2026-10-25T01:04:53.8035587Z ╰────
2026-10-25T01:04:53.8035744Z help: Consider using `Object.assign()` to mutate the accumulator instead.
2026-10-25T01:04:53.8035899Z note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-25T01:04:53.8035902Z
2026-10-25T01:04:53.8036115Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-25T01:04:53.8036241Z ╭─[apps/web/src/lib/announce.browser.test.ts:41:46]
2026-10-25T01:04:53.8036299Z 40 │
2026-10-25T01:04:53.8036407Z 41 │ expect(regionTexts()).toEqual([...first].reverse());
2026-10-25T01:04:53.8036573Z · ───────
2026-10-25T01:04:53.8036706Z 42 │ expect(regionTexts()).toContain("Claude");
2026-10-25T01:04:53.8036760Z ╰────
2026-10-25T01:04:53.8037015Z help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-25T01:04:53.8037017Z
2026-10-25T01:04:53.8037460Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-25T01:04:53.8037588Z ╭─[apps/server/src/serverSettings.test.ts:1741:32]
2026-10-25T01:04:53.8037761Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
2026-10-25T01:04:53.8037951Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-25T01:04:53.8038065Z · ───────────────────
2026-10-25T01:04:53.8038178Z 1742 │ const scriptsJson = yield* Schema.encodeEffect(
2026-10-25T01:04:53.8038234Z ╰────
2026-10-25T01:04:53.8038237Z
2026-10-25T01:04:53.8038676Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-25T01:04:53.8038795Z ╭─[apps/server/src/serverSettings.test.ts:1742:34]
2026-10-25T01:04:53.8038980Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-25T01:04:53.8039089Z 1742 │ const scriptsJson = yield* Schema.encodeEffect(
2026-10-25T01:04:53.8039213Z · ───────────────────
2026-10-25T01:04:53.8039332Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)),
2026-10-25T01:04:53.8039386Z ╰────
2026-10-25T01:04:53.8039388Z
2026-10-25T01:04:53.8039557Z ⚠ react(purity): Cannot call impure function during render
2026-10-25T01:04:53.8039718Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:698:76]
2026-10-25T01:04:53.8039899Z 697 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() }));
2026-10-25T01:04:53.8040064Z 698 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() });
2026-10-25T01:04:53.8040204Z · ─────┬────
2026-10-25T01:04:53.8040422Z · ╰── Cannot call impure function
2026-10-25T01:04:53.8040561Z 699 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString();
2026-10-25T01:04:53.8040612Z ╰────
2026-10-25T01:04:53.8040903Z 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-25T01:04:53.8041201Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T01:04:53.8041203Z
2026-10-25T01:04:53.8041373Z ⚠ react(purity): Cannot call impure function during render
2026-10-25T01:04:53.8041533Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:71]
2026-10-25T01:04:53.8041656Z 718 │ const snoozePresets = useMemo(
2026-10-25T01:04:53.8041868Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-25T01:04:53.8042003Z · ─────┬────
2026-10-25T01:04:53.8042185Z · ╰── Cannot call impure function
2026-10-25T01:04:53.8042302Z 720 │ [props.snoozePresetMinute, swipeActions.secondary],
2026-10-25T01:04:53.8042356Z ╰────
2026-10-25T01:04:53.8042631Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T01:04:53.8042927Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T01:04:53.8042932Z
2026-10-25T01:04:53.8043114Z ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T01:04:53.8043267Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:6]
2026-10-25T01:04:53.8043443Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-25T01:04:53.8043558Z 720 │ [props.snoozePresetMinute, swipeActions.secondary],
2026-10-25T01:04:53.8043654Z · ────────────┬───────────
2026-10-25T01:04:53.8043827Z · ╰── Unnecessary dependency `props.snoozePresetMinute`
2026-10-25T01:04:53.8043886Z 721 │ );
2026-10-25T01:04:53.8043939Z ╰────
2026-10-25T01:04:53.8044260Z 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-25T01:04:53.8044651Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8044655Z
2026-10-25T01:04:53.8044838Z ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T01:04:53.8044995Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:766:7]
2026-10-25T01:04:53.8045067Z 765 │ thread.pinnedAt,
2026-10-25T01:04:53.8045129Z 766 │ variant,
2026-10-25T01:04:53.8045207Z · ───┬───
2026-10-25T01:04:53.8045346Z · ╰── Unnecessary dependency `variant`
2026-10-25T01:04:53.8045407Z 767 │ ],
2026-10-25T01:04:53.8045458Z ╰────
2026-10-25T01:04:53.8045779Z 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-25T01:04:53.8046091Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8046093Z
2026-10-25T01:04:53.8046290Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T01:04:53.8046449Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21]
2026-10-25T01:04:53.8046772Z 1215 │ {providerDrivers.slice(0, -1).map((driver, index) => (
2026-10-25T01:04:53.8046910Z 1216 │ <View key={`${driver}:${index}`} className="-mr-1 opacity-30">
2026-10-25T01:04:53.8047092Z · ──────────────────────────
2026-10-25T01:04:53.8047240Z 1217 │ <ProviderIcon provider={driver} size={12} />
2026-10-25T01:04:53.8047293Z ╰────
2026-10-25T01:04:53.8047448Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T01:04:53.8047451Z
2026-10-25T01:04:53.8047654Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used.
2026-10-25T01:04:53.8047748Z ╭─[apps/web/src/types.ts:22:3]
2026-10-25T01:04:53.8047819Z 21 │ EnvironmentThreadShell,
2026-10-25T01:04:53.8047888Z 22 │ ThreadRunSummary,
2026-10-25T01:04:53.8047972Z · ────────┬───────
2026-10-25T01:04:53.8048117Z · ╰── 'ThreadRunSummary' is imported here
2026-10-25T01:04:53.8048185Z 23 │ ThreadRuntimeSummary,
2026-10-25T01:04:53.8048246Z ╰────
2026-10-25T01:04:53.8048350Z help: Consider removing this import.
2026-10-25T01:04:53.8048353Z
2026-10-25T01:04:53.8048567Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T01:04:53.8048711Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
2026-10-25T01:04:53.8048816Z 772 │ if (settingsSheetPresentation.isActive) {
2026-10-25T01:04:53.8048946Z 773 │ settingsRoutePresentation.present(settingsRouteSession);
2026-10-25T01:04:53.8049043Z · ────────────┬────────────
2026-10-25T01:04:53.8049213Z · ╰── Missing dependency `settingsRoutePresentation`
2026-10-25T01:04:53.8049271Z 774 │ }
2026-10-25T01:04:53.8049482Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
2026-10-25T01:04:53.8049596Z · ────────────────┬────────────────
2026-10-25T01:04:53.8049878Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
2026-10-25T01:04:53.8049931Z 776 │
2026-10-25T01:04:53.8049986Z ╰────
2026-10-25T01:04:53.8050439Z 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-25T01:04:53.8050749Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8050752Z
2026-10-25T01:04:53.8050911Z ⚠ react(immutability): This value cannot be modified
2026-10-25T01:04:53.8051057Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5]
2026-10-25T01:04:53.8051220Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
2026-10-25T01:04:53.8051356Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius);
2026-10-25T01:04:53.8051448Z · ──────────┬─────────
2026-10-25T01:04:53.8051603Z · ╰── `animatedBorderRadius` originates here
2026-10-25T01:04:53.8051761Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
2026-10-25T01:04:53.8051833Z 390 │ useLayoutEffect(() => {
2026-10-25T01:04:53.8051935Z 391 │ animatedBorderRadius.value = shouldAnimate
2026-10-25T01:04:53.8052074Z · ──────────┬─────────
2026-10-25T01:04:53.8052266Z · ╰── `animatedBorderRadius` cannot be modified
2026-10-25T01:04:53.8052357Z 392 │ ? withTiming(targetBorderRadius, {
2026-10-25T01:04:53.8052410Z ╰────
2026-10-25T01:04:53.8052671Z 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-25T01:04:53.8052976Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8052978Z
2026-10-25T01:04:53.8053146Z ⚠ react(purity): Cannot call impure function during render
2026-10-25T01:04:53.8053268Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56]
2026-10-25T01:04:53.8053374Z 820 │ const resolved = resolveThreadTarget(target);
2026-10-25T01:04:53.8053535Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
2026-10-25T01:04:53.8053661Z · ─────┬────
2026-10-25T01:04:53.8053830Z · ╰── Cannot call impure function
2026-10-25T01:04:53.8053909Z 822 │ return AsyncResult.failure(
2026-10-25T01:04:53.8053964Z ╰────
2026-10-25T01:04:53.8054237Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T01:04:53.8054527Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T01:04:53.8054532Z
2026-10-25T01:04:53.8054705Z ⚠ react(purity): Cannot call impure function during render
2026-10-25T01:04:53.8054828Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46]
2026-10-25T01:04:53.8054901Z 708 │ const wokeAt = resolved
2026-10-25T01:04:53.8055037Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
2026-10-25T01:04:53.8055150Z · ─────┬────
2026-10-25T01:04:53.8055306Z · ╰── Cannot call impure function
2026-10-25T01:04:53.8055369Z 710 │ : null;
2026-10-25T01:04:53.8055421Z ╰────
2026-10-25T01:04:53.8055690Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T01:04:53.8056021Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T01:04:53.8056061Z
2026-10-25T01:04:53.8056224Z ⚠ eslint(no-control-regex): Unexpected control character
2026-10-25T01:04:53.8056415Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46]
2026-10-25T01:04:53.8056552Z 219 │ <Text selectable className="font-mono text-sm text-foreground">
2026-10-25T01:04:53.8056689Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")}
2026-10-25T01:04:53.8056794Z · ──┬─
2026-10-25T01:04:53.8056959Z · ╰── 'U+001B' is a control character.
2026-10-25T01:04:53.8057029Z 221 │ </Text>
2026-10-25T01:04:53.8057084Z ╰────
2026-10-25T01:04:53.8057310Z help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression.
2026-10-25T01:04:53.8057312Z
2026-10-25T01:04:53.8057568Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-25T01:04:53.8057699Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7]
2026-10-25T01:04:53.8057753Z 3404 │
2026-10-25T01:04:53.8057939Z 3405 │ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
2026-10-25T01:04:53.8058012Z · ──┬──
2026-10-25T01:04:53.8058136Z · ╰── 'layer' is declared here
2026-10-25T01:04:53.8058259Z 3406 │ Layer.effect(
2026-10-25T01:04:53.8058315Z ╰────
2026-10-25T01:04:53.8058422Z help: Consider removing this declaration.
2026-10-25T01:04:53.8058425Z
2026-10-25T01:04:53.8058683Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8058869Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10]
2026-10-25T01:04:53.8058920Z 117 │
2026-10-25T01:04:53.8058986Z 118 │ useEffect(() => {
2026-10-25T01:04:53.8059058Z · ────┬────
2026-10-25T01:04:53.8059187Z · ╰── This is the containing effect
2026-10-25T01:04:53.8059266Z 119 │ void refreshNotifications();
2026-10-25T01:04:53.8059359Z · ──────────┬─────────
2026-10-25T01:04:53.8059540Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8059686Z 120 │ const subscription = AppState.addEventListener("change", (state) => {
2026-10-25T01:04:53.8059736Z ╰────
2026-10-25T01:04:53.8060334Z 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-25T01:04:53.8060688Z 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-25T01:04:53.8060691Z
2026-10-25T01:04:53.8061006Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8061226Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7]
2026-10-25T01:04:53.8061277Z 125 │
2026-10-25T01:04:53.8061342Z 126 │ useEffect(() => {
2026-10-25T01:04:53.8061413Z · ────┬────
2026-10-25T01:04:53.8061541Z · ╰── This is the containing effect
2026-10-25T01:04:53.8061605Z 127 │ if (!isLoaded) {
2026-10-25T01:04:53.8061696Z 128 │ setLiveActivityStatus("checking");
2026-10-25T01:04:53.8061786Z · ──────────┬──────────
2026-10-25T01:04:53.8061955Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8062016Z 129 │ return;
2026-10-25T01:04:53.8062069Z ╰────
2026-10-25T01:04:53.8062659Z 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-25T01:04:53.8062980Z 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-25T01:04:53.8062982Z
2026-10-25T01:04:53.8063443Z ⚠ 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-25T01:04:53.8063566Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31]
2026-10-25T01:04:53.8063622Z 499 │
2026-10-25T01:04:53.8063741Z 500 │ const response = yield* Schema.decodeUnknownEffect(
2026-10-25T01:04:53.8063859Z · ──────────────────────────
2026-10-25T01:04:53.8063966Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse),
2026-10-25T01:04:53.8064019Z ╰────
2026-10-25T01:04:53.8064022Z
2026-10-25T01:04:53.8064226Z ⚠ eslint(no-unused-vars): Type 'ScheduledTaskDraft' is imported but never used.
2026-10-25T01:04:53.8064382Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:10:8]
2026-10-25T01:04:53.8064463Z 9 │ hasScheduledTaskDraftChanges,
2026-10-25T01:04:53.8064533Z 10 │ type ScheduledTaskDraft,
2026-10-25T01:04:53.8064621Z · ─────────┬────────
2026-10-25T01:04:53.8064780Z · ╰── 'ScheduledTaskDraft' is imported here
2026-10-25T01:04:53.8064859Z 11 │ } from "./scheduledTaskDraft";
2026-10-25T01:04:53.8064909Z ╰────
2026-10-25T01:04:53.8065006Z help: Consider removing this import.
2026-10-25T01:04:53.8065008Z
2026-10-25T01:04:53.8065188Z ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T01:04:53.8065344Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:81:85]
2026-10-25T01:04:53.8065445Z 80 │ const startEditor = startScheduledTaskEditor;
2026-10-25T01:04:53.8065624Z 81 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
2026-10-25T01:04:53.8065768Z · ─────┬─────
2026-10-25T01:04:53.8066024Z · ╰── Unnecessary dependency `startEditor`
2026-10-25T01:04:53.8066132Z 82 │ const readEditor = useCallback(
2026-10-25T01:04:53.8066184Z ╰────
2026-10-25T01:04:53.8066496Z 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-25T01:04:53.8066804Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8066807Z
2026-10-25T01:04:53.8066984Z ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T01:04:53.8067140Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:102:7]
2026-10-25T01:04:53.8067209Z 101 │ setEditor,
2026-10-25T01:04:53.8067276Z 102 │ startEditor,
2026-10-25T01:04:53.8067354Z · ─────┬─────
2026-10-25T01:04:53.8067496Z · ╰── Unnecessary dependency `startEditor`
2026-10-25T01:04:53.8067560Z 103 │ hasChanges,
2026-10-25T01:04:53.8067610Z ╰────
2026-10-25T01:04:53.8067914Z 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-25T01:04:53.8068217Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8068220Z
2026-10-25T01:04:53.8068419Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-25T01:04:53.8068547Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9]
2026-10-25T01:04:53.8068620Z 37 │ get isConnected() {
2026-10-25T01:04:53.8068711Z 38 │ let current: FakeElement | null = this;
2026-10-25T01:04:53.8068784Z · ───────
2026-10-25T01:04:53.8068856Z 39 │ while (current?.parent) {
2026-10-25T01:04:53.8068907Z ╰────
2026-10-25T01:04:53.8069174Z help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well.
2026-10-25T01:04:53.8069177Z
2026-10-25T01:04:53.8069546Z ⚠ 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-25T01:04:53.8069661Z ╭─[packages/effect-acp/src/client.ts:1270:11]
2026-10-25T01:04:53.8069817Z 1269 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
2026-10-25T01:04:53.8069992Z 1270 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
2026-10-25T01:04:53.8070097Z · ──────────────────────────
2026-10-25T01:04:53.8070244Z 1271 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
2026-10-25T01:04:53.8070298Z ╰────
2026-10-25T01:04:53.8070301Z
2026-10-25T01:04:53.8070666Z ⚠ 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-25T01:04:53.8070781Z ╭─[packages/effect-acp/src/schema.test.ts:18:12]
2026-10-25T01:04:53.8070941Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
2026-10-25T01:04:53.8071111Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
2026-10-25T01:04:53.8071220Z · ─────────
2026-10-25T01:04:53.8071278Z 19 │ expect(
2026-10-25T01:04:53.8071331Z ╰────
2026-10-25T01:04:53.8071334Z
2026-10-25T01:04:53.8071658Z ⚠ 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-25T01:04:53.8071773Z ╭─[packages/effect-acp/src/schema.test.ts:20:7]
2026-10-25T01:04:53.8071832Z 19 │ expect(
2026-10-25T01:04:53.8072000Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
2026-10-25T01:04:53.8072073Z · ─────────
2026-10-25T01:04:53.8072135Z 21 │ ).toBe(true);
2026-10-25T01:04:53.8072184Z ╰────
2026-10-25T01:04:53.8072193Z
2026-10-25T01:04:53.8072649Z ⚠ 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-25T01:04:53.8072770Z ╭─[packages/effect-acp/src/errors.test.ts:129:28]
2026-10-25T01:04:53.8072864Z 128 │ const secret = "acp-summary-secret";
2026-10-25T01:04:53.8072972Z 129 │ const cause = yield* Schema.decodeUnknownEffect(
2026-10-25T01:04:53.8073086Z · ──────────────────────────
2026-10-25T01:04:53.8073157Z 130 │ Schema.Struct({
2026-10-25T01:04:53.8073207Z ╰────
2026-10-25T01:04:53.8073210Z
2026-10-25T01:04:53.8073427Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-25T01:04:53.8073558Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11]
2026-10-25T01:04:53.8073631Z 113 │ const declared = {
2026-10-25T01:04:53.8073723Z 114 │ ...(manifest.dependencies ?? {}),
2026-10-25T01:04:53.8073834Z · ────────────────────────────────
2026-10-25T01:04:53.8073935Z 115 │ ...(manifest.optionalDependencies ?? {}),
2026-10-25T01:04:53.8073987Z ╰────
2026-10-25T01:04:53.8074249Z 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-25T01:04:53.8074252Z
2026-10-25T01:04:53.8074470Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-25T01:04:53.8074593Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11]
2026-10-25T01:04:53.8074690Z 114 │ ...(manifest.dependencies ?? {}),
2026-10-25T01:04:53.8074796Z 115 │ ...(manifest.optionalDependencies ?? {}),
2026-10-25T01:04:53.8074917Z · ────────────────────────────────────────
2026-10-25T01:04:53.8075014Z 116 │ ...(manifest.peerDependencies ?? {}),
2026-10-25T01:04:53.8075065Z ╰────
2026-10-25T01:04:53.8075324Z 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-25T01:04:53.8075327Z
2026-10-25T01:04:53.8075542Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-25T01:04:53.8075665Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11]
2026-10-25T01:04:53.8075764Z 115 │ ...(manifest.optionalDependencies ?? {}),
2026-10-25T01:04:53.8075918Z 116 │ ...(manifest.peerDependencies ?? {}),
2026-10-25T01:04:53.8076059Z · ────────────────────────────────────
2026-10-25T01:04:53.8076123Z 117 │ };
2026-10-25T01:04:53.8076172Z ╰────
2026-10-25T01:04:53.8076431Z 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-25T01:04:53.8076434Z
2026-10-25T01:04:53.8076626Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used.
2026-10-25T01:04:53.8076763Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3]
2026-10-25T01:04:53.8076824Z 1 │ import type {
2026-10-25T01:04:53.8076887Z 2 │ EnvironmentId,
2026-10-25T01:04:53.8076964Z · ──────┬──────
2026-10-25T01:04:53.8077108Z · ╰── 'EnvironmentId' is imported here
2026-10-25T01:04:53.8077194Z 3 │ ExecutionEnvironmentCapabilities,
2026-10-25T01:04:53.8077246Z ╰────
2026-10-25T01:04:53.8077346Z help: Consider removing this import.
2026-10-25T01:04:53.8077348Z
2026-10-25T01:04:53.8077513Z ⚠ react(purity): Cannot call impure function during render
2026-10-25T01:04:53.8077646Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58]
2026-10-25T01:04:53.8077780Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })}
2026-10-25T01:04:53.8077928Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }}
2026-10-25T01:04:53.8078051Z · ─────┬────
2026-10-25T01:04:53.8078224Z · ╰── Cannot call impure function
2026-10-25T01:04:53.8078325Z 141 │ onSelect={(selected) => {
2026-10-25T01:04:53.8078377Z ╰────
2026-10-25T01:04:53.8078653Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T01:04:53.8078941Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T01:04:53.8078946Z
2026-10-25T01:04:53.8079220Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-25T01:04:53.8079349Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20]
2026-10-25T01:04:53.8079458Z 248 │ },
2026-10-25T01:04:53.8079572Z 249 │ (effect, flow, stopSessions) =>
2026-10-25T01:04:53.8079662Z · ──────┬─────
2026-10-25T01:04:53.8079807Z · ╰── 'stopSessions' is declared here
2026-10-25T01:04:53.8079872Z 250 │ effect.pipe(
2026-10-25T01:04:53.8079925Z ╰────
2026-10-25T01:04:53.8080026Z help: Consider removing this parameter.
2026-10-25T01:04:53.8080029Z
2026-10-25T01:04:53.8080515Z ⚠ 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-25T01:04:53.8080692Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5]
2026-10-25T01:04:53.8080768Z 222 │ let idlePasses = 0;
2026-10-25T01:04:53.8080912Z 223 │ ╭─▶ for (;;) {
2026-10-25T01:04:53.8081055Z 224 │ │ yield* Effect.promise(() => Promise.resolve());
2026-10-25T01:04:53.8081197Z 225 │ │ const pending = backgroundRuntime.pending.shift();
2026-10-25T01:04:53.8081291Z 226 │ │ if (!pending) {
2026-10-25T01:04:53.8081382Z 227 │ │ idlePasses++;
2026-10-25T01:04:53.8081487Z 228 │ │ if (idlePasses >= 3) {
2026-10-25T01:04:53.8081573Z 229 │ │ return;
2026-10-25T01:04:53.8081650Z 230 │ │ }
2026-10-25T01:04:53.8081734Z 231 │ │ continue;
2026-10-25T01:04:53.8081817Z 232 │ │ }
2026-10-25T01:04:53.8081914Z 233 │ │ idlePasses = 0;
2026-10-25T01:04:53.8082028Z 234 │ │ const exit = yield* Effect.exit(
2026-10-25T01:04:53.8082236Z 235 │ │ pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
2026-10-25T01:04:53.8082314Z 236 │ │ );
2026-10-25T01:04:53.8082421Z 237 │ │ yield* Effect.sync(() => {
2026-10-25T01:04:53.8082527Z 238 │ │ pending.resolve(exit);
2026-10-25T01:04:53.8082602Z 239 │ │ });
2026-10-25T01:04:53.8082731Z 240 │ ╰─▶ }
2026-10-25T01:04:53.8082789Z 241 │ },
2026-10-25T01:04:53.8082840Z ╰────
2026-10-25T01:04:53.8082843Z
2026-10-25T01:04:53.8083128Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-25T01:04:53.8083284Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
2026-10-25T01:04:53.8083339Z 14 │
2026-10-25T01:04:53.8083412Z 15 │ const legacyCredentials = {
2026-10-25T01:04:53.8083496Z · ────────┬────────
2026-10-25T01:04:53.8083641Z · ╰── 'legacyCredentials' is declared here
2026-10-25T01:04:53.8083711Z 16 │ version: 1 as const,
2026-10-25T01:04:53.8083763Z ╰────
2026-10-25T01:04:53.8083864Z help: Consider removing this declaration.
2026-10-25T01:04:53.8083868Z
2026-10-25T01:04:53.8084064Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used.
2026-10-25T01:04:53.8084249Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13]
2026-10-25T01:04:53.8084376Z 23 │ import * as Deferred from "effect/Deferred";
2026-10-25T01:04:53.8084465Z 24 │ import * as Duration from "effect/Duration";
2026-10-25T01:04:53.8084541Z · ────┬───
2026-10-25T01:04:53.8084672Z · ╰── 'Duration' is imported here
2026-10-25T01:04:53.8084759Z 25 │ import * as Effect from "effect/Effect";
2026-10-25T01:04:53.8084812Z ╰────
2026-10-25T01:04:53.8084906Z help: Consider removing this import.
2026-10-25T01:04:53.8084908Z
2026-10-25T01:04:53.8085073Z ⚠ react(purity): Cannot call impure function during render
2026-10-25T01:04:53.8085197Z ╭─[apps/web/src/components/Sidebar.tsx:1136:11]
2026-10-25T01:04:53.8085300Z 1135 │ foldSearchQuery(threadSearchQuery),
2026-10-25T01:04:53.8085368Z 1136 │ Date.now(),
2026-10-25T01:04:53.8085449Z · ─────┬────
2026-10-25T01:04:53.8085583Z · ╰── Cannot call impure function
2026-10-25T01:04:53.8085720Z 1137 │ // A list filter, as on mobile: a pick would move rows unexplained.
2026-10-25T01:04:53.8085771Z ╰────
2026-10-25T01:04:53.8086051Z 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-25T01:04:53.8086341Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T01:04:53.8086343Z
2026-10-25T01:04:53.8086491Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8086650Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39]
2026-10-25T01:04:53.8086709Z 276 │
2026-10-25T01:04:53.8086890Z 277 │ ╭─▶ return createElement(RawNativeView, {
2026-10-25T01:04:53.8086984Z 278 │ │ ...nativeProps,
2026-10-25T01:04:53.8087124Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined,
2026-10-25T01:04:53.8087216Z 280 │ │ ref: nativeRef,
2026-10-25T01:04:53.8087343Z 281 │ ├─▶ });
2026-10-25T01:04:53.8087579Z · ╰──── Passing a ref to a function may read its value during render
2026-10-25T01:04:53.8087640Z 282 │ }
2026-10-25T01:04:53.8087693Z ╰────
2026-10-25T01:04:53.8088155Z 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-25T01:04:53.8088439Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8088441Z
2026-10-25T01:04:53.8088648Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
2026-10-25T01:04:53.8088771Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10]
2026-10-25T01:04:53.8088825Z 78 │
2026-10-25T01:04:53.8089007Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string {
2026-10-25T01:04:53.8089201Z · ────────┬───────
2026-10-25T01:04:53.8089347Z · ╰── 'describeSchedule' is declared here
2026-10-25T01:04:53.8089454Z 80 │ if (schedule.type === "webhook") return "On webhook";
2026-10-25T01:04:53.8089504Z ╰────
2026-10-25T01:04:53.8089606Z help: Consider removing this declaration.
2026-10-25T01:04:53.8089608Z
2026-10-25T01:04:53.8090068Z ⚠ 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-25T01:04:53.8090246Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
2026-10-25T01:04:53.8090318Z 520 │ })).delivery;
2026-10-25T01:04:53.8090550Z 521 │ ╭─▶ while (delivery.outcome === "accepted") {
2026-10-25T01:04:53.8090667Z 522 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8090813Z 523 │ │ delivery = (yield* service.getWebhookDelivery({
2026-10-25T01:04:53.8090913Z 524 │ │ id: task.id,
2026-10-25T01:04:53.8091027Z 525 │ │ deliveryId: deliveryId!,
2026-10-25T01:04:53.8091125Z 526 │ │ })).delivery;
2026-10-25T01:04:53.8091260Z 527 │ ╰─▶ }
2026-10-25T01:04:53.8091376Z 528 │ assert.equal(delivery.outcome, "dispatch_failed");
2026-10-25T01:04:53.8091429Z ╰────
2026-10-25T01:04:53.8091431Z
2026-10-25T01:04:53.8091580Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8091738Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
2026-10-25T01:04:53.8091894Z 121 │ const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-25T01:04:53.8092016Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-25T01:04:53.8092137Z · ───────────┬──────────
2026-10-25T01:04:53.8092310Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8092427Z 123 │ const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-25T01:04:53.8092478Z ╰────
2026-10-25T01:04:53.8092941Z 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-25T01:04:53.8093230Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8093232Z
2026-10-25T01:04:53.8093373Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8093529Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
2026-10-25T01:04:53.8093581Z 125 │
2026-10-25T01:04:53.8093690Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-25T01:04:53.8093776Z · ─────────┬────────
2026-10-25T01:04:53.8093978Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8094112Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-25T01:04:53.8094162Z ╰────
2026-10-25T01:04:53.8094615Z 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-25T01:04:53.8094897Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8094899Z
2026-10-25T01:04:53.8095076Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8095237Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
2026-10-25T01:04:53.8095290Z 125 │
2026-10-25T01:04:53.8095398Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-25T01:04:53.8095488Z · ─────────┬─────────
2026-10-25T01:04:53.8095646Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8095747Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-25T01:04:53.8095795Z ╰────
2026-10-25T01:04:53.8096249Z 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-25T01:04:53.8096534Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8096536Z
2026-10-25T01:04:53.8096682Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8096840Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
2026-10-25T01:04:53.8096890Z 125 │
2026-10-25T01:04:53.8096998Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-25T01:04:53.8097110Z · ─────────┬─────────
2026-10-25T01:04:53.8097276Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8097373Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-25T01:04:53.8097425Z ╰────
2026-10-25T01:04:53.8097932Z 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-25T01:04:53.8098312Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8098315Z
2026-10-25T01:04:53.8098457Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8098610Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
2026-10-25T01:04:53.8098662Z 125 │
2026-10-25T01:04:53.8098767Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-25T01:04:53.8098879Z · ──────────┬─────────
2026-10-25T01:04:53.8099040Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8099144Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-25T01:04:53.8099199Z ╰────
2026-10-25T01:04:53.8099653Z 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-25T01:04:53.8099933Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8099938Z
2026-10-25T01:04:53.8100075Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8100230Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-25T01:04:53.8100340Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-25T01:04:53.8100573Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({
2026-10-25T01:04:53.8100744Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-25T01:04:53.8100868Z 129 │ │ onStatus: (status: RecordingStatus) => {
2026-10-25T01:04:53.8101020Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({
2026-10-25T01:04:53.8101137Z 131 │ │ isFinished: status.isFinished,
2026-10-25T01:04:53.8101309Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-25T01:04:53.8101412Z 133 │ │ error: status.error,
2026-10-25T01:04:53.8101510Z 134 │ │ url: status.url,
2026-10-25T01:04:53.8101597Z 135 │ │ });
2026-10-25T01:04:53.8101676Z 136 │ │ },
2026-10-25T01:04:53.8101873Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer.
2026-10-25T01:04:53.8101982Z 138 │ │ selectInput: (inputs) => {
2026-10-25T01:04:53.8102134Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom);
2026-10-25T01:04:53.8102277Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-25T01:04:53.8102441Z 141 │ │ const known = microphoneOrder(preferences.value.microphones);
2026-10-25T01:04:53.8102578Z 142 │ │ const order = rememberMicrophones(known, inputs);
2026-10-25T01:04:53.8102680Z 143 │ │ if (order !== known) {
2026-10-25T01:04:53.8102878Z 144 │ │ registry.set(updateMobilePreferencesAtom, {
2026-10-25T01:04:53.8103026Z 145 │ │ transform: (current) => ({
2026-10-25T01:04:53.8103228Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-25T01:04:53.8103314Z 147 │ │ }),
2026-10-25T01:04:53.8103396Z 148 │ │ });
2026-10-25T01:04:53.8103472Z 149 │ │ }
2026-10-25T01:04:53.8103613Z 150 │ │ return preferredMicrophoneInput(inputs, order);
2026-10-25T01:04:53.8103689Z 151 │ │ },
2026-10-25T01:04:53.8103819Z 152 │ ├─▶ });
2026-10-25T01:04:53.8104056Z · ╰──── Passing a ref to a function may read its value during render
2026-10-25T01:04:53.8104143Z 153 │ recorderRef.current = recorder;
2026-10-25T01:04:53.8104195Z ╰────
2026-10-25T01:04:53.8104651Z 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-25T01:04:53.8104933Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8104938Z
2026-10-25T01:04:53.8105077Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8105238Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-25T01:04:53.8105298Z 152 │ });
2026-10-25T01:04:53.8105380Z 153 │ recorderRef.current = recorder;
2026-10-25T01:04:53.8105490Z · ─────┬─────────┬───
2026-10-25T01:04:53.8105736Z · │ ╰── Cannot update ref value during render
2026-10-25T01:04:53.8105887Z · ╰── This value is a ref
2026-10-25T01:04:53.8105992Z 154 │ sessionRef.current = new VoiceInputSession({
2026-10-25T01:04:53.8106041Z ╰────
2026-10-25T01:04:53.8106501Z 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-25T01:04:53.8106791Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8106797Z
2026-10-25T01:04:53.8106941Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8107094Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-25T01:04:53.8107178Z 153 │ recorderRef.current = recorder;
2026-10-25T01:04:53.8107366Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({
2026-10-25T01:04:53.8107451Z 155 │ │ recorder,
2026-10-25T01:04:53.8107580Z 156 │ │ getTranscriber: getLocalVoiceTranscriber,
2026-10-25T01:04:53.8107695Z 157 │ │ requestPermission: async () => {
2026-10-25T01:04:53.8107912Z 158 │ │ const permission = await requestRecordingPermissionsAsync();
2026-10-25T01:04:53.8108135Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-25T01:04:53.8108213Z 160 │ │ },
2026-10-25T01:04:53.8108352Z 161 │ │ configureRecording: configureVoiceRecordingAudio,
2026-10-25T01:04:53.8108487Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio,
2026-10-25T01:04:53.8108620Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(),
2026-10-25T01:04:53.8108732Z 164 │ │ onStateChange: (nextState) =>
2026-10-25T01:04:53.8108820Z 165 │ │ setState({
2026-10-25T01:04:53.8108927Z 166 │ │ state: nextState,
2026-10-25T01:04:53.8109068Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-25T01:04:53.8109197Z 168 │ │ label: sessionRef.current?.label ?? null,
2026-10-25T01:04:53.8109276Z 169 │ │ }),
2026-10-25T01:04:53.8109404Z 170 │ ├─▶ });
2026-10-25T01:04:53.8109603Z · ╰──── Cannot access ref value during render
2026-10-25T01:04:53.8109660Z 171 │ }
2026-10-25T01:04:53.8109710Z ╰────
2026-10-25T01:04:53.8110175Z 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-25T01:04:53.8110511Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8110514Z
2026-10-25T01:04:53.8110657Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8110813Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-25T01:04:53.8110893Z 153 │ recorderRef.current = recorder;
2026-10-25T01:04:53.8110995Z 154 │ sessionRef.current = new VoiceInputSession({
2026-10-25T01:04:53.8111106Z · ─────┬────────┬───
2026-10-25T01:04:53.8111285Z · │ ╰── Cannot update ref value during render
2026-10-25T01:04:53.8111405Z · ╰── This value is a ref
2026-10-25T01:04:53.8111473Z 155 │ recorder,
2026-10-25T01:04:53.8111526Z ╰────
2026-10-25T01:04:53.8111977Z 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-25T01:04:53.8112256Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8112260Z
2026-10-25T01:04:53.8112400Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8112555Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-25T01:04:53.8112642Z 184 │ return () => subscription.remove();
2026-10-25T01:04:53.8112756Z 185 │ }, [controller]);
2026-10-25T01:04:53.8112862Z · ─────┬────
2026-10-25T01:04:53.8113006Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8113058Z 186 │
2026-10-25T01:04:53.8113108Z ╰────
2026-10-25T01:04:53.8113559Z 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-25T01:04:53.8113843Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8113845Z
2026-10-25T01:04:53.8113989Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8114146Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-25T01:04:53.8114230Z 184 │ return () => subscription.remove();
2026-10-25T01:04:53.8114293Z 185 │ }, [controller]);
2026-10-25T01:04:53.8114370Z · ──────┬─────
2026-10-25T01:04:53.8114510Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8114561Z 186 │
2026-10-25T01:04:53.8114612Z ╰────
2026-10-25T01:04:53.8115063Z 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-25T01:04:53.8115350Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8115355Z
2026-10-25T01:04:53.8115494Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8115644Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-25T01:04:53.8115701Z 191 │ },
2026-10-25T01:04:53.8115772Z 192 │ [controller, recorder],
2026-10-25T01:04:53.8115848Z · ─────┬────
2026-10-25T01:04:53.8115986Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8116041Z 193 │ );
2026-10-25T01:04:53.8116092Z ╰────
2026-10-25T01:04:53.8116552Z 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-25T01:04:53.8116835Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8116841Z
2026-10-25T01:04:53.8116980Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8117135Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-25T01:04:53.8117226Z 174 │ const controller = session.controller;
2026-10-25T01:04:53.8117314Z 175 │ const recorder = recorderRef.current;
2026-10-25T01:04:53.8117415Z · ─────────┬─────────
2026-10-25T01:04:53.8117569Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8117622Z 176 │
2026-10-25T01:04:53.8117717Z ╰────
2026-10-25T01:04:53.8118197Z 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-25T01:04:53.8118479Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8118481Z
2026-10-25T01:04:53.8118621Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8118777Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-25T01:04:53.8118847Z 191 │ },
2026-10-25T01:04:53.8118918Z 192 │ [controller, recorder],
2026-10-25T01:04:53.8119009Z · ───────────┬──────────
2026-10-25T01:04:53.8119157Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8119210Z 193 │ );
2026-10-25T01:04:53.8119260Z ╰────
2026-10-25T01:04:53.8119712Z 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-25T01:04:53.8119994Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8119997Z
2026-10-25T01:04:53.8120137Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8120292Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-25T01:04:53.8120395Z 245 │ return () => clearInterval(intervalId);
2026-10-25T01:04:53.8120532Z 246 │ }, [audioLevels, controller, recorder, state.phase]);
2026-10-25T01:04:53.8120620Z · ─────┬────
2026-10-25T01:04:53.8120770Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8120824Z 247 │
2026-10-25T01:04:53.8120875Z ╰────
2026-10-25T01:04:53.8121327Z 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-25T01:04:53.8121613Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8121621Z
2026-10-25T01:04:53.8121758Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8121913Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-25T01:04:53.8122002Z 245 │ return () => clearInterval(intervalId);
2026-10-25T01:04:53.8122116Z 246 │ }, [audioLevels, controller, recorder, state.phase]);
2026-10-25T01:04:53.8122244Z · ────────────────────────┬───────────────────────
2026-10-25T01:04:53.8122400Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8122454Z 247 │
2026-10-25T01:04:53.8122504Z ╰────
2026-10-25T01:04:53.8123003Z 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-25T01:04:53.8123318Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8123320Z
2026-10-25T01:04:53.8123462Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8123615Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-25T01:04:53.8123683Z 260 │ setOwnerFocused,
2026-10-25T01:04:53.8123743Z 261 │ session,
2026-10-25T01:04:53.8123817Z · ───┬───
2026-10-25T01:04:53.8123954Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8124011Z 262 │ stop,
2026-10-25T01:04:53.8124068Z ╰────
2026-10-25T01:04:53.8124522Z 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-25T01:04:53.8124807Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8124810Z
2026-10-25T01:04:53.8124952Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8125105Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-25T01:04:53.8125159Z 250 │
2026-10-25T01:04:53.8125297Z 251 │ ╭─▶ return {
2026-10-25T01:04:53.8125511Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-25T01:04:53.8125591Z 253 │ │ state,
2026-10-25T01:04:53.8125681Z 254 │ │ audioLevels,
2026-10-25T01:04:53.8125774Z 255 │ │ elapsedSeconds,
2026-10-25T01:04:53.8125902Z 256 │ │ isBusy: voiceInputBlocksSubmission(state),
2026-10-25T01:04:53.8125980Z 257 │ │ ownerKey,
2026-10-25T01:04:53.8126061Z 258 │ │ label,
2026-10-25T01:04:53.8126152Z 259 │ │ focusedOwners,
2026-10-25T01:04:53.8126246Z 260 │ │ setOwnerFocused,
2026-10-25T01:04:53.8126325Z 261 │ │ session,
2026-10-25T01:04:53.8126450Z 262 │ │ stop,
2026-10-25T01:04:53.8126564Z 263 │ │ cancel,
2026-10-25T01:04:53.8126693Z 264 │ ├─▶ };
2026-10-25T01:04:53.8126887Z · ╰──── Cannot access ref value during render
2026-10-25T01:04:53.8126942Z 265 │ }
2026-10-25T01:04:53.8126992Z ╰────
2026-10-25T01:04:53.8127446Z 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-25T01:04:53.8127725Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8127729Z
2026-10-25T01:04:53.8127886Z ⚠ react(immutability): This value cannot be modified
2026-10-25T01:04:53.8128046Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-25T01:04:53.8128201Z 121 │ const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-25T01:04:53.8128323Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-25T01:04:53.8128400Z · ─────┬─────
2026-10-25T01:04:53.8128535Z · ╰── `audioLevels` originates here
2026-10-25T01:04:53.8128654Z 123 │ const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-25T01:04:53.8128801Z 124 │ const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-25T01:04:53.8128853Z 125 │
2026-10-25T01:04:53.8128968Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-25T01:04:53.8129070Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-25T01:04:53.8129208Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-25T01:04:53.8129301Z 129 │ onStatus: (status: RecordingStatus) => {
2026-10-25T01:04:53.8129422Z 130 │ sessionRef.current?.controller.handleRecorderStatus({
2026-10-25T01:04:53.8129508Z 131 │ isFinished: status.isFinished,
2026-10-25T01:04:53.8129648Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-25T01:04:53.8129721Z 133 │ error: status.error,
2026-10-25T01:04:53.8129791Z 134 │ url: status.url,
2026-10-25T01:04:53.8129851Z 135 │ });
2026-10-25T01:04:53.8129909Z 136 │ },
2026-10-25T01:04:53.8130077Z 137 │ // Read when recording starts so preference changes do not re-render every composer.
2026-10-25T01:04:53.8130160Z 138 │ selectInput: (inputs) => {
2026-10-25T01:04:53.8130284Z 139 │ const preferences = registry.get(mobilePreferencesAtom);
2026-10-25T01:04:53.8130407Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-25T01:04:53.8130565Z 141 │ const known = microphoneOrder(preferences.value.microphones);
2026-10-25T01:04:53.8130673Z 142 │ const order = rememberMicrophones(known, inputs);
2026-10-25T01:04:53.8130745Z 143 │ if (order !== known) {
2026-10-25T01:04:53.8130850Z 144 │ registry.set(updateMobilePreferencesAtom, {
2026-10-25T01:04:53.8130931Z 145 │ transform: (current) => ({
2026-10-25T01:04:53.8131102Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-25T01:04:53.8131163Z 147 │ }),
2026-10-25T01:04:53.8131271Z 148 │ });
2026-10-25T01:04:53.8131355Z 149 │ }
2026-10-25T01:04:53.8131463Z 150 │ return preferredMicrophoneInput(inputs, order);
2026-10-25T01:04:53.8131521Z 151 │ },
2026-10-25T01:04:53.8131573Z 152 │ });
2026-10-25T01:04:53.8131656Z 153 │ recorderRef.current = recorder;
2026-10-25T01:04:53.8131755Z 154 │ sessionRef.current = new VoiceInputSession({
2026-10-25T01:04:53.8131817Z 155 │ recorder,
2026-10-25T01:04:53.8131914Z 156 │ getTranscriber: getLocalVoiceTranscriber,
2026-10-25T01:04:53.8132000Z 157 │ requestPermission: async () => {
2026-10-25T01:04:53.8132127Z 158 │ const permission = await requestRecordingPermissionsAsync();
2026-10-25T01:04:53.8132282Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-25T01:04:53.8132336Z 160 │ },
2026-10-25T01:04:53.8132452Z 161 │ configureRecording: configureVoiceRecordingAudio,
2026-10-25T01:04:53.8132559Z 162 │ releaseRecording: releaseVoiceRecordingAudio,
2026-10-25T01:04:53.8132664Z 163 │ deleteRecording: (uri) => new File(uri).delete(),
2026-10-25T01:04:53.8132741Z 164 │ onStateChange: (nextState) =>
2026-10-25T01:04:53.8132806Z 165 │ setState({
2026-10-25T01:04:53.8132876Z 166 │ state: nextState,
2026-10-25T01:04:53.8132982Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-25T01:04:53.8133078Z 168 │ label: sessionRef.current?.label ?? null,
2026-10-25T01:04:53.8133138Z 169 │ }),
2026-10-25T01:04:53.8133191Z 170 │ });
2026-10-25T01:04:53.8133246Z 171 │ }
2026-10-25T01:04:53.8133296Z 172 │
2026-10-25T01:04:53.8133381Z 173 │ const session = sessionRef.current;
2026-10-25T01:04:53.8133476Z 174 │ const controller = session.controller;
2026-10-25T01:04:53.8133563Z 175 │ const recorder = recorderRef.current;
2026-10-25T01:04:53.8133612Z 176 │
2026-10-25T01:04:53.8133677Z 177 │ useEffect(() => {
2026-10-25T01:04:53.8133826Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-25T01:04:53.8133965Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-25T01:04:53.8134099Z 180 │ // real background state cancels preparation; recorder status handles
2026-10-25T01:04:53.8134204Z 181 │ // calls and route interruptions during capture.
2026-10-25T01:04:53.8134338Z 182 │ if (nextState === "background") controller.appMovedToBackground();
2026-10-25T01:04:53.8134394Z 183 │ });
2026-10-25T01:04:53.8134478Z 184 │ return () => subscription.remove();
2026-10-25T01:04:53.8134542Z 185 │ }, [controller]);
2026-10-25T01:04:53.8134601Z 186 │
2026-10-25T01:04:53.8134662Z 187 │ useEffect(
2026-10-25T01:04:53.8134723Z 188 │ () => () => {
2026-10-25T01:04:53.8134794Z 189 │ controller.dispose();
2026-10-25T01:04:53.8134864Z 190 │ recorder.release();
2026-10-25T01:04:53.8134917Z 191 │ },
2026-10-25T01:04:53.8134987Z 192 │ [controller, recorder],
2026-10-25T01:04:53.8135042Z 193 │ );
2026-10-25T01:04:53.8135093Z 194 │
2026-10-25T01:04:53.8135154Z 195 │ useEffect(() => {
2026-10-25T01:04:53.8135248Z 196 │ if (state.phase !== "recording") return;
2026-10-25T01:04:53.8135299Z 197 │
2026-10-25T01:04:53.8135446Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-25T01:04:53.8135548Z 199 │ const activation = activateKeepAwakeAsync(tag);
2026-10-25T01:04:53.8135632Z 200 │ void activation.catch(() => {});
2026-10-25T01:04:53.8135760Z 201 │ return () => {
2026-10-25T01:04:53.8135941Z 202 │ // Release after activation settles, even if the recording ends immediately.
2026-10-25T01:04:53.8136076Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-25T01:04:53.8136132Z 204 │ };
2026-10-25T01:04:53.8136212Z 205 │ }, [keepAwakeId, state.phase]);
2026-10-25T01:04:53.8136262Z 206 │
2026-10-25T01:04:53.8136325Z 207 │ useEffect(() => {
2026-10-25T01:04:53.8136515Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-25T01:04:53.8136566Z 209 │
2026-10-25T01:04:53.8136689Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-25T01:04:53.8136848Z 211 │ audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-25T01:04:53.8136952Z 212 │ audioLevels.value = audioLevelsRef.current;
2026-10-25T01:04:53.8137035Z · ─────┬─────
2026-10-25T01:04:53.8137174Z · ╰── `audioLevels` cannot be modified
2026-10-25T01:04:53.8137229Z 213 │ }
2026-10-25T01:04:53.8137281Z ╰────
2026-10-25T01:04:53.8137547Z 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-25T01:04:53.8137849Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8137853Z
2026-10-25T01:04:53.8138049Z ⚠ react(immutability): Cannot modify local variables after render completes
2026-10-25T01:04:53.8138250Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-25T01:04:53.8138307Z 206 │
2026-10-25T01:04:53.8138376Z 207 │ useEffect(() => {
2026-10-25T01:04:53.8138451Z · ───┬───
2026-10-25T01:04:53.8138668Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-25T01:04:53.8138801Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-25T01:04:53.8138853Z 209 │
2026-10-25T01:04:53.8138971Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-25T01:04:53.8139121Z 211 │ audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-25T01:04:53.8139223Z 212 │ audioLevels.value = audioLevelsRef.current;
2026-10-25T01:04:53.8139299Z · ─────┬─────
2026-10-25T01:04:53.8139430Z · ╰── This modifies `audioLevels`
2026-10-25T01:04:53.8139491Z 213 │ }
2026-10-25T01:04:53.8139546Z ╰────
2026-10-25T01:04:53.8139880Z 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-25T01:04:53.8140180Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8140183Z
2026-10-25T01:04:53.8140340Z ⚠ react(immutability): This value cannot be modified
2026-10-25T01:04:53.8140546Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5]
2026-10-25T01:04:53.8140600Z 90 │ }) {
2026-10-25T01:04:53.8140710Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0);
2026-10-25T01:04:53.8140853Z · ────┬───
2026-10-25T01:04:53.8141021Z · ╰── `rotation` originates here
2026-10-25T01:04:53.8141091Z 92 │ useLayoutEffect(() => {
2026-10-25T01:04:53.8141230Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
2026-10-25T01:04:53.8141300Z · ────┬───
2026-10-25T01:04:53.8141432Z · ╰── `rotation` cannot be modified
2026-10-25T01:04:53.8141509Z 94 │ }, [props.hidden, rotation]);
2026-10-25T01:04:53.8141557Z ╰────
2026-10-25T01:04:53.8141819Z 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-25T01:04:53.8142124Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8142129Z
2026-10-25T01:04:53.8142283Z ⚠ react(immutability): This value cannot be modified
2026-10-25T01:04:53.8142453Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5]
2026-10-25T01:04:53.8142544Z 266 │ const variant = props.variant ?? "plain";
2026-10-25T01:04:53.8142682Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
2026-10-25T01:04:53.8142768Z · ────────┬────────
2026-10-25T01:04:53.8142913Z · ╰── `loadingVisibility` originates here
2026-10-25T01:04:53.8142980Z 268 │ useLayoutEffect(() => {
2026-10-25T01:04:53.8143138Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
2026-10-25T01:04:53.8143219Z · ────────┬────────
2026-10-25T01:04:53.8143372Z · ╰── `loadingVisibility` cannot be modified
2026-10-25T01:04:53.8143464Z 270 │ }, [loadingVisibility, props.loading]);
2026-10-25T01:04:53.8143516Z ╰────
2026-10-25T01:04:53.8143775Z 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-25T01:04:53.8144076Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8144079Z
2026-10-25T01:04:53.8144228Z ⚠ react(immutability): This value cannot be modified
2026-10-25T01:04:53.8144395Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5]
2026-10-25T01:04:53.8144451Z 325 │ }) {
2026-10-25T01:04:53.8144612Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
2026-10-25T01:04:53.8144703Z · ─────────┬─────────
2026-10-25T01:04:53.8144851Z · ╰── `recordingVisibility` originates here
2026-10-25T01:04:53.8144923Z 327 │ useLayoutEffect(() => {
2026-10-25T01:04:53.8145107Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
2026-10-25T01:04:53.8145192Z · ─────────┬─────────
2026-10-25T01:04:53.8145343Z · ╰── `recordingVisibility` cannot be modified
2026-10-25T01:04:53.8145434Z 329 │ }, [props.phase, recordingVisibility]);
2026-10-25T01:04:53.8145485Z ╰────
2026-10-25T01:04:53.8145800Z 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-25T01:04:53.8146125Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8146127Z
2026-10-25T01:04:53.8146278Z ⚠ react(immutability): This value cannot be modified
2026-10-25T01:04:53.8146444Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
2026-10-25T01:04:53.8146547Z 65 │ const [expanded, setExpanded] = useState(false);
2026-10-25T01:04:53.8146629Z 66 │ const progress = useSharedValue(0);
2026-10-25T01:04:53.8146703Z · ────┬───
2026-10-25T01:04:53.8146835Z · ╰── `progress` originates here
2026-10-25T01:04:53.8146901Z 67 │ useEffect(() => {
2026-10-25T01:04:53.8147026Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
2026-10-25T01:04:53.8147101Z · ────┬───
2026-10-25T01:04:53.8147232Z · ╰── `progress` cannot be modified
2026-10-25T01:04:53.8147306Z 69 │ }, [expanded, progress]);
2026-10-25T01:04:53.8147356Z ╰────
2026-10-25T01:04:53.8147617Z 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-25T01:04:53.8147913Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8147916Z
2026-10-25T01:04:53.8148173Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8148348Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:333:7]
2026-10-25T01:04:53.8148404Z 328 │ };
2026-10-25T01:04:53.8148471Z 329 │ useEffect(() => {
2026-10-25T01:04:53.8148541Z · ────┬────
2026-10-25T01:04:53.8148669Z · ╰── This is the containing effect
2026-10-25T01:04:53.8148772Z 330 │ if (!guidesEnabled && section === "guide") {
2026-10-25T01:04:53.8148867Z 331 │ requestedSection.current = "overview";
2026-10-25T01:04:53.8149030Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
2026-10-25T01:04:53.8149102Z 333 │ setSection("overview");
2026-10-25T01:04:53.8149177Z · ─────┬────
2026-10-25T01:04:53.8149350Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8149408Z 334 │ }
2026-10-25T01:04:53.8149457Z ╰────
2026-10-25T01:04:53.8150047Z 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-25T01:04:53.8150376Z 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-25T01:04:53.8150378Z
2026-10-25T01:04:53.8150614Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-25T01:04:53.8150781Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:6]
2026-10-25T01:04:53.8150928Z 330 │ if (!guidesEnabled && section === "guide") {
2026-10-25T01:04:53.8151050Z 331 │ requestedSection.current = "overview";
2026-10-25T01:04:53.8151132Z · ────────┬───────
2026-10-25T01:04:53.8151574Z · ╰── 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-25T01:04:53.8151735Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
2026-10-25T01:04:53.8151880Z · ─────────┬───────── ──────┬──────
2026-10-25T01:04:53.8152379Z · │ ╰── 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-25T01:04:53.8152822Z · ╰── 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-25T01:04:53.8152897Z 333 │ setSection("overview");
2026-10-25T01:04:53.8152951Z 334 │ }
2026-10-25T01:04:53.8153041Z 335 │ }, [guidesEnabled, section, insets.top]);
2026-10-25T01:04:53.8153153Z · ──────────────────┬─────────────────
2026-10-25T01:04:53.8153341Z · ╰── This dependency list is missing values used by the callback
2026-10-25T01:04:53.8153434Z 336 │ const tabContent = activityContent;
2026-10-25T01:04:53.8153486Z ╰────
2026-10-25T01:04:53.8153651Z help: Missing dependencies can cause an effect to fire less often than it should
2026-10-25T01:04:53.8153958Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8153961Z
2026-10-25T01:04:53.8154161Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-25T01:04:53.8154326Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:877:6]
2026-10-25T01:04:53.8154384Z 860 │ if (
2026-10-25T01:04:53.8154501Z 861 │ lastSelection.current.path === route.params.path &&
2026-10-25T01:04:53.8154580Z · ──────┬──────
2026-10-25T01:04:53.8155052Z · ╰── Missing dependency `lastSelection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T01:04:53.8155209Z 862 │ lastSelection.current.id === route.params.fileSelectionId
2026-10-25T01:04:53.8155264Z 863 │ )
2026-10-25T01:04:53.8155325Z 864 │ return;
2026-10-25T01:04:53.8155500Z 865 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId };
2026-10-25T01:04:53.8155632Z 866 │ if (route.params.focus) navigation.setParams({ focus: undefined });
2026-10-25T01:04:53.8155718Z 867 │ setJumpPath(route.params.path);
2026-10-25T01:04:53.8155791Z 868 │ setSelectedRowId(null);
2026-10-25T01:04:53.8155869Z 869 │ jumpStarted.current = false;
2026-10-25T01:04:53.8156016Z 870 │ const file = data.files.find((entry) => entry.path === route.params.path);
2026-10-25T01:04:53.8156112Z 871 │ if (!file || !nativeView.current) return;
2026-10-25T01:04:53.8156200Z · ─────┬────
2026-10-25T01:04:53.8156627Z · ╰── Missing dependency `nativeView`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T01:04:53.8156752Z 872 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id));
2026-10-25T01:04:53.8156832Z 873 │ jumpStarted.current = true;
2026-10-25T01:04:53.8156973Z 874 │ void nativeView.current.scrollToFile(file.id, false).catch(() => {
2026-10-25T01:04:53.8157053Z 875 │ jumpStarted.current = false;
2026-10-25T01:04:53.8157107Z 876 │ });
2026-10-25T01:04:53.8157306Z 877 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]);
2026-10-25T01:04:53.8157505Z · ──────────────────────────────────────────────┬──────────────────────────────────────────────
2026-10-25T01:04:53.8157722Z · ╰── This dependency list is missing values used by the callback
2026-10-25T01:04:53.8157829Z 878 │ const appliedFilter = useRef(filter.hideTestFiles);
2026-10-25T01:04:53.8157882Z ╰────
2026-10-25T01:04:53.8158048Z help: Missing dependencies can cause an effect to fire less often than it should
2026-10-25T01:04:53.8158356Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8158358Z
2026-10-25T01:04:53.8158508Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8158674Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
2026-10-25T01:04:53.8158756Z 26 │ const latestInput = useRef(input);
2026-10-25T01:04:53.8158834Z 27 │ latestInput.current = input;
2026-10-25T01:04:53.8158946Z · ─────┬─────────┬───
2026-10-25T01:04:53.8159123Z · │ ╰── Cannot update ref value during render
2026-10-25T01:04:53.8159238Z · ╰── This value is a ref
2026-10-25T01:04:53.8159313Z 28 │ const mounted = useRef(true);
2026-10-25T01:04:53.8159365Z ╰────
2026-10-25T01:04:53.8159872Z 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-25T01:04:53.8160187Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8160190Z
2026-10-25T01:04:53.8160332Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8160513Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27]
2026-10-25T01:04:53.8160574Z 493 │ >
2026-10-25T01:04:53.8160650Z 494 │ {props.children(close)}
2026-10-25T01:04:53.8160739Z · ──┬──
2026-10-25T01:04:53.8160895Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8160977Z 495 │ </ReanimatedSwipeable>
2026-10-25T01:04:53.8161031Z ╰────
2026-10-25T01:04:53.8161487Z 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-25T01:04:53.8161771Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8161774Z
2026-10-25T01:04:53.8161957Z ⚠ react(static-components): Cannot create components during render
2026-10-25T01:04:53.8162114Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10]
2026-10-25T01:04:53.8162201Z 196 │ const { onInput, onResize } = props;
2026-10-25T01:04:53.8162352Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView();
2026-10-25T01:04:53.8162483Z · ────────────────┬───────────────
2026-10-25T01:04:53.8162669Z · ╰── The component is created during render here
2026-10-25T01:04:53.8162794Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView);
2026-10-25T01:04:53.8162847Z 199 │
2026-10-25T01:04:53.8162913Z 200 │ useEffect(() => {
2026-10-25T01:04:53.8162999Z 201 │ terminalDebugLog("native:surface", {
2026-10-25T01:04:53.8163084Z 202 │ terminalKey: props.terminalKey,
2026-10-25T01:04:53.8163162Z 203 │ native: hasNativeSurface,
2026-10-25T01:04:53.8163297Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(),
2026-10-25T01:04:53.8163378Z 205 │ bufferLen: props.buffer.length,
2026-10-25T01:04:53.8163463Z 206 │ isRunning: props.isRunning,
2026-10-25T01:04:53.8163524Z 207 │ });
2026-10-25T01:04:53.8163681Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]);
2026-10-25T01:04:53.8163767Z 209 │ const handleNativeInput = useCallback(
2026-10-25T01:04:53.8163883Z 210 │ (event: NativeSyntheticEvent<TerminalInputEvent>) => {
2026-10-25T01:04:53.8163982Z 211 │ if (!props.isRunning || props.readOnly) {
2026-10-25T01:04:53.8164043Z 212 │ return;
2026-10-25T01:04:53.8164096Z 213 │ }
2026-10-25T01:04:53.8164186Z 214 │ terminalDebugLog("native:onInput", {
2026-10-25T01:04:53.8164341Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)),
2026-10-25T01:04:53.8164398Z 216 │ });
2026-10-25T01:04:53.8164482Z 217 │ onInput(event.nativeEvent.data);
2026-10-25T01:04:53.8164594Z 218 │ },
2026-10-25T01:04:53.8164811Z 219 │ [onInput, props.isRunning, props.readOnly],
2026-10-25T01:04:53.8164864Z 220 │ );
2026-10-25T01:04:53.8164950Z 221 │ const handleNativeResize = useCallback(
2026-10-25T01:04:53.8165066Z 222 │ (event: NativeSyntheticEvent<TerminalResizeEvent>) => {
2026-10-25T01:04:53.8165127Z 223 │ onResize({
2026-10-25T01:04:53.8165210Z 224 │ cols: event.nativeEvent.cols,
2026-10-25T01:04:53.8165290Z 225 │ rows: event.nativeEvent.rows,
2026-10-25T01:04:53.8165347Z 226 │ });
2026-10-25T01:04:53.8165404Z 227 │ },
2026-10-25T01:04:53.8165461Z 228 │ [onResize],
2026-10-25T01:04:53.8165514Z 229 │ );
2026-10-25T01:04:53.8165566Z 230 │
2026-10-25T01:04:53.8165649Z 231 │ if (NativeTerminalSurfaceView) {
2026-10-25T01:04:53.8165705Z 232 │ return (
2026-10-25T01:04:53.8165792Z 233 │ <View style={props.style}>
2026-10-25T01:04:53.8165874Z 234 │ <NativeTerminalSurfaceView
2026-10-25T01:04:53.8165977Z · ────────────┬────────────
2026-10-25T01:04:53.8166134Z · ╰── This component is created during render
2026-10-25T01:04:53.8166229Z 235 │ appearanceScheme={themeAppearance}
2026-10-25T01:04:53.8166283Z ╰────
2026-10-25T01:04:53.8166526Z help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-25T01:04:53.8166838Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-25T01:04:53.8166843Z
2026-10-25T01:04:53.8167072Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-25T01:04:53.8167248Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:2144:15]
2026-10-25T01:04:53.8167318Z 2143 │ assert.equal(
2026-10-25T01:04:53.8167465Z 2144 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text,
2026-10-25T01:04:53.8167542Z · ──────
2026-10-25T01:04:53.8167621Z 2145 │ "authoritative answer",
2026-10-25T01:04:53.8167676Z ╰────
2026-10-25T01:04:53.8167846Z help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-25T01:04:53.8167849Z
2026-10-25T01:04:53.8168312Z ⚠ 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-25T01:04:53.8168483Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:4246:7]
2026-10-25T01:04:53.8168661Z 4245 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped);
2026-10-25T01:04:53.8168867Z 4246 │ ╭─▶ while (!responseLifecycle.includes("failed")) {
2026-10-25T01:04:53.8168973Z 4247 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8169107Z 4248 │ ╰─▶ }
2026-10-25T01:04:53.8169226Z 4249 │ const responseExit = yield* Fiber.join(responseFiber);
2026-10-25T01:04:53.8169277Z ╰────
2026-10-25T01:04:53.8169280Z
2026-10-25T01:04:53.8169785Z ⚠ 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-25T01:04:53.8169982Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6357:9]
2026-10-25T01:04:53.8170069Z 6356 │ .pipe(Effect.forkScoped);
2026-10-25T01:04:53.8170251Z 6357 │ ╭─▶ while (promptGates.length < 1) {
2026-10-25T01:04:53.8170385Z 6358 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8170517Z 6359 │ ╰─▶ }
2026-10-25T01:04:53.8170686Z 6360 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired");
2026-10-25T01:04:53.8170737Z ╰────
2026-10-25T01:04:53.8170740Z
2026-10-25T01:04:53.8171196Z ⚠ 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-25T01:04:53.8171363Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6492:9]
2026-10-25T01:04:53.8171447Z 6491 │ .pipe(Effect.forkScoped);
2026-10-25T01:04:53.8171626Z 6492 │ ╭─▶ while (promptGates.length < 2) {
2026-10-25T01:04:53.8171734Z 6493 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8171867Z 6494 │ ╰─▶ }
2026-10-25T01:04:53.8172027Z 6495 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) {
2026-10-25T01:04:53.8172083Z ╰────
2026-10-25T01:04:53.8172088Z
2026-10-25T01:04:53.8172314Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used.
2026-10-25T01:04:53.8172441Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:15:8]
2026-10-25T01:04:53.8172509Z 14 │ threadSearchMatchKey,
2026-10-25T01:04:53.8172600Z 15 │ type EnvironmentThreadSearchMatch,
2026-10-25T01:04:53.8172705Z · ──────────────┬─────────────
2026-10-25T01:04:53.8172879Z · ╰── 'EnvironmentThreadSearchMatch' is imported here
2026-10-25T01:04:53.8172986Z 16 │ } from "@t3tools/client-runtime/state/thread-search";
2026-10-25T01:04:53.8173038Z ╰────
2026-10-25T01:04:53.8173136Z help: Consider removing this import.
2026-10-25T01:04:53.8173138Z
2026-10-25T01:04:53.8173342Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8173473Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:527:25]
2026-10-25T01:04:53.8173604Z 526 │ // range) the boundary string is identical and the chain would die.
2026-10-25T01:04:53.8173694Z 527 │ }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-25T01:04:53.8173796Z · ───────┬──────
2026-10-25T01:04:53.8173959Z · ╰── Unnecessary dependency `snoozeWakeTick`
2026-10-25T01:04:53.8174095Z 528 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase();
2026-10-25T01:04:53.8174146Z ╰────
2026-10-25T01:04:53.8174485Z 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-25T01:04:53.8174818Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8174821Z
2026-10-25T01:04:53.8174984Z ⚠ react(purity): Cannot call impure function during render
2026-10-25T01:04:53.8175112Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:518:53]
2026-10-25T01:04:53.8175198Z 517 │ if (Number.isNaN(wakeAtMs)) return;
2026-10-25T01:04:53.8175358Z 518 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-25T01:04:53.8175477Z · ─────┬────
2026-10-25T01:04:53.8175646Z · ╰── Cannot call impure function
2026-10-25T01:04:53.8175728Z 519 │ const id = setTimeout(() => {
2026-10-25T01:04:53.8175779Z ╰────
2026-10-25T01:04:53.8176056Z 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-25T01:04:53.8176346Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T01:04:53.8176348Z
2026-10-25T01:04:53.8176604Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8176760Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
2026-10-25T01:04:53.8178577Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
2026-10-25T01:04:53.8178656Z 113 │ useEffect(() => {
2026-10-25T01:04:53.8178734Z · ────┬────
2026-10-25T01:04:53.8178866Z · ╰── This is the containing effect
2026-10-25T01:04:53.8179031Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
2026-10-25T01:04:53.8179092Z 115 │ return;
2026-10-25T01:04:53.8179147Z 116 │ }
2026-10-25T01:04:53.8179263Z 117 │ setEntry({ key: input.targetKey, location: candidate });
2026-10-25T01:04:53.8179336Z · ────┬───
2026-10-25T01:04:53.8179499Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8179620Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]);
2026-10-25T01:04:53.8179673Z ╰────
2026-10-25T01:04:53.8180384Z 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-25T01:04:53.8180758Z 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-25T01:04:53.8180761Z
2026-10-25T01:04:53.8181015Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-25T01:04:53.8181184Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10691:7]
2026-10-25T01:04:53.8181240Z 10690 │
2026-10-25T01:04:53.8181314Z 10691 │ const layer: Layer.Layer<
2026-10-25T01:04:53.8181387Z · ──┬──
2026-10-25T01:04:53.8181516Z · ╰── 'layer' is declared here
2026-10-25T01:04:53.8181611Z 10692 │ ProviderAdapter.ProviderAdapterV2,
2026-10-25T01:04:53.8181664Z ╰────
2026-10-25T01:04:53.8181766Z help: Consider removing this declaration.
2026-10-25T01:04:53.8181768Z
2026-10-25T01:04:53.8182023Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8182190Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
2026-10-25T01:04:53.8182242Z 638 │
2026-10-25T01:04:53.8182306Z 639 │ useEffect(() => {
2026-10-25T01:04:53.8182375Z · ────┬────
2026-10-25T01:04:53.8182507Z · ╰── This is the containing effect
2026-10-25T01:04:53.8182617Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) {
2026-10-25T01:04:53.8182676Z 641 │ return;
2026-10-25T01:04:53.8182731Z 642 │ }
2026-10-25T01:04:53.8182804Z 643 │ setPendingLaunchEntry({
2026-10-25T01:04:53.8182892Z · ──────────┬──────────
2026-10-25T01:04:53.8183061Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8183131Z 644 │ key: launchTargetKey,
2026-10-25T01:04:53.8183183Z ╰────
2026-10-25T01:04:53.8183780Z 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-25T01:04:53.8184098Z 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-25T01:04:53.8184101Z
2026-10-25T01:04:53.8184352Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8184519Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
2026-10-25T01:04:53.8184571Z 648 │
2026-10-25T01:04:53.8184637Z 649 │ useEffect(() => {
2026-10-25T01:04:53.8184705Z · ────┬────
2026-10-25T01:04:53.8184831Z · ╰── This is the containing effect
2026-10-25T01:04:53.8184944Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) {
2026-10-25T01:04:53.8185052Z 651 │ return;
2026-10-25T01:04:53.8185138Z 652 │ }
2026-10-25T01:04:53.8185220Z 653 │ setInitialAttachGridEntry({
2026-10-25T01:04:53.8185314Z · ────────────┬────────────
2026-10-25T01:04:53.8185485Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8185552Z 654 │ key: launchTargetKey,
2026-10-25T01:04:53.8185603Z ╰────
2026-10-25T01:04:53.8186183Z 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-25T01:04:53.8186501Z 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-25T01:04:53.8186507Z
2026-10-25T01:04:53.8186757Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8186920Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
2026-10-25T01:04:53.8186973Z 743 │
2026-10-25T01:04:53.8187036Z 744 │ useEffect(() => {
2026-10-25T01:04:53.8187104Z · ────┬────
2026-10-25T01:04:53.8187230Z · ╰── This is the containing effect
2026-10-25T01:04:53.8187329Z 745 │ if (!routeEnvironmentId || !routeThreadId) {
2026-10-25T01:04:53.8187397Z 746 │ setLastGridSize({
2026-10-25T01:04:53.8187477Z · ───────┬───────
2026-10-25T01:04:53.8187648Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8187733Z 747 │ cols: DEFAULT_TERMINAL_COLS,
2026-10-25T01:04:53.8187783Z ╰────
2026-10-25T01:04:53.8188362Z 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-25T01:04:53.8188673Z 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-25T01:04:53.8188676Z
2026-10-25T01:04:53.8188873Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8189043Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
2026-10-25T01:04:53.8189100Z 537 │ });
2026-10-25T01:04:53.8189221Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]);
2026-10-25T01:04:53.8189330Z · ───────────┬──────────
2026-10-25T01:04:53.8189572Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
2026-10-25T01:04:53.8189733Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
2026-10-25T01:04:53.8189785Z ╰────
2026-10-25T01:04:53.8190071Z 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-25T01:04:53.8190455Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8190489Z
2026-10-25T01:04:53.8190692Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8190857Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
2026-10-25T01:04:53.8190951Z 708 │ sentInitialInputKeyRef.current = null;
2026-10-25T01:04:53.8191017Z 709 │ }, [terminalKey]);
2026-10-25T01:04:53.8191093Z · ─────┬─────
2026-10-25T01:04:53.8191233Z · ╰── Unnecessary dependency `terminalKey`
2026-10-25T01:04:53.8191283Z 710 │
2026-10-25T01:04:53.8191334Z ╰────
2026-10-25T01:04:53.8191625Z 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-25T01:04:53.8191933Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8191936Z
2026-10-25T01:04:53.8192130Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8192292Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
2026-10-25T01:04:53.8192349Z 799 │ };
2026-10-25T01:04:53.8192524Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
2026-10-25T01:04:53.8192702Z · ────────────┬──────────── ─────┬─────
2026-10-25T01:04:53.8192935Z · │ ╰── Unnecessary dependency `terminalKey`
2026-10-25T01:04:53.8193147Z · ╰── Unnecessary dependency `terminal.lifecycleVersion`
2026-10-25T01:04:53.8193199Z 801 │
2026-10-25T01:04:53.8193249Z ╰────
2026-10-25T01:04:53.8193534Z 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-25T01:04:53.8193839Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8193842Z
2026-10-25T01:04:53.8193988Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8194158Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
2026-10-25T01:04:53.8194213Z 792 │ }
2026-10-25T01:04:53.8194317Z 793 │ const pasteSession = pasteSessionRef.current;
2026-10-25T01:04:53.8194429Z · ───────────┬───────────
2026-10-25T01:04:53.8194590Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8194642Z 794 │
2026-10-25T01:04:53.8194690Z ╰────
2026-10-25T01:04:53.8195151Z 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-25T01:04:53.8195488Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8195525Z
2026-10-25T01:04:53.8195719Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T01:04:53.8195874Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15]
2026-10-25T01:04:53.8195938Z 71 │ <Pressable
2026-10-25T01:04:53.8196005Z 72 │ key={index}
2026-10-25T01:04:53.8196090Z · ───────────
2026-10-25T01:04:53.8196175Z 73 │ accessibilityRole="button"
2026-10-25T01:04:53.8196225Z ╰────
2026-10-25T01:04:53.8196370Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T01:04:53.8196373Z
2026-10-25T01:04:53.8196633Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8196775Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-25T01:04:53.8196825Z 150 │
2026-10-25T01:04:53.8196889Z 151 │ useEffect(() => {
2026-10-25T01:04:53.8196960Z · ────┬────
2026-10-25T01:04:53.8197088Z · ╰── This is the containing effect
2026-10-25T01:04:53.8197168Z 152 │ if (!controlledSelectedPath) {
2026-10-25T01:04:53.8197229Z 153 │ return;
2026-10-25T01:04:53.8197283Z 154 │ }
2026-10-25T01:04:53.8197362Z 155 │ setExpandedPaths((current) => {
2026-10-25T01:04:53.8197444Z · ────────┬───────
2026-10-25T01:04:53.8197617Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8197741Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-25T01:04:53.8197791Z ╰────
2026-10-25T01:04:53.8198376Z 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-25T01:04:53.8198693Z 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-25T01:04:53.8198695Z
2026-10-25T01:04:53.8199023Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'.
2026-10-25T01:04:53.8199190Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7]
2026-10-25T01:04:53.8199245Z 1443 │
2026-10-25T01:04:53.8199359Z 1444 │ const layerCodexAppServerClientFactoryCommand = (
2026-10-25T01:04:53.8199476Z · ───────────────────┬───────────────────
2026-10-25T01:04:53.8199677Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here
2026-10-25T01:04:53.8199796Z 1445 │ options: CodexClient.CodexAppServerClientOptions & {
2026-10-25T01:04:53.8199846Z ╰────
2026-10-25T01:04:53.8199950Z help: Consider removing this declaration.
2026-10-25T01:04:53.8199953Z
2026-10-25T01:04:53.8200206Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-25T01:04:53.8200440Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7]
2026-10-25T01:04:53.8200539Z 1679 │
2026-10-25T01:04:53.8200612Z 1680 │ const layer: Layer.Layer<
2026-10-25T01:04:53.8200680Z · ──┬──
2026-10-25T01:04:53.8200804Z · ╰── 'layer' is declared here
2026-10-25T01:04:53.8200896Z 1681 │ ProviderAdapter.ProviderAdapterV2,
2026-10-25T01:04:53.8200949Z ╰────
2026-10-25T01:04:53.8201052Z help: Consider removing this declaration.
2026-10-25T01:04:53.8201054Z
2026-10-25T01:04:53.8201250Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8201393Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-25T01:04:53.8201490Z 256 │ return () => cancelAnimationFrame(frame);
2026-10-25T01:04:53.8201576Z 257 │ }, [props.path, targetIndex]);
2026-10-25T01:04:53.8201654Z · ─────┬────
2026-10-25T01:04:53.8201794Z · ╰── Unnecessary dependency `props.path`
2026-10-25T01:04:53.8201852Z 258 │
2026-10-25T01:04:53.8201902Z ╰────
2026-10-25T01:04:53.8202190Z 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-25T01:04:53.8202493Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8202498Z
2026-10-25T01:04:53.8202687Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T01:04:53.8202836Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-25T01:04:53.8202913Z 292 │ <SourceText
2026-10-25T01:04:53.8203013Z 293 │ key={`${index}:${tokenIndex}`}
2026-10-25T01:04:53.8203126Z · ──────────────────────────────
2026-10-25T01:04:53.8203197Z 294 │ style={{
2026-10-25T01:04:53.8203246Z ╰────
2026-10-25T01:04:53.8203389Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T01:04:53.8203393Z
2026-10-25T01:04:53.8203579Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T01:04:53.8203722Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-25T01:04:53.8203787Z 308 │ return (
2026-10-25T01:04:53.8203920Z 309 │ <SourceText key={index}>
2026-10-25T01:04:53.8204047Z · ───────────
2026-10-25T01:04:53.8204114Z 310 │ {body}
2026-10-25T01:04:53.8204165Z ╰────
2026-10-25T01:04:53.8204308Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T01:04:53.8204310Z
2026-10-25T01:04:53.8204558Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used.
2026-10-25T01:04:53.8204735Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10]
2026-10-25T01:04:53.8204787Z 959 │
2026-10-25T01:04:53.8204895Z 960 │ function layerClaudeAgentSdkReplayQueryRunner(
2026-10-25T01:04:53.8205006Z · ──────────────────┬─────────────────
2026-10-25T01:04:53.8205206Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here
2026-10-25T01:04:53.8205310Z 961 │ transcript: ClaudeAgentSdkReplayTranscript,
2026-10-25T01:04:53.8205361Z ╰────
2026-10-25T01:04:53.8205460Z help: Consider removing this declaration.
2026-10-25T01:04:53.8205462Z
2026-10-25T01:04:53.8205716Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8205877Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:279:5]
2026-10-25T01:04:53.8205995Z 277 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
2026-10-25T01:04:53.8206059Z 278 │ useEffect(() => {
2026-10-25T01:04:53.8206129Z · ────┬────
2026-10-25T01:04:53.8206257Z · ╰── This is the containing effect
2026-10-25T01:04:53.8206346Z 279 │ setNow(new Date().toISOString());
2026-10-25T01:04:53.8206415Z · ───┬──
2026-10-25T01:04:53.8206578Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8206715Z 280 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
2026-10-25T01:04:53.8206766Z ╰────
2026-10-25T01:04:53.8207349Z 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-25T01:04:53.8207669Z 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-25T01:04:53.8207674Z
2026-10-25T01:04:53.8207898Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used.
2026-10-25T01:04:53.8208055Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:13:8]
2026-10-25T01:04:53.8208125Z 12 │ threadSearchMatchKey,
2026-10-25T01:04:53.8208207Z 13 │ type EnvironmentThreadSearchMatch,
2026-10-25T01:04:53.8208309Z · ──────────────┬─────────────
2026-10-25T01:04:53.8208481Z · ╰── 'EnvironmentThreadSearchMatch' is imported here
2026-10-25T01:04:53.8208588Z 14 │ } from "@t3tools/client-runtime/state/thread-search";
2026-10-25T01:04:53.8208638Z ╰────
2026-10-25T01:04:53.8208735Z help: Consider removing this import.
2026-10-25T01:04:53.8208738Z
2026-10-25T01:04:53.8208986Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8209176Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:359:25]
2026-10-25T01:04:53.8209305Z 358 │ // range) the boundary string is identical and the chain would die.
2026-10-25T01:04:53.8209393Z 359 │ }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-25T01:04:53.8209492Z · ───────┬──────
2026-10-25T01:04:53.8209654Z · ╰── Unnecessary dependency `snoozeWakeTick`
2026-10-25T01:04:53.8209766Z 360 │ const listItems = ((): readonly SidebarListItem[] => {
2026-10-25T01:04:53.8209815Z ╰────
2026-10-25T01:04:53.8210108Z 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-25T01:04:53.8210427Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8210430Z
2026-10-25T01:04:53.8210624Z ⚠ react(purity): Cannot call impure function during render
2026-10-25T01:04:53.8210784Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:350:53]
2026-10-25T01:04:53.8210870Z 349 │ if (Number.isNaN(wakeAtMs)) return;
2026-10-25T01:04:53.8211023Z 350 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-25T01:04:53.8211142Z · ─────┬────
2026-10-25T01:04:53.8211308Z · ╰── Cannot call impure function
2026-10-25T01:04:53.8211389Z 351 │ const id = setTimeout(() => {
2026-10-25T01:04:53.8211439Z ╰────
2026-10-25T01:04:53.8211718Z 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-25T01:04:53.8212005Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T01:04:53.8212007Z
2026-10-25T01:04:53.8212275Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
2026-10-25T01:04:53.8212417Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
2026-10-25T01:04:53.8212471Z 60 │ ) {
2026-10-25T01:04:53.8212642Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
2026-10-25T01:04:53.8212723Z · ──────┬──────
2026-10-25T01:04:53.8212859Z · ╰── 'useDragRegion' is declared here
2026-10-25T01:04:53.8212950Z 62 │ const isInline = props.mode === "inline";
2026-10-25T01:04:53.8213000Z ╰────
2026-10-25T01:04:53.8213101Z help: Consider removing this declaration.
2026-10-25T01:04:53.8213104Z
2026-10-25T01:04:53.8213563Z ⚠ 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-25T01:04:53.8213710Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7]
2026-10-25T01:04:53.8213821Z 168 │ });
2026-10-25T01:04:53.8214047Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) {
2026-10-25T01:04:53.8214236Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break;
2026-10-25T01:04:53.8214342Z 171 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8214472Z 172 │ ╰─▶ }
2026-10-25T01:04:53.8214527Z 173 │
2026-10-25T01:04:53.8214577Z ╰────
2026-10-25T01:04:53.8214579Z
2026-10-25T01:04:53.8215031Z ⚠ 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-25T01:04:53.8215182Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7]
2026-10-25T01:04:53.8215299Z 177 │ yield* Deferred.succeed(releaseSave, undefined);
2026-10-25T01:04:53.8215487Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) {
2026-10-25T01:04:53.8215619Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break;
2026-10-25T01:04:53.8215722Z 180 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8215853Z 181 │ ╰─▶ }
2026-10-25T01:04:53.8215907Z 182 │
2026-10-25T01:04:53.8215957Z ╰────
2026-10-25T01:04:53.8215959Z
2026-10-25T01:04:53.8216414Z ⚠ 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-25T01:04:53.8216560Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7]
2026-10-25T01:04:53.8216685Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined);
2026-10-25T01:04:53.8216872Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) {
2026-10-25T01:04:53.8216994Z 308 │ │ const values = yield* Ref.get(saved);
2026-10-25T01:04:53.8217185Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) {
2026-10-25T01:04:53.8217270Z 310 │ │ break;
2026-10-25T01:04:53.8217347Z 311 │ │ }
2026-10-25T01:04:53.8217457Z 312 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8217589Z 313 │ ╰─▶ }
2026-10-25T01:04:53.8217644Z 314 │
2026-10-25T01:04:53.8217693Z ╰────
2026-10-25T01:04:53.8217695Z
2026-10-25T01:04:53.8217897Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-25T01:04:53.8218061Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
2026-10-25T01:04:53.8218136Z 3 │ AuthProvidersManageScope,
2026-10-25T01:04:53.8218349Z 4 │ type AuthSessionState,
2026-10-25T01:04:53.8218435Z · ────────┬───────
2026-10-25T01:04:53.8218581Z · ╰── 'AuthSessionState' is imported here
2026-10-25T01:04:53.8218649Z 5 │ type EnvironmentId,
2026-10-25T01:04:53.8218768Z ╰────
2026-10-25T01:04:53.8218910Z help: Consider removing this import.
2026-10-25T01:04:53.8218912Z
2026-10-25T01:04:53.8219362Z ⚠ 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-25T01:04:53.8219515Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1742:7]
2026-10-25T01:04:53.8219607Z 1741 │ yield* harness.replaceSession;
2026-10-25T01:04:53.8219810Z 1742 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-25T01:04:53.8219962Z 1743 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
2026-10-25T01:04:53.8220054Z 1744 │ │ break;
2026-10-25T01:04:53.8220135Z 1745 │ │ }
2026-10-25T01:04:53.8220238Z 1746 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8220398Z 1747 │ ╰─▶ }
2026-10-25T01:04:53.8220472Z 1748 │ yield* Queue.offer(
2026-10-25T01:04:53.8220524Z ╰────
2026-10-25T01:04:53.8220526Z
2026-10-25T01:04:53.8220974Z ⚠ 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-25T01:04:53.8221128Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1851:7]
2026-10-25T01:04:53.8221216Z 1850 │ yield* harness.replaceSession;
2026-10-25T01:04:53.8221421Z 1851 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-25T01:04:53.8221581Z 1852 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
2026-10-25T01:04:53.8221683Z 1853 │ │ yield* Effect.yieldNow;
2026-10-25T01:04:53.8221814Z 1854 │ ╰─▶ }
2026-10-25T01:04:53.8221941Z 1855 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
2026-10-25T01:04:53.8221994Z ╰────
2026-10-25T01:04:53.8221996Z
2026-10-25T01:04:53.8222250Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8222409Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5]
2026-10-25T01:04:53.8222475Z 434 │ : null;
2026-10-25T01:04:53.8222542Z 435 │ useEffect(() => {
2026-10-25T01:04:53.8222614Z · ────┬────
2026-10-25T01:04:53.8222742Z · ╰── This is the containing effect
2026-10-25T01:04:53.8222800Z 436 │ if (
2026-10-25T01:04:53.8222876Z 437 │ props.active === false ||
2026-10-25T01:04:53.8222951Z 438 │ activeDraftKey !== null ||
2026-10-25T01:04:53.8223032Z 439 │ editingPendingTask !== null ||
2026-10-25T01:04:53.8223107Z 440 │ selectedProject === null
2026-10-25T01:04:53.8223163Z 441 │ ) {
2026-10-25T01:04:53.8223221Z 442 │ return;
2026-10-25T01:04:53.8223275Z 443 │ }
2026-10-25T01:04:53.8223343Z 444 │ setActiveDraftKey(
2026-10-25T01:04:53.8223423Z · ────────┬────────
2026-10-25T01:04:53.8223644Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8223752Z 445 │ createNewTaskDraft({
2026-10-25T01:04:53.8223802Z ╰────
2026-10-25T01:04:53.8224389Z 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-25T01:04:53.8224706Z 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-25T01:04:53.8224709Z
2026-10-25T01:04:53.8224947Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-25T01:04:53.8225114Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36]
2026-10-25T01:04:53.8225222Z 1243 │ <ActiveNewTaskContext value={activeNewTask}>
2026-10-25T01:04:53.8225412Z 1244 │ <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
2026-10-25T01:04:53.8225521Z · ─────────────
2026-10-25T01:04:53.8225595Z 1245 │ </ActiveNewTaskContext>
2026-10-25T01:04:53.8225646Z ╰────
2026-10-25T01:04:53.8225867Z help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-25T01:04:53.8226004Z Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-25T01:04:53.8226007Z
2026-10-25T01:04:53.8226166Z ⚠ react(immutability): This value cannot be modified
2026-10-25T01:04:53.8226312Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5]
2026-10-25T01:04:53.8226455Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180;
2026-10-25T01:04:53.8226588Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0);
2026-10-25T01:04:53.8226664Z · ────┬───
2026-10-25T01:04:53.8226796Z · ╰── `rotation` originates here
2026-10-25T01:04:53.8226847Z 172 │
2026-10-25T01:04:53.8226913Z 173 │ useLayoutEffect(() => {
2026-10-25T01:04:53.8227047Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, {
2026-10-25T01:04:53.8227118Z · ────┬───
2026-10-25T01:04:53.8227249Z · ╰── `rotation` cannot be modified
2026-10-25T01:04:53.8227393Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS,
2026-10-25T01:04:53.8227476Z ╰────
2026-10-25T01:04:53.8227738Z 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-25T01:04:53.8228039Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8228041Z
2026-10-25T01:04:53.8228231Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T01:04:53.8228380Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23]
2026-10-25T01:04:53.8228447Z 1245 │ <Text
2026-10-25T01:04:53.8228541Z 1246 │ key={`${index}:${line}`}
2026-10-25T01:04:53.8228658Z · ────────────────────────
2026-10-25T01:04:53.8228736Z 1247 │ selectable
2026-10-25T01:04:53.8228787Z ╰────
2026-10-25T01:04:53.8228936Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T01:04:53.8228938Z
2026-10-25T01:04:53.8229194Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8229351Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-25T01:04:53.8229415Z 259 │ .join("|");
2026-10-25T01:04:53.8229479Z 260 │ useEffect(() => {
2026-10-25T01:04:53.8229549Z · ────┬────
2026-10-25T01:04:53.8229673Z · ╰── This is the containing effect
2026-10-25T01:04:53.8229740Z 261 │ stop();
2026-10-25T01:04:53.8229813Z · ──┬─
2026-10-25T01:04:53.8229975Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8230042Z 262 │ }, [orderVersion]);
2026-10-25T01:04:53.8230092Z ╰────
2026-10-25T01:04:53.8230705Z 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-25T01:04:53.8231021Z 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-25T01:04:53.8231023Z
2026-10-25T01:04:53.8231236Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T01:04:53.8231398Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-25T01:04:53.8231463Z 260 │ useEffect(() => {
2026-10-25T01:04:53.8231522Z 261 │ stop();
2026-10-25T01:04:53.8231587Z · ──┬─
2026-10-25T01:04:53.8231710Z · ╰── Missing dependency `stop`
2026-10-25T01:04:53.8231775Z 262 │ }, [orderVersion]);
2026-10-25T01:04:53.8231855Z · ──────┬─────
2026-10-25T01:04:53.8232000Z · ╰── Unnecessary dependency `orderVersion`
2026-10-25T01:04:53.8232061Z 263 │ useEffect(
2026-10-25T01:04:53.8232112Z ╰────
2026-10-25T01:04:53.8232577Z 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-25T01:04:53.8232916Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8232918Z
2026-10-25T01:04:53.8233059Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8233214Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
2026-10-25T01:04:53.8233292Z 95 │ const latest = useRef(props);
2026-10-25T01:04:53.8233361Z 96 │ latest.current = props;
2026-10-25T01:04:53.8233462Z · ───┬──────┬───
2026-10-25T01:04:53.8233644Z · │ ╰── Cannot update ref value during render
2026-10-25T01:04:53.8233762Z · ╰── This value is a ref
2026-10-25T01:04:53.8233830Z 97 │ const gesture = useMemo(
2026-10-25T01:04:53.8233879Z ╰────
2026-10-25T01:04:53.8234337Z 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-25T01:04:53.8234627Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8234629Z
2026-10-25T01:04:53.8234770Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8234931Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
2026-10-25T01:04:53.8234997Z 103 │ .runOnJS(true)
2026-10-25T01:04:53.8235096Z 104 │ .onStart(() => latest.current.onStart())
2026-10-25T01:04:53.8235210Z · ───────────────┬──────────────
2026-10-25T01:04:53.8235408Z · ╰── Passing a ref to a function may read its value during render
2026-10-25T01:04:53.8235538Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-25T01:04:53.8235591Z ╰────
2026-10-25T01:04:53.8236048Z 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-25T01:04:53.8236338Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8236343Z
2026-10-25T01:04:53.8236485Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8236640Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
2026-10-25T01:04:53.8236737Z 104 │ .onStart(() => latest.current.onStart())
2026-10-25T01:04:53.8236870Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-25T01:04:53.8237012Z · ──────────────────────────┬─────────────────────────
2026-10-25T01:04:53.8237216Z · ╰── Passing a ref to a function may read its value during render
2026-10-25T01:04:53.8237387Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-25T01:04:53.8237469Z ╰────
2026-10-25T01:04:53.8237923Z 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-25T01:04:53.8238204Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8238208Z
2026-10-25T01:04:53.8238345Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8238501Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
2026-10-25T01:04:53.8238629Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-25T01:04:53.8238755Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-25T01:04:53.8238894Z · ──────────────────────────┬─────────────────────────
2026-10-25T01:04:53.8239094Z · ╰── Passing a ref to a function may read its value during render
2026-10-25T01:04:53.8239219Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-25T01:04:53.8239269Z ╰────
2026-10-25T01:04:53.8239721Z 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-25T01:04:53.8240008Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8240012Z
2026-10-25T01:04:53.8240152Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8240308Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
2026-10-25T01:04:53.8240454Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-25T01:04:53.8240573Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-25T01:04:53.8240709Z · ───────────────────────┬──────────────────────
2026-10-25T01:04:53.8240912Z · ╰── Passing a ref to a function may read its value during render
2026-10-25T01:04:53.8240979Z 108 │ [props.disabled],
2026-10-25T01:04:53.8241028Z ╰────
2026-10-25T01:04:53.8241491Z 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-25T01:04:53.8241775Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8241778Z
2026-10-25T01:04:53.8241918Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8242073Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
2026-10-25T01:04:53.8242183Z 248 │ const latest = useRef({ rows, planners, moveThread });
2026-10-25T01:04:53.8242288Z 249 │ latest.current = { rows, planners, moveThread };
2026-10-25T01:04:53.8242517Z · ───┬──────┬───
2026-10-25T01:04:53.8242723Z · │ ╰── Cannot update ref value during render
2026-10-25T01:04:53.8242836Z · ╰── This value is a ref
2026-10-25T01:04:53.8242889Z 250 │
2026-10-25T01:04:53.8242940Z ╰────
2026-10-25T01:04:53.8243395Z 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-25T01:04:53.8243675Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8243680Z
2026-10-25T01:04:53.8243823Z ⚠ react(refs): Cannot access refs during render
2026-10-25T01:04:53.8243980Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
2026-10-25T01:04:53.8244097Z 246 │ const [preview, setPreview] = useState<Drag | null>(null);
2026-10-25T01:04:53.8244209Z 247 │ const translateY = useRef(new Animated.Value(0)).current;
2026-10-25T01:04:53.8244332Z · ──────────────────┬──────────────────
2026-10-25T01:04:53.8244500Z · ╰── Cannot access ref value during render
2026-10-25T01:04:53.8244608Z 248 │ const latest = useRef({ rows, planners, moveThread });
2026-10-25T01:04:53.8244660Z ╰────
2026-10-25T01:04:53.8245118Z 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-25T01:04:53.8245404Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T01:04:53.8245407Z
2026-10-25T01:04:53.8245572Z ⚠ react(purity): Cannot call impure function during render
2026-10-25T01:04:53.8245729Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
2026-10-25T01:04:53.8245793Z 323 │ update(0);
2026-10-25T01:04:53.8245871Z 324 │ let last = performance.now();
2026-10-25T01:04:53.8245968Z · ────────┬────────
2026-10-25T01:04:53.8246105Z · ╰── Cannot call impure function
2026-10-25T01:04:53.8246174Z 325 │ const tick = () => {
2026-10-25T01:04:53.8246270Z ╰────
2026-10-25T01:04:53.8246595Z help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T01:04:53.8246883Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T01:04:53.8246885Z
2026-10-25T01:04:53.8247073Z ⚠ react(capitalized-calls): Capitalized function called without JSX
2026-10-25T01:04:53.8247227Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
2026-10-25T01:04:53.8247287Z 98 │ () =>
2026-10-25T01:04:53.8247353Z 99 │ Gesture.Pan()
2026-10-25T01:04:53.8247427Z · ─┬─
2026-10-25T01:04:53.8247561Z · ╰── `Pan` may be a component
2026-10-25T01:04:53.8247642Z 100 │ .enabled(!props.disabled)
2026-10-25T01:04:53.8247693Z ╰────
2026-10-25T01:04:53.8247963Z 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-25T01:04:53.8248397Z 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-25T01:04:53.8248401Z
2026-10-25T01:04:53.8248584Z ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-25T01:04:53.8248739Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
2026-10-25T01:04:53.8248810Z 103 │ .runOnJS(true)
2026-10-25T01:04:53.8248912Z 104 │ .onStart(() => latest.current.onStart())
2026-10-25T01:04:53.8248996Z · ───┬──
2026-10-25T01:04:53.8249423Z · ╰── Missing dependency `latest`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T01:04:53.8249554Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-25T01:04:53.8249676Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-25T01:04:53.8249795Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-25T01:04:53.8249863Z 108 │ [props.disabled],
2026-10-25T01:04:53.8249944Z · ────────┬───────
2026-10-25T01:04:53.8250134Z · ╰── This dependency list is missing values used by the callback
2026-10-25T01:04:53.8250190Z 109 │ );
2026-10-25T01:04:53.8250242Z ╰────
2026-10-25T01:04:53.8250483Z help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-25T01:04:53.8250791Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8250793Z
2026-10-25T01:04:53.8250994Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor.
2026-10-25T01:04:53.8251115Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18]
2026-10-25T01:04:53.8251216Z 157 │ BrowserWindow: browserWindowConstructor,
2026-10-25T01:04:53.8251427Z 158 │ ╭─▶ ClipboardItem: class {
2026-10-25T01:04:53.8251588Z 159 │ │ constructor(data: Record<string, unknown>) {
2026-10-25T01:04:53.8251704Z 160 │ │ clipboardItemConstructor(data);
2026-10-25T01:04:53.8251778Z 161 │ │ }
2026-10-25T01:04:53.8251902Z 162 │ ╰─▶ },
2026-10-25T01:04:53.8251967Z 163 │ clipboard: {
2026-10-25T01:04:53.8252016Z ╰────
2026-10-25T01:04:53.8252182Z help: Try replacing this class with a standalone function or deleting it entirely
2026-10-25T01:04:53.8252185Z
2026-10-25T01:04:53.8252440Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8252619Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5]
2026-10-25T01:04:53.8252673Z 58 │
2026-10-25T01:04:53.8252737Z 59 │ useEffect(() => {
2026-10-25T01:04:53.8252808Z · ────┬────
2026-10-25T01:04:53.8252935Z · ╰── This is the containing effect
2026-10-25T01:04:53.8253015Z 60 │ setMountedModes((current) => {
2026-10-25T01:04:53.8253095Z · ───────┬───────
2026-10-25T01:04:53.8253262Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8253342Z 61 │ if (current.has(props.mode)) {
2026-10-25T01:04:53.8253392Z ╰────
2026-10-25T01:04:53.8253986Z 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-25T01:04:53.8254304Z 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-25T01:04:53.8254306Z
2026-10-25T01:04:53.8254559Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8254709Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:570:5]
2026-10-25T01:04:53.8254767Z 568 │ }, []);
2026-10-25T01:04:53.8254832Z 569 │ useEffect(() => {
2026-10-25T01:04:53.8254904Z · ────┬────
2026-10-25T01:04:53.8255037Z · ╰── This is the containing effect
2026-10-25T01:04:53.8255122Z 570 │ setKeyboardStateSuspect(false);
2026-10-25T01:04:53.8255213Z · ───────────┬───────────
2026-10-25T01:04:53.8255383Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8255484Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-25T01:04:53.8255532Z ╰────
2026-10-25T01:04:53.8256124Z 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-25T01:04:53.8256492Z 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-25T01:04:53.8256526Z
2026-10-25T01:04:53.8256778Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8256927Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:966:7]
2026-10-25T01:04:53.8257079Z 963 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
2026-10-25T01:04:53.8257144Z 964 │ useEffect(() => {
2026-10-25T01:04:53.8257215Z · ────┬────
2026-10-25T01:04:53.8257341Z · ╰── This is the containing effect
2026-10-25T01:04:53.8257496Z 965 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
2026-10-25T01:04:53.8257607Z 966 │ setLastKnownKeyboardHeight(liveKeyboardHeight);
2026-10-25T01:04:53.8257709Z · ─────────────┬────────────
2026-10-25T01:04:53.8257884Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8257938Z 967 │ }
2026-10-25T01:04:53.8257988Z ╰────
2026-10-25T01:04:53.8258627Z 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-25T01:04:53.8258940Z 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-25T01:04:53.8258942Z
2026-10-25T01:04:53.8259198Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8259351Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1222:5]
2026-10-25T01:04:53.8259405Z 1220 │
2026-10-25T01:04:53.8259470Z 1221 │ useEffect(() => {
2026-10-25T01:04:53.8259543Z · ────┬────
2026-10-25T01:04:53.8259670Z · ╰── This is the containing effect
2026-10-25T01:04:53.8259747Z 1222 │ setAnchorMessageId(null);
2026-10-25T01:04:53.8259830Z · ─────────┬────────
2026-10-25T01:04:53.8260000Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8260079Z 1223 │ setSubmittedMessageId(null);
2026-10-25T01:04:53.8260133Z ╰────
2026-10-25T01:04:53.8260763Z 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-25T01:04:53.8261082Z 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-25T01:04:53.8261084Z
2026-10-25T01:04:53.8261280Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8261426Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:571:7]
2026-10-25T01:04:53.8261511Z 570 │ setKeyboardStateSuspect(false);
2026-10-25T01:04:53.8261609Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-25T01:04:53.8261806Z · ────────┬──────── ─────────┬────────
2026-10-25T01:04:53.8262044Z · │ ╰── Unnecessary dependency `liveKeyboardHeight`
2026-10-25T01:04:53.8262200Z · ╰── Unnecessary dependency `isKeyboardVisible`
2026-10-25T01:04:53.8262326Z 572 │ const handleOwnedInputFocusChange = (focused: boolean) => {
2026-10-25T01:04:53.8262378Z ╰────
2026-10-25T01:04:53.8262671Z 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-25T01:04:53.8262974Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8262982Z
2026-10-25T01:04:53.8263181Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8263332Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1170:7]
2026-10-25T01:04:53.8263417Z 1169 │ userInputInsetProgress.set(1);
2026-10-25T01:04:53.8263576Z 1170 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
2026-10-25T01:04:53.8263670Z · ────────────┬───────────
2026-10-25T01:04:53.8263847Z · ╰── Unnecessary dependency `activeUserInputRequestId`
2026-10-25T01:04:53.8263954Z 1171 │ const showContent = props.showContent ?? true;
2026-10-25T01:04:53.8264003Z ╰────
2026-10-25T01:04:53.8264294Z 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-25T01:04:53.8264600Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8264602Z
2026-10-25T01:04:53.8264800Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8264954Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1228:15]
2026-10-25T01:04:53.8265021Z 1227 │ freeze.set(false);
2026-10-25T01:04:53.8265102Z 1228 │ }, [freeze, selectedThreadKey]);
2026-10-25T01:04:53.8265196Z · ────────┬────────
2026-10-25T01:04:53.8265357Z · ╰── Unnecessary dependency `selectedThreadKey`
2026-10-25T01:04:53.8265408Z 1229 │
2026-10-25T01:04:53.8265464Z ╰────
2026-10-25T01:04:53.8265756Z 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-25T01:04:53.8266062Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8266064Z
2026-10-25T01:04:53.8266215Z ⚠ react(immutability): This value cannot be modified
2026-10-25T01:04:53.8266365Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1058:5]
2026-10-25T01:04:53.8266474Z 1053 │ const composerPopoverHeight = useSharedValue(0);
2026-10-25T01:04:53.8266581Z 1054 │ const floatingControlCoverage = useSharedValue(
2026-10-25T01:04:53.8266721Z · ───────────┬───────────
2026-10-25T01:04:53.8266910Z · ╰── `floatingControlCoverage` originates here
2026-10-25T01:04:53.8267038Z 1055 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-25T01:04:53.8267093Z 1056 │ );
2026-10-25T01:04:53.8267157Z 1057 │ useEffect(() => {
2026-10-25T01:04:53.8267262Z 1058 │ floatingControlCoverage.value = withTiming(
2026-10-25T01:04:53.8267352Z · ───────────┬───────────
2026-10-25T01:04:53.8267514Z · ╰── `floatingControlCoverage` cannot be modified
2026-10-25T01:04:53.8267638Z 1059 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-25T01:04:53.8267691Z ╰────
2026-10-25T01:04:53.8267960Z 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-25T01:04:53.8268262Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8268264Z
2026-10-25T01:04:53.8268418Z ⚠ react(immutability): This value cannot be modified
2026-10-25T01:04:53.8268565Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1076:7]
2026-10-25T01:04:53.8268750Z 1066 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
2026-10-25T01:04:53.8268874Z 1067 │ const combinedContentInsetEndAdjustment = useSharedValue(
2026-10-25T01:04:53.8268984Z · ────────────────┬────────────────
2026-10-25T01:04:53.8269172Z · ╰── `combinedContentInsetEndAdjustment` originates here
2026-10-25T01:04:53.8269304Z 1068 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
2026-10-25T01:04:53.8269358Z 1069 │ );
2026-10-25T01:04:53.8269428Z 1070 │ useAnimatedReaction(
2026-10-25T01:04:53.8269486Z 1071 │ () =>
2026-10-25T01:04:53.8269578Z 1072 │ contentInsetEndAdjustment.value +
2026-10-25T01:04:53.8269667Z 1073 │ floatingControlCoverage.value +
2026-10-25T01:04:53.8269859Z 1074 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
2026-10-25T01:04:53.8269921Z 1075 │ (value) => {
2026-10-25T01:04:53.8270034Z 1076 │ combinedContentInsetEndAdjustment.value = value;
2026-10-25T01:04:53.8270142Z · ────────────────┬────────────────
2026-10-25T01:04:53.8270399Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified
2026-10-25T01:04:53.8270502Z 1077 │ },
2026-10-25T01:04:53.8270558Z ╰────
2026-10-25T01:04:53.8270818Z 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-25T01:04:53.8271119Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T01:04:53.8271122Z
2026-10-25T01:04:53.8271375Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8271510Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2189:5]
2026-10-25T01:04:53.8271565Z 2187 │ );
2026-10-25T01:04:53.8271632Z 2188 │ useEffect(() => {
2026-10-25T01:04:53.8271708Z · ────┬────
2026-10-25T01:04:53.8271838Z · ╰── This is the containing effect
2026-10-25T01:04:53.8271912Z 2189 │ setExpandedVideo(null);
2026-10-25T01:04:53.8271993Z · ────────┬───────
2026-10-25T01:04:53.8272161Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8272233Z 2190 │ setExpandedFile(null);
2026-10-25T01:04:53.8272284Z ╰────
2026-10-25T01:04:53.8272868Z 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-25T01:04:53.8273187Z 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-25T01:04:53.8273192Z
2026-10-25T01:04:53.8273442Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8273576Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2694:9]
2026-10-25T01:04:53.8273712Z 2685 │ const stopFollowingEnd = useEffectEvent(() => setEndFollow(false));
2026-10-25T01:04:53.8273777Z 2686 │ useEffect(() => {
2026-10-25T01:04:53.8273847Z · ────┬────
2026-10-25T01:04:53.8273976Z · ╰── This is the containing effect
2026-10-25T01:04:53.8274103Z 2687 │ if (!jumpToMessageId || loadedListKey !== listMountKey) return;
2026-10-25T01:04:53.8274204Z 2688 │ const index = presentedFeed.findIndex(
2026-10-25T01:04:53.8274338Z 2689 │ (entry) => entry.type === "message" && entry.id === jumpToMessageId,
2026-10-25T01:04:53.8274393Z 2690 │ );
2026-10-25T01:04:53.8274463Z 2691 │ if (index === -1) {
2026-10-25T01:04:53.8274590Z 2692 │ const runId = messageFoldRunId(props.feed, jumpToMessageId);
2026-10-25T01:04:53.8274689Z 2693 │ if (runId && !expandedTurnIds.has(runId)) {
2026-10-25T01:04:53.8274782Z 2694 │ setInteractionState((current) => ({
2026-10-25T01:04:53.8274871Z · ─────────┬─────────
2026-10-25T01:04:53.8275046Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8275110Z 2695 │ ...current,
2026-10-25T01:04:53.8275161Z ╰────
2026-10-25T01:04:53.8275798Z 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-25T01:04:53.8276144Z 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-25T01:04:53.8276147Z
2026-10-25T01:04:53.8276371Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
2026-10-25T01:04:53.8276501Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:70:10]
2026-10-25T01:04:53.8276637Z 69 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
2026-10-25T01:04:53.8276778Z 70 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
2026-10-25T01:04:53.8276877Z · ───────────┬───────────
2026-10-25T01:04:53.8277040Z · ╰── 'isMarkdownFileLinkLabel' is imported here
2026-10-25T01:04:53.8277194Z 71 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
2026-10-25T01:04:53.8277245Z ╰────
2026-10-25T01:04:53.8277342Z help: Consider removing this import.
2026-10-25T01:04:53.8277345Z
2026-10-25T01:04:53.8277549Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
2026-10-25T01:04:53.8277677Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:96:3]
2026-10-25T01:04:53.8277734Z 95 │ import {
2026-10-25T01:04:53.8277799Z 96 │ createContext,
2026-10-25T01:04:53.8277874Z · ──────┬──────
2026-10-25T01:04:53.8278011Z · ╰── 'createContext' is imported here
2026-10-25T01:04:53.8278072Z 97 │ memo,
2026-10-25T01:04:53.8278122Z ╰────
2026-10-25T01:04:53.8278217Z help: Consider removing this import.
2026-10-25T01:04:53.8278221Z
2026-10-25T01:04:53.8278426Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-25T01:04:53.8278558Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:112:3]
2026-10-25T01:04:53.8278615Z 111 │ import {
2026-10-25T01:04:53.8278684Z 112 │ ActivityIndicator,
2026-10-25T01:04:53.8278765Z · ────────┬────────
2026-10-25T01:04:53.8278906Z · ╰── 'ActivityIndicator' is imported here
2026-10-25T01:04:53.8278963Z 113 │ Image,
2026-10-25T01:04:53.8279014Z ╰────
2026-10-25T01:04:53.8279115Z help: Consider removing this import.
2026-10-25T01:04:53.8279119Z
2026-10-25T01:04:53.8279315Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
2026-10-25T01:04:53.8279446Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:119:3]
2026-10-25T01:04:53.8279508Z 118 │ Pressable,
2026-10-25T01:04:53.8279568Z 119 │ ScrollView,
2026-10-25T01:04:53.8279640Z · ─────┬────
2026-10-25T01:04:53.8279770Z · ╰── 'ScrollView' is imported here
2026-10-25T01:04:53.8279831Z 120 │ StyleSheet,
2026-10-25T01:04:53.8279880Z ╰────
2026-10-25T01:04:53.8279975Z help: Consider removing this import.
2026-10-25T01:04:53.8279977Z
2026-10-25T01:04:53.8280225Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
2026-10-25T01:04:53.8280397Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:121:11]
2026-10-25T01:04:53.8280477Z 120 │ StyleSheet,
2026-10-25T01:04:53.8280544Z 121 │ Text as NativeText,
2026-10-25T01:04:53.8280624Z · ─────┬────
2026-10-25T01:04:53.8280761Z · ╰── 'NativeText' is imported here
2026-10-25T01:04:53.8280824Z 122 │ type ColorValue,
2026-10-25T01:04:53.8280874Z ╰────
2026-10-25T01:04:53.8280968Z help: Consider removing this import.
2026-10-25T01:04:53.8280970Z
2026-10-25T01:04:53.8281181Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
2026-10-25T01:04:53.8281310Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:144:10]
2026-10-25T01:04:53.8281449Z 143 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
2026-10-25T01:04:53.8281577Z 144 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
2026-10-25T01:04:53.8281665Z · ─────────┬────────
2026-10-25T01:04:53.8281814Z · ╰── 'tryOpenExternalUrl' is imported here
2026-10-25T01:04:53.8281958Z 145 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
2026-10-25T01:04:53.8282008Z ╰────
2026-10-25T01:04:53.8282103Z help: Consider removing this import.
2026-10-25T01:04:53.8282105Z
2026-10-25T01:04:53.8282316Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
2026-10-25T01:04:53.8282447Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:147:10]
2026-10-25T01:04:53.8282583Z 146 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
2026-10-25T01:04:53.8282709Z 147 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
2026-10-25T01:04:53.8282797Z · ─────────┬─────────
2026-10-25T01:04:53.8282947Z · ╰── 'faviconUrlForOrigin' is imported here
2026-10-25T01:04:53.8283004Z 148 │ import {
2026-10-25T01:04:53.8283055Z ╰────
2026-10-25T01:04:53.8283146Z help: Consider removing this import.
2026-10-25T01:04:53.8283149Z
2026-10-25T01:04:53.8283358Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
2026-10-25T01:04:53.8283488Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:10]
2026-10-25T01:04:53.8283631Z 160 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
2026-10-25T01:04:53.8283768Z 161 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
2026-10-25T01:04:53.8283858Z · ────────┬───────
2026-10-25T01:04:53.8284005Z · ╰── 'MediaVideoPlayer' is imported here
2026-10-25T01:04:53.8284142Z 162 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
2026-10-25T01:04:53.8284190Z ╰────
2026-10-25T01:04:53.8284284Z help: Consider removing this import.
2026-10-25T01:04:53.8284286Z
2026-10-25T01:04:53.8284503Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
2026-10-25T01:04:53.8284631Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:3]
2026-10-25T01:04:53.8284714Z 164 │ attachmentVideoPreviewSource,
2026-10-25T01:04:53.8284836Z 165 │ mediaVideoPreviewUri,
2026-10-25T01:04:53.8284950Z · ──────────┬─────────
2026-10-25T01:04:53.8285099Z · ╰── 'mediaVideoPreviewUri' is imported here
2026-10-25T01:04:53.8285172Z 166 │ mediaVideoThumbnailKey,
2026-10-25T01:04:53.8285220Z ╰────
2026-10-25T01:04:53.8285313Z help: Consider removing this import.
2026-10-25T01:04:53.8285315Z
2026-10-25T01:04:53.8285533Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
2026-10-25T01:04:53.8285664Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:166:3]
2026-10-25T01:04:53.8285731Z 165 │ mediaVideoPreviewUri,
2026-10-25T01:04:53.8285802Z 166 │ mediaVideoThumbnailKey,
2026-10-25T01:04:53.8285888Z · ───────────┬──────────
2026-10-25T01:04:53.8286048Z · ╰── 'mediaVideoThumbnailKey' is imported here
2026-10-25T01:04:53.8286130Z 167 │ type MediaVideoPreviewSource,
2026-10-25T01:04:53.8286181Z ╰────
2026-10-25T01:04:53.8286273Z help: Consider removing this import.
2026-10-25T01:04:53.8286276Z
2026-10-25T01:04:53.8286483Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
2026-10-25T01:04:53.8286610Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:167:8]
2026-10-25T01:04:53.8286680Z 166 │ mediaVideoThumbnailKey,
2026-10-25T01:04:53.8286758Z 167 │ type MediaVideoPreviewSource,
2026-10-25T01:04:53.8286852Z · ───────────┬───────────
2026-10-25T01:04:53.8287009Z · ╰── 'MediaVideoPreviewSource' is imported here
2026-10-25T01:04:53.8287101Z 168 │ } from "../../lib/videoPreviewSource";
2026-10-25T01:04:53.8287153Z ╰────
2026-10-25T01:04:53.8287248Z help: Consider removing this import.
2026-10-25T01:04:53.8287250Z
2026-10-25T01:04:53.8287471Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
2026-10-25T01:04:53.8287600Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:189:3]
2026-10-25T01:04:53.8287659Z 188 │ import {
2026-10-25T01:04:53.8287733Z 189 │ resolveMarkdownFontSizes,
2026-10-25T01:04:53.8287820Z · ────────────┬───────────
2026-10-25T01:04:53.8287977Z · ╰── 'resolveMarkdownFontSizes' is imported here
2026-10-25T01:04:53.8288064Z 190 │ resolveNativeMarkdownTypography,
2026-10-25T01:04:53.8288115Z ╰────
2026-10-25T01:04:53.8288257Z help: Consider removing this import.
2026-10-25T01:04:53.8288289Z
2026-10-25T01:04:53.8288542Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
2026-10-25T01:04:53.8288671Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:196:3]
2026-10-25T01:04:53.8288748Z 195 │ normalizeNativeMarkdownUrl,
2026-10-25T01:04:53.8288841Z 196 │ resolveMarkdownInlineCodePresentation,
2026-10-25T01:04:53.8288953Z · ──────────────────┬──────────────────
2026-10-25T01:04:53.8289146Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here
2026-10-25T01:04:53.8289230Z 197 │ resolveMarkdownLinkPresentation,
2026-10-25T01:04:53.8289279Z ╰────
2026-10-25T01:04:53.8289373Z help: Consider removing this import.
2026-10-25T01:04:53.8289375Z
2026-10-25T01:04:53.8289588Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
2026-10-25T01:04:53.8289721Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:244:3]
2026-10-25T01:04:53.8289783Z 243 │ useAssetUrl,
2026-10-25T01:04:53.8289849Z 244 │ useAssetUrlState,
2026-10-25T01:04:53.8289928Z · ────────┬───────
2026-10-25T01:04:53.8290069Z · ╰── 'useAssetUrlState' is imported here
2026-10-25T01:04:53.8290134Z 245 │ useRefreshAssetUrl,
2026-10-25T01:04:53.8290186Z ╰────
2026-10-25T01:04:53.8290280Z help: Consider removing this import.
2026-10-25T01:04:53.8290282Z
2026-10-25T01:04:53.8290511Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8290647Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2191:7]
2026-10-25T01:04:53.8290725Z 2190 │ setExpandedFile(null);
2026-10-25T01:04:53.8290880Z 2191 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
2026-10-25T01:04:53.8291099Z · ─────────┬───────── ───────┬────── ───────────────┬──────────────
2026-10-25T01:04:53.8291384Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind`
2026-10-25T01:04:53.8291578Z · │ ╰── Unnecessary dependency `props.threadId`
2026-10-25T01:04:53.8291742Z · ╰── Unnecessary dependency `props.environmentId`
2026-10-25T01:04:53.8291890Z 2192 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
2026-10-25T01:04:53.8291945Z ╰────
2026-10-25T01:04:53.8292236Z 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-25T01:04:53.8292544Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8292546Z
2026-10-25T01:04:53.8292742Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8292877Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2663:7]
2026-10-25T01:04:53.8292973Z 2662 │ reportHeaderMaterialVisibility(false);
2026-10-25T01:04:53.8293135Z 2663 │ }, [feedThreadKey, reportHeaderMaterialVisibility]);
2026-10-25T01:04:53.8293245Z · ──────┬──────
2026-10-25T01:04:53.8293393Z · ╰── Unnecessary dependency `feedThreadKey`
2026-10-25T01:04:53.8293446Z 2664 │
2026-10-25T01:04:53.8293494Z ╰────
2026-10-25T01:04:53.8293782Z 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-25T01:04:53.8294084Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8294087Z
2026-10-25T01:04:53.8294282Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8294418Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2679:7]
2026-10-25T01:04:53.8294477Z 2678 │ }
2026-10-25T01:04:53.8294608Z 2679 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
2026-10-25T01:04:53.8294687Z · ──────┬─────
2026-10-25T01:04:53.8294830Z · ╰── Unnecessary dependency `listMountKey`
2026-10-25T01:04:53.8294972Z 2680 │ // Opening at a message: its run unfolds, the list stops following the end
2026-10-25T01:04:53.8295023Z ╰────
2026-10-25T01:04:53.8295308Z 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-25T01:04:53.8295610Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8295618Z
2026-10-25T01:04:53.8295816Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8295951Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2875:7]
2026-10-25T01:04:53.8296006Z 2874 │ }
2026-10-25T01:04:53.8296185Z 2875 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
2026-10-25T01:04:53.8296380Z · ───────┬─────── ─────────┬──────── ────────┬───────
2026-10-25T01:04:53.8296628Z · │ │ ╰── Unnecessary dependency `expandedWorkRows`
2026-10-25T01:04:53.8296835Z · │ ╰── Unnecessary dependency `expandedWorkGroups`
2026-10-25T01:04:53.8296988Z · ╰── Unnecessary dependency `expandedTurnIds`
2026-10-25T01:04:53.8297042Z 2876 │
2026-10-25T01:04:53.8297092Z ╰────
2026-10-25T01:04:53.8297375Z 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-25T01:04:53.8297678Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8297681Z
2026-10-25T01:04:53.8297860Z ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T01:04:53.8297991Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:626:9]
2026-10-25T01:04:53.8298048Z 625 │ };
2026-10-25T01:04:53.8298274Z 626 │ }, [props.environmentId, attachment.id, httpBaseUrl]),
2026-10-25T01:04:53.8298503Z · ─────────┬───────── ──────┬────── ─────┬─────
2026-10-25T01:04:53.8298739Z · │ │ ╰── Unnecessary dependency `httpBaseUrl`
2026-10-25T01:04:53.8298932Z · │ ╰── Unnecessary dependency `attachment.id`
2026-10-25T01:04:53.8299095Z · ╰── Unnecessary dependency `props.environmentId`
2026-10-25T01:04:53.8299149Z 627 │ );
2026-10-25T01:04:53.8299202Z ╰────
2026-10-25T01:04:53.8299514Z 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-25T01:04:53.8299822Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8299824Z
2026-10-25T01:04:53.8300081Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8300233Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7]
2026-10-25T01:04:53.8300396Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]);
2026-10-25T01:04:53.8300463Z 356 │ useEffect(() => {
2026-10-25T01:04:53.8300534Z · ────┬────
2026-10-25T01:04:53.8300662Z · ╰── This is the containing effect
2026-10-25T01:04:53.8300755Z 357 │ if (!isReturningToProjectPicker) {
2026-10-25T01:04:53.8300820Z 358 │ return;
2026-10-25T01:04:53.8300874Z 359 │ }
2026-10-25T01:04:53.8300969Z 360 │ if (requestedInitialProjectAvailable) {
2026-10-25T01:04:53.8301059Z 361 │ setIsReturningToProjectPicker(false);
2026-10-25T01:04:53.8301163Z · ──────────────┬──────────────
2026-10-25T01:04:53.8301339Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8301400Z 362 │ return;
2026-10-25T01:04:53.8301450Z ╰────
2026-10-25T01:04:53.8302088Z 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-25T01:04:53.8302436Z 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-25T01:04:53.8302439Z
2026-10-25T01:04:53.8302693Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8302844Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9]
2026-10-25T01:04:53.8302894Z 447 │
2026-10-25T01:04:53.8302960Z 448 │ useEffect(() => {
2026-10-25T01:04:53.8303031Z · ────┬────
2026-10-25T01:04:53.8303157Z · ╰── This is the containing effect
2026-10-25T01:04:53.8303257Z 449 │ if (props.pendingTaskId || props.draftId) {
2026-10-25T01:04:53.8303321Z 450 │ return;
2026-10-25T01:04:53.8303383Z 451 │ }
2026-10-25T01:04:53.8303523Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) {
2026-10-25T01:04:53.8303652Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef;
2026-10-25T01:04:53.8303759Z 454 │ appliedInitialProjectKeyRef.current = null;
2026-10-25T01:04:53.8303813Z 455 │ }
2026-10-25T01:04:53.8303952Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-25T01:04:53.8304075Z 457 │ const initialProjectId = props.initialProjectRef?.projectId;
2026-10-25T01:04:53.8304178Z 458 │ if (initialEnvironmentId && initialProjectId) {
2026-10-25T01:04:53.8304249Z 459 │ const directProject =
2026-10-25T01:04:53.8304317Z 460 │ projects.find(
2026-10-25T01:04:53.8304380Z 461 │ (project) =>
2026-10-25T01:04:53.8304559Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId,
2026-10-25T01:04:53.8304625Z 463 │ ) ?? null;
2026-10-25T01:04:53.8304677Z 464 │
2026-10-25T01:04:53.8304745Z 465 │ if (directProject) {
2026-10-25T01:04:53.8304882Z 466 │ // Apply the route's project once. Re-applying on every change would
2026-10-25T01:04:53.8305020Z 467 │ // instantly revert environment/project switches made in the picker.
2026-10-25T01:04:53.8305182Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`;
2026-10-25T01:04:53.8305314Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) {
2026-10-25T01:04:53.8305378Z 470 │ return;
2026-10-25T01:04:53.8305437Z 471 │ }
2026-10-25T01:04:53.8305536Z 472 │ if (props.initialProjectRef?.branch) {
2026-10-25T01:04:53.8305602Z 473 │ if (
2026-10-25T01:04:53.8305749Z 474 │ selectedProject?.environmentId !== directProject.environmentId ||
2026-10-25T01:04:53.8305850Z 475 │ selectedProject.id !== directProject.id
2026-10-25T01:04:53.8305912Z 476 │ ) {
2026-10-25T01:04:53.8305995Z 477 │ setProject(directProject);
2026-10-25T01:04:53.8306060Z 478 │ return;
2026-10-25T01:04:53.8306120Z 479 │ }
2026-10-25T01:04:53.8306201Z 480 │ if (!flow.draftKey) return;
2026-10-25T01:04:53.8306341Z 481 │ // The route completes checkout before mounting this composer. Local
2026-10-25T01:04:53.8306487Z 482 │ // mode reuses an existing worktree; worktree mode would create another.
2026-10-25T01:04:53.8306597Z 483 │ updateComposerDraftSettings(flow.draftKey, {
2026-10-25T01:04:53.8306674Z 484 │ workspaceSelection: {
2026-10-25T01:04:53.8306794Z 485 │ mode: "local",
2026-10-25T01:04:53.8306929Z 486 │ branch: props.initialProjectRef.branch,
2026-10-25T01:04:53.8307065Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null,
2026-10-25T01:04:53.8307146Z 488 │ startFromOrigin: false,
2026-10-25T01:04:53.8307208Z 489 │ },
2026-10-25T01:04:53.8307268Z 490 │ });
2026-10-25T01:04:53.8307326Z 491 │ }
2026-10-25T01:04:53.8307452Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey;
2026-10-25T01:04:53.8307512Z 493 │ if (
2026-10-25T01:04:53.8307653Z 494 │ selectedProject?.environmentId === directProject.environmentId &&
2026-10-25T01:04:53.8307752Z 495 │ selectedProject.id === directProject.id
2026-10-25T01:04:53.8307809Z 496 │ ) {
2026-10-25T01:04:53.8307878Z 497 │ return;
2026-10-25T01:04:53.8307938Z 498 │ }
2026-10-25T01:04:53.8308017Z 499 │ setProject(directProject);
2026-10-25T01:04:53.8308078Z 500 │ return;
2026-10-25T01:04:53.8308134Z 501 │ }
2026-10-25T01:04:53.8308188Z 502 │
2026-10-25T01:04:53.8308265Z 503 │ if (projects.length > 0) {
2026-10-25T01:04:53.8308364Z 504 │ setIsReturningToProjectPicker(true);
2026-10-25T01:04:53.8308474Z · ──────────────┬──────────────
2026-10-25T01:04:53.8308656Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8308709Z 505 │ }
2026-10-25T01:04:53.8308762Z ╰────
2026-10-25T01:04:53.8309360Z 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-25T01:04:53.8309682Z 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-25T01:04:53.8309685Z
2026-10-25T01:04:53.8309944Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T01:04:53.8310099Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5]
2026-10-25T01:04:53.8310154Z 545 │
2026-10-25T01:04:53.8310221Z 546 │ useEffect(() => {
2026-10-25T01:04:53.8310295Z · ────┬────
2026-10-25T01:04:53.8310437Z · ╰── This is the containing effect
2026-10-25T01:04:53.8310564Z 547 │ const shareId = props.incomingShareId;
2026-10-25T01:04:53.8310649Z 548 │ const draftKey = flow.draftKey;
2026-10-25T01:04:53.8310750Z 549 │ const destinationProject = selectedProject;
2026-10-25T01:04:53.8310888Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-25T01:04:53.8311018Z 551 │ const initialProjectId = props.initialProjectRef?.projectId;
2026-10-25T01:04:53.8311108Z 552 │ const selectedProjectMatchesRoute =
2026-10-25T01:04:53.8311184Z 553 │ !initialEnvironmentId ||
2026-10-25T01:04:53.8311252Z 554 │ !initialProjectId ||
2026-10-25T01:04:53.8311383Z 555 │ (destinationProject?.environmentId === initialEnvironmentId &&
2026-10-25T01:04:53.8311487Z 556 │ destinationProject.id === initialProjectId);
2026-10-25T01:04:53.8311544Z 557 │ if (
2026-10-25T01:04:53.8311663Z 558 │ !shareId ||
2026-10-25T01:04:53.8311846Z 559 │ !draftKey ||
2026-10-25T01:04:53.8311919Z 560 │ !destinationProject ||
2026-10-25T01:04:53.8312007Z 561 │ !selectedProjectMatchesRoute ||
2026-10-25T01:04:53.8312095Z 562 │ cancelledIncomingShareId === shareId
2026-10-25T01:04:53.8312153Z 563 │ ) {
2026-10-25T01:04:53.8312214Z 564 │ return;
2026-10-25T01:04:53.8312270Z 565 │ }
2026-10-25T01:04:53.8312363Z 566 │ const importKey = `${shareId}:${draftKey}`;
2026-10-25T01:04:53.8312421Z 567 │ if (
2026-10-25T01:04:53.8312534Z 568 │ startedShareImportKeyRef.current === importKey ||
2026-10-25T01:04:53.8312646Z 569 │ cancellingShareImportKeyRef.current === importKey
2026-10-25T01:04:53.8312700Z 570 │ ) {
2026-10-25T01:04:53.8312761Z 571 │ return;
2026-10-25T01:04:53.8312817Z 572 │ }
2026-10-25T01:04:53.8312874Z 573 │
2026-10-25T01:04:53.8312947Z 574 │ if (!incomingShare) {
2026-10-25T01:04:53.8313143Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
2026-10-25T01:04:53.8313272Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId;
2026-10-25T01:04:53.8313337Z 577 │ Dialog.alert(
2026-10-25T01:04:53.8313423Z 578 │ "Shared content unavailable",
2026-10-25T01:04:53.8313600Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.",
2026-10-25T01:04:53.8313659Z 580 │ );
2026-10-25T01:04:53.8313712Z 581 │ }
2026-10-25T01:04:53.8313772Z 582 │ return;
2026-10-25T01:04:53.8313829Z 583 │ }
2026-10-25T01:04:53.8313883Z 584 │
2026-10-25T01:04:53.8313939Z 585 │ if (
2026-10-25T01:04:53.8314106Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") &&
2026-10-25T01:04:53.8314208Z 587 │ selectedEnvironmentServerConfig === null
2026-10-25T01:04:53.8314263Z 588 │ ) {
2026-10-25T01:04:53.8314320Z 589 │ return;
2026-10-25T01:04:53.8314374Z 590 │ }
2026-10-25T01:04:53.8314426Z 591 │
2026-10-25T01:04:53.8314560Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) {
2026-10-25T01:04:53.8314680Z 593 │ alertedUnavailableIncomingShareIdRef.current = null;
2026-10-25T01:04:53.8314736Z 594 │ }
2026-10-25T01:04:53.8314842Z 595 │ startedShareImportKeyRef.current = importKey;
2026-10-25T01:04:53.8314909Z 596 │ const draftBackup =
2026-10-25T01:04:53.8315094Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
2026-10-25T01:04:53.8315232Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup);
2026-10-25T01:04:53.8315328Z 599 │ const importToken = Symbol(importKey);
2026-10-25T01:04:53.8315408Z 600 │ let didReserveShare = false;
2026-10-25T01:04:53.8315485Z 601 │ let didConsumeShare = false;
2026-10-25T01:04:53.8315566Z 602 │ let needsDraftRestore = false;
2026-10-25T01:04:53.8315676Z 603 │ activeShareImportTokenRef.current = importToken;
2026-10-25T01:04:53.8315760Z 604 │ setImportingShareKey(importKey);
2026-10-25T01:04:53.8315850Z · ──────────┬─────────
2026-10-25T01:04:53.8316024Z · ╰── Avoid calling setState() directly within an effect
2026-10-25T01:04:53.8316094Z 605 │ void (async () => {
2026-10-25T01:04:53.8316144Z ╰────
2026-10-25T01:04:53.8316787Z 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-25T01:04:53.8317141Z 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-25T01:04:53.8317143Z
2026-10-25T01:04:53.8317344Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8317498Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5]
2026-10-25T01:04:53.8317573Z 523 │ props.initialProjectRef,
2026-10-25T01:04:53.8317648Z 524 │ props.incomingShareId,
2026-10-25T01:04:53.8317737Z · ──────────┬──────────
2026-10-25T01:04:53.8317908Z · ╰── Unnecessary dependency `props.incomingShareId`
2026-10-25T01:04:53.8317980Z 525 │ props.pendingTaskId,
2026-10-25T01:04:53.8318034Z ╰────
2026-10-25T01:04:53.8318323Z 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-25T01:04:53.8318630Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8318633Z
2026-10-25T01:04:53.8318845Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T01:04:53.8318994Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5]
2026-10-25T01:04:53.8319110Z 542 │ loadedBranchesProjectKeyRef.current = projectKey;
2026-10-25T01:04:53.8319184Z 543 │ flow.loadBranches();
2026-10-25T01:04:53.8319259Z · ──┬─
2026-10-25T01:04:53.8319381Z · ╰── Missing dependency `flow`
2026-10-25T01:04:53.8319477Z 544 │ }, [flow.loadBranches, selectedProject]);
2026-10-25T01:04:53.8319565Z · ────────┬────────
2026-10-25T01:04:53.8319763Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead
2026-10-25T01:04:53.8319814Z 545 │
2026-10-25T01:04:53.8319867Z ╰────
2026-10-25T01:04:53.8320286Z 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-25T01:04:53.8320635Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8320641Z
2026-10-25T01:04:53.8320836Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T01:04:53.8320991Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
2026-10-25T01:04:53.8321057Z 765 │ flow.draftKey,
2026-10-25T01:04:53.8321135Z 766 │ hasImportedIncomingShare,
2026-10-25T01:04:53.8321226Z · ────────────┬───────────
2026-10-25T01:04:53.8321404Z · ╰── Unnecessary dependency `hasImportedIncomingShare`
2026-10-25T01:04:53.8321470Z 767 │ incomingShare,
2026-10-25T01:04:53.8321549Z 768 │ isIncomingShareInboxLoading,
2026-10-25T01:04:53.8321695Z · ─────────────┬─────────────
2026-10-25T01:04:53.8321911Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading`
2026-10-25T01:04:53.8321992Z 769 │ isIncomingShareUnavailable,
2026-10-25T01:04:53.8322066Z 770 │ props.incomingShareId,
2026-10-25T01:04:53.8322160Z 771 │ props.initialProjectRef?.environmentId,
2026-10-25T01:04:53.8322251Z 772 │ props.initialProjectRef?.projectId,
2026-10-25T01:04:53.8322326Z 773 │ releaseShareReservation,
2026-10-25T01:04:53.8322391Z 774 │ reserveShare,
2026-10-25T01:04:53.8322475Z 775 │ selectedEnvironmentServerConfig,
2026-10-25T01:04:53.8322545Z 776 │ selectedProject,
2026-10-25T01:04:53.8322616Z 777 │ shareImportAttempt,
2026-10-25T01:04:53.8322703Z · ─────────┬────────
2026-10-25T01:04:53.8322870Z · ╰── Unnecessary dependency `shareImportAttempt`
2026-10-25T01:04:53.8322930Z 778 │ ]);
2026-10-25T01:04:53.8322982Z ╰────
2026-10-25T01:04:53.8323273Z 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-25T01:04:53.8323575Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T01:04:53.8323581Z
2026-10-25T01:04:53.8323664Z Found 0 errors and 372 warnings in 5486 files (5.7s, 8 threads)
2026-10-25T01:04:53.8746403Z Post job cleanup.
2026-10-25T01:04:53.9346434Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-25T01:04:53.9411168Z Post job cleanup.
2026-10-25T01:04:54.0313537Z ##[start-action display=Cache full pnpm store;id=__566ef0e8-ae7a-4db2-86d3-df2296ab3022.__actions_cache]
2026-10-25T01:04:54.0603218Z Post job cleanup.
2026-10-25T01:04:54.1203520Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-fe33cf74552d68b43bd4929ad8f74b63f776b4470e2e3533f781441d5e4f188c, not saving cache.
2026-10-25T01:04:54.1231462Z ##[end-action id=__566ef0e8-ae7a-4db2-86d3-df2296ab3022.__actions_cache;outcome=success;conclusion=success;duration_ms=91]
2026-10-25T01:04:54.1233523Z ##[start-action display=Cache Vite+;id=__566ef0e8-ae7a-4db2-86d3-df2296ab3022.vp_cache]
2026-10-25T01:04:54.1256531Z Post job cleanup.
2026-10-25T01:04:54.1848886Z 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-25T01:04:54.1875975Z ##[end-action id=__566ef0e8-ae7a-4db2-86d3-df2296ab3022.vp_cache;outcome=success;conclusion=success;duration_ms=64]
2026-10-25T01:04:54.1910344Z Post job cleanup.
2026-10-25T01:04:54.2284659Z [command]/usr/local/bin/git version
2026-10-25T01:04:54.2331681Z git version 2.55.0
2026-10-25T01:04:54.2347393Z Temporarily overriding HOME='/home/runner/_work/_temp/81f55779-7a15-4994-8023-edd851863df7' before making global git config changes
2026-10-25T01:04:54.2347743Z Adding repository directory to the temporary git global config as a safe directory
2026-10-25T01:04:54.2349994Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-25T01:04:54.2369209Z Removing SSH command configuration
2026-10-25T01:04:54.2371946Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-25T01:04:54.2393832Z [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-25T01:04:54.2501891Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-25T01:04:54.2522016Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-25T01:04:54.2556330Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-25T01:04:54.2577939Z ##[group]Run '/job_completed.sh'
2026-10-25T01:04:54.2589147Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-25T01:04:54.2589315Z env:
2026-10-25T01:04:54.2589429Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 153
2026-10-25T01:04:54.2589575Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 400
2026-10-25T01:04:54.2589714Z BLACKSMITH_CHECK_RUN_ID: 121036834290
2026-10-25T01:04:54.2589855Z BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-25T01:04:54.2589994Z GITHUB_ACTIONS_CACHE_MODE: write
2026-10-25T01:04:54.2590126Z ##[endgroup]
2026-10-25T01:04:54.2664756Z Docker container cache not activated, skipping hash computation.
2026-10-25T01:04:54.2907380Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-25T01:04:54.2949210Z Cleaning up orphan processes