GitHub check

256 KB of 597 KB loaded Download the full log (597 KB)
341 KB of earlier output not loaded
s:340:7]
2026-10-24T03:20:26.0428312Z  339 โ”‚
2026-10-24T03:20:26.0428416Z  340 โ”‚ const layerTest = AnalyticsService.layerTest;
2026-10-24T03:20:26.0428491Z      ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0428625Z      ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
2026-10-24T03:20:26.0428677Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0428784Z   help: Consider removing this declaration.
2026-10-24T03:20:26.0428857Z
2026-10-24T03:20:26.0429053Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T03:20:26.0429176Z      โ•ญโ”€[apps/server/src/processRunner.test.ts:266:14]
2026-10-24T03:20:26.0429230Z  265 โ”‚
2026-10-24T03:20:26.0429337Z  266 โ”‚   for (const {} of ["timeout", "success"] as const) {
2026-10-24T03:20:26.0429408Z      ยท              โ”€โ”€
2026-10-24T03:20:26.0429465Z  267 โ”‚   }
2026-10-24T03:20:26.0429518Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0429753Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T03:20:26.0429756Z
2026-10-24T03:20:26.0430014Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0430183Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
2026-10-24T03:20:26.0430300Z  37 โ”‚   const [initialized, setInitialized] = useState(false);
2026-10-24T03:20:26.0430371Z  38 โ”‚   useLayoutEffect(() => {
2026-10-24T03:20:26.0430448Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0430583Z     ยท          โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0430645Z  39 โ”‚     reset();
2026-10-24T03:20:26.0430714Z  40 โ”‚     setInitialized(true);
2026-10-24T03:20:26.0430792Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0430964Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0431027Z  41 โ”‚   }, [reset]);
2026-10-24T03:20:26.0431080Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0431693Z   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-24T03:20:26.0432021Z   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-24T03:20:26.0432024Z
2026-10-24T03:20:26.0432282Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0432444Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
2026-10-24T03:20:26.0432558Z  88 โ”‚
2026-10-24T03:20:26.0432624Z  89 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0432697Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0432837Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0432999Z  90 โ”‚     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
2026-10-24T03:20:26.0433102Z  91 โ”‚     const branchName = initialProjectRef.branch;
2026-10-24T03:20:26.0433169Z  92 โ”‚     let active = true;
2026-10-24T03:20:26.0433267Z  93 โ”‚     setPendingCheckouts((count) => count + 1);
2026-10-24T03:20:26.0433354Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0433525Z     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0433682Z  94 โ”‚     // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
2026-10-24T03:20:26.0433736Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0434406Z   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-24T03:20:26.0434756Z   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-24T03:20:26.0434759Z
2026-10-24T03:20:26.0435234Z   โš  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-24T03:20:26.0435387Z      โ•ญโ”€[apps/server/src/background/HostPowerMonitor.test.ts:133:11]
2026-10-24T03:20:26.0435522Z  132 โ”‚               const monitor = yield* HostPowerMonitor.HostPowerMonitor;
2026-10-24T03:20:26.0435673Z  133 โ”‚ โ•ญโ”€โ–ถ           for (
2026-10-24T03:20:26.0435782Z  134 โ”‚ โ”‚               let attempt = 0;
2026-10-24T03:20:26.0435950Z  135 โ”‚ โ”‚               attempt < 100 && (yield* monitor.snapshot).onBattery !== "true";
2026-10-24T03:20:26.0436053Z  136 โ”‚ โ”‚               attempt += 1
2026-10-24T03:20:26.0436136Z  137 โ”‚ โ”‚             ) {
2026-10-24T03:20:26.0436249Z  138 โ”‚ โ”‚               yield* Effect.yieldNow;
2026-10-24T03:20:26.0436385Z  139 โ”‚ โ•ฐโ”€โ–ถ           }
2026-10-24T03:20:26.0436513Z  140 โ”‚               expect((yield* monitor.snapshot).onBattery).toBe("true");
2026-10-24T03:20:26.0436569Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0436571Z
2026-10-24T03:20:26.0436841Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0436995Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
2026-10-24T03:20:26.0437050Z  55 โ”‚
2026-10-24T03:20:26.0437116Z  56 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0437188Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0437318Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0437387Z  57 โ”‚     setDecodedSize(null);
2026-10-24T03:20:26.0437467Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0437637Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0437707Z  58 โ”‚   }, [props.sourceKey]);
2026-10-24T03:20:26.0437759Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0438367Z   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-24T03:20:26.0438694Z   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-24T03:20:26.0438697Z
2026-10-24T03:20:26.0438955Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0439110Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
2026-10-24T03:20:26.0439167Z  59 โ”‚
2026-10-24T03:20:26.0439231Z  60 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0439364Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0439525Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0439595Z  61 โ”‚     setFailedUri(null);
2026-10-24T03:20:26.0439670Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0439838Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0439902Z  62 โ”‚   }, [props.uri]);
2026-10-24T03:20:26.0439956Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0440559Z   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-24T03:20:26.0440887Z   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-24T03:20:26.0440893Z
2026-10-24T03:20:26.0441110Z   โš  eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-24T03:20:26.0441262Z    โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
2026-10-24T03:20:26.0441389Z  6 โ”‚ import { parse, SvgAst, type JsxAST } from "react-native-svg";
2026-10-24T03:20:26.0441568Z  7 โ”‚ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
2026-10-24T03:20:26.0441656Z    ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0441807Z    ยท                  โ•ฐโ”€โ”€ 'ActivityIndicator' is imported here
2026-10-24T03:20:26.0441861Z  8 โ”‚
2026-10-24T03:20:26.0441913Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0442019Z   help: Consider removing this import.
2026-10-24T03:20:26.0442026Z
2026-10-24T03:20:26.0442228Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0442382Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
2026-10-24T03:20:26.0442451Z  57 โ”‚     setDecodedSize(null);
2026-10-24T03:20:26.0442546Z  58 โ”‚   }, [props.sourceKey]);
2026-10-24T03:20:26.0442628Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0442785Z     ยท              โ•ฐโ”€โ”€ Unnecessary dependency `props.sourceKey`
2026-10-24T03:20:26.0442838Z  59 โ”‚
2026-10-24T03:20:26.0442892Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0443187Z   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-24T03:20:26.0443568Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0443598Z
2026-10-24T03:20:26.0443801Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0443952Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
2026-10-24T03:20:26.0444019Z  61 โ”‚     setFailedUri(null);
2026-10-24T03:20:26.0444085Z  62 โ”‚   }, [props.uri]);
2026-10-24T03:20:26.0444161Z     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0444304Z     ยท           โ•ฐโ”€โ”€ Unnecessary dependency `props.uri`
2026-10-24T03:20:26.0444356Z  63 โ”‚
2026-10-24T03:20:26.0444409Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0444707Z   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-24T03:20:26.0445022Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0445025Z
2026-10-24T03:20:26.0445282Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0445430Z     โ•ญโ”€[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
2026-10-24T03:20:26.0445593Z  28 โ”‚   const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
2026-10-24T03:20:26.0445658Z  29 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0445728Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0445856Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0445987Z  30 โ”‚     if (snapshot && snapshot !== live) setHeld({ key, snapshot });
2026-10-24T03:20:26.0446098Z     ยท                                        โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0446291Z     ยท                                           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0446363Z  31 โ”‚   }, [key, live, snapshot]);
2026-10-24T03:20:26.0446416Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0447017Z   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-24T03:20:26.0447344Z   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-24T03:20:26.0447348Z
2026-10-24T03:20:26.0447605Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0447742Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5]
2026-10-24T03:20:26.0447802Z  2137 โ”‚   );
2026-10-24T03:20:26.0447871Z  2138 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0447945Z       ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0448077Z       ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0448153Z  2139 โ”‚     setExpandedVideo(null);
2026-10-24T03:20:26.0448235Z       ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0448406Z       ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0448546Z  2140 โ”‚     setExpandedFile(null);
2026-10-24T03:20:26.0448627Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0449228Z   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-24T03:20:26.0449554Z   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-24T03:20:26.0449557Z
2026-10-24T03:20:26.0449788Z   โš  eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
2026-10-24T03:20:26.0449922Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10]
2026-10-24T03:20:26.0450065Z  65 โ”‚ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
2026-10-24T03:20:26.0450208Z  66 โ”‚ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
2026-10-24T03:20:26.0450307Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0450474Z     ยท                     โ•ฐโ”€โ”€ 'isMarkdownFileLinkLabel' is imported here
2026-10-24T03:20:26.0450632Z  67 โ”‚ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
2026-10-24T03:20:26.0450684Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0450785Z   help: Consider removing this import.
2026-10-24T03:20:26.0450788Z
2026-10-24T03:20:26.0450995Z   โš  eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
2026-10-24T03:20:26.0451135Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3]
2026-10-24T03:20:26.0451197Z  91 โ”‚ import {
2026-10-24T03:20:26.0451263Z  92 โ”‚   createContext,
2026-10-24T03:20:26.0451337Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0451476Z     ยท         โ•ฐโ”€โ”€ 'createContext' is imported here
2026-10-24T03:20:26.0451534Z  93 โ”‚   memo,
2026-10-24T03:20:26.0451586Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0451683Z   help: Consider removing this import.
2026-10-24T03:20:26.0451686Z
2026-10-24T03:20:26.0451900Z   โš  eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-24T03:20:26.0452037Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3]
2026-10-24T03:20:26.0452098Z  107 โ”‚ import {
2026-10-24T03:20:26.0452165Z  108 โ”‚   ActivityIndicator,
2026-10-24T03:20:26.0452249Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0452403Z      ยท           โ•ฐโ”€โ”€ 'ActivityIndicator' is imported here
2026-10-24T03:20:26.0452485Z  109 โ”‚   Image,
2026-10-24T03:20:26.0452536Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0452635Z   help: Consider removing this import.
2026-10-24T03:20:26.0452638Z
2026-10-24T03:20:26.0452839Z   โš  eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
2026-10-24T03:20:26.0452973Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3]
2026-10-24T03:20:26.0453034Z  114 โ”‚   Pressable,
2026-10-24T03:20:26.0453097Z  115 โ”‚   ScrollView,
2026-10-24T03:20:26.0453171Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0453305Z      ยท        โ•ฐโ”€โ”€ 'ScrollView' is imported here
2026-10-24T03:20:26.0453366Z  116 โ”‚   StyleSheet,
2026-10-24T03:20:26.0453417Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0453582Z   help: Consider removing this import.
2026-10-24T03:20:26.0453613Z
2026-10-24T03:20:26.0453814Z   โš  eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
2026-10-24T03:20:26.0453948Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11]
2026-10-24T03:20:26.0454009Z  116 โ”‚   StyleSheet,
2026-10-24T03:20:26.0454076Z  117 โ”‚   Text as NativeText,
2026-10-24T03:20:26.0454156Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0454295Z      ยท                โ•ฐโ”€โ”€ 'NativeText' is imported here
2026-10-24T03:20:26.0454362Z  118 โ”‚   type ColorValue,
2026-10-24T03:20:26.0454414Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0454511Z   help: Consider removing this import.
2026-10-24T03:20:26.0454513Z
2026-10-24T03:20:26.0454737Z   โš  eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
2026-10-24T03:20:26.0454875Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10]
2026-10-24T03:20:26.0455016Z  139 โ”‚ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
2026-10-24T03:20:26.0455144Z  140 โ”‚ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
2026-10-24T03:20:26.0455233Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0455389Z      ยท                   โ•ฐโ”€โ”€ 'tryOpenExternalUrl' is imported here
2026-10-24T03:20:26.0455539Z  141 โ”‚ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
2026-10-24T03:20:26.0455590Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0455685Z   help: Consider removing this import.
2026-10-24T03:20:26.0455688Z
2026-10-24T03:20:26.0455917Z   โš  eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
2026-10-24T03:20:26.0456054Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10]
2026-10-24T03:20:26.0456190Z  142 โ”‚ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
2026-10-24T03:20:26.0456316Z  143 โ”‚ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
2026-10-24T03:20:26.0456405Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0456564Z      ยท                   โ•ฐโ”€โ”€ 'faviconUrlForOrigin' is imported here
2026-10-24T03:20:26.0456623Z  144 โ”‚ import {
2026-10-24T03:20:26.0456675Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0456770Z   help: Consider removing this import.
2026-10-24T03:20:26.0456772Z
2026-10-24T03:20:26.0456988Z   โš  eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
2026-10-24T03:20:26.0457126Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10]
2026-10-24T03:20:26.0457279Z  156 โ”‚ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
2026-10-24T03:20:26.0457411Z  157 โ”‚ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
2026-10-24T03:20:26.0457501Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0457652Z      ยท                  โ•ฐโ”€โ”€ 'MediaVideoPlayer' is imported here
2026-10-24T03:20:26.0457794Z  158 โ”‚ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
2026-10-24T03:20:26.0457844Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0457940Z   help: Consider removing this import.
2026-10-24T03:20:26.0457943Z
2026-10-24T03:20:26.0458166Z   โš  eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
2026-10-24T03:20:26.0458374Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3]
2026-10-24T03:20:26.0458491Z  160 โ”‚   attachmentVideoPreviewSource,
2026-10-24T03:20:26.0458564Z  161 โ”‚   mediaVideoPreviewUri,
2026-10-24T03:20:26.0458744Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0458901Z      ยท             โ•ฐโ”€โ”€ 'mediaVideoPreviewUri' is imported here
2026-10-24T03:20:26.0458974Z  162 โ”‚   mediaVideoThumbnailKey,
2026-10-24T03:20:26.0459030Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0459126Z   help: Consider removing this import.
2026-10-24T03:20:26.0459128Z
2026-10-24T03:20:26.0459354Z   โš  eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
2026-10-24T03:20:26.0459485Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3]
2026-10-24T03:20:26.0459562Z  161 โ”‚   mediaVideoPreviewUri,
2026-10-24T03:20:26.0459636Z  162 โ”‚   mediaVideoThumbnailKey,
2026-10-24T03:20:26.0459726Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0459884Z      ยท              โ•ฐโ”€โ”€ 'mediaVideoThumbnailKey' is imported here
2026-10-24T03:20:26.0459965Z  163 โ”‚   type MediaVideoPreviewSource,
2026-10-24T03:20:26.0460019Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0460116Z   help: Consider removing this import.
2026-10-24T03:20:26.0460119Z
2026-10-24T03:20:26.0460334Z   โš  eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
2026-10-24T03:20:26.0460466Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8]
2026-10-24T03:20:26.0460538Z  162 โ”‚   mediaVideoThumbnailKey,
2026-10-24T03:20:26.0460618Z  163 โ”‚   type MediaVideoPreviewSource,
2026-10-24T03:20:26.0460720Z      ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0460888Z      ยท                   โ•ฐโ”€โ”€ 'MediaVideoPreviewSource' is imported here
2026-10-24T03:20:26.0460974Z  164 โ”‚ } from "../../lib/videoPreviewSource";
2026-10-24T03:20:26.0461025Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0461120Z   help: Consider removing this import.
2026-10-24T03:20:26.0461122Z
2026-10-24T03:20:26.0461324Z   โš  eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used.
2026-10-24T03:20:26.0461459Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15]
2026-10-24T03:20:26.0461635Z  170 โ”‚ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection";
2026-10-24T03:20:26.0461775Z  171 โ”‚ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter";
2026-10-24T03:20:26.0461870Z      ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0462023Z      ยท                      โ•ฐโ”€โ”€ 'ReviewDiffTheme' is imported here
2026-10-24T03:20:26.0462084Z  172 โ”‚ import {
2026-10-24T03:20:26.0462136Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0462228Z   help: Consider removing this import.
2026-10-24T03:20:26.0462231Z
2026-10-24T03:20:26.0462461Z   โš  eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
2026-10-24T03:20:26.0462638Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3]
2026-10-24T03:20:26.0462697Z  185 โ”‚ import {
2026-10-24T03:20:26.0462771Z  186 โ”‚   resolveMarkdownFontSizes,
2026-10-24T03:20:26.0462863Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0463026Z      ยท               โ•ฐโ”€โ”€ 'resolveMarkdownFontSizes' is imported here
2026-10-24T03:20:26.0463204Z  187 โ”‚   resolveNativeMarkdownTypography,
2026-10-24T03:20:26.0463294Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0463390Z   help: Consider removing this import.
2026-10-24T03:20:26.0463392Z
2026-10-24T03:20:26.0463618Z   โš  eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used.
2026-10-24T03:20:26.0463753Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10]
2026-10-24T03:20:26.0463886Z  190 โ”‚ import { PierreEntryIcon } from "../../components/PierreEntryIcon";
2026-10-24T03:20:26.0464024Z  191 โ”‚ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons";
2026-10-24T03:20:26.0464120Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0464284Z      ยท                     โ•ฐโ”€โ”€ 'markdownLinkIconSource' is imported here
2026-10-24T03:20:26.0464341Z  192 โ”‚ import {
2026-10-24T03:20:26.0464399Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0464498Z   help: Consider removing this import.
2026-10-24T03:20:26.0464500Z
2026-10-24T03:20:26.0464764Z   โš  eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
2026-10-24T03:20:26.0464898Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3]
2026-10-24T03:20:26.0464977Z  193 โ”‚   normalizeNativeMarkdownUrl,
2026-10-24T03:20:26.0465074Z  194 โ”‚   resolveMarkdownInlineCodePresentation,
2026-10-24T03:20:26.0465186Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0465383Z      ยท                     โ•ฐโ”€โ”€ 'resolveMarkdownInlineCodePresentation' is imported here
2026-10-24T03:20:26.0465457Z  195 โ”‚   resolveMarkdownLinkIcon,
2026-10-24T03:20:26.0465510Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0465612Z   help: Consider removing this import.
2026-10-24T03:20:26.0465617Z
2026-10-24T03:20:26.0465843Z   โš  eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used.
2026-10-24T03:20:26.0465976Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3]
2026-10-24T03:20:26.0466071Z  194 โ”‚   resolveMarkdownInlineCodePresentation,
2026-10-24T03:20:26.0466146Z  195 โ”‚   resolveMarkdownLinkIcon,
2026-10-24T03:20:26.0466235Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0466397Z      ยท              โ•ฐโ”€โ”€ 'resolveMarkdownLinkIcon' is imported here
2026-10-24T03:20:26.0466484Z  196 โ”‚   resolveMarkdownLinkPresentation,
2026-10-24T03:20:26.0466535Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0466631Z   help: Consider removing this import.
2026-10-24T03:20:26.0466635Z
2026-10-24T03:20:26.0466936Z   โš  eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used.
2026-10-24T03:20:26.0467100Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10]
2026-10-24T03:20:26.0467204Z  233 โ”‚ import { ThreadMcpApp } from "./McpAppWebView";
2026-10-24T03:20:26.0467352Z  234 โ”‚ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState";
2026-10-24T03:20:26.0467452Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0467624Z      ยท                      โ•ฐโ”€โ”€ 'useMarkdownCodeHighlight' is imported here
2026-10-24T03:20:26.0467686Z  235 โ”‚ import {
2026-10-24T03:20:26.0467741Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0467838Z   help: Consider removing this import.
2026-10-24T03:20:26.0467840Z
2026-10-24T03:20:26.0468063Z   โš  eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
2026-10-24T03:20:26.0468203Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3]
2026-10-24T03:20:26.0468270Z  237 โ”‚   useAssetUrl,
2026-10-24T03:20:26.0468338Z  238 โ”‚   useAssetUrlState,
2026-10-24T03:20:26.0468423Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0468573Z      ยท           โ•ฐโ”€โ”€ 'useAssetUrlState' is imported here
2026-10-24T03:20:26.0468647Z  239 โ”‚   useRefreshAssetUrl,
2026-10-24T03:20:26.0468699Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0468798Z   help: Consider removing this import.
2026-10-24T03:20:26.0468801Z
2026-10-24T03:20:26.0469007Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0469149Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7]
2026-10-24T03:20:26.0469230Z  2140 โ”‚     setExpandedFile(null);
2026-10-24T03:20:26.0469397Z  2141 โ”‚   }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
2026-10-24T03:20:26.0469630Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0469931Z       ยท                โ”‚                  โ”‚                       โ•ฐโ”€โ”€ Unnecessary dependency `props.contentPresentation.kind`
2026-10-24T03:20:26.0470133Z       ยท                โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `props.threadId`
2026-10-24T03:20:26.0470306Z       ยท                โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
2026-10-24T03:20:26.0470460Z  2142 โ”‚   const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
2026-10-24T03:20:26.0470520Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0470822Z   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-24T03:20:26.0471140Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0471143Z
2026-10-24T03:20:26.0471352Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0471494Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7]
2026-10-24T03:20:26.0471597Z  2608 โ”‚     reportHeaderMaterialVisibility(false);
2026-10-24T03:20:26.0471714Z  2609 โ”‚   }, [feedThreadKey, reportHeaderMaterialVisibility]);
2026-10-24T03:20:26.0471873Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0472065Z       ยท             โ•ฐโ”€โ”€ Unnecessary dependency `feedThreadKey`
2026-10-24T03:20:26.0472125Z  2610 โ”‚
2026-10-24T03:20:26.0472180Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0472510Z   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-24T03:20:26.0472829Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0472831Z
2026-10-24T03:20:26.0473036Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0473176Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7]
2026-10-24T03:20:26.0473238Z  2624 โ”‚     }
2026-10-24T03:20:26.0473376Z  2625 โ”‚   }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
2026-10-24T03:20:26.0473464Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0473619Z       ยท             โ•ฐโ”€โ”€ Unnecessary dependency `listMountKey`
2026-10-24T03:20:26.0473677Z  2626 โ”‚
2026-10-24T03:20:26.0473735Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0474059Z   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-24T03:20:26.0474437Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0474468Z
2026-10-24T03:20:26.0474692Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0474867Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7]
2026-10-24T03:20:26.0474966Z  2781 โ”‚     }
2026-10-24T03:20:26.0475191Z  2782 โ”‚   }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
2026-10-24T03:20:26.0475417Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0475709Z       ยท              โ”‚                  โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `expandedWorkRows`
2026-10-24T03:20:26.0475951Z       ยท              โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `expandedWorkGroups`
2026-10-24T03:20:26.0476145Z       ยท              โ•ฐโ”€โ”€ Unnecessary dependency `expandedTurnIds`
2026-10-24T03:20:26.0476361Z  2783 โ”‚
2026-10-24T03:20:26.0476429Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0476758Z   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-24T03:20:26.0477107Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0477110Z
2026-10-24T03:20:26.0477332Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T03:20:26.0477492Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9]
2026-10-24T03:20:26.0477585Z  612 โ”‚       };
2026-10-24T03:20:26.0477741Z  613 โ”‚     }, [props.environmentId, attachment.id, httpBaseUrl]),
2026-10-24T03:20:26.0478030Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0478358Z      ยท                  โ”‚                 โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `httpBaseUrl`
2026-10-24T03:20:26.0478577Z      ยท                  โ”‚                 โ•ฐโ”€โ”€ Unnecessary dependency `attachment.id`
2026-10-24T03:20:26.0478776Z      ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
2026-10-24T03:20:26.0478866Z  614 โ”‚   );
2026-10-24T03:20:26.0478957Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0479300Z   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-24T03:20:26.0479660Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0479666Z
2026-10-24T03:20:26.0479994Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T03:20:26.0480140Z    โ•ญโ”€[apps/mobile/src/lib/useHoverGesture.ts:8:15]
2026-10-24T03:20:26.0480273Z  7 โ”‚     () =>
2026-10-24T03:20:26.0480357Z  8 โ”‚       Gesture.Hover()
2026-10-24T03:20:26.0480469Z    ยท               โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T03:20:26.0480638Z    ยท                 โ•ฐโ”€โ”€ `Hover` may be a component
2026-10-24T03:20:26.0480758Z  9 โ”‚         .manualActivation(true)
2026-10-24T03:20:26.0480839Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0481162Z   help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
2026-10-24T03:20:26.0481649Z   note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T03:20:26.0481652Z
2026-10-24T03:20:26.0481881Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T03:20:26.0482108Z    โ•ญโ”€[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
2026-10-24T03:20:26.0482200Z  3 โ”‚   AuthProvidersManageScope,
2026-10-24T03:20:26.0482306Z  4 โ”‚   type AuthSessionState,
2026-10-24T03:20:26.0482423Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0482647Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T03:20:26.0482809Z  5 โ”‚   type EnvironmentId,
2026-10-24T03:20:26.0483030Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0483169Z   help: Consider removing this import.
2026-10-24T03:20:26.0483172Z
2026-10-24T03:20:26.0483459Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0483641Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5]
2026-10-24T03:20:26.0483742Z  510 โ”‚   }, []);
2026-10-24T03:20:26.0483840Z  511 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0483954Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0484094Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0484238Z  512 โ”‚     setKeyboardStateSuspect(false);
2026-10-24T03:20:26.0484365Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0484582Z      ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0484703Z  513 โ”‚   }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-24T03:20:26.0484792Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0485435Z   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-24T03:20:26.0485797Z   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-24T03:20:26.0485800Z
2026-10-24T03:20:26.0486097Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0486260Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7]
2026-10-24T03:20:26.0486471Z  869 โ”‚   const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
2026-10-24T03:20:26.0486664Z  870 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0486773Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0486919Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0487118Z  871 โ”‚     if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
2026-10-24T03:20:26.0487274Z  872 โ”‚       setLastKnownKeyboardHeight(liveKeyboardHeight);
2026-10-24T03:20:26.0487411Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0487605Z      ยท                    โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0487694Z  873 โ”‚     }
2026-10-24T03:20:26.0487803Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0488445Z   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-24T03:20:26.0488802Z   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-24T03:20:26.0488804Z
2026-10-24T03:20:26.0489089Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0489345Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5]
2026-10-24T03:20:26.0489479Z  1117 โ”‚
2026-10-24T03:20:26.0489578Z  1118 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0489684Z       ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0489825Z       ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0490055Z  1119 โ”‚     setAnchorMessageId(null);
2026-10-24T03:20:26.0490176Z       ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0490383Z       ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0490481Z  1120 โ”‚     setSubmittedMessageId(null);
2026-10-24T03:20:26.0490579Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0491230Z   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-24T03:20:26.0491588Z   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-24T03:20:26.0491591Z
2026-10-24T03:20:26.0491829Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0491990Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7]
2026-10-24T03:20:26.0492136Z  512 โ”‚     setKeyboardStateSuspect(false);
2026-10-24T03:20:26.0492269Z  513 โ”‚   }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-24T03:20:26.0492446Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0492721Z      ยท               โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `liveKeyboardHeight`
2026-10-24T03:20:26.0492929Z      ยท               โ•ฐโ”€โ”€ Unnecessary dependency `isKeyboardVisible`
2026-10-24T03:20:26.0493097Z  514 โ”‚   const handleOwnedInputFocusChange = (focused: boolean) => {
2026-10-24T03:20:26.0493181Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0493498Z   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-24T03:20:26.0493852Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0493854Z
2026-10-24T03:20:26.0494215Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0494409Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7]
2026-10-24T03:20:26.0494534Z  1066 โ”‚     userInputInsetProgress.set(1);
2026-10-24T03:20:26.0494714Z  1067 โ”‚   }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
2026-10-24T03:20:26.0494851Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0495073Z       ยท                   โ•ฐโ”€โ”€ Unnecessary dependency `activeUserInputRequestId`
2026-10-24T03:20:26.0495219Z  1068 โ”‚   const showContent = props.showContent ?? true;
2026-10-24T03:20:26.0495286Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0495611Z   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-24T03:20:26.0496051Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0496089Z
2026-10-24T03:20:26.0496330Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0496521Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15]
2026-10-24T03:20:26.0496607Z  1124 โ”‚     freeze.set(false);
2026-10-24T03:20:26.0496733Z  1125 โ”‚   }, [freeze, selectedThreadKey]);
2026-10-24T03:20:26.0496877Z       ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0497077Z       ยท                       โ•ฐโ”€โ”€ Unnecessary dependency `selectedThreadKey`
2026-10-24T03:20:26.0497255Z  1126 โ”‚
2026-10-24T03:20:26.0497336Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0497701Z   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-24T03:20:26.0498052Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0498055Z
2026-10-24T03:20:26.0498248Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0498416Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5]
2026-10-24T03:20:26.0498565Z  950 โ”‚   const composerPopoverHeight = useSharedValue(0);
2026-10-24T03:20:26.0498834Z  951 โ”‚   const floatingControlCoverage = useSharedValue(
2026-10-24T03:20:26.0498969Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0499146Z      ยท                    โ•ฐโ”€โ”€ `floatingControlCoverage` originates here
2026-10-24T03:20:26.0499305Z  952 โ”‚     showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-24T03:20:26.0499422Z  953 โ”‚   );
2026-10-24T03:20:26.0499521Z  954 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0499645Z  955 โ”‚     floatingControlCoverage.value = withTiming(
2026-10-24T03:20:26.0499770Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0499978Z      ยท                โ•ฐโ”€โ”€ `floatingControlCoverage` cannot be modified
2026-10-24T03:20:26.0500145Z  956 โ”‚       showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-24T03:20:26.0500213Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0500613Z   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-24T03:20:26.0500958Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0500964Z
2026-10-24T03:20:26.0501172Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0501356Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7]
2026-10-24T03:20:26.0501558Z  963 โ”‚   const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
2026-10-24T03:20:26.0501720Z  964 โ”‚   const combinedContentInsetEndAdjustment = useSharedValue(
2026-10-24T03:20:26.0501871Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0502100Z      ยท                         โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` originates here
2026-10-24T03:20:26.0502244Z  965 โ”‚     Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
2026-10-24T03:20:26.0502334Z  966 โ”‚   );
2026-10-24T03:20:26.0502562Z  967 โ”‚   useAnimatedReaction(
2026-10-24T03:20:26.0502719Z  968 โ”‚     () =>
2026-10-24T03:20:26.0502828Z  969 โ”‚       contentInsetEndAdjustment.value +
2026-10-24T03:20:26.0502956Z  970 โ”‚       floatingControlCoverage.value +
2026-10-24T03:20:26.0503187Z  971 โ”‚       (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
2026-10-24T03:20:26.0503294Z  972 โ”‚     (value) => {
2026-10-24T03:20:26.0503433Z  973 โ”‚       combinedContentInsetEndAdjustment.value = value;
2026-10-24T03:20:26.0503682Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0503911Z      ยท                       โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` cannot be modified
2026-10-24T03:20:26.0503993Z  974 โ”‚     },
2026-10-24T03:20:26.0504076Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0504487Z   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-24T03:20:26.0504836Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0504839Z
2026-10-24T03:20:26.0505088Z   โš  eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
2026-10-24T03:20:26.0505263Z     โ•ญโ”€[apps/server/src/scheduledTasks/Schedule.ts:79:10]
2026-10-24T03:20:26.0505342Z  78 โ”‚
2026-10-24T03:20:26.0505519Z  79 โ”‚ function describeSchedule(schedule: ScheduledTaskSchedule): string {
2026-10-24T03:20:26.0505639Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0505815Z     ยท                  โ•ฐโ”€โ”€ 'describeSchedule' is declared here
2026-10-24T03:20:26.0505959Z  80 โ”‚   if (schedule.type === "webhook") return "On webhook";
2026-10-24T03:20:26.0506063Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0506201Z   help: Consider removing this declaration.
2026-10-24T03:20:26.0506204Z
2026-10-24T03:20:26.0506453Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T03:20:26.0506669Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7]
2026-10-24T03:20:26.0506884Z  248 โ”‚       mountedRef.current = false;
2026-10-24T03:20:26.0506996Z  249 โ”‚       flow.setBranchQuery("");
2026-10-24T03:20:26.0507100Z      ยท       โ”€โ”€โ”ฌโ”€
2026-10-24T03:20:26.0507253Z      ยท         โ•ฐโ”€โ”€ Missing dependency `flow`
2026-10-24T03:20:26.0507346Z  250 โ”‚     };
2026-10-24T03:20:26.0507467Z  251 โ”‚   }, [flow.setBranchQuery]);
2026-10-24T03:20:26.0507588Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0507904Z      ยท                โ•ฐโ”€โ”€ Overly precise dependency `flow.setBranchQuery`, use `flow` instead
2026-10-24T03:20:26.0508005Z  252 โ”‚
2026-10-24T03:20:26.0508114Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0508573Z   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-24T03:20:26.0508924Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0508927Z
2026-10-24T03:20:26.0509429Z   โš  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-24T03:20:26.0509653Z      โ•ญโ”€[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
2026-10-24T03:20:26.0509769Z  520 โ”‚                 })).delivery;
2026-10-24T03:20:26.0510005Z  521 โ”‚ โ•ญโ”€โ–ถ             while (delivery.outcome === "accepted") {
2026-10-24T03:20:26.0510160Z  522 โ”‚ โ”‚                 yield* Effect.yieldNow;
2026-10-24T03:20:26.0510408Z  523 โ”‚ โ”‚                 delivery = (yield* service.getWebhookDelivery({
2026-10-24T03:20:26.0510569Z  524 โ”‚ โ”‚                   id: task.id,
2026-10-24T03:20:26.0510721Z  525 โ”‚ โ”‚                   deliveryId: deliveryId!,
2026-10-24T03:20:26.0510863Z  526 โ”‚ โ”‚                 })).delivery;
2026-10-24T03:20:26.0511025Z  527 โ”‚ โ•ฐโ”€โ–ถ             }
2026-10-24T03:20:26.0511183Z  528 โ”‚                 assert.equal(delivery.outcome, "dispatch_failed");
2026-10-24T03:20:26.0511279Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0511281Z
2026-10-24T03:20:26.0511581Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0511779Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7]
2026-10-24T03:20:26.0511843Z  211 โ”‚   };
2026-10-24T03:20:26.0511971Z  212 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0512079Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0512245Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0512442Z  213 โ”‚     const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null;
2026-10-24T03:20:26.0512585Z  214 โ”‚     if (inserted) {
2026-10-24T03:20:26.0512703Z  215 โ”‚       setSelection((current) =>
2026-10-24T03:20:26.0512822Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0513009Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0513299Z  216 โ”‚         current.start === inserted.start && current.end === inserted.end ? current : inserted,
2026-10-24T03:20:26.0513402Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0514044Z   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-24T03:20:26.0514480Z   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-24T03:20:26.0514514Z
2026-10-24T03:20:26.0514790Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0514997Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7]
2026-10-24T03:20:26.0515115Z  284 โ”‚   }, [hasWorkspaceSnapshot]);
2026-10-24T03:20:26.0515216Z  285 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0515304Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0515461Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0515670Z  286 โ”‚     if (!environmentId || !projectCwd || !selectedProviderInstanceId) return;
2026-10-24T03:20:26.0515859Z  287 โ”‚     const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`;
2026-10-24T03:20:26.0515947Z  288 โ”‚     const now = Date.now();
2026-10-24T03:20:26.0516095Z  289 โ”‚     const lastRequest = workspaceRefreshKeyRef.current;
2026-10-24T03:20:26.0516193Z  290 โ”‚     if (
2026-10-24T03:20:26.0516311Z  291 โ”‚       lastRequest?.key === key &&
2026-10-24T03:20:26.0516464Z  292 โ”‚       now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS
2026-10-24T03:20:26.0516652Z  293 โ”‚     )
2026-10-24T03:20:26.0516745Z  294 โ”‚       return;
2026-10-24T03:20:26.0516980Z  295 โ”‚     if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) {
2026-10-24T03:20:26.0517083Z  296 โ”‚       setWorkspaceRefreshRetry(null);
2026-10-24T03:20:26.0517215Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0517436Z      ยท                   โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0517537Z  297 โ”‚       return;
2026-10-24T03:20:26.0517632Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0518246Z   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-24T03:20:26.0518606Z   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-24T03:20:26.0518609Z
2026-10-24T03:20:26.0518838Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0519056Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5]
2026-10-24T03:20:26.0519148Z  325 โ”‚   }, [
2026-10-24T03:20:26.0519232Z  326 โ”‚     draftMessage,
2026-10-24T03:20:26.0519347Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0519529Z      ยท           โ•ฐโ”€โ”€ Unnecessary dependency `draftMessage`
2026-10-24T03:20:26.0519636Z  327 โ”‚     environmentId,
2026-10-24T03:20:26.0519806Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0520137Z   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-24T03:20:26.0520475Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0520478Z
2026-10-24T03:20:26.0520899Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0521131Z     โ•ญโ”€[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5]
2026-10-24T03:20:26.0521220Z  58 โ”‚
2026-10-24T03:20:26.0521315Z  59 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0525423Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0525589Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0525673Z  60 โ”‚     setMountedModes((current) => {
2026-10-24T03:20:26.0525755Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0525928Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0526014Z  61 โ”‚       if (current.has(props.mode)) {
2026-10-24T03:20:26.0526069Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0526682Z   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-24T03:20:26.0527014Z   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-24T03:20:26.0527017Z
2026-10-24T03:20:26.0527283Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0527449Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T03:20:26.0527516Z  259 โ”‚     .join("|");
2026-10-24T03:20:26.0527582Z  260 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0527657Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0527797Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0527862Z  261 โ”‚     stop();
2026-10-24T03:20:26.0527932Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-24T03:20:26.0528099Z      ยท       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0528167Z  262 โ”‚   }, [orderVersion]);
2026-10-24T03:20:26.0528221Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0528822Z   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-24T03:20:26.0529153Z   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-24T03:20:26.0529158Z
2026-10-24T03:20:26.0529379Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T03:20:26.0529543Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T03:20:26.0529610Z  260 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0529670Z  261 โ”‚     stop();
2026-10-24T03:20:26.0529739Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-24T03:20:26.0529869Z      ยท       โ•ฐโ”€โ”€ Missing dependency `stop`
2026-10-24T03:20:26.0529935Z  262 โ”‚   }, [orderVersion]);
2026-10-24T03:20:26.0530015Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0530167Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `orderVersion`
2026-10-24T03:20:26.0530230Z  263 โ”‚   useEffect(
2026-10-24T03:20:26.0530384Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0530846Z   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-24T03:20:26.0531161Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0531164Z
2026-10-24T03:20:26.0531313Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0531474Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
2026-10-24T03:20:26.0531554Z  95 โ”‚   const latest = useRef(props);
2026-10-24T03:20:26.0531623Z  96 โ”‚   latest.current = props;
2026-10-24T03:20:26.0531738Z     ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0531924Z     ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T03:20:26.0532043Z     ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-24T03:20:26.0532114Z  97 โ”‚   const gesture = useMemo(
2026-10-24T03:20:26.0532166Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0532664Z   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-24T03:20:26.0532960Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0532963Z
2026-10-24T03:20:26.0533116Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0533283Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
2026-10-24T03:20:26.0533349Z  103 โ”‚         .runOnJS(true)
2026-10-24T03:20:26.0533453Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T03:20:26.0533572Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0533781Z      ยท                                 โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T03:20:26.0533919Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T03:20:26.0533972Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0534449Z   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-24T03:20:26.0534743Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0534745Z
2026-10-24T03:20:26.0534892Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0535055Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
2026-10-24T03:20:26.0535158Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T03:20:26.0535290Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T03:20:26.0535436Z      ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0535730Z      ยท                                             โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T03:20:26.0535889Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T03:20:26.0535943Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0536412Z   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-24T03:20:26.0536708Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0536711Z
2026-10-24T03:20:26.0536857Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0537024Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
2026-10-24T03:20:26.0537156Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T03:20:26.0537280Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T03:20:26.0537426Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0537634Z      ยท                                          โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T03:20:26.0537760Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T03:20:26.0537811Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0538278Z   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-24T03:20:26.0538578Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0538583Z
2026-10-24T03:20:26.0538855Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0539018Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
2026-10-24T03:20:26.0539142Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T03:20:26.0539265Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T03:20:26.0539409Z      ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0539720Z      ยท                                            โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T03:20:26.0539828Z  108 โ”‚     [props.disabled],
2026-10-24T03:20:26.0539882Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0540350Z   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-24T03:20:26.0540643Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0540646Z
2026-10-24T03:20:26.0540793Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0540955Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
2026-10-24T03:20:26.0541073Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-24T03:20:26.0541185Z  249 โ”‚   latest.current = { rows, planners, moveThread };
2026-10-24T03:20:26.0541293Z      ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0541476Z      ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T03:20:26.0541595Z      ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-24T03:20:26.0541654Z  250 โ”‚
2026-10-24T03:20:26.0541708Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0542172Z   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-24T03:20:26.0542503Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0542508Z
2026-10-24T03:20:26.0542656Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0542818Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
2026-10-24T03:20:26.0542937Z  246 โ”‚   const [preview, setPreview] = useState<Drag | null>(null);
2026-10-24T03:20:26.0543055Z  247 โ”‚   const translateY = useRef(new Animated.Value(0)).current;
2026-10-24T03:20:26.0543183Z      ยท                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0543352Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0543464Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-24T03:20:26.0543516Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0543990Z   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-24T03:20:26.0544286Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0544288Z
2026-10-24T03:20:26.0544460Z   โš  react(purity): Cannot call impure function during render
2026-10-24T03:20:26.0544621Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
2026-10-24T03:20:26.0544687Z  323 โ”‚     update(0);
2026-10-24T03:20:26.0544772Z  324 โ”‚     let last = performance.now();
2026-10-24T03:20:26.0544870Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0545082Z      ยท                        โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T03:20:26.0545183Z  325 โ”‚     const tick = () => {
2026-10-24T03:20:26.0545237Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0545541Z   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-24T03:20:26.0545843Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T03:20:26.0545846Z
2026-10-24T03:20:26.0546038Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T03:20:26.0546199Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
2026-10-24T03:20:26.0546260Z   98 โ”‚     () =>
2026-10-24T03:20:26.0546333Z   99 โ”‚       Gesture.Pan()
2026-10-24T03:20:26.0546411Z      ยท               โ”€โ”ฌโ”€
2026-10-24T03:20:26.0546544Z      ยท                โ•ฐโ”€โ”€ `Pan` may be a component
2026-10-24T03:20:26.0546626Z  100 โ”‚         .enabled(!props.disabled)
2026-10-24T03:20:26.0546679Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0546956Z   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-24T03:20:26.0547405Z   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-24T03:20:26.0547408Z
2026-10-24T03:20:26.0547600Z   โš  react(memo-dependencies): Found missing memoization dependencies
2026-10-24T03:20:26.0547767Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
2026-10-24T03:20:26.0547838Z  103 โ”‚         .runOnJS(true)
2026-10-24T03:20:26.0547938Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T03:20:26.0548028Z      ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T03:20:26.0548465Z      ยท                           โ•ฐโ”€โ”€ 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-24T03:20:26.0548599Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T03:20:26.0548723Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T03:20:26.0548848Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T03:20:26.0548923Z  108 โ”‚     [props.disabled],
2026-10-24T03:20:26.0549009Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0549199Z      ยท             โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T03:20:26.0549256Z  109 โ”‚   );
2026-10-24T03:20:26.0549308Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0549516Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T03:20:26.0549828Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0549831Z
2026-10-24T03:20:26.0549989Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0550228Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:111:5]
2026-10-24T03:20:26.0550320Z  107 โ”‚   );
2026-10-24T03:20:26.0550475Z  108 โ”‚   const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0);
2026-10-24T03:20:26.0550566Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0550721Z      ยท                  โ•ฐโ”€โ”€ `separationProgress` originates here
2026-10-24T03:20:26.0550776Z  109 โ”‚
2026-10-24T03:20:26.0550841Z  110 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0551017Z  111 โ”‚     separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING);
2026-10-24T03:20:26.0551103Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0551256Z      ยท              โ•ฐโ”€โ”€ `separationProgress` cannot be modified
2026-10-24T03:20:26.0551369Z  112 โ”‚   }, [props.showScrollToEnd, separationProgress]);
2026-10-24T03:20:26.0551422Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0551697Z   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-24T03:20:26.0552010Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0552012Z
2026-10-24T03:20:26.0552169Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0552334Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-24T03:20:26.0552448Z  128 โ”‚   // and repeatedly retargets the animation as it grows.
2026-10-24T03:20:26.0552596Z  129 โ”‚   const capsuleWidth = useSharedValue<number | null>(null);
2026-10-24T03:20:26.0552679Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0552821Z      ยท               โ•ฐโ”€โ”€ `capsuleWidth` originates here
2026-10-24T03:20:26.0552937Z  130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
2026-10-24T03:20:26.0553055Z  131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-24T03:20:26.0553163Z  132 โ”‚     const width = event.nativeEvent.layout.width;
2026-10-24T03:20:26.0553260Z  133 โ”‚     if (width === measuredWidthRef.current) {
2026-10-24T03:20:26.0553324Z  134 โ”‚       return;
2026-10-24T03:20:26.0553380Z  135 โ”‚     }
2026-10-24T03:20:26.0553489Z  136 โ”‚     const first = measuredWidthRef.current === null;
2026-10-24T03:20:26.0553576Z  137 โ”‚     measuredWidthRef.current = width;
2026-10-24T03:20:26.0553721Z  138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-24T03:20:26.0553801Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0553948Z      ยท           โ•ฐโ”€โ”€ `capsuleWidth` cannot be modified
2026-10-24T03:20:26.0554005Z  139 โ”‚   };
2026-10-24T03:20:26.0554058Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0554325Z   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-24T03:20:26.0554632Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0554635Z
2026-10-24T03:20:26.0554792Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0554958Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-24T03:20:26.0555070Z  128 โ”‚   // and repeatedly retargets the animation as it grows.
2026-10-24T03:20:26.0555261Z  129 โ”‚   const capsuleWidth = useSharedValue<number | null>(null);
2026-10-24T03:20:26.0555374Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0555513Z      ยท               โ•ฐโ”€โ”€ `capsuleWidth` originates here
2026-10-24T03:20:26.0555624Z  130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
2026-10-24T03:20:26.0555741Z  131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-24T03:20:26.0555845Z  132 โ”‚     const width = event.nativeEvent.layout.width;
2026-10-24T03:20:26.0555943Z  133 โ”‚     if (width === measuredWidthRef.current) {
2026-10-24T03:20:26.0556004Z  134 โ”‚       return;
2026-10-24T03:20:26.0556059Z  135 โ”‚     }
2026-10-24T03:20:26.0556164Z  136 โ”‚     const first = measuredWidthRef.current === null;
2026-10-24T03:20:26.0556253Z  137 โ”‚     measuredWidthRef.current = width;
2026-10-24T03:20:26.0556396Z  138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-24T03:20:26.0556455Z  139 โ”‚   };
2026-10-24T03:20:26.0556547Z  140 โ”‚   const hasStatus = props.status !== null;
2026-10-24T03:20:26.0556681Z  141 โ”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-24T03:20:26.0556748Z  142 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0556816Z  143 โ”‚     if (!hasStatus) {
2026-10-24T03:20:26.0556903Z  144 โ”‚       measuredWidthRef.current = null;
2026-10-24T03:20:26.0556983Z  145 โ”‚       capsuleWidth.value = null;
2026-10-24T03:20:26.0557062Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0557203Z      ยท             โ•ฐโ”€โ”€ `capsuleWidth` cannot be modified
2026-10-24T03:20:26.0557258Z  146 โ”‚     }
2026-10-24T03:20:26.0557311Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0557574Z   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-24T03:20:26.0557887Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0557892Z
2026-10-24T03:20:26.0558096Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T03:20:26.0558264Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-24T03:20:26.0558401Z  141 โ”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-24T03:20:26.0558467Z  142 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0558545Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0558768Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-24T03:20:26.0558835Z  143 โ”‚     if (!hasStatus) {
2026-10-24T03:20:26.0558928Z  144 โ”‚       measuredWidthRef.current = null;
2026-10-24T03:20:26.0559008Z  145 โ”‚       capsuleWidth.value = null;
2026-10-24T03:20:26.0559086Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0559222Z      ยท             โ•ฐโ”€โ”€ This modifies `capsuleWidth`
2026-10-24T03:20:26.0559278Z  146 โ”‚     }
2026-10-24T03:20:26.0559328Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0559675Z   help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T03:20:26.0559982Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0559985Z
2026-10-24T03:20:26.0560259Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T03:20:26.0560459Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-24T03:20:26.0560571Z  130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
2026-10-24T03:20:26.0560690Z  131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-24T03:20:26.0560816Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0561059Z      ยท                                            โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-24T03:20:26.0561164Z  132 โ”‚     const width = event.nativeEvent.layout.width;
2026-10-24T03:20:26.0561264Z  133 โ”‚     if (width === measuredWidthRef.current) {
2026-10-24T03:20:26.0561325Z  134 โ”‚       return;
2026-10-24T03:20:26.0561381Z  135 โ”‚     }
2026-10-24T03:20:26.0561493Z  136 โ”‚     const first = measuredWidthRef.current === null;
2026-10-24T03:20:26.0561582Z  137 โ”‚     measuredWidthRef.current = width;
2026-10-24T03:20:26.0561725Z  138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-24T03:20:26.0561803Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0561937Z      ยท           โ•ฐโ”€โ”€ This modifies `capsuleWidth`
2026-10-24T03:20:26.0561994Z  139 โ”‚   };
2026-10-24T03:20:26.0562046Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0562387Z   help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T03:20:26.0562726Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0562735Z
2026-10-24T03:20:26.0562999Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0563195Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
2026-10-24T03:20:26.0563248Z  104 โ”‚
2026-10-24T03:20:26.0563314Z  105 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0563386Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0563516Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0563597Z  106 โ”‚     clearReviewCommentTarget();
2026-10-24T03:20:26.0563696Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-24T03:20:26.0563804Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0564055Z      ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0564163Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-24T03:20:26.0564217Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0564827Z   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-24T03:20:26.0565154Z   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-24T03:20:26.0565157Z
2026-10-24T03:20:26.0565416Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0565609Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
2026-10-24T03:20:26.0565665Z  109 โ”‚
2026-10-24T03:20:26.0565728Z  110 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0565802Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0565932Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0566022Z  111 โ”‚     if (activeCommentTarget === null) {
2026-10-24T03:20:26.0566122Z  112 โ”‚       setPendingNativeCommentSelection(null);
2026-10-24T03:20:26.0566232Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0566411Z      ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0566469Z  113 โ”‚     }
2026-10-24T03:20:26.0566521Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0567127Z   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-24T03:20:26.0567456Z   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-24T03:20:26.0567458Z
2026-10-24T03:20:26.0567661Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0567849Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
2026-10-24T03:20:26.0567946Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-24T03:20:26.0568020Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-24T03:20:26.0568116Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0568280Z      ยท                โ•ฐโ”€โ”€ Unnecessary dependency `selectedSection?.id`
2026-10-24T03:20:26.0568332Z  109 โ”‚
2026-10-24T03:20:26.0568385Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0568680Z   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-24T03:20:26.0568993Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0568996Z
2026-10-24T03:20:26.0569194Z   โš  eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used.
2026-10-24T03:20:26.0569337Z    โ•ญโ”€[packages/client-runtime/src/state/sharedSettings.ts:2:3]
2026-10-24T03:20:26.0569470Z  1 โ”‚ import type {
2026-10-24T03:20:26.0569666Z  2 โ”‚   EnvironmentId,
2026-10-24T03:20:26.0569741Z    ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0569880Z    ยท         โ•ฐโ”€โ”€ 'EnvironmentId' is imported here
2026-10-24T03:20:26.0569967Z  3 โ”‚   ExecutionEnvironmentCapabilities,
2026-10-24T03:20:26.0570019Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0570117Z   help: Consider removing this import.
2026-10-24T03:20:26.0570120Z
2026-10-24T03:20:26.0570325Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T03:20:26.0570460Z    โ•ญโ”€[packages/client-runtime/src/state/usageAccess.ts:3:8]
2026-10-24T03:20:26.0570533Z  2 โ”‚   AuthDiagnosticsReadScope,
2026-10-24T03:20:26.0570601Z  3 โ”‚   type AuthSessionState,
2026-10-24T03:20:26.0570686Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0570841Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T03:20:26.0570911Z  4 โ”‚   sessionGrantsScope,
2026-10-24T03:20:26.0570961Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0571060Z   help: Consider removing this import.
2026-10-24T03:20:26.0571063Z
2026-10-24T03:20:26.0571323Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0571493Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7]
2026-10-24T03:20:26.0571546Z  100 โ”‚
2026-10-24T03:20:26.0571612Z  101 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0571685Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0571816Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0571924Z  102 โ”‚     if (!target || selectedLines.length === 0) {
2026-10-24T03:20:26.0572011Z  103 โ”‚       setHighlightedLinesById({});
2026-10-24T03:20:26.0572105Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0572281Z      ยท                  โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0572343Z  104 โ”‚       return;
2026-10-24T03:20:26.0572395Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0573029Z   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-24T03:20:26.0573359Z   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-24T03:20:26.0573365Z
2026-10-24T03:20:26.0573563Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T03:20:26.0573714Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
2026-10-24T03:20:26.0573824Z  222 โ”‚               ? snippetTokens.map((line, lineIndex) => (
2026-10-24T03:20:26.0573919Z  223 โ”‚                   <NativeText key={lineIndex}>
2026-10-24T03:20:26.0574028Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0574122Z  224 โ”‚                     {lineIndex > 0 ? "\n" : ""}
2026-10-24T03:20:26.0574174Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0574323Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T03:20:26.0574326Z
2026-10-24T03:20:26.0574602Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T03:20:26.0574780Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25]
2026-10-24T03:20:26.0574857Z  226 โ”‚                       <NativeText
2026-10-24T03:20:26.0574942Z  227 โ”‚                         key={tokenIndex}
2026-10-24T03:20:26.0575046Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0575119Z  228 โ”‚                         style={{
2026-10-24T03:20:26.0575171Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0575317Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T03:20:26.0575320Z
2026-10-24T03:20:26.0575577Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0575761Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5]
2026-10-24T03:20:26.0575816Z  55 โ”‚
2026-10-24T03:20:26.0575884Z  56 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0575956Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0576086Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0576155Z  57 โ”‚     scheduler.reset();
2026-10-24T03:20:26.0576252Z  58 โ”‚     highlightedRowIdsRef.current = new Set();
2026-10-24T03:20:26.0576338Z  59 โ”‚     visibleChunkIndexRef.current = 0;
2026-10-24T03:20:26.0576454Z  60 โ”‚     setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 });
2026-10-24T03:20:26.0576536Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0576709Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0576837Z  61 โ”‚     setTokensPatchJson(createEmptyTokenPatch(resetKey));
2026-10-24T03:20:26.0576888Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0577500Z   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-24T03:20:26.0577826Z   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-24T03:20:26.0577828Z
2026-10-24T03:20:26.0578033Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0578209Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7]
2026-10-24T03:20:26.0578289Z  62 โ”‚     return () => scheduler.cancel();
2026-10-24T03:20:26.0578395Z  63 โ”‚   }, [enabled, resetKey, rows.length, scheduler]);
2026-10-24T03:20:26.0578524Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0578836Z     ยท          โ”‚                    โ•ฐโ”€โ”€ Unnecessary dependency `rows.length`
2026-10-24T03:20:26.0578976Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `enabled`
2026-10-24T03:20:26.0579029Z  64 โ”‚
2026-10-24T03:20:26.0579081Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0579376Z   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-24T03:20:26.0579691Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0579694Z
2026-10-24T03:20:26.0579984Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T03:20:26.0580258Z    โ•ญโ”€[packages/client-runtime/src/state/filesystem.ts:3:8]
2026-10-24T03:20:26.0580331Z  2 โ”‚   AuthFilesystemReadScope,
2026-10-24T03:20:26.0580403Z  3 โ”‚   type AuthSessionState,
2026-10-24T03:20:26.0580486Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0580632Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T03:20:26.0580708Z  4 โ”‚   type FilesystemBrowseEntry,
2026-10-24T03:20:26.0580760Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0580859Z   help: Consider removing this import.
2026-10-24T03:20:26.0580861Z
2026-10-24T03:20:26.0581054Z   โš  eslint(no-unused-vars): Identifier 'Arr' is imported but never used.
2026-10-24T03:20:26.0581194Z    โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:4:13]
2026-10-24T03:20:26.0581315Z  3 โ”‚ import type { EnvironmentThreadShell } from "./models.ts";
2026-10-24T03:20:26.0581394Z  4 โ”‚ import * as Arr from "effect/Array";
2026-10-24T03:20:26.0581468Z    ยท             โ”€โ”ฌโ”€
2026-10-24T03:20:26.0581594Z    ยท              โ•ฐโ”€โ”€ 'Arr' is imported here
2026-10-24T03:20:26.0581679Z  5 โ”‚ import * as Order from "effect/Order";
2026-10-24T03:20:26.0581730Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0581829Z   help: Consider removing this import.
2026-10-24T03:20:26.0581831Z
2026-10-24T03:20:26.0582025Z   โš  eslint(no-unused-vars): Identifier 'Order' is imported but never used.
2026-10-24T03:20:26.0582158Z    โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:5:13]
2026-10-24T03:20:26.0582242Z  4 โ”‚ import * as Arr from "effect/Array";
2026-10-24T03:20:26.0582327Z  5 โ”‚ import * as Order from "effect/Order";
2026-10-24T03:20:26.0582402Z    ยท             โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T03:20:26.0582565Z    ยท               โ•ฐโ”€โ”€ 'Order' is imported here
2026-10-24T03:20:26.0582618Z  6 โ”‚
2026-10-24T03:20:26.0582669Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0582767Z   help: Consider removing this import.
2026-10-24T03:20:26.0582770Z
2026-10-24T03:20:26.0583245Z   โš  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-24T03:20:26.0583406Z       โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1680:7]
2026-10-24T03:20:26.0583499Z  1679 โ”‚           yield* harness.replaceSession;
2026-10-24T03:20:26.0583793Z  1680 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T03:20:26.0583980Z  1681 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
2026-10-24T03:20:26.0584070Z  1682 โ”‚ โ”‚             break;
2026-10-24T03:20:26.0584148Z  1683 โ”‚ โ”‚           }
2026-10-24T03:20:26.0584259Z  1684 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T03:20:26.0584394Z  1685 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T03:20:26.0584468Z  1686 โ”‚           yield* Queue.offer(
2026-10-24T03:20:26.0584521Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0584524Z
2026-10-24T03:20:26.0585002Z   โš  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-24T03:20:26.0585164Z       โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1789:7]
2026-10-24T03:20:26.0585258Z  1788 โ”‚           yield* harness.replaceSession;
2026-10-24T03:20:26.0585464Z  1789 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T03:20:26.0585627Z  1790 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
2026-10-24T03:20:26.0585735Z  1791 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T03:20:26.0585870Z  1792 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T03:20:26.0586002Z  1793 โ”‚           expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
2026-10-24T03:20:26.0586059Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0586065Z
2026-10-24T03:20:26.0586271Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0586408Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:454:7]
2026-10-24T03:20:26.0586492Z  453 โ”‚     showAuxiliaryPane("inspector");
2026-10-24T03:20:26.0586600Z  454 โ”‚   }, [environmentId, showAuxiliaryPane, threadId]);
2026-10-24T03:20:26.0586746Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€                     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0586947Z      ยท             โ”‚                               โ•ฐโ”€โ”€ Unnecessary dependency `threadId`
2026-10-24T03:20:26.0587098Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `environmentId`
2026-10-24T03:20:26.0587158Z  455 โ”‚   const {
2026-10-24T03:20:26.0587211Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0587519Z   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-24T03:20:26.0587836Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0587839Z
2026-10-24T03:20:26.0588026Z   โš  react(static-components): Cannot create components during render
2026-10-24T03:20:26.0588161Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:725:20]
2026-10-24T03:20:26.0588226Z  492 โ”‚   // same check.
2026-10-24T03:20:26.0588354Z  493 โ”‚   const NativeReviewDiffView = resolveNativeReviewDiffView();
2026-10-24T03:20:26.0588477Z      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0588733Z      ยท                                             โ•ฐโ”€โ”€ The component is created during render here
2026-10-24T03:20:26.0588919Z  494 โ”‚   const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
2026-10-24T03:20:26.0589041Z  495 โ”‚   const showcasedReviewDrawRef = useRef<string | null>(null);
2026-10-24T03:20:26.0589175Z  496 โ”‚   const [isPullRefreshing, setIsPullRefreshing] = useState(false);
2026-10-24T03:20:26.0589268Z  497 โ”‚   const handlePullToRefresh = async () => {
2026-10-24T03:20:26.0589346Z  498 โ”‚     setIsPullRefreshing(true);
2026-10-24T03:20:26.0589430Z  499 โ”‚     await refreshSelectedSection();
2026-10-24T03:20:26.0589507Z  500 โ”‚     setIsPullRefreshing(false);
2026-10-24T03:20:26.0589561Z  501 โ”‚   };
2026-10-24T03:20:26.0589705Z  502 โ”‚   const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
2026-10-24T03:20:26.0589855Z  503 โ”‚   const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
2026-10-24T03:20:26.0589966Z  504 โ”‚   const fileVisibility = useReviewFileVisibility({
2026-10-24T03:20:26.0590051Z  505 โ”‚     threadKey: reviewCache.threadKey,
2026-10-24T03:20:26.0590142Z  506 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-24T03:20:26.0590210Z  507 โ”‚     files: reviewFiles,
2026-10-24T03:20:26.0590310Z  508 โ”‚     cachedExpandedFileIds: selectedSection?.id
2026-10-24T03:20:26.0590443Z  509 โ”‚       ? reviewCache.expandedFileIdsBySection[selectedSection.id]
2026-10-24T03:20:26.0590507Z  510 โ”‚       : undefined,
2026-10-24T03:20:26.0590604Z  511 โ”‚     cachedViewedFileIds: selectedSection?.id
2026-10-24T03:20:26.0590729Z  512 โ”‚       ? reviewCache.viewedFileIdsBySection[selectedSection.id]
2026-10-24T03:20:26.0590792Z  513 โ”‚       : undefined,
2026-10-24T03:20:26.0590847Z  514 โ”‚   });
2026-10-24T03:20:26.0591046Z  515 โ”‚   const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
2026-10-24T03:20:26.0591181Z  516 โ”‚   const commentSelection = useReviewCommentSelectionController({
2026-10-24T03:20:26.0591243Z  517 โ”‚     environmentId,
2026-10-24T03:20:26.0591306Z  518 โ”‚     threadId,
2026-10-24T03:20:26.0591373Z  519 โ”‚     selectedSection,
2026-10-24T03:20:26.0591443Z  520 โ”‚     nativeReviewDiffData,
2026-10-24T03:20:26.0591500Z  521 โ”‚   });
2026-10-24T03:20:26.0591607Z  522 โ”‚   const nativeBridge = useNativeReviewDiffBridge({
2026-10-24T03:20:26.0591693Z  523 โ”‚     threadKey: reviewCache.threadKey,
2026-10-24T03:20:26.0591783Z  524 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-24T03:20:26.0591862Z  525 โ”‚     diff: selectedSection?.diff,
2026-10-24T03:20:26.0591940Z  526 โ”‚     data: nativeReviewDiffData,
2026-10-24T03:20:26.0592008Z  527 โ”‚     collapsedFileIds,
2026-10-24T03:20:26.0592076Z  528 โ”‚     viewedFileIds,
2026-10-24T03:20:26.0592190Z  529 โ”‚     selectedRowIds: commentSelection.selectedRowIds,
2026-10-24T03:20:26.0592287Z  530 โ”‚     canHighlight: parsedDiff.kind === "files",
2026-10-24T03:20:26.0592343Z  531 โ”‚   });
2026-10-24T03:20:26.0592415Z  532 โ”‚   const showcaseReviewKey =
2026-10-24T03:20:26.0592579Z  533 โ”‚     SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
2026-10-24T03:20:26.0592790Z  534 โ”‚       ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
2026-10-24T03:20:26.0592852Z  535 โ”‚       : null;
2026-10-24T03:20:26.0593019Z  536 โ”‚   const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
2026-10-24T03:20:26.0593097Z  537 โ”‚     nativeBridge.onDebug(event);
2026-10-24T03:20:26.0593155Z  538 โ”‚     if (
2026-10-24T03:20:26.0593236Z  539 โ”‚       showcaseReviewKey === null ||
2026-10-24T03:20:26.0593434Z  540 โ”‚       showcasedReviewDrawRef.current === showcaseReviewKey ||
2026-10-24T03:20:26.0593576Z  541 โ”‚       !isNativeReviewDiffDrawEvent(event.nativeEvent)
2026-10-24T03:20:26.0593633Z  542 โ”‚     ) {
2026-10-24T03:20:26.0593694Z  543 โ”‚       return;
2026-10-24T03:20:26.0593747Z  544 โ”‚     }
2026-10-24T03:20:26.0593860Z  545 โ”‚     showcasedReviewDrawRef.current = showcaseReviewKey;
2026-10-24T03:20:26.0594023Z  546 โ”‚     reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
2026-10-24T03:20:26.0594076Z  547 โ”‚   };
2026-10-24T03:20:26.0594130Z  548 โ”‚
2026-10-24T03:20:26.0594250Z  549 โ”‚   const handleSelectFile = async (fileId: string | null) => {
2026-10-24T03:20:26.0594331Z  550 โ”‚     loadVisibleFile(fileId, true);
2026-10-24T03:20:26.0594419Z  551 โ”‚     commentSelection.clearSelection();
2026-10-24T03:20:26.0594548Z  552 โ”‚     if (fileId !== null && collapsedFileIds.includes(fileId)) {
2026-10-24T03:20:26.0594630Z  553 โ”‚       toggleExpandedFile(fileId);
2026-10-24T03:20:26.0594684Z  554 โ”‚     }
2026-10-24T03:20:26.0594796Z  555 โ”‚     const nativeView = nativeReviewDiffViewRef.current;
2026-10-24T03:20:26.0594868Z  556 โ”‚     if (!nativeView) return;
2026-10-24T03:20:26.0594963Z  557 โ”‚     const result = await settlePromise(() =>
2026-10-24T03:20:26.0595139Z  558 โ”‚       fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
2026-10-24T03:20:26.0595194Z  559 โ”‚     );
2026-10-24T03:20:26.0595284Z  560 โ”‚     if (AsyncResult.isFailure(result)) {
2026-10-24T03:20:26.0595468Z  561 โ”‚       console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
2026-10-24T03:20:26.0595523Z  562 โ”‚     }
2026-10-24T03:20:26.0595576Z  563 โ”‚   };
2026-10-24T03:20:26.0595660Z  564 โ”‚   const handleVisibleFileChange = (
2026-10-24T03:20:26.0595799Z  565 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
2026-10-24T03:20:26.0595860Z  566 โ”‚   ) => {
2026-10-24T03:20:26.0595969Z  567 โ”‚     loadVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-24T03:20:26.0596138Z  568 โ”‚     reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-24T03:20:26.0596193Z  569 โ”‚   };
2026-10-24T03:20:26.0596272Z  570 โ”‚   const renderInspector = () => (
2026-10-24T03:20:26.0596340Z  571 โ”‚     <ReviewFileNavigator
2026-10-24T03:20:26.0596423Z  572 โ”‚       ref={reviewFileNavigatorRef}
2026-10-24T03:20:26.0596515Z  573 โ”‚       files={nativeReviewDiffData.files}
2026-10-24T03:20:26.0596590Z  574 โ”‚       headerInset={insets.top}
2026-10-24T03:20:26.0596682Z  575 โ”‚       sectionId={selectedSection?.id ?? null}
2026-10-24T03:20:26.0596799Z  576 โ”‚       onSelectFile={(fileId) => void handleSelectFile(fileId)}
2026-10-24T03:20:26.0596860Z  577 โ”‚     />
2026-10-24T03:20:26.0596916Z  578 โ”‚   );
2026-10-24T03:20:26.0596969Z  579 โ”‚
2026-10-24T03:20:26.0597156Z  580 โ”‚   const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
2026-10-24T03:20:26.0597245Z  581 โ”‚     const { fileId } = event.nativeEvent;
2026-10-24T03:20:26.0597308Z  582 โ”‚     if (fileId) {
2026-10-24T03:20:26.0597390Z  583 โ”‚       loadVisibleFile(fileId, true);
2026-10-24T03:20:26.0597469Z  584 โ”‚       toggleExpandedFile(fileId);
2026-10-24T03:20:26.0597523Z  585 โ”‚     }
2026-10-24T03:20:26.0597576Z  586 โ”‚   };
2026-10-24T03:20:26.0597630Z  587 โ”‚
2026-10-24T03:20:26.0597720Z  588 โ”‚   const handleNativeToggleViewedFile = (
2026-10-24T03:20:26.0597839Z  589 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string }>,
2026-10-24T03:20:26.0597896Z  590 โ”‚   ) => {
2026-10-24T03:20:26.0598058Z  591 โ”‚     const { fileId } = event.nativeEvent;
2026-10-24T03:20:26.0598153Z  592 โ”‚     if (fileId) {
2026-10-24T03:20:26.0598230Z  593 โ”‚       toggleViewedFile(fileId);
2026-10-24T03:20:26.0598283Z  594 โ”‚     }
2026-10-24T03:20:26.0598338Z  595 โ”‚   };
2026-10-24T03:20:26.0598390Z  596 โ”‚
2026-10-24T03:20:26.0598461Z  597 โ”‚   const parsedDiffNotice =
2026-10-24T03:20:26.0598624Z  598 โ”‚     parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
2026-10-24T03:20:26.0598747Z  599 โ”‚   const hasCachedSelectedDiff = selectedSection?.diff != null;
2026-10-24T03:20:26.0598904Z  600 โ”‚   const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
2026-10-24T03:20:26.0599024Z  601 โ”‚   const sectionMenu = buildReviewSectionMenu(reviewSections);
2026-10-24T03:20:26.0599185Z  602 โ”‚   const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
2026-10-24T03:20:26.0599302Z  603 โ”‚     hasEnvironmentPresentation: environment.isReady,
2026-10-24T03:20:26.0599407Z  604 โ”‚     isEnvironmentConnected: isEnvironmentReady,
2026-10-24T03:20:26.0599479Z  605 โ”‚     hasCachedSelectedDiff,
2026-10-24T03:20:26.0599545Z  606 โ”‚     hasAnyCachedDiff,
2026-10-24T03:20:26.0599600Z  607 โ”‚   });
2026-10-24T03:20:26.0599688Z  608 โ”‚   const handleRetryEnvironment = () => {
2026-10-24T03:20:26.0599775Z  609 โ”‚     void retryEnvironment(environmentId);
2026-10-24T03:20:26.0599829Z  610 โ”‚   };
2026-10-24T03:20:26.0599915Z  611 โ”‚   const handleReturnToThread = () => {
2026-10-24T03:20:26.0599994Z  612 โ”‚     if (navigation.canGoBack()) {
2026-10-24T03:20:26.0600063Z  613 โ”‚       navigation.goBack();
2026-10-24T03:20:26.0600125Z  614 โ”‚       return;
2026-10-24T03:20:26.0600178Z  615 โ”‚     }
2026-10-24T03:20:26.0600259Z  616 โ”‚     navigation.navigate("Thread", {
2026-10-24T03:20:26.0600354Z  617 โ”‚       environmentId: String(environmentId),
2026-10-24T03:20:26.0600434Z  618 โ”‚       threadId: String(threadId),
2026-10-24T03:20:26.0600492Z  619 โ”‚     });
2026-10-24T03:20:26.0600545Z  620 โ”‚   };
2026-10-24T03:20:26.0600622Z  621 โ”‚   const androidHeaderSubtitle = [
2026-10-24T03:20:26.0600695Z  622 โ”‚     selectedSection?.title,
2026-10-24T03:20:26.0600776Z  623 โ”‚     headerDiffSummary.additions,
2026-10-24T03:20:26.0600854Z  624 โ”‚     headerDiffSummary.deletions,
2026-10-24T03:20:26.0600909Z  625 โ”‚   ]
2026-10-24T03:20:26.0601017Z  626 โ”‚     .filter((part): part is string => Boolean(part))
2026-10-24T03:20:26.0601083Z  627 โ”‚     .join(" ยท ");
2026-10-24T03:20:26.0601136Z  628 โ”‚
2026-10-24T03:20:26.0601214Z  629 โ”‚   const showChangedFilesPane =
2026-10-24T03:20:26.0601286Z  630 โ”‚     !showConnectionNotice &&
2026-10-24T03:20:26.0601361Z  631 โ”‚     selectedSection !== null &&
2026-10-24T03:20:26.0601447Z  632 โ”‚     parsedDiff.kind === "files" &&
2026-10-24T03:20:26.0601529Z  633 โ”‚     NativeReviewDiffView !== null;
2026-10-24T03:20:26.0601701Z  634 โ”‚   useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
2026-10-24T03:20:26.0601875Z  635 โ”‚   const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
2026-10-24T03:20:26.0601926Z  636 โ”‚
2026-10-24T03:20:26.0601999Z  637 โ”‚   const listHeader = (() => {
2026-10-24T03:20:26.0602086Z  638 โ”‚     const children: ReactElement[] = [];
2026-10-24T03:20:26.0602140Z  639 โ”‚
2026-10-24T03:20:26.0602203Z  640 โ”‚     if (error) {
2026-10-24T03:20:26.0602270Z  641 โ”‚       children.push(
2026-10-24T03:20:26.0602332Z  642 โ”‚         <View
2026-10-24T03:20:26.0602403Z  643 โ”‚           key="review-error"
2026-10-24T03:20:26.0602505Z  644 โ”‚           className={cn(
2026-10-24T03:20:26.0602661Z  645 โ”‚             "bg-card px-4 py-3",
2026-10-24T03:20:26.0602845Z  646 โ”‚             Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
2026-10-24T03:20:26.0602905Z  647 โ”‚           )}
2026-10-24T03:20:26.0602962Z  648 โ”‚         >
2026-10-24T03:20:26.0603127Z  649 โ”‚           <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
2026-10-24T03:20:26.0603287Z  650 โ”‚           <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
2026-10-24T03:20:26.0603347Z  651 โ”‚         </View>,
2026-10-24T03:20:26.0603404Z  652 โ”‚       );
2026-10-24T03:20:26.0603459Z  653 โ”‚     }
2026-10-24T03:20:26.0603511Z  654 โ”‚
2026-10-24T03:20:26.0603582Z  655 โ”‚     if (parsedDiffNotice) {
2026-10-24T03:20:26.0603743Z  656 โ”‚       children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
2026-10-24T03:20:26.0603799Z  657 โ”‚     }
2026-10-24T03:20:26.0603858Z  658 โ”‚
2026-10-24T03:20:26.0603936Z  659 โ”‚     if (children.length === 0) {
2026-10-24T03:20:26.0604003Z  660 โ”‚       return null;
2026-10-24T03:20:26.0604058Z  661 โ”‚     }
2026-10-24T03:20:26.0604111Z  662 โ”‚
2026-10-24T03:20:26.0604182Z  663 โ”‚     return <>{children}</>;
2026-10-24T03:20:26.0604239Z  664 โ”‚   })();
2026-10-24T03:20:26.0604311Z  665 โ”‚   const headerSubtitle = [
2026-10-24T03:20:26.0604390Z  666 โ”‚     headerDiffSummary.additions,
2026-10-24T03:20:26.0604469Z  667 โ”‚     headerDiffSummary.deletions,
2026-10-24T03:20:26.0604550Z  668 โ”‚     pendingReviewCommentCount > 0
2026-10-24T03:20:26.0604725Z  669 โ”‚       ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
2026-10-24T03:20:26.0604786Z  670 โ”‚       : null,
2026-10-24T03:20:26.0604840Z  671 โ”‚   ]
2026-10-24T03:20:26.0604906Z  672 โ”‚     .filter(Boolean)
2026-10-24T03:20:26.0604975Z  673 โ”‚     .join(" ยท ");
2026-10-24T03:20:26.0605113Z  674 โ”‚   const headerTitleText = selectedSection?.title ?? "Review changes";
2026-10-24T03:20:26.0605168Z  675 โ”‚
2026-10-24T03:20:26.0605228Z  676 โ”‚   return (
2026-10-24T03:20:26.0605287Z  677 โ”‚     <>
2026-10-24T03:20:26.0605350Z  678 โ”‚       <ReviewHeader
2026-10-24T03:20:26.0605434Z  679 โ”‚         environmentId={environmentId}
2026-10-24T03:20:26.0605504Z  680 โ”‚         threadId={threadId}
2026-10-24T03:20:26.0605579Z  681 โ”‚         title={headerTitleText}
2026-10-24T03:20:26.0605655Z  682 โ”‚         subtitle={headerSubtitle}
2026-10-24T03:20:26.0605755Z  683 โ”‚         androidSubtitle={androidHeaderSubtitle}
2026-10-24T03:20:26.0605829Z  684 โ”‚         iconColor={headerIcon}
2026-10-24T03:20:26.0605925Z  685 โ”‚         selectedThreadCwd={selectedThreadCwd}
2026-10-24T03:20:26.0606000Z  686 โ”‚         sectionMenu={sectionMenu}
2026-10-24T03:20:26.0606094Z  687 โ”‚         selectedSection={selectedSection}
2026-10-24T03:20:26.0606195Z  688 โ”‚         showSectionToolbar={showSectionToolbar}
2026-10-24T03:20:26.0606304Z  689 โ”‚         showChangedFilesToggle={showChangedFilesToggle}
2026-10-24T03:20:26.0606391Z  690 โ”‚         onRefresh={handlePullToRefresh}
2026-10-24T03:20:26.0606475Z  691 โ”‚         onSelectSection={selectSection}
2026-10-24T03:20:26.0606572Z  692 โ”‚         onReturnToThread={handleReturnToThread}
2026-10-24T03:20:26.0606628Z  693 โ”‚       />
2026-10-24T03:20:26.0606682Z  694 โ”‚
2026-10-24T03:20:26.0606750Z  695 โ”‚       <ScreenContent>
2026-10-24T03:20:26.0606872Z  696 โ”‚         <View className="flex-1 bg-sheet android:bg-sheet-solid">
2026-10-24T03:20:26.0606953Z  697 โ”‚           {showConnectionNotice ? (
2026-10-24T03:20:26.0607094Z  698 โ”‚             <View className="flex-1" style={{ paddingTop: topContentInset }}>
2026-10-24T03:20:26.0607266Z  699 โ”‚               <EnvironmentConnectionNotice
2026-10-24T03:20:26.0607474Z  700 โ”‚                 environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
2026-10-24T03:20:26.0607544Z  701 โ”‚                 connection={
2026-10-24T03:20:26.0607652Z  702 โ”‚                   environment.presentation?.connection ?? {
2026-10-24T03:20:26.0607734Z  703 โ”‚                     phase: "available",
2026-10-24T03:20:26.0607808Z  704 โ”‚                     error: null,
2026-10-24T03:20:26.0607883Z  705 โ”‚                     traceId: null,
2026-10-24T03:20:26.0607947Z  706 โ”‚                   }
2026-10-24T03:20:26.0608009Z  707 โ”‚                 }
2026-10-24T03:20:26.0608090Z  708 โ”‚                 resourceName="review"
2026-10-24T03:20:26.0608187Z  709 โ”‚                 onRetry={handleRetryEnvironment}
2026-10-24T03:20:26.0608249Z  710 โ”‚               />
2026-10-24T03:20:26.0608318Z  711 โ”‚             </View>
2026-10-24T03:20:26.0608479Z  712 โ”‚           ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
2026-10-24T03:20:26.0608540Z  713 โ”‚             <View
2026-10-24T03:20:26.0608615Z  714 โ”‚               className="flex-1"
2026-10-24T03:20:26.0608680Z  715 โ”‚               style={{
2026-10-24T03:20:26.0608798Z  716 โ”‚                 backgroundColor: nativeBridge.theme.background,
2026-10-24T03:20:26.0608858Z  717 โ”‚               }}
2026-10-24T03:20:26.0608918Z  718 โ”‚             >
2026-10-24T03:20:26.0608981Z  719 โ”‚               <View
2026-10-24T03:20:26.0609068Z  720 โ”‚                 className="min-w-0 flex-1"
2026-10-24T03:20:26.0609207Z  721 โ”‚                 style={listHeader ? { paddingTop: topContentInset } : undefined}
2026-10-24T03:20:26.0609268Z  722 โ”‚               >
2026-10-24T03:20:26.0609338Z  723 โ”‚                 {listHeader}
2026-10-24T03:20:26.0609464Z  724 โ”‚                 <View className="min-w-0 flex-1" collapsable={false}>
2026-10-24T03:20:26.0609550Z  725 โ”‚                   <NativeReviewDiffView
2026-10-24T03:20:26.0609658Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0609829Z      ยท                              โ•ฐโ”€โ”€ This component is created during render
2026-10-24T03:20:26.0609910Z  726 โ”‚                     collapsable={false}
2026-10-24T03:20:26.0609963Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0610217Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-24T03:20:26.0610539Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T03:20:26.0610542Z
2026-10-24T03:20:26.0610719Z   โš  react(purity): Cannot call impure function during render
2026-10-24T03:20:26.0610872Z      โ•ญโ”€[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
2026-10-24T03:20:26.0611004Z  371 โ”‚   const { open, onOpenChange, onSnooze, timestampFormat } = props;
2026-10-24T03:20:26.0611159Z  372 โ”‚   const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
2026-10-24T03:20:26.0611276Z      ยท                                               โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0611439Z      ยท                                                    โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T03:20:26.0611502Z  373 โ”‚   return (
2026-10-24T03:20:26.0611558Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0611840Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T03:20:26.0612206Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T03:20:26.0612241Z
2026-10-24T03:20:26.0612407Z   โš  react(purity): Cannot call impure function during render
2026-10-24T03:20:26.0612592Z      โ•ญโ”€[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39]
2026-10-24T03:20:26.0612687Z  852 โ”‚   if (snoozeGateClock.thread !== thread) {
2026-10-24T03:20:26.0612818Z  853 โ”‚     setSnoozeGateClock({ thread, now: new Date().toISOString() });
2026-10-24T03:20:26.0612928Z      ยท                                       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0613088Z      ยท                                            โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T03:20:26.0613143Z  854 โ”‚   }
2026-10-24T03:20:26.0613202Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0613483Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T03:20:26.0613781Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T03:20:26.0613783Z
2026-10-24T03:20:26.0613978Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T03:20:26.0614152Z     โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15]
2026-10-24T03:20:26.0614214Z  87 โ”‚             <li
2026-10-24T03:20:26.0614302Z  88 โ”‚               key={`${index}:${check.name}`}
2026-10-24T03:20:26.0614417Z     ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0614573Z  89 โ”‚               className="col-span-full grid grid-cols-subgrid items-center text-xs"
2026-10-24T03:20:26.0614627Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0614776Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T03:20:26.0614778Z
2026-10-24T03:20:26.0615055Z   โš  eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
2026-10-24T03:20:26.0615205Z     โ•ญโ”€[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
2026-10-24T03:20:26.0615264Z  60 โ”‚ ) {
2026-10-24T03:20:26.0615432Z  61 โ”‚   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
2026-10-24T03:20:26.0615513Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0615656Z     ยท               โ•ฐโ”€โ”€ 'useDragRegion' is declared here
2026-10-24T03:20:26.0615816Z  62 โ”‚   const isInline = props.mode === "inline";
2026-10-24T03:20:26.0615899Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0616006Z   help: Consider removing this declaration.
2026-10-24T03:20:26.0616009Z
2026-10-24T03:20:26.0616155Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0616316Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
2026-10-24T03:20:26.0616474Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T03:20:26.0616601Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T03:20:26.0616724Z      ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0616902Z      ยท                                                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0617027Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T03:20:26.0617082Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0617557Z   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-24T03:20:26.0617852Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0617855Z
2026-10-24T03:20:26.0618001Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0618159Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
2026-10-24T03:20:26.0618214Z  125 โ”‚
2026-10-24T03:20:26.0618328Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T03:20:26.0618418Z      ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0618570Z      ยท                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0618859Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T03:20:26.0618913Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0619384Z   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-24T03:20:26.0619677Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0619681Z
2026-10-24T03:20:26.0619831Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0619993Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
2026-10-24T03:20:26.0620047Z  125 โ”‚
2026-10-24T03:20:26.0620155Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T03:20:26.0620242Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0620392Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0620493Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T03:20:26.0620546Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0621010Z   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-24T03:20:26.0621394Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0621441Z
2026-10-24T03:20:26.0621585Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0621745Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
2026-10-24T03:20:26.0621797Z  125 โ”‚
2026-10-24T03:20:26.0621905Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T03:20:26.0622021Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0622192Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0622292Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T03:20:26.0622345Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0622855Z   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-24T03:20:26.0623148Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0623151Z
2026-10-24T03:20:26.0623295Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0623454Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
2026-10-24T03:20:26.0623507Z  125 โ”‚
2026-10-24T03:20:26.0623615Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T03:20:26.0623734Z      ยท                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0623901Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0624002Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T03:20:26.0624054Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0624521Z   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-24T03:20:26.0624812Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0624815Z
2026-10-24T03:20:26.0624958Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0625121Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-24T03:20:26.0625237Z  126 โ”‚       if (!sessionRef.current || !recorderRef.current) {
2026-10-24T03:20:26.0625433Z  127 โ”‚ โ•ญโ”€โ–ถ     const recorder = createLazyVoiceRecorder({
2026-10-24T03:20:26.0625608Z  128 โ”‚ โ”‚         create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T03:20:26.0625736Z  129 โ”‚ โ”‚         onStatus: (status: RecordingStatus) => {
2026-10-24T03:20:26.0625892Z  130 โ”‚ โ”‚           sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T03:20:26.0626012Z  131 โ”‚ โ”‚             isFinished: status.isFinished,
2026-10-24T03:20:26.0626191Z  132 โ”‚ โ”‚             hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T03:20:26.0626364Z  133 โ”‚ โ”‚             error: status.error,
2026-10-24T03:20:26.0626642Z  134 โ”‚ โ”‚             url: status.url,
2026-10-24T03:20:26.0626724Z  135 โ”‚ โ”‚           });
2026-10-24T03:20:26.0626803Z  136 โ”‚ โ”‚         },
2026-10-24T03:20:26.0627000Z  137 โ”‚ โ”‚         // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T03:20:26.0627110Z  138 โ”‚ โ”‚         selectInput: (inputs) => {
2026-10-24T03:20:26.0627267Z  139 โ”‚ โ”‚           const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T03:20:26.0627416Z  140 โ”‚ โ”‚           if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T03:20:26.0627582Z  141 โ”‚ โ”‚           const known = microphoneOrder(preferences.value.microphones);
2026-10-24T03:20:26.0627728Z  142 โ”‚ โ”‚           const order = rememberMicrophones(known, inputs);
2026-10-24T03:20:26.0627834Z  143 โ”‚ โ”‚           if (order !== known) {
2026-10-24T03:20:26.0627975Z  144 โ”‚ โ”‚             registry.set(updateMobilePreferencesAtom, {
2026-10-24T03:20:26.0628090Z  145 โ”‚ โ”‚               transform: (current) => ({
2026-10-24T03:20:26.0628299Z  146 โ”‚ โ”‚                 microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T03:20:26.0628388Z  147 โ”‚ โ”‚               }),
2026-10-24T03:20:26.0628471Z  148 โ”‚ โ”‚             });
2026-10-24T03:20:26.0628548Z  149 โ”‚ โ”‚           }
2026-10-24T03:20:26.0628689Z  150 โ”‚ โ”‚           return preferredMicrophoneInput(inputs, order);
2026-10-24T03:20:26.0628774Z  151 โ”‚ โ”‚         },
2026-10-24T03:20:26.0628909Z  152 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T03:20:26.0629148Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T03:20:26.0629235Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T03:20:26.0629288Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0629757Z   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-24T03:20:26.0630051Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0630054Z
2026-10-24T03:20:26.0630204Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0630367Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-24T03:20:26.0630426Z  152 โ”‚     });
2026-10-24T03:20:26.0630509Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T03:20:26.0630623Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0630810Z      ยท          โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T03:20:26.0630928Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T03:20:26.0631035Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T03:20:26.0631086Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0631626Z   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-24T03:20:26.0631946Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0631948Z
2026-10-24T03:20:26.0632093Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0632253Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-24T03:20:26.0632338Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T03:20:26.0632565Z  154 โ”‚ โ•ญโ”€โ–ถ     sessionRef.current = new VoiceInputSession({
2026-10-24T03:20:26.0632653Z  155 โ”‚ โ”‚         recorder,
2026-10-24T03:20:26.0632789Z  156 โ”‚ โ”‚         getTranscriber: getLocalVoiceTranscriber,
2026-10-24T03:20:26.0632908Z  157 โ”‚ โ”‚         requestPermission: async () => {
2026-10-24T03:20:26.0633072Z  158 โ”‚ โ”‚           const permission = await requestRecordingPermissionsAsync();
2026-10-24T03:20:26.0633265Z  159 โ”‚ โ”‚           return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T03:20:26.0633344Z  160 โ”‚ โ”‚         },
2026-10-24T03:20:26.0633485Z  161 โ”‚ โ”‚         configureRecording: configureVoiceRecordingAudio,
2026-10-24T03:20:26.0633622Z  162 โ”‚ โ”‚         releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T03:20:26.0633760Z  163 โ”‚ โ”‚         deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T03:20:26.0633880Z  164 โ”‚ โ”‚         onStateChange: (nextState) =>
2026-10-24T03:20:26.0633974Z  165 โ”‚ โ”‚           setState({
2026-10-24T03:20:26.0634076Z  166 โ”‚ โ”‚             state: nextState,
2026-10-24T03:20:26.0634216Z  167 โ”‚ โ”‚             ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T03:20:26.0634346Z  168 โ”‚ โ”‚             label: sessionRef.current?.label ?? null,
2026-10-24T03:20:26.0634426Z  169 โ”‚ โ”‚           }),
2026-10-24T03:20:26.0634556Z  170 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T03:20:26.0634756Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0634814Z  171 โ”‚       }
2026-10-24T03:20:26.0634866Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0635341Z   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-24T03:20:26.0635634Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0635636Z
2026-10-24T03:20:26.0635782Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0635940Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-24T03:20:26.0636021Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T03:20:26.0636124Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T03:20:26.0636237Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0636493Z      ยท          โ”‚        โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T03:20:26.0636639Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T03:20:26.0636703Z  155 โ”‚       recorder,
2026-10-24T03:20:26.0636757Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0637222Z   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-24T03:20:26.0637513Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0637515Z
2026-10-24T03:20:26.0637663Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0637825Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-24T03:20:26.0637914Z  184 โ”‚     return () => subscription.remove();
2026-10-24T03:20:26.0637981Z  185 โ”‚   }, [controller]);
2026-10-24T03:20:26.0638056Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0638202Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0638256Z  186 โ”‚
2026-10-24T03:20:26.0638307Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0638773Z   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-24T03:20:26.0639071Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0639076Z
2026-10-24T03:20:26.0639221Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0639378Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-24T03:20:26.0639465Z  184 โ”‚     return () => subscription.remove();
2026-10-24T03:20:26.0639530Z  185 โ”‚   }, [controller]);
2026-10-24T03:20:26.0639608Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0639751Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0639804Z  186 โ”‚
2026-10-24T03:20:26.0639855Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0640327Z   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-24T03:20:26.0640622Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0640624Z
2026-10-24T03:20:26.0640767Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0640923Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-24T03:20:26.0640981Z  191 โ”‚     },
2026-10-24T03:20:26.0641053Z  192 โ”‚     [controller, recorder],
2026-10-24T03:20:26.0641131Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0641275Z      ยท           โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0641330Z  193 โ”‚   );
2026-10-24T03:20:26.0641382Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0641924Z   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-24T03:20:26.0642251Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0642254Z
2026-10-24T03:20:26.0642396Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0642593Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-24T03:20:26.0642684Z  174 โ”‚   const controller = session.controller;
2026-10-24T03:20:26.0642772Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T03:20:26.0642880Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0643043Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0643096Z  176 โ”‚
2026-10-24T03:20:26.0643147Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0643611Z   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-24T03:20:26.0643903Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0643906Z
2026-10-24T03:20:26.0644050Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0644213Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-24T03:20:26.0644271Z  191 โ”‚     },
2026-10-24T03:20:26.0644342Z  192 โ”‚     [controller, recorder],
2026-10-24T03:20:26.0644433Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0644580Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0644636Z  193 โ”‚   );
2026-10-24T03:20:26.0644686Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0645155Z   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-24T03:20:26.0645443Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0645511Z
2026-10-24T03:20:26.0645823Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0645981Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-24T03:20:26.0646076Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T03:20:26.0646189Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T03:20:26.0646277Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0646431Z      ยท                         โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0646486Z  247 โ”‚
2026-10-24T03:20:26.0646538Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0647011Z   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-24T03:20:26.0647306Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0647308Z
2026-10-24T03:20:26.0647451Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0647611Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-24T03:20:26.0647702Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T03:20:26.0647813Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T03:20:26.0647943Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0648105Z      ยท                              โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0648164Z  247 โ”‚
2026-10-24T03:20:26.0648219Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0648685Z   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-24T03:20:26.0648977Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0648980Z
2026-10-24T03:20:26.0649124Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0649283Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-24T03:20:26.0649351Z  260 โ”‚     setOwnerFocused,
2026-10-24T03:20:26.0649412Z  261 โ”‚     session,
2026-10-24T03:20:26.0649489Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0649630Z      ยท        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0649691Z  262 โ”‚     stop,
2026-10-24T03:20:26.0649743Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0650211Z   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-24T03:20:26.0650501Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0650503Z
2026-10-24T03:20:26.0650647Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0650876Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-24T03:20:26.0650973Z  250 โ”‚
2026-10-24T03:20:26.0651115Z  251 โ”‚ โ•ญโ”€โ–ถ   return {
2026-10-24T03:20:26.0651328Z  252 โ”‚ โ”‚       isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-24T03:20:26.0651410Z  253 โ”‚ โ”‚       state,
2026-10-24T03:20:26.0651498Z  254 โ”‚ โ”‚       audioLevels,
2026-10-24T03:20:26.0651592Z  255 โ”‚ โ”‚       elapsedSeconds,
2026-10-24T03:20:26.0651723Z  256 โ”‚ โ”‚       isBusy: voiceInputBlocksSubmission(state),
2026-10-24T03:20:26.0651808Z  257 โ”‚ โ”‚       ownerKey,
2026-10-24T03:20:26.0651886Z  258 โ”‚ โ”‚       label,
2026-10-24T03:20:26.0651978Z  259 โ”‚ โ”‚       focusedOwners,
2026-10-24T03:20:26.0652079Z  260 โ”‚ โ”‚       setOwnerFocused,
2026-10-24T03:20:26.0652165Z  261 โ”‚ โ”‚       session,
2026-10-24T03:20:26.0652241Z  262 โ”‚ โ”‚       stop,
2026-10-24T03:20:26.0652323Z  263 โ”‚ โ”‚       cancel,
2026-10-24T03:20:26.0652453Z  264 โ”‚ โ”œโ”€โ–ถ   };
2026-10-24T03:20:26.0652692Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0652748Z  265 โ”‚     }
2026-10-24T03:20:26.0652801Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0653268Z   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-24T03:20:26.0653564Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0653570Z
2026-10-24T03:20:26.0653728Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0653887Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T03:20:26.0654049Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T03:20:26.0654174Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T03:20:26.0654253Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0654390Z      ยท              โ•ฐโ”€โ”€ `audioLevels` originates here
2026-10-24T03:20:26.0654515Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T03:20:26.0654664Z  124 โ”‚   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-24T03:20:26.0654716Z  125 โ”‚
2026-10-24T03:20:26.0654824Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T03:20:26.0654925Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T03:20:26.0655064Z  128 โ”‚       create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T03:20:26.0655159Z  129 โ”‚       onStatus: (status: RecordingStatus) => {
2026-10-24T03:20:26.0655281Z  130 โ”‚         sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T03:20:26.0655368Z  131 โ”‚           isFinished: status.isFinished,
2026-10-24T03:20:26.0655513Z  132 โ”‚           hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T03:20:26.0655587Z  133 โ”‚           error: status.error,
2026-10-24T03:20:26.0655727Z  134 โ”‚           url: status.url,
2026-10-24T03:20:26.0655818Z  135 โ”‚         });
2026-10-24T03:20:26.0655878Z  136 โ”‚       },
2026-10-24T03:20:26.0656042Z  137 โ”‚       // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T03:20:26.0656121Z  138 โ”‚       selectInput: (inputs) => {
2026-10-24T03:20:26.0656248Z  139 โ”‚         const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T03:20:26.0656362Z  140 โ”‚         if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T03:20:26.0656495Z  141 โ”‚         const known = microphoneOrder(preferences.value.microphones);
2026-10-24T03:20:26.0656605Z  142 โ”‚         const order = rememberMicrophones(known, inputs);
2026-10-24T03:20:26.0656679Z  143 โ”‚         if (order !== known) {
2026-10-24T03:20:26.0656788Z  144 โ”‚           registry.set(updateMobilePreferencesAtom, {
2026-10-24T03:20:26.0656872Z  145 โ”‚             transform: (current) => ({
2026-10-24T03:20:26.0657054Z  146 โ”‚               microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T03:20:26.0657120Z  147 โ”‚             }),
2026-10-24T03:20:26.0657182Z  148 โ”‚           });
2026-10-24T03:20:26.0657238Z  149 โ”‚         }
2026-10-24T03:20:26.0657348Z  150 โ”‚         return preferredMicrophoneInput(inputs, order);
2026-10-24T03:20:26.0657405Z  151 โ”‚       },
2026-10-24T03:20:26.0657463Z  152 โ”‚     });
2026-10-24T03:20:26.0657544Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T03:20:26.0657646Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T03:20:26.0657710Z  155 โ”‚       recorder,
2026-10-24T03:20:26.0657811Z  156 โ”‚       getTranscriber: getLocalVoiceTranscriber,
2026-10-24T03:20:26.0657895Z  157 โ”‚       requestPermission: async () => {
2026-10-24T03:20:26.0658034Z  158 โ”‚         const permission = await requestRecordingPermissionsAsync();
2026-10-24T03:20:26.0658194Z  159 โ”‚         return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T03:20:26.0658252Z  160 โ”‚       },
2026-10-24T03:20:26.0658362Z  161 โ”‚       configureRecording: configureVoiceRecordingAudio,
2026-10-24T03:20:26.0658470Z  162 โ”‚       releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T03:20:26.0658574Z  163 โ”‚       deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T03:20:26.0658763Z  164 โ”‚       onStateChange: (nextState) =>
2026-10-24T03:20:26.0658828Z  165 โ”‚         setState({
2026-10-24T03:20:26.0658901Z  166 โ”‚           state: nextState,
2026-10-24T03:20:26.0659012Z  167 โ”‚           ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T03:20:26.0659112Z  168 โ”‚           label: sessionRef.current?.label ?? null,
2026-10-24T03:20:26.0659170Z  169 โ”‚         }),
2026-10-24T03:20:26.0659225Z  170 โ”‚     });
2026-10-24T03:20:26.0659287Z  171 โ”‚   }
2026-10-24T03:20:26.0659341Z  172 โ”‚
2026-10-24T03:20:26.0659428Z  173 โ”‚   const session = sessionRef.current;
2026-10-24T03:20:26.0659517Z  174 โ”‚   const controller = session.controller;
2026-10-24T03:20:26.0659606Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T03:20:26.0659658Z  176 โ”‚
2026-10-24T03:20:26.0659724Z  177 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0659876Z  178 โ”‚     const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-24T03:20:26.0660017Z  179 โ”‚       // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-24T03:20:26.0660156Z  180 โ”‚       // real background state cancels preparation; recorder status handles
2026-10-24T03:20:26.0660263Z  181 โ”‚       // calls and route interruptions during capture.
2026-10-24T03:20:26.0660400Z  182 โ”‚       if (nextState === "background") controller.appMovedToBackground();
2026-10-24T03:20:26.0660552Z  183 โ”‚     });
2026-10-24T03:20:26.0660680Z  184 โ”‚     return () => subscription.remove();
2026-10-24T03:20:26.0660746Z  185 โ”‚   }, [controller]);
2026-10-24T03:20:26.0660800Z  186 โ”‚
2026-10-24T03:20:26.0660863Z  187 โ”‚   useEffect(
2026-10-24T03:20:26.0660924Z  188 โ”‚     () => () => {
2026-10-24T03:20:26.0660998Z  189 โ”‚       controller.dispose();
2026-10-24T03:20:26.0661069Z  190 โ”‚       recorder.release();
2026-10-24T03:20:26.0661125Z  191 โ”‚     },
2026-10-24T03:20:26.0661195Z  192 โ”‚     [controller, recorder],
2026-10-24T03:20:26.0661252Z  193 โ”‚   );
2026-10-24T03:20:26.0661305Z  194 โ”‚
2026-10-24T03:20:26.0661367Z  195 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0661462Z  196 โ”‚     if (state.phase !== "recording") return;
2026-10-24T03:20:26.0661515Z  197 โ”‚
2026-10-24T03:20:26.0661671Z  198 โ”‚     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-24T03:20:26.0661779Z  199 โ”‚     const activation = activateKeepAwakeAsync(tag);
2026-10-24T03:20:26.0661863Z  200 โ”‚     void activation.catch(() => {});
2026-10-24T03:20:26.0661927Z  201 โ”‚     return () => {
2026-10-24T03:20:26.0662078Z  202 โ”‚       // Release after activation settles, even if the recording ends immediately.
2026-10-24T03:20:26.0662217Z  203 โ”‚       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-24T03:20:26.0662272Z  204 โ”‚     };
2026-10-24T03:20:26.0662352Z  205 โ”‚   }, [keepAwakeId, state.phase]);
2026-10-24T03:20:26.0662406Z  206 โ”‚
2026-10-24T03:20:26.0662497Z  207 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0662634Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T03:20:26.0662686Z  209 โ”‚
2026-10-24T03:20:26.0662808Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T03:20:26.0662969Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T03:20:26.0663076Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T03:20:26.0663157Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0663301Z      ยท            โ•ฐโ”€โ”€ `audioLevels` cannot be modified
2026-10-24T03:20:26.0663356Z  213 โ”‚     }
2026-10-24T03:20:26.0663409Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0663681Z   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-24T03:20:26.0663991Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0663994Z
2026-10-24T03:20:26.0664201Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T03:20:26.0664366Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T03:20:26.0664420Z  206 โ”‚
2026-10-24T03:20:26.0664485Z  207 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0664563Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0664784Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-24T03:20:26.0664923Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T03:20:26.0664977Z  209 โ”‚
2026-10-24T03:20:26.0665097Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T03:20:26.0665254Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T03:20:26.0665430Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T03:20:26.0665540Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0665675Z      ยท            โ•ฐโ”€โ”€ This modifies `audioLevels`
2026-10-24T03:20:26.0665733Z  213 โ”‚     }
2026-10-24T03:20:26.0665785Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0666131Z   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-24T03:20:26.0666436Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0666440Z
2026-10-24T03:20:26.0666597Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0666772Z     โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5]
2026-10-24T03:20:26.0666831Z  90 โ”‚ }) {
2026-10-24T03:20:26.0666944Z  91 โ”‚   const rotation = useSharedValue(props.hidden ? 1 : 0);
2026-10-24T03:20:26.0667019Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0667153Z     ยท             โ•ฐโ”€โ”€ `rotation` originates here
2026-10-24T03:20:26.0667223Z  92 โ”‚   useLayoutEffect(() => {
2026-10-24T03:20:26.0667365Z  93 โ”‚     rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
2026-10-24T03:20:26.0667437Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0667570Z     ยท         โ•ฐโ”€โ”€ `rotation` cannot be modified
2026-10-24T03:20:26.0667647Z  94 โ”‚   }, [props.hidden, rotation]);
2026-10-24T03:20:26.0667699Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0667972Z   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-24T03:20:26.0668282Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0668285Z
2026-10-24T03:20:26.0668443Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0668616Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5]
2026-10-24T03:20:26.0668710Z  266 โ”‚   const variant = props.variant ?? "plain";
2026-10-24T03:20:26.0668845Z  267 โ”‚   const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
2026-10-24T03:20:26.0668934Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0669083Z      ยท                 โ•ฐโ”€โ”€ `loadingVisibility` originates here
2026-10-24T03:20:26.0669158Z  268 โ”‚   useLayoutEffect(() => {
2026-10-24T03:20:26.0669320Z  269 โ”‚     loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
2026-10-24T03:20:26.0669403Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0669554Z      ยท             โ•ฐโ”€โ”€ `loadingVisibility` cannot be modified
2026-10-24T03:20:26.0669645Z  270 โ”‚   }, [loadingVisibility, props.loading]);
2026-10-24T03:20:26.0669698Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0669962Z   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-24T03:20:26.0670268Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0670271Z
2026-10-24T03:20:26.0670499Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0670699Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5]
2026-10-24T03:20:26.0670755Z  325 โ”‚ }) {
2026-10-24T03:20:26.0670914Z  326 โ”‚   const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
2026-10-24T03:20:26.0671005Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0671158Z      ยท                  โ•ฐโ”€โ”€ `recordingVisibility` originates here
2026-10-24T03:20:26.0671228Z  327 โ”‚   useLayoutEffect(() => {
2026-10-24T03:20:26.0671415Z  328 โ”‚     recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
2026-10-24T03:20:26.0671502Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0671655Z      ยท              โ•ฐโ”€โ”€ `recordingVisibility` cannot be modified
2026-10-24T03:20:26.0671754Z  329 โ”‚   }, [props.phase, recordingVisibility]);
2026-10-24T03:20:26.0671810Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0672073Z   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-24T03:20:26.0672379Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0672383Z
2026-10-24T03:20:26.0672568Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0672739Z     โ•ญโ”€[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
2026-10-24T03:20:26.0672843Z  65 โ”‚   const [expanded, setExpanded] = useState(false);
2026-10-24T03:20:26.0672928Z  66 โ”‚   const progress = useSharedValue(0);
2026-10-24T03:20:26.0673008Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0673141Z     ยท             โ•ฐโ”€โ”€ `progress` originates here
2026-10-24T03:20:26.0673207Z  67 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0673334Z  68 โ”‚     progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
2026-10-24T03:20:26.0673404Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0673540Z     ยท         โ•ฐโ”€โ”€ `progress` cannot be modified
2026-10-24T03:20:26.0673612Z  69 โ”‚   }, [expanded, progress]);
2026-10-24T03:20:26.0673663Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0673926Z   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-24T03:20:26.0674231Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0674318Z
2026-10-24T03:20:26.0674499Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0674670Z     โ•ญโ”€[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
2026-10-24T03:20:26.0674751Z  26 โ”‚   const latestInput = useRef(input);
2026-10-24T03:20:26.0674829Z  27 โ”‚   latestInput.current = input;
2026-10-24T03:20:26.0674941Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0675127Z     ยท        โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T03:20:26.0675242Z     ยท        โ•ฐโ”€โ”€ This value is a ref
2026-10-24T03:20:26.0675318Z  28 โ”‚   const mounted = useRef(true);
2026-10-24T03:20:26.0675371Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0675855Z   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-24T03:20:26.0676151Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0676153Z
2026-10-24T03:20:26.0676338Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T03:20:26.0676529Z      โ•ญโ”€[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34]
2026-10-24T03:20:26.0676601Z  115 โ”‚     return [...commands];
2026-10-24T03:20:26.0676736Z  116 โ”‚   }, [activeThreadRef, pathname, registrationVersion, navigation]);
2026-10-24T03:20:26.0676858Z      ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0677049Z      ยท                                           โ•ฐโ”€โ”€ Unnecessary dependency `registrationVersion`
2026-10-24T03:20:26.0677103Z  117 โ”‚
2026-10-24T03:20:26.0677156Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0677476Z   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-24T03:20:26.0677790Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0677793Z
2026-10-24T03:20:26.0678083Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T03:20:26.0678262Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19]
2026-10-24T03:20:26.0678327Z  472 โ”‚   onFilters,
2026-10-24T03:20:26.0678395Z  473 โ”‚   authorOptions = [],
2026-10-24T03:20:26.0678476Z      ยท                   โ”€โ”€
2026-10-24T03:20:26.0678543Z  474 โ”‚   labelOptions = [],
2026-10-24T03:20:26.0678594Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0678912Z   help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
2026-10-24T03:20:26.0678915Z
2026-10-24T03:20:26.0679201Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T03:20:26.0679370Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18]
2026-10-24T03:20:26.0679438Z  473 โ”‚   authorOptions = [],
2026-10-24T03:20:26.0679579Z  474 โ”‚   labelOptions = [],
2026-10-24T03:20:26.0679690Z      ยท                  โ”€โ”€
2026-10-24T03:20:26.0679755Z  475 โ”‚   optionScope,
2026-10-24T03:20:26.0679807Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0680125Z   help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
2026-10-24T03:20:26.0680128Z
2026-10-24T03:20:26.0680365Z   โš  unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-24T03:20:26.0680529Z      โ•ญโ”€[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9]
2026-10-24T03:20:26.0680590Z  264 โ”‚ ): boolean {
2026-10-24T03:20:26.0680743Z  265 โ”‚   const labels = entry.labels.map((label) => label.name.trim().toLowerCase());
2026-10-24T03:20:26.0680915Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0681067Z  266 โ”‚   const holds = (label: string) => labels.includes(label.trim().toLowerCase());
2026-10-24T03:20:26.0681119Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0681196Z   help: Switch to `Set`
2026-10-24T03:20:26.0681201Z
2026-10-24T03:20:26.0681667Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T03:20:26.0681797Z     โ•ญโ”€[packages/contracts/src/baseSchemas.test.ts:39:9]
2026-10-24T03:20:26.0681865Z  38 โ”‚       JSON.stringify(
2026-10-24T03:20:26.0681987Z  39 โ”‚         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
2026-10-24T03:20:26.0682085Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0682161Z  40 โ”‚           { name: "a" },
2026-10-24T03:20:26.0682215Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0682218Z
2026-10-24T03:20:26.0682501Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T03:20:26.0682631Z       โ•ญโ”€[packages/provider-pi/src/server/adapter.ts:3405:7]
2026-10-24T03:20:26.0682689Z  3404 โ”‚
2026-10-24T03:20:26.0682880Z  3405 โ”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
2026-10-24T03:20:26.0682953Z       ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T03:20:26.0683082Z       ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T03:20:26.0683148Z  3406 โ”‚   Layer.effect(
2026-10-24T03:20:26.0683200Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0684710Z   help: Consider removing this declaration.
2026-10-24T03:20:26.0684721Z
2026-10-24T03:20:26.0684934Z   โš  eslint(no-unused-vars): Identifier 'Duration' is imported but never used.
2026-10-24T03:20:26.0685072Z     โ•ญโ”€[packages/provider-pi/src/server/adapter.test.ts:24:13]
2026-10-24T03:20:26.0685168Z  23 โ”‚ import * as Deferred from "effect/Deferred";
2026-10-24T03:20:26.0685260Z  24 โ”‚ import * as Duration from "effect/Duration";
2026-10-24T03:20:26.0685339Z     ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0685478Z     ยท                 โ•ฐโ”€โ”€ 'Duration' is imported here
2026-10-24T03:20:26.0685565Z  25 โ”‚ import * as Effect from "effect/Effect";
2026-10-24T03:20:26.0685616Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0685713Z   help: Consider removing this import.
2026-10-24T03:20:26.0685716Z
2026-10-24T03:20:26.0686002Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T03:20:26.0686184Z     โ•ญโ”€[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-24T03:20:26.0686272Z  35 โ”‚       <T3SourceTextRunNativeComponent
2026-10-24T03:20:26.0686336Z  36 โ”‚         key={index}
2026-10-24T03:20:26.0686416Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0686491Z  37 โ”‚         style={flattenedStyle}
2026-10-24T03:20:26.0686542Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0686688Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T03:20:26.0686691Z
2026-10-24T03:20:26.0687066Z   โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T03:20:26.0687181Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:17:12]
2026-10-24T03:20:26.0687346Z  16 โ”‚   it("decodes legacy review credentials without offering them in new grants", () => {
2026-10-24T03:20:26.0687521Z  17 โ”‚     expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
2026-10-24T03:20:26.0687622Z     ยท            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0687687Z  18 โ”‚       "review:write",
2026-10-24T03:20:26.0687738Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0687740Z
2026-10-24T03:20:26.0688105Z   โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T03:20:26.0688216Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:20:18]
2026-10-24T03:20:26.0688274Z  19 โ”‚     ]);
2026-10-24T03:20:26.0688437Z  20 โ”‚     expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
2026-10-24T03:20:26.0688549Z     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0688683Z  21 โ”‚     expect(AuthStandardClientScopes).not.toContain("review:write");
2026-10-24T03:20:26.0688733Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0688736Z
2026-10-24T03:20:26.0689099Z   โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T03:20:26.0689210Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:58:21]
2026-10-24T03:20:26.0689380Z  57 โ”‚   it("ignores unknown response permissions without falling back to broader scopes", () => {
2026-10-24T03:20:26.0689506Z  58 โ”‚     const session = Schema.decodeUnknownSync(AuthSessionState)({
2026-10-24T03:20:26.0689614Z     ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0689685Z  59 โ”‚       authenticated: true,
2026-10-24T03:20:26.0689742Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0689747Z
2026-10-24T03:20:26.0689942Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T03:20:26.0690111Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17]
2026-10-24T03:20:26.0690174Z  813 โ”‚               <div
2026-10-24T03:20:26.0690289Z  814 โ”‚                 key={`${index}:${check.name}:${check.url ?? ""}`}
2026-10-24T03:20:26.0690430Z      ยท                 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0690601Z  815 โ”‚                 className="group flex items-center gap-2 rounded-md pr-1 hover:bg-accent/60"
2026-10-24T03:20:26.0690652Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0690799Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T03:20:26.0690802Z
2026-10-24T03:20:26.0691085Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0691261Z       โ•ญโ”€[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5]
2026-10-24T03:20:26.0691343Z  1314 โ”‚     queuedMessagesByThreadKey,
2026-10-24T03:20:26.0691406Z  1315 โ”‚     retryTick,
2026-10-24T03:20:26.0691480Z       ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0691624Z       ยท         โ•ฐโ”€โ”€ Unnecessary dependency `retryTick`
2026-10-24T03:20:26.0691697Z  1316 โ”‚     restoreQueuedMessage,
2026-10-24T03:20:26.0691750Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0692045Z   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-24T03:20:26.0692363Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0692368Z
2026-10-24T03:20:26.0692661Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0692797Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
2026-10-24T03:20:26.0692849Z  57 โ”‚
2026-10-24T03:20:26.0692914Z  58 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0692985Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0693115Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0693210Z  59 โ”‚     const controller = new AbortController();
2026-10-24T03:20:26.0693283Z  60 โ”‚     setLoadState("pending");
2026-10-24T03:20:26.0693359Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0693534Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0693696Z  61 โ”‚     // A renewed signature is used on Retry, not as a reason to reset the native player.
2026-10-24T03:20:26.0693748Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0694357Z   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-24T03:20:26.0694681Z   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-24T03:20:26.0694684Z
2026-10-24T03:20:26.0694959Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0695130Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
2026-10-24T03:20:26.0695213Z  70 โ”‚     return () => controller.abort();
2026-10-24T03:20:26.0695310Z  71 โ”‚   }, [player, props.playRequested, attempt]);
2026-10-24T03:20:26.0695484Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0695713Z     ยท          โ”‚             โ”‚              โ•ฐโ”€โ”€ Unnecessary dependency `attempt`
2026-10-24T03:20:26.0695915Z     ยท          โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `props.playRequested`
2026-10-24T03:20:26.0696054Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `player_0`
2026-10-24T03:20:26.0696108Z  72 โ”‚
2026-10-24T03:20:26.0696159Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0696461Z   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-24T03:20:26.0696780Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0696783Z
2026-10-24T03:20:26.0696987Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0697120Z     โ•ญโ”€[apps/mobile/src/components/ComposerEditor.tsx:82:6]
2026-10-24T03:20:26.0697175Z  81 โ”‚     },
2026-10-24T03:20:26.0697241Z  82 โ”‚     [draftKey],
2026-10-24T03:20:26.0697313Z     ยท      โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0697450Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `draftKey`
2026-10-24T03:20:26.0697509Z  83 โ”‚   );
2026-10-24T03:20:26.0697563Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0697857Z   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-24T03:20:26.0698168Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0698171Z
2026-10-24T03:20:26.0698712Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T03:20:26.0698874Z      โ•ญโ”€[packages/contracts/src/composerContext.test.ts:181:18]
2026-10-24T03:20:26.0699018Z  180 โ”‚   it("sends a message without the records the wire cannot carry", () => {
2026-10-24T03:20:26.0699203Z  181 โ”‚     const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
2026-10-24T03:20:26.0699311Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0699375Z  182 โ”‚       version: 1,
2026-10-24T03:20:26.0699428Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0699430Z
2026-10-24T03:20:26.0699623Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T03:20:26.0699772Z      โ•ญโ”€[apps/mobile/src/components/ComposerContextSheet.tsx:267:25]
2026-10-24T03:20:26.0699880Z  266 โ”‚                 {record.elements?.map((element, index) => (
2026-10-24T03:20:26.0700048Z  267 โ”‚                   <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
2026-10-24T03:20:26.0700294Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0700414Z  268 โ”‚                     <ContextField
2026-10-24T03:20:26.0700465Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0700615Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T03:20:26.0700618Z
2026-10-24T03:20:26.0700878Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0701009Z     โ•ญโ”€[apps/mobile/src/state/use-vcs-action-state.ts:86:5]
2026-10-24T03:20:26.0701119Z  83 โ”‚   const [nowMs, setNowMs] = useState(() => Date.now());
2026-10-24T03:20:26.0701182Z  84 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0701254Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0701384Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0701477Z  85 โ”‚     if (!actionState.isRunning) return;
2026-10-24T03:20:26.0701547Z  86 โ”‚     setNowMs(Date.now());
2026-10-24T03:20:26.0701618Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0701784Z     ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0701910Z  87 โ”‚     const interval = setInterval(() => setNowMs(Date.now()), 1000);
2026-10-24T03:20:26.0701961Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0702603Z   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-24T03:20:26.0702931Z   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-24T03:20:26.0702936Z
2026-10-24T03:20:26.0703107Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T03:20:26.0703300Z     โ•ญโ”€[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
2026-10-24T03:20:26.0703352Z  52 โ”‚
2026-10-24T03:20:26.0703419Z  53 โ”‚   for (const {} of [
2026-10-24T03:20:26.0703492Z     ยท              โ”€โ”€
2026-10-24T03:20:26.0703556Z  54 โ”‚     { healthy: true },
2026-10-24T03:20:26.0703608Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0703840Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T03:20:26.0703843Z
2026-10-24T03:20:26.0704106Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0704243Z      โ•ญโ”€[apps/mobile/src/components/ProjectFavicon.tsx:159:5]
2026-10-24T03:20:26.0704433Z  154 โ”‚   const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
2026-10-24T03:20:26.0704503Z  155 โ”‚   useLayoutEffect(() => {
2026-10-24T03:20:26.0704581Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0704716Z      ยท          โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0704803Z  156 โ”‚     if (faviconRequest === null) return;
2026-10-24T03:20:26.0704856Z  157 โ”‚
2026-10-24T03:20:26.0704990Z  158 โ”‚     const endRequest = beginProjectFaviconRequest(faviconRequest);
2026-10-24T03:20:26.0705087Z  159 โ”‚     setActiveFaviconRequest(faviconRequest);
2026-10-24T03:20:26.0705178Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0705427Z      ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0705525Z  160 โ”‚     return endRequest;
2026-10-24T03:20:26.0705577Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0706182Z   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-24T03:20:26.0706506Z   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-24T03:20:26.0706509Z
2026-10-24T03:20:26.0706770Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T03:20:26.0706916Z       โ•ญโ”€[packages/provider-opencode/src/server/adapter.ts:3755:7]
2026-10-24T03:20:26.0706972Z  3754 โ”‚
2026-10-24T03:20:26.0707172Z  3755 โ”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, OpenCodeAdapterV2DriverEnv> =
2026-10-24T03:20:26.0707243Z       ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T03:20:26.0707368Z       ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T03:20:26.0707432Z  3756 โ”‚   Layer.effect(
2026-10-24T03:20:26.0707483Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0707589Z   help: Consider removing this declaration.
2026-10-24T03:20:26.0707591Z
2026-10-24T03:20:26.0707885Z   โš  eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'.
2026-10-24T03:20:26.0708018Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:218:7]
2026-10-24T03:20:26.0708073Z  217 โ”‚
2026-10-24T03:20:26.0708222Z  218 โ”‚ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect<void> =>
2026-10-24T03:20:26.0708312Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0708469Z      ยท                 โ•ฐโ”€โ”€ 'revokeActiveMcpThread' is declared here
2026-10-24T03:20:26.0708658Z  219 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void;
2026-10-24T03:20:26.0708709Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0708814Z   help: Consider removing this declaration.
2026-10-24T03:20:26.0708816Z
2026-10-24T03:20:26.0709129Z   โš  eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T03:20:26.0709260Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:221:7]
2026-10-24T03:20:26.0709318Z  220 โ”‚
2026-10-24T03:20:26.0709453Z  221 โ”‚ const revokeAllActiveMcpCredentials = (): Effect.Effect<void> =>
2026-10-24T03:20:26.0709556Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0709734Z      ยท                     โ•ฐโ”€โ”€ 'revokeAllActiveMcpCredentials' is declared here
2026-10-24T03:20:26.0709898Z  222 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void;
2026-10-24T03:20:26.0709949Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0710052Z   help: Consider removing this declaration.
2026-10-24T03:20:26.0710054Z
2026-10-24T03:20:26.0710311Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0710459Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55]
2026-10-24T03:20:26.0710586Z  61 โ”‚   }, []);
2026-10-24T03:20:26.0710687Z  62 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0710757Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0710886Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0711036Z  63 โ”‚     if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl);
2026-10-24T03:20:26.0711160Z     ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0711364Z     ยท                                                              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0711443Z  64 โ”‚   }, [playbackUrl, resolvedUrl]);
2026-10-24T03:20:26.0711494Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0712105Z   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-24T03:20:26.0712434Z   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-24T03:20:26.0712437Z
2026-10-24T03:20:26.0712614Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0712767Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27]
2026-10-24T03:20:26.0712949Z  151 โ”‚         <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
2026-10-24T03:20:26.0713028Z  152 โ”‚           {props.children(open)}
2026-10-24T03:20:26.0713123Z      ยท                           โ”€โ”€โ”ฌโ”€
2026-10-24T03:20:26.0713283Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T03:20:26.0713346Z  153 โ”‚         </View>
2026-10-24T03:20:26.0713397Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0713869Z   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-24T03:20:26.0714162Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0714165Z
2026-10-24T03:20:26.0714365Z   โš  react(memo-dependencies): Found missing/extra memoization dependencies
2026-10-24T03:20:26.0714521Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9]
2026-10-24T03:20:26.0714605Z  139 โ”‚       if (action.id !== undefined) {
2026-10-24T03:20:26.0714683Z  140 โ”‚         props.onPressAction?.({
2026-10-24T03:20:26.0714755Z      ยท         โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T03:20:26.0714886Z      ยท           โ•ฐโ”€โ”€ Missing dependency `props`
2026-10-24T03:20:26.0714979Z  141 โ”‚           nativeEvent: { event: action.id },
2026-10-24T03:20:26.0715125Z  142 โ”‚         } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
2026-10-24T03:20:26.0715181Z  143 โ”‚       }
2026-10-24T03:20:26.0715238Z  144 โ”‚     },
2026-10-24T03:20:26.0715320Z  145 โ”‚     [close, props.onPressAction],
2026-10-24T03:20:26.0715413Z      ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0715709Z      ยท                      โ•ฐโ”€โ”€ Overly precise dependency `props.onPressAction`, use `props` instead
2026-10-24T03:20:26.0715793Z  146 โ”‚   );
2026-10-24T03:20:26.0715844Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0716330Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-24T03:20:26.0716645Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0716648Z
2026-10-24T03:20:26.0716864Z   โš  react(no-unstable-nested-components): Do not define components during render.
2026-10-24T03:20:26.0716972Z       โ•ญโ”€[apps/mobile/src/Stack.tsx:1074:21]
2026-10-24T03:20:26.0717034Z  1073 โ”‚     <Navigator
2026-10-24T03:20:26.0717171Z  1074 โ”‚       screenLayout={(props) => <GuardedScreenLayout {...props} />}
2026-10-24T03:20:26.0717313Z       ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0717383Z  1075 โ”‚       screenListeners={{
2026-10-24T03:20:26.0717436Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0717799Z   help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true.
2026-10-24T03:20:26.0717804Z
2026-10-24T03:20:26.0717990Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T03:20:26.0718130Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
2026-10-24T03:20:26.0718294Z  120 โ”‚   const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
2026-10-24T03:20:26.0718389Z  121 โ”‚   const dispatch = vi.fn((_: unknown) =>
2026-10-24T03:20:26.0718474Z      ยท                           โ”ฌ
2026-10-24T03:20:26.0718609Z      ยท                           โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T03:20:26.0718711Z  122 โ”‚     (options.dispatchGate ?? Effect.void).pipe(
2026-10-24T03:20:26.0718762Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0718864Z   help: Consider removing this parameter.
2026-10-24T03:20:26.0718867Z
2026-10-24T03:20:26.0719052Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T03:20:26.0719190Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
2026-10-24T03:20:26.0719244Z  133 โ”‚   );
2026-10-24T03:20:26.0719350Z  134 โ”‚   const listLocalBranchNames = vi.fn((_: string) =>
2026-10-24T03:20:26.0719520Z      ยท                                       โ”ฌ
2026-10-24T03:20:26.0719691Z      ยท                                       โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T03:20:26.0719759Z  135 โ”‚     Effect.succeed(
2026-10-24T03:20:26.0719809Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0719910Z   help: Consider removing this parameter.
2026-10-24T03:20:26.0719913Z
2026-10-24T03:20:26.0720095Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T03:20:26.0720230Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
2026-10-24T03:20:26.0720285Z  177 โ”‚   });
2026-10-24T03:20:26.0720384Z  178 โ”‚   const sendToThread = vi.fn((_: unknown) => {
2026-10-24T03:20:26.0720472Z      ยท                               โ”ฌ
2026-10-24T03:20:26.0720614Z      ยท                               โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T03:20:26.0720716Z  179 โ”‚     switch (options.continuation ?? "queued") {
2026-10-24T03:20:26.0720768Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0720868Z   help: Consider removing this parameter.
2026-10-24T03:20:26.0720871Z
2026-10-24T03:20:26.0721053Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T03:20:26.0721187Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
2026-10-24T03:20:26.0721242Z  202 โ”‚   );
2026-10-24T03:20:26.0721339Z  203 โ”‚   const removeWorktree = vi.fn((_: unknown) =>
2026-10-24T03:20:26.0721430Z      ยท                                 โ”ฌ
2026-10-24T03:20:26.0721566Z      ยท                                 โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T03:20:26.0721647Z  204 โ”‚     options.removeWorktreeFails
2026-10-24T03:20:26.0721697Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0721802Z   help: Consider removing this parameter.
2026-10-24T03:20:26.0721807Z
2026-10-24T03:20:26.0721987Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T03:20:26.0722122Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
2026-10-24T03:20:26.0722177Z  207 โ”‚   );
2026-10-24T03:20:26.0722279Z  208 โ”‚   const deleteLocalBranch = vi.fn((_: unknown) =>
2026-10-24T03:20:26.0722371Z      ยท                                    โ”ฌ
2026-10-24T03:20:26.0722542Z      ยท                                    โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T03:20:26.0722629Z  209 โ”‚     options.deleteLocalBranchFails
2026-10-24T03:20:26.0722679Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0722777Z   help: Consider removing this parameter.
2026-10-24T03:20:26.0722779Z
2026-10-24T03:20:26.0722967Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T03:20:26.0723105Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
2026-10-24T03:20:26.0723158Z  212 โ”‚   );
2026-10-24T03:20:26.0723271Z  213 โ”‚   const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
2026-10-24T03:20:26.0723370Z      ยท                                          โ”ฌ
2026-10-24T03:20:26.0723514Z      ยท                                          โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T03:20:26.0723600Z  214 โ”‚     options.fetchWorktreeBaseFails
2026-10-24T03:20:26.0723650Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0723750Z   help: Consider removing this parameter.
2026-10-24T03:20:26.0723752Z
2026-10-24T03:20:26.0723932Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T03:20:26.0724242Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
2026-10-24T03:20:26.0724326Z  253 โ”‚   );
2026-10-24T03:20:26.0724418Z  254 โ”‚   const localStatus = vi.fn((_: unknown) =>
2026-10-24T03:20:26.0724505Z      ยท                              โ”ฌ
2026-10-24T03:20:26.0724640Z      ยท                              โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T03:20:26.0724706Z  255 โ”‚     Effect.succeed({
2026-10-24T03:20:26.0724756Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0724856Z   help: Consider removing this parameter.
2026-10-24T03:20:26.0724858Z
2026-10-24T03:20:26.0725038Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T03:20:26.0725170Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
2026-10-24T03:20:26.0725225Z  263 โ”‚   );
2026-10-24T03:20:26.0725382Z  264 โ”‚   const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
2026-10-24T03:20:26.0725475Z      ยท                                โ”ฌ
2026-10-24T03:20:26.0725610Z      ยท                                โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T03:20:26.0725758Z  265 โ”‚   const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
2026-10-24T03:20:26.0725809Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0725907Z   help: Consider removing this parameter.
2026-10-24T03:20:26.0725910Z
2026-10-24T03:20:26.0726054Z   โš  react(refs): Cannot access refs during render
2026-10-24T03:20:26.0726172Z     โ•ญโ”€[apps/mobile/src/components/ui/Menu.tsx:54:36]
2026-10-24T03:20:26.0726354Z  53 โ”‚         const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
2026-10-24T03:20:26.0726535Z  54 โ”‚ โ•ญโ”€โ–ถ     children = cloneElement(child, {
2026-10-24T03:20:26.0726645Z  55 โ”‚ โ”‚         onTouchStart: (event) => {
2026-10-24T03:20:26.0726803Z  56 โ”‚ โ”‚           // Reset for a new touch, not onPressIn, which also fires when a
2026-10-24T03:20:26.0726962Z  57 โ”‚ โ”‚           // finger moves out of the row and back during the same gesture.
2026-10-24T03:20:26.0727089Z  58 โ”‚ โ”‚           menuPress.current.isPreparing = false;
2026-10-24T03:20:26.0727257Z  59 โ”‚ โ”‚           menuPress.current.suppressPress = menuPress.current.isOpen;
2026-10-24T03:20:26.0727370Z  60 โ”‚ โ”‚           pendingPress.current = null;
2026-10-24T03:20:26.0727490Z  61 โ”‚ โ”‚           child.props.onTouchStart?.(event);
2026-10-24T03:20:26.0727575Z  62 โ”‚ โ”‚         },
2026-10-24T03:20:26.0727678Z  63 โ”‚ โ”‚         onPress: (event) => {
2026-10-24T03:20:26.0727849Z  64 โ”‚ โ”‚           // Accessibility clicks have no touch identifier and must not inherit
2026-10-24T03:20:26.0727989Z  65 โ”‚ โ”‚           // cancellation from a previous physical gesture.
2026-10-24T03:20:26.0728157Z  66 โ”‚ โ”‚           const isTouch = typeof event.nativeEvent.identifier === "number";
2026-10-24T03:20:26.0728349Z  67 โ”‚ โ”‚           if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
2026-10-24T03:20:26.0728435Z  68 โ”‚ โ”‚             return;
2026-10-24T03:20:26.0728513Z  69 โ”‚ โ”‚           }
2026-10-24T03:20:26.0728652Z  70 โ”‚ โ”‚           if (isTouch && menuPress.current.isPreparing) {
2026-10-24T03:20:26.0728894Z  71 โ”‚ โ”‚             // A release can arrive between native menu preparation and display.
2026-10-24T03:20:26.0729092Z  72 โ”‚ โ”‚             // Let UIKit's display/cancel callback decide this press's outcome.
2026-10-24T03:20:26.0729191Z  73 โ”‚ โ”‚             event.persist();
2026-10-24T03:20:26.0729351Z  74 โ”‚ โ”‚             pendingPress.current = () => child.props.onPress?.(event);
2026-10-24T03:20:26.0729437Z  75 โ”‚ โ”‚             return;
2026-10-24T03:20:26.0729514Z  76 โ”‚ โ”‚           }
2026-10-24T03:20:26.0729628Z  77 โ”‚ โ”‚           child.props.onPress?.(event);
2026-10-24T03:20:26.0729704Z  78 โ”‚ โ”‚         },
2026-10-24T03:20:26.0729835Z  79 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T03:20:26.0730079Z     ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T03:20:26.0730183Z  80 โ”‚         menuProps.onMenuInteractionStart = () => {
2026-10-24T03:20:26.0730236Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0730706Z   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-24T03:20:26.0731002Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T03:20:26.0731005Z
2026-10-24T03:20:26.0731265Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T03:20:26.0731407Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:68:5]
2026-10-24T03:20:26.0731511Z  66 โ”‚   const { id: attachmentId, fileUri } = attachment;
2026-10-24T03:20:26.0731576Z  67 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0731648Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0731779Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T03:20:26.0731844Z  68 โ”‚     setUri(null);
2026-10-24T03:20:26.0731914Z     ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T03:20:26.0732080Z     ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T03:20:26.0732143Z  69 โ”‚     setError(null);
2026-10-24T03:20:26.0732195Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0732843Z   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-24T03:20:26.0733171Z   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-24T03:20:26.0733174Z
2026-10-24T03:20:26.0733377Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0733515Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:91:7]
2026-10-24T03:20:26.0733570Z  90 โ”‚     };
2026-10-24T03:20:26.0733645Z  91 โ”‚   }, [attachmentId, fileUri]);
2026-10-24T03:20:26.0733762Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T03:20:26.0734017Z     ยท             โ”‚          โ•ฐโ”€โ”€ Unnecessary dependency `fileUri`
2026-10-24T03:20:26.0734194Z     ยท             โ•ฐโ”€โ”€ Unnecessary dependency `attachmentId`
2026-10-24T03:20:26.0734328Z  92 โ”‚   const mimeType = videoMimeType(attachment) ?? attachment.mimeType;
2026-10-24T03:20:26.0734380Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0734674Z   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-24T03:20:26.0734987Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0734990Z
2026-10-24T03:20:26.0735206Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T03:20:26.0735353Z      โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:213:34]
2026-10-24T03:20:26.0735420Z  212 โ”‚   useEffect(() => {
2026-10-24T03:20:26.0735535Z  213 โ”‚     if (!isFocused && hasSource) props.onRequestClose();
2026-10-24T03:20:26.0735634Z      ยท                                  โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T03:20:26.0735785Z      ยท                                    โ•ฐโ”€โ”€ Missing dependency `props`
2026-10-24T03:20:26.0735890Z  214 โ”‚   }, [isFocused, hasSource, props.onRequestClose]);
2026-10-24T03:20:26.0736004Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0736234Z      ยท                                       โ•ฐโ”€โ”€ Overly precise dependency `props.onRequestClose`, use `props` instead
2026-10-24T03:20:26.0736307Z  215 โ”‚   const { source } = props;
2026-10-24T03:20:26.0736358Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0736786Z   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-24T03:20:26.0737103Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0737106Z
2026-10-24T03:20:26.0737263Z   โš  eslint(no-new): Do not use 'new' for side effects.
2026-10-24T03:20:26.0737390Z      โ•ญโ”€[apps/server/src/mcp/McpToolAccess.test.ts:168:3]
2026-10-24T03:20:26.0737501Z  167 โ”‚   // @ts-expect-error a declaration constructed directly
2026-10-24T03:20:26.0737599Z  168 โ”‚   new McpToolAccess.Declaration(unchecked);
2026-10-24T03:20:26.0737697Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0737831Z  169 โ”‚   // @ts-expect-error a handlers layer built outside McpToolAccess
2026-10-24T03:20:26.0737885Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0738046Z   help: Assign the result of 'new' to a variable or compare it to a reference.
2026-10-24T03:20:26.0738048Z
2026-10-24T03:20:26.0738251Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T03:20:26.0738366Z     โ•ญโ”€[apps/mobile/src/state/thread-order.ts:29:7]
2026-10-24T03:20:26.0738440Z  28 โ”‚     getPendingThreadOrder();
2026-10-24T03:20:26.0738521Z  29 โ”‚   }, [nowMinute, snoozeWakeTick]);
2026-10-24T03:20:26.0738745Z     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0738946Z     ยท           โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-24T03:20:26.0739173Z     ยท           โ•ฐโ”€โ”€ Unnecessary dependency `nowMinute`
2026-10-24T03:20:26.0739280Z  30 โ”‚   return pending;
2026-10-24T03:20:26.0739333Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0739632Z   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-24T03:20:26.0739942Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0739944Z
2026-10-24T03:20:26.0740159Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T03:20:26.0740305Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
2026-10-24T03:20:26.0740414Z  772 โ”‚     if (settingsSheetPresentation.isActive) {
2026-10-24T03:20:26.0740545Z  773 โ”‚       settingsRoutePresentation.present(settingsRouteSession);
2026-10-24T03:20:26.0740639Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0740814Z      ยท                   โ•ฐโ”€โ”€ Missing dependency `settingsRoutePresentation`
2026-10-24T03:20:26.0740870Z  774 โ”‚     }
2026-10-24T03:20:26.0741077Z  775 โ”‚   }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
2026-10-24T03:20:26.0741186Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0741468Z      ยท                       โ•ฐโ”€โ”€ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
2026-10-24T03:20:26.0741522Z  776 โ”‚
2026-10-24T03:20:26.0741574Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0742005Z   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-24T03:20:26.0742322Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T03:20:26.0742325Z
2026-10-24T03:20:26.0742507Z   โš  react(immutability): This value cannot be modified
2026-10-24T03:20:26.0742652Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5]
2026-10-24T03:20:26.0742812Z  387 โ”‚     typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
2026-10-24T03:20:26.0742946Z  388 โ”‚   const animatedBorderRadius = useSharedValue(targetBorderRadius);
2026-10-24T03:20:26.0743037Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0743257Z      ยท                   โ•ฐโ”€โ”€ `animatedBorderRadius` originates here
2026-10-24T03:20:26.0743445Z  389 โ”‚   const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
2026-10-24T03:20:26.0743515Z  390 โ”‚   useLayoutEffect(() => {
2026-10-24T03:20:26.0743616Z  391 โ”‚     animatedBorderRadius.value = shouldAnimate
2026-10-24T03:20:26.0743704Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0743863Z      ยท               โ•ฐโ”€โ”€ `animatedBorderRadius` cannot be modified
2026-10-24T03:20:26.0743951Z  392 โ”‚       ? withTiming(targetBorderRadius, {
2026-10-24T03:20:26.0744003Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0744268Z   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-24T03:20:26.0744580Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T03:20:26.0744586Z
2026-10-24T03:20:26.0744829Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T03:20:26.0744985Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
2026-10-24T03:20:26.0745047Z  289 โ”‚   return (
2026-10-24T03:20:26.0745183Z  290 โ”‚     <ExistingThreadSettingsRouteContext.Provider value={value}>
2026-10-24T03:20:26.0745304Z      ยท                                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0745376Z  291 โ”‚       {props.children}
2026-10-24T03:20:26.0745428Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0745660Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T03:20:26.0745804Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T03:20:26.0745807Z
2026-10-24T03:20:26.0746047Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T03:20:26.0746203Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
2026-10-24T03:20:26.0746262Z  653 โ”‚   return (
2026-10-24T03:20:26.0746383Z  654 โ”‚     <ThreadSettingsSessionContext.Provider value={value}>
2026-10-24T03:20:26.0746498Z      ยท                                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0746567Z  655 โ”‚       {props.children}
2026-10-24T03:20:26.0746618Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0746845Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T03:20:26.0746982Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T03:20:26.0746986Z
2026-10-24T03:20:26.0747224Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T03:20:26.0747383Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
2026-10-24T03:20:26.0747444Z  1461 โ”‚   return (
2026-10-24T03:20:26.0747606Z  1462 โ”‚     <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
2026-10-24T03:20:26.0747739Z       ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0747838Z  1463 โ”‚       <ThreadSettingsPickerStack.Navigator
2026-10-24T03:20:26.0747890Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T03:20:26.0748183Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T03:20:26.0748351Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T03:20:26.0748354Z
2026-10-24T03:20:26.0748438Z Found 0 errors and 362 warnings in 5408 files (5.3s, 8 threads)
2026-10-24T03:20:26.1259925Z Post job cleanup.
2026-10-24T03:20:26.1903009Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-24T03:20:26.1975658Z Post job cleanup.
2026-10-24T03:20:26.1987365Z ##[start-action display=Cache full pnpm store;id=__0a35c83c-85cf-4677-9cbf-74dcfdf3e933.__actions_cache]
2026-10-24T03:20:26.2340646Z Post job cleanup.
2026-10-24T03:20:26.2977832Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache.
2026-10-24T03:20:26.3011867Z ##[end-action id=__0a35c83c-85cf-4677-9cbf-74dcfdf3e933.__actions_cache;outcome=success;conclusion=success;duration_ms=102]
2026-10-24T03:20:26.3013503Z ##[start-action display=Cache Vite+;id=__0a35c83c-85cf-4677-9cbf-74dcfdf3e933.vp_cache]
2026-10-24T03:20:26.3039848Z Post job cleanup.
2026-10-24T03:20:26.3666499Z 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-24T03:20:26.3702294Z ##[end-action id=__0a35c83c-85cf-4677-9cbf-74dcfdf3e933.vp_cache;outcome=success;conclusion=success;duration_ms=68]
2026-10-24T03:20:26.3734126Z Post job cleanup.
2026-10-24T03:20:26.4179569Z [command]/usr/local/bin/git version
2026-10-24T03:20:26.4210083Z git version 2.55.0
2026-10-24T03:20:26.4228027Z Temporarily overriding HOME='/home/runner/_work/_temp/f3b897d2-b4ba-4b9d-81ca-0eaa56c7ff9e' before making global git config changes
2026-10-24T03:20:26.4228626Z Adding repository directory to the temporary git global config as a safe directory
2026-10-24T03:20:26.4230778Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-24T03:20:26.4253198Z Removing SSH command configuration
2026-10-24T03:20:26.4256198Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-24T03:20:26.4279347Z [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-24T03:20:26.4419845Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-24T03:20:26.4439754Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-24T03:20:26.4481810Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-24T03:20:26.4496521Z ##[group]Run '/job_completed.sh'
2026-10-24T03:20:26.4503094Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-24T03:20:26.4503264Z env:
2026-10-24T03:20:26.4503380Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137
2026-10-24T03:20:26.4503541Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392
2026-10-24T03:20:26.4503685Z   BLACKSMITH_CHECK_RUN_ID: 120764668263
2026-10-24T03:20:26.4503829Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-24T03:20:26.4503970Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-24T03:20:26.4504106Z ##[endgroup]
2026-10-24T03:20:26.4581250Z Docker container cache not activated, skipping hash computation.
2026-10-24T03:20:26.4869628Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-24T03:20:26.4911415Z Cleaning up orphan processes