GitHub check

256 KB of 593 KB loaded Download the full log (593 KB)
337 KB of earlier output not loaded
5Z      ยท             โ•ฐโ”€โ”€ This modifies `cardCoverage`
2026-10-23T06:46:06.0944604Z  101 โ”‚       return;
2026-10-23T06:46:06.0944660Z  102 โ”‚     }
2026-10-23T06:46:06.0944762Z  103 โ”‚     cardCoverage.value = withTiming(coverage, {
2026-10-23T06:46:06.0944859Z  104 โ”‚       duration: USER_INPUT_TOGGLE_DURATION_MS,
2026-10-23T06:46:06.0944999Z  105 โ”‚       easing: Easing.out(Easing.cubic),
2026-10-23T06:46:06.0945085Z  106 โ”‚     });
2026-10-23T06:46:06.0945152Z  107 โ”‚   }, [cardCoverage]);
2026-10-23T06:46:06.0945236Z  108 โ”‚   const handleBarLayout = useCallback(
2026-10-23T06:46:06.0945315Z  109 โ”‚     (event: LayoutChangeEvent) => {
2026-10-23T06:46:06.0945422Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0945647Z      ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-23T06:46:06.0945773Z  110 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
2026-10-23T06:46:06.0945824Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0946165Z   help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-23T06:46:06.0946477Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.0946482Z
2026-10-23T06:46:06.0946681Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-23T06:46:06.0946838Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
2026-10-23T06:46:06.0946924Z  115 โ”‚   const handleCardLayout = useCallback(
2026-10-23T06:46:06.0947004Z  116 โ”‚     (event: LayoutChangeEvent) => {
2026-10-23T06:46:06.0947109Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0947328Z      ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardHeight` after render
2026-10-23T06:46:06.0947455Z  117 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-23T06:46:06.0947573Z  118 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
2026-10-23T06:46:06.0947654Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0947783Z      ยท            โ•ฐโ”€โ”€ This modifies `cardHeight`
2026-10-23T06:46:06.0947850Z  119 โ”‚       notifyCoverage();
2026-10-23T06:46:06.0947901Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0948241Z   help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-23T06:46:06.0948583Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.0948586Z
2026-10-23T06:46:06.0948961Z   โš  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-23T06:46:06.0949080Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:17:12]
2026-10-23T06:46:06.0949299Z  16 โ”‚   it("decodes legacy review credentials without offering them in new grants", () => {
2026-10-23T06:46:06.0949469Z  17 โ”‚     expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
2026-10-23T06:46:06.0949571Z     ยท            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0949636Z  18 โ”‚       "review:write",
2026-10-23T06:46:06.0949688Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0949690Z
2026-10-23T06:46:06.0950057Z   โš  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-23T06:46:06.0950236Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:20:18]
2026-10-23T06:46:06.0950333Z  19 โ”‚     ]);
2026-10-23T06:46:06.0950496Z  20 โ”‚     expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
2026-10-23T06:46:06.0950603Z     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0950738Z  21 โ”‚     expect(AuthStandardClientScopes).not.toContain("review:write");
2026-10-23T06:46:06.0950790Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0950792Z
2026-10-23T06:46:06.0951156Z   โš  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-23T06:46:06.0951268Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:58:21]
2026-10-23T06:46:06.0951439Z  57 โ”‚   it("ignores unknown response permissions without falling back to broader scopes", () => {
2026-10-23T06:46:06.0951571Z  58 โ”‚     const session = Schema.decodeUnknownSync(AuthSessionState)({
2026-10-23T06:46:06.0951681Z     ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0951752Z  59 โ”‚       authenticated: true,
2026-10-23T06:46:06.0951803Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0951806Z
2026-10-23T06:46:06.0952068Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.0952207Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2109:5]
2026-10-23T06:46:06.0952264Z  2107 โ”‚   );
2026-10-23T06:46:06.0952332Z  2108 โ”‚   useEffect(() => {
2026-10-23T06:46:06.0952406Z       ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0952538Z       ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.0952612Z  2109 โ”‚     setExpandedVideo(null);
2026-10-23T06:46:06.0952702Z       ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0952879Z       ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.0952951Z  2110 โ”‚     setExpandedFile(null);
2026-10-23T06:46:06.0953004Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0953607Z   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-23T06:46:06.0953934Z   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-23T06:46:06.0953937Z
2026-10-23T06:46:06.0954173Z   โš  eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
2026-10-23T06:46:06.0954308Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:62:10]
2026-10-23T06:46:06.0954446Z  61 โ”‚ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
2026-10-23T06:46:06.0954586Z  62 โ”‚ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
2026-10-23T06:46:06.0954684Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0954849Z     ยท                     โ•ฐโ”€โ”€ 'isMarkdownFileLinkLabel' is imported here
2026-10-23T06:46:06.0955008Z  63 โ”‚ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
2026-10-23T06:46:06.0955061Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0955160Z   help: Consider removing this import.
2026-10-23T06:46:06.0955163Z
2026-10-23T06:46:06.0955424Z   โš  eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
2026-10-23T06:46:06.0955586Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:88:3]
2026-10-23T06:46:06.0955644Z  87 โ”‚ import {
2026-10-23T06:46:06.0955710Z  88 โ”‚   createContext,
2026-10-23T06:46:06.0955784Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0955922Z     ยท         โ•ฐโ”€โ”€ 'createContext' is imported here
2026-10-23T06:46:06.0955979Z  89 โ”‚   memo,
2026-10-23T06:46:06.0956030Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0956126Z   help: Consider removing this import.
2026-10-23T06:46:06.0956129Z
2026-10-23T06:46:06.0956345Z   โš  eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-23T06:46:06.0956481Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:103:3]
2026-10-23T06:46:06.0956547Z  102 โ”‚ import {
2026-10-23T06:46:06.0956617Z  103 โ”‚   ActivityIndicator,
2026-10-23T06:46:06.0956701Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0956846Z      ยท           โ•ฐโ”€โ”€ 'ActivityIndicator' is imported here
2026-10-23T06:46:06.0956905Z  104 โ”‚   Image,
2026-10-23T06:46:06.0956955Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0957051Z   help: Consider removing this import.
2026-10-23T06:46:06.0957054Z
2026-10-23T06:46:06.0957255Z   โš  eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
2026-10-23T06:46:06.0957388Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:110:3]
2026-10-23T06:46:06.0957449Z  109 โ”‚   Pressable,
2026-10-23T06:46:06.0957514Z  110 โ”‚   ScrollView,
2026-10-23T06:46:06.0957588Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0957727Z      ยท        โ•ฐโ”€โ”€ 'ScrollView' is imported here
2026-10-23T06:46:06.0957790Z  111 โ”‚   StyleSheet,
2026-10-23T06:46:06.0957842Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0957937Z   help: Consider removing this import.
2026-10-23T06:46:06.0957939Z
2026-10-23T06:46:06.0958141Z   โš  eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
2026-10-23T06:46:06.0958274Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:112:11]
2026-10-23T06:46:06.0958336Z  111 โ”‚   StyleSheet,
2026-10-23T06:46:06.0958429Z  112 โ”‚   Text as NativeText,
2026-10-23T06:46:06.0958510Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0958648Z      ยท                โ•ฐโ”€โ”€ 'NativeText' is imported here
2026-10-23T06:46:06.0958715Z  113 โ”‚   type ColorValue,
2026-10-23T06:46:06.0958768Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0958921Z   help: Consider removing this import.
2026-10-23T06:46:06.0958957Z
2026-10-23T06:46:06.0959172Z   โš  eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
2026-10-23T06:46:06.0959306Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:134:10]
2026-10-23T06:46:06.0959442Z  133 โ”‚ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
2026-10-23T06:46:06.0959569Z  134 โ”‚ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
2026-10-23T06:46:06.0959658Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0959812Z      ยท                   โ•ฐโ”€โ”€ 'tryOpenExternalUrl' is imported here
2026-10-23T06:46:06.0959960Z  135 โ”‚ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
2026-10-23T06:46:06.0960011Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0960110Z   help: Consider removing this import.
2026-10-23T06:46:06.0960116Z
2026-10-23T06:46:06.0960335Z   โš  eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
2026-10-23T06:46:06.0960468Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:137:10]
2026-10-23T06:46:06.0960604Z  136 โ”‚ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
2026-10-23T06:46:06.0960729Z  137 โ”‚ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
2026-10-23T06:46:06.0960820Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0960975Z      ยท                   โ•ฐโ”€โ”€ 'faviconUrlForOrigin' is imported here
2026-10-23T06:46:06.0961034Z  138 โ”‚ import {
2026-10-23T06:46:06.0961084Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0961180Z   help: Consider removing this import.
2026-10-23T06:46:06.0961188Z
2026-10-23T06:46:06.0961408Z   โš  eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
2026-10-23T06:46:06.0961541Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:151:10]
2026-10-23T06:46:06.0961692Z  150 โ”‚ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
2026-10-23T06:46:06.0961826Z  151 โ”‚ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
2026-10-23T06:46:06.0961914Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0962064Z      ยท                  โ•ฐโ”€โ”€ 'MediaVideoPlayer' is imported here
2026-10-23T06:46:06.0962204Z  152 โ”‚ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
2026-10-23T06:46:06.0962254Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0962350Z   help: Consider removing this import.
2026-10-23T06:46:06.0962358Z
2026-10-23T06:46:06.0962585Z   โš  eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
2026-10-23T06:46:06.0962717Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:155:3]
2026-10-23T06:46:06.0962798Z  154 โ”‚   attachmentVideoPreviewSource,
2026-10-23T06:46:06.0962869Z  155 โ”‚   mediaVideoPreviewUri,
2026-10-23T06:46:06.0962954Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0963107Z      ยท             โ•ฐโ”€โ”€ 'mediaVideoPreviewUri' is imported here
2026-10-23T06:46:06.0963179Z  156 โ”‚   mediaVideoThumbnailKey,
2026-10-23T06:46:06.0963229Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0963325Z   help: Consider removing this import.
2026-10-23T06:46:06.0963327Z
2026-10-23T06:46:06.0963601Z   โš  eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
2026-10-23T06:46:06.0963758Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:156:3]
2026-10-23T06:46:06.0963828Z  155 โ”‚   mediaVideoPreviewUri,
2026-10-23T06:46:06.0963901Z  156 โ”‚   mediaVideoThumbnailKey,
2026-10-23T06:46:06.0963989Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0964145Z      ยท              โ•ฐโ”€โ”€ 'mediaVideoThumbnailKey' is imported here
2026-10-23T06:46:06.0964225Z  157 โ”‚   type MediaVideoPreviewSource,
2026-10-23T06:46:06.0964276Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0964371Z   help: Consider removing this import.
2026-10-23T06:46:06.0964373Z
2026-10-23T06:46:06.0964586Z   โš  eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
2026-10-23T06:46:06.0964718Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:157:8]
2026-10-23T06:46:06.0964795Z  156 โ”‚   mediaVideoThumbnailKey,
2026-10-23T06:46:06.0964877Z  157 โ”‚   type MediaVideoPreviewSource,
2026-10-23T06:46:06.0964971Z      ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0965136Z      ยท                   โ•ฐโ”€โ”€ 'MediaVideoPreviewSource' is imported here
2026-10-23T06:46:06.0965223Z  158 โ”‚ } from "../../lib/videoPreviewSource";
2026-10-23T06:46:06.0965276Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0965369Z   help: Consider removing this import.
2026-10-23T06:46:06.0965372Z
2026-10-23T06:46:06.0965572Z   โš  eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used.
2026-10-23T06:46:06.0965705Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:165:15]
2026-10-23T06:46:06.0965886Z  164 โ”‚ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection";
2026-10-23T06:46:06.0966029Z  165 โ”‚ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter";
2026-10-23T06:46:06.0966120Z      ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0966271Z      ยท                      โ•ฐโ”€โ”€ 'ReviewDiffTheme' is imported here
2026-10-23T06:46:06.0966332Z  166 โ”‚ import {
2026-10-23T06:46:06.0966382Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0966477Z   help: Consider removing this import.
2026-10-23T06:46:06.0966480Z
2026-10-23T06:46:06.0966713Z   โš  eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
2026-10-23T06:46:06.0966843Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:180:3]
2026-10-23T06:46:06.0966901Z  179 โ”‚ import {
2026-10-23T06:46:06.0966975Z  180 โ”‚   resolveMarkdownFontSizes,
2026-10-23T06:46:06.0967071Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0967233Z      ยท               โ•ฐโ”€โ”€ 'resolveMarkdownFontSizes' is imported here
2026-10-23T06:46:06.0967318Z  181 โ”‚   resolveNativeMarkdownTypography,
2026-10-23T06:46:06.0967370Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0967465Z   help: Consider removing this import.
2026-10-23T06:46:06.0967468Z
2026-10-23T06:46:06.0967692Z   โš  eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used.
2026-10-23T06:46:06.0967823Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:185:10]
2026-10-23T06:46:06.0967956Z  184 โ”‚ import { PierreEntryIcon } from "../../components/PierreEntryIcon";
2026-10-23T06:46:06.0968092Z  185 โ”‚ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons";
2026-10-23T06:46:06.0968188Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0968425Z      ยท                     โ•ฐโ”€โ”€ 'markdownLinkIconSource' is imported here
2026-10-23T06:46:06.0968509Z  186 โ”‚ import {
2026-10-23T06:46:06.0968561Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0968657Z   help: Consider removing this import.
2026-10-23T06:46:06.0968659Z
2026-10-23T06:46:06.0968918Z   โš  eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
2026-10-23T06:46:06.0969049Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:188:3]
2026-10-23T06:46:06.0969127Z  187 โ”‚   normalizeNativeMarkdownUrl,
2026-10-23T06:46:06.0969226Z  188 โ”‚   resolveMarkdownInlineCodePresentation,
2026-10-23T06:46:06.0969336Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0969539Z      ยท                     โ•ฐโ”€โ”€ 'resolveMarkdownInlineCodePresentation' is imported here
2026-10-23T06:46:06.0969616Z  189 โ”‚   resolveMarkdownLinkIcon,
2026-10-23T06:46:06.0969668Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0969763Z   help: Consider removing this import.
2026-10-23T06:46:06.0969766Z
2026-10-23T06:46:06.0969992Z   โš  eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used.
2026-10-23T06:46:06.0970124Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:189:3]
2026-10-23T06:46:06.0970219Z  188 โ”‚   resolveMarkdownInlineCodePresentation,
2026-10-23T06:46:06.0970293Z  189 โ”‚   resolveMarkdownLinkIcon,
2026-10-23T06:46:06.0970380Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0970538Z      ยท              โ•ฐโ”€โ”€ 'resolveMarkdownLinkIcon' is imported here
2026-10-23T06:46:06.0970630Z  190 โ”‚   resolveMarkdownLinkPresentation,
2026-10-23T06:46:06.0970685Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0970778Z   help: Consider removing this import.
2026-10-23T06:46:06.0970780Z
2026-10-23T06:46:06.0971010Z   โš  eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used.
2026-10-23T06:46:06.0971144Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:228:10]
2026-10-23T06:46:06.0971249Z  227 โ”‚ import { ThreadMcpApp } from "./McpAppWebView";
2026-10-23T06:46:06.0971394Z  228 โ”‚ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState";
2026-10-23T06:46:06.0971498Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0971665Z      ยท                      โ•ฐโ”€โ”€ 'useMarkdownCodeHighlight' is imported here
2026-10-23T06:46:06.0971725Z  229 โ”‚ import {
2026-10-23T06:46:06.0971775Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0971928Z   help: Consider removing this import.
2026-10-23T06:46:06.0971962Z
2026-10-23T06:46:06.0972174Z   โš  eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
2026-10-23T06:46:06.0972306Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:232:3]
2026-10-23T06:46:06.0972371Z  231 โ”‚   useAssetUrl,
2026-10-23T06:46:06.0972437Z  232 โ”‚   useAssetUrlState,
2026-10-23T06:46:06.0972519Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0972662Z      ยท           โ•ฐโ”€โ”€ 'useAssetUrlState' is imported here
2026-10-23T06:46:06.0972731Z  233 โ”‚   useRefreshAssetUrl,
2026-10-23T06:46:06.0972783Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0972879Z   help: Consider removing this import.
2026-10-23T06:46:06.0972882Z
2026-10-23T06:46:06.0973092Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.0973234Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2111:7]
2026-10-23T06:46:06.0973306Z  2110 โ”‚     setExpandedFile(null);
2026-10-23T06:46:06.0973465Z  2111 โ”‚   }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
2026-10-23T06:46:06.0973692Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0973990Z       ยท                โ”‚                  โ”‚                       โ•ฐโ”€โ”€ Unnecessary dependency `props.contentPresentation.kind`
2026-10-23T06:46:06.0974190Z       ยท                โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `props.threadId`
2026-10-23T06:46:06.0974363Z       ยท                โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
2026-10-23T06:46:06.0974512Z  2112 โ”‚   const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
2026-10-23T06:46:06.0974565Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0974863Z   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-23T06:46:06.0975176Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.0975179Z
2026-10-23T06:46:06.0975382Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.0975520Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2578:7]
2026-10-23T06:46:06.0975622Z  2577 โ”‚     reportHeaderMaterialVisibility(false);
2026-10-23T06:46:06.0975739Z  2578 โ”‚   }, [feedThreadKey, reportHeaderMaterialVisibility]);
2026-10-23T06:46:06.0975821Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0975972Z       ยท             โ•ฐโ”€โ”€ Unnecessary dependency `feedThreadKey`
2026-10-23T06:46:06.0976026Z  2579 โ”‚
2026-10-23T06:46:06.0976076Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0976371Z   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-23T06:46:06.0976685Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.0976687Z
2026-10-23T06:46:06.0976948Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.0977117Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2594:7]
2026-10-23T06:46:06.0977174Z  2593 โ”‚     }
2026-10-23T06:46:06.0977306Z  2594 โ”‚   }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
2026-10-23T06:46:06.0977386Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0977532Z       ยท             โ•ฐโ”€โ”€ Unnecessary dependency `listMountKey`
2026-10-23T06:46:06.0977585Z  2595 โ”‚
2026-10-23T06:46:06.0977636Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0977927Z   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-23T06:46:06.0978242Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.0978248Z
2026-10-23T06:46:06.0978476Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.0978612Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2751:7]
2026-10-23T06:46:06.0978670Z  2750 โ”‚     }
2026-10-23T06:46:06.0978856Z  2751 โ”‚   }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
2026-10-23T06:46:06.0979060Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0979316Z       ยท              โ”‚                  โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `expandedWorkRows`
2026-10-23T06:46:06.0979534Z       ยท              โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `expandedWorkGroups`
2026-10-23T06:46:06.0979692Z       ยท              โ•ฐโ”€โ”€ Unnecessary dependency `expandedTurnIds`
2026-10-23T06:46:06.0979746Z  2752 โ”‚
2026-10-23T06:46:06.0979796Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0980091Z   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-23T06:46:06.0980403Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.0980406Z
2026-10-23T06:46:06.0980593Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-23T06:46:06.0980730Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:603:9]
2026-10-23T06:46:06.0980794Z  602 โ”‚       };
2026-10-23T06:46:06.0980914Z  603 โ”‚     }, [props.environmentId, attachment.id, httpBaseUrl]),
2026-10-23T06:46:06.0981108Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0981349Z      ยท                  โ”‚                 โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `httpBaseUrl`
2026-10-23T06:46:06.0981547Z      ยท                  โ”‚                 โ•ฐโ”€โ”€ Unnecessary dependency `attachment.id`
2026-10-23T06:46:06.0981715Z      ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
2026-10-23T06:46:06.0981771Z  604 โ”‚   );
2026-10-23T06:46:06.0981824Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0982193Z   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-23T06:46:06.0982540Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.0982542Z
2026-10-23T06:46:06.0982805Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.0982971Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
2026-10-23T06:46:06.0983083Z  37 โ”‚   const [initialized, setInitialized] = useState(false);
2026-10-23T06:46:06.0983155Z  38 โ”‚   useLayoutEffect(() => {
2026-10-23T06:46:06.0983236Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0983376Z     ยท          โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.0983440Z  39 โ”‚     reset();
2026-10-23T06:46:06.0983510Z  40 โ”‚     setInitialized(true);
2026-10-23T06:46:06.0983589Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0983760Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.0983822Z  41 โ”‚   }, [reset]);
2026-10-23T06:46:06.0983876Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0984483Z   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-23T06:46:06.0984812Z   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-23T06:46:06.0984817Z
2026-10-23T06:46:06.0985080Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.0985240Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
2026-10-23T06:46:06.0985295Z  88 โ”‚
2026-10-23T06:46:06.0985362Z  89 โ”‚   useEffect(() => {
2026-10-23T06:46:06.0985433Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0985562Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.0985724Z  90 โ”‚     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
2026-10-23T06:46:06.0985827Z  91 โ”‚     const branchName = initialProjectRef.branch;
2026-10-23T06:46:06.0985894Z  92 โ”‚     let active = true;
2026-10-23T06:46:06.0985994Z  93 โ”‚     setPendingCheckouts((count) => count + 1);
2026-10-23T06:46:06.0986086Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0986259Z     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.0986418Z  94 โ”‚     // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
2026-10-23T06:46:06.0986468Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0987069Z   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-23T06:46:06.0987442Z   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-23T06:46:06.0987473Z
2026-10-23T06:46:06.0987678Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-23T06:46:06.0987814Z    โ•ญโ”€[packages/client-runtime/src/state/usageAccess.ts:3:8]
2026-10-23T06:46:06.0987889Z  2 โ”‚   AuthDiagnosticsReadScope,
2026-10-23T06:46:06.0987959Z  3 โ”‚   type AuthSessionState,
2026-10-23T06:46:06.0988045Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0988192Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-23T06:46:06.0988259Z  4 โ”‚   sessionGrantsScope,
2026-10-23T06:46:06.0988314Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0988438Z   help: Consider removing this import.
2026-10-23T06:46:06.0988440Z
2026-10-23T06:46:06.0988602Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.0988771Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:111:5]
2026-10-23T06:46:06.0988827Z  107 โ”‚   );
2026-10-23T06:46:06.0988985Z  108 โ”‚   const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0);
2026-10-23T06:46:06.0989075Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0989276Z      ยท                  โ•ฐโ”€โ”€ `separationProgress` originates here
2026-10-23T06:46:06.0989332Z  109 โ”‚
2026-10-23T06:46:06.0989399Z  110 โ”‚   useEffect(() => {
2026-10-23T06:46:06.0989575Z  111 โ”‚     separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING);
2026-10-23T06:46:06.0989659Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0989812Z      ยท              โ•ฐโ”€โ”€ `separationProgress` cannot be modified
2026-10-23T06:46:06.0989929Z  112 โ”‚   }, [props.showScrollToEnd, separationProgress]);
2026-10-23T06:46:06.0989986Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0990250Z   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-23T06:46:06.0990558Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.0990561Z
2026-10-23T06:46:06.0990719Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.0990886Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-23T06:46:06.0991005Z  128 โ”‚   // and repeatedly retargets the animation as it grows.
2026-10-23T06:46:06.0991122Z  129 โ”‚   const capsuleWidth = useSharedValue<number | null>(null);
2026-10-23T06:46:06.0991278Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0991519Z      ยท               โ•ฐโ”€โ”€ `capsuleWidth` originates here
2026-10-23T06:46:06.0991635Z  130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
2026-10-23T06:46:06.0991753Z  131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-23T06:46:06.0991867Z  132 โ”‚     const width = event.nativeEvent.layout.width;
2026-10-23T06:46:06.0991968Z  133 โ”‚     if (width === measuredWidthRef.current) {
2026-10-23T06:46:06.0992034Z  134 โ”‚       return;
2026-10-23T06:46:06.0992091Z  135 โ”‚     }
2026-10-23T06:46:06.0992201Z  136 โ”‚     const first = measuredWidthRef.current === null;
2026-10-23T06:46:06.0992292Z  137 โ”‚     measuredWidthRef.current = width;
2026-10-23T06:46:06.0992438Z  138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-23T06:46:06.0992523Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0992668Z      ยท           โ•ฐโ”€โ”€ `capsuleWidth` cannot be modified
2026-10-23T06:46:06.0992729Z  139 โ”‚   };
2026-10-23T06:46:06.0992782Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0993050Z   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-23T06:46:06.0993363Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.0993365Z
2026-10-23T06:46:06.0993525Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.0993696Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-23T06:46:06.0993814Z  128 โ”‚   // and repeatedly retargets the animation as it grows.
2026-10-23T06:46:06.0993938Z  129 โ”‚   const capsuleWidth = useSharedValue<number | null>(null);
2026-10-23T06:46:06.0994024Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0994166Z      ยท               โ•ฐโ”€โ”€ `capsuleWidth` originates here
2026-10-23T06:46:06.0994277Z  130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
2026-10-23T06:46:06.0994397Z  131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-23T06:46:06.0994506Z  132 โ”‚     const width = event.nativeEvent.layout.width;
2026-10-23T06:46:06.0994607Z  133 โ”‚     if (width === measuredWidthRef.current) {
2026-10-23T06:46:06.0994670Z  134 โ”‚       return;
2026-10-23T06:46:06.0994729Z  135 โ”‚     }
2026-10-23T06:46:06.0994838Z  136 โ”‚     const first = measuredWidthRef.current === null;
2026-10-23T06:46:06.0994928Z  137 โ”‚     measuredWidthRef.current = width;
2026-10-23T06:46:06.0995075Z  138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-23T06:46:06.0995136Z  139 โ”‚   };
2026-10-23T06:46:06.0995230Z  140 โ”‚   const hasStatus = props.status !== null;
2026-10-23T06:46:06.0995367Z  141 โ”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-23T06:46:06.0995434Z  142 โ”‚   useEffect(() => {
2026-10-23T06:46:06.0995505Z  143 โ”‚     if (!hasStatus) {
2026-10-23T06:46:06.0995596Z  144 โ”‚       measuredWidthRef.current = null;
2026-10-23T06:46:06.0995682Z  145 โ”‚       capsuleWidth.value = null;
2026-10-23T06:46:06.0995760Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0995966Z      ยท             โ•ฐโ”€โ”€ `capsuleWidth` cannot be modified
2026-10-23T06:46:06.0996060Z  146 โ”‚     }
2026-10-23T06:46:06.0996173Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0996553Z   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-23T06:46:06.0996926Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.0996929Z
2026-10-23T06:46:06.0997163Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-23T06:46:06.0997370Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-23T06:46:06.0997539Z  141 โ”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-23T06:46:06.0997644Z  142 โ”‚   useEffect(() => {
2026-10-23T06:46:06.0997758Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.0998010Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-23T06:46:06.0998114Z  143 โ”‚     if (!hasStatus) {
2026-10-23T06:46:06.0998250Z  144 โ”‚       measuredWidthRef.current = null;
2026-10-23T06:46:06.0998364Z  145 โ”‚       capsuleWidth.value = null;
2026-10-23T06:46:06.0998501Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0998647Z      ยท             โ•ฐโ”€โ”€ This modifies `capsuleWidth`
2026-10-23T06:46:06.0998840Z  146 โ”‚     }
2026-10-23T06:46:06.0998929Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.0999309Z   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-23T06:46:06.0999631Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.0999654Z
2026-10-23T06:46:06.0999882Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-23T06:46:06.1000093Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-23T06:46:06.1000245Z  130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
2026-10-23T06:46:06.1000400Z  131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-23T06:46:06.1000534Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1000834Z      ยท                                            โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-23T06:46:06.1000977Z  132 โ”‚     const width = event.nativeEvent.layout.width;
2026-10-23T06:46:06.1001117Z  133 โ”‚     if (width === measuredWidthRef.current) {
2026-10-23T06:46:06.1001205Z  134 โ”‚       return;
2026-10-23T06:46:06.1001298Z  135 โ”‚     }
2026-10-23T06:46:06.1001452Z  136 โ”‚     const first = measuredWidthRef.current === null;
2026-10-23T06:46:06.1001574Z  137 โ”‚     measuredWidthRef.current = width;
2026-10-23T06:46:06.1001737Z  138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-23T06:46:06.1001841Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1002091Z      ยท           โ•ฐโ”€โ”€ This modifies `capsuleWidth`
2026-10-23T06:46:06.1002182Z  139 โ”‚   };
2026-10-23T06:46:06.1002251Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1002632Z   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-23T06:46:06.1003042Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.1003074Z
2026-10-23T06:46:06.1003331Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1003514Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-23T06:46:06.1003628Z  256 โ”‚     return () => cancelAnimationFrame(frame);
2026-10-23T06:46:06.1003737Z  257 โ”‚   }, [props.path, targetIndex]);
2026-10-23T06:46:06.1003866Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1004050Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `props.path`
2026-10-23T06:46:06.1004123Z  258 โ”‚
2026-10-23T06:46:06.1004211Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1004551Z   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-23T06:46:06.1004917Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1004920Z
2026-10-23T06:46:06.1005152Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T06:46:06.1005398Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-23T06:46:06.1005499Z  292 โ”‚                     <SourceText
2026-10-23T06:46:06.1005660Z  293 โ”‚                       key={`${index}:${tokenIndex}`}
2026-10-23T06:46:06.1005816Z      ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1005905Z  294 โ”‚                       style={{
2026-10-23T06:46:06.1005992Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1006182Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T06:46:06.1006188Z
2026-10-23T06:46:06.1006429Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T06:46:06.1006594Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-23T06:46:06.1006698Z  308 โ”‚             return (
2026-10-23T06:46:06.1006808Z  309 โ”‚               <SourceText key={index}>
2026-10-23T06:46:06.1006967Z      ยท                           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1007052Z  310 โ”‚                 {body}
2026-10-23T06:46:06.1007141Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1007325Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T06:46:06.1007328Z
2026-10-23T06:46:06.1007594Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-23T06:46:06.1007814Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:370:7]
2026-10-23T06:46:06.1007911Z  369 โ”‚       mountedRef.current = false;
2026-10-23T06:46:06.1008098Z  370 โ”‚       flow.setBranchQuery("");
2026-10-23T06:46:06.1008200Z      ยท       โ”€โ”€โ”ฌโ”€
2026-10-23T06:46:06.1008383Z      ยท         โ•ฐโ”€โ”€ Missing dependency `flow`
2026-10-23T06:46:06.1008496Z  371 โ”‚     };
2026-10-23T06:46:06.1008606Z  372 โ”‚   }, [flow.setBranchQuery]);
2026-10-23T06:46:06.1008736Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1008984Z      ยท                โ•ฐโ”€โ”€ Overly precise dependency `flow.setBranchQuery`, use `flow` instead
2026-10-23T06:46:06.1009065Z  373 โ”‚
2026-10-23T06:46:06.1009151Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1009686Z   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-23T06:46:06.1010061Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1010064Z
2026-10-23T06:46:06.1010297Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-23T06:46:06.1010474Z    โ•ญโ”€[packages/client-runtime/src/state/filesystem.ts:3:8]
2026-10-23T06:46:06.1010589Z  2 โ”‚   AuthFilesystemReadScope,
2026-10-23T06:46:06.1010696Z  3 โ”‚   type AuthSessionState,
2026-10-23T06:46:06.1010788Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1010997Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-23T06:46:06.1011181Z  4 โ”‚   type FilesystemBrowseEntry,
2026-10-23T06:46:06.1011269Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1011385Z   help: Consider removing this import.
2026-10-23T06:46:06.1011399Z
2026-10-23T06:46:06.1011688Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T06:46:06.1011899Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
2026-10-23T06:46:06.1011997Z  289 โ”‚   return (
2026-10-23T06:46:06.1012171Z  290 โ”‚     <ExistingThreadSettingsRouteContext.Provider value={value}>
2026-10-23T06:46:06.1012301Z      ยท                                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1012428Z  291 โ”‚       {props.children}
2026-10-23T06:46:06.1012521Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1012788Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T06:46:06.1012948Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T06:46:06.1012951Z
2026-10-23T06:46:06.1013241Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T06:46:06.1013448Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
2026-10-23T06:46:06.1013548Z  653 โ”‚   return (
2026-10-23T06:46:06.1013686Z  654 โ”‚     <ThreadSettingsSessionContext.Provider value={value}>
2026-10-23T06:46:06.1013829Z      ยท                                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1013956Z  655 โ”‚       {props.children}
2026-10-23T06:46:06.1014107Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1014370Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T06:46:06.1014526Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T06:46:06.1014529Z
2026-10-23T06:46:06.1014811Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T06:46:06.1015017Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
2026-10-23T06:46:06.1015114Z  1461 โ”‚   return (
2026-10-23T06:46:06.1015295Z  1462 โ”‚     <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
2026-10-23T06:46:06.1015456Z       ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1015611Z  1463 โ”‚       <ThreadSettingsPickerStack.Navigator
2026-10-23T06:46:06.1015763Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1016033Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T06:46:06.1016209Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T06:46:06.1016211Z
2026-10-23T06:46:06.1016513Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1016700Z      โ•ญโ”€[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-23T06:46:06.1016790Z  150 โ”‚
2026-10-23T06:46:06.1016877Z  151 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1016978Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1017228Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1017356Z  152 โ”‚     if (!controlledSelectedPath) {
2026-10-23T06:46:06.1017441Z  153 โ”‚       return;
2026-10-23T06:46:06.1017531Z  154 โ”‚     }
2026-10-23T06:46:06.1017652Z  155 โ”‚     setExpandedPaths((current) => {
2026-10-23T06:46:06.1017779Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1017970Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1018138Z  156 โ”‚       const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-23T06:46:06.1018216Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1018911Z   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-23T06:46:06.1019281Z   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-23T06:46:06.1019286Z
2026-10-23T06:46:06.1019563Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1019766Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7]
2026-10-23T06:46:06.1019858Z  100 โ”‚
2026-10-23T06:46:06.1019969Z  101 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1020062Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1020230Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1020433Z  102 โ”‚     if (!target || selectedLines.length === 0) {
2026-10-23T06:46:06.1020575Z  103 โ”‚       setHighlightedLinesById({});
2026-10-23T06:46:06.1020745Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1020989Z      ยท                  โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1021086Z  104 โ”‚       return;
2026-10-23T06:46:06.1021182Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1021810Z   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-23T06:46:06.1022171Z   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-23T06:46:06.1022174Z
2026-10-23T06:46:06.1022434Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-23T06:46:06.1022607Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:772:7]
2026-10-23T06:46:06.1022769Z  771 โ”‚     if (settingsSheetPresentation.isActive) {
2026-10-23T06:46:06.1022918Z  772 โ”‚       settingsRoutePresentation.present(settingsRouteSession);
2026-10-23T06:46:06.1023048Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1023260Z      ยท                   โ•ฐโ”€โ”€ Missing dependency `settingsRoutePresentation`
2026-10-23T06:46:06.1023356Z  773 โ”‚     }
2026-10-23T06:46:06.1023605Z  774 โ”‚   }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
2026-10-23T06:46:06.1023732Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1024118Z      ยท                       โ•ฐโ”€โ”€ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
2026-10-23T06:46:06.1024207Z  775 โ”‚
2026-10-23T06:46:06.1024310Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1024752Z   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-23T06:46:06.1025100Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1025103Z
2026-10-23T06:46:06.1025299Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.1025484Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:390:5]
2026-10-23T06:46:06.1025693Z  386 โ”‚     typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
2026-10-23T06:46:06.1025852Z  387 โ”‚   const animatedBorderRadius = useSharedValue(targetBorderRadius);
2026-10-23T06:46:06.1025986Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1026171Z      ยท                   โ•ฐโ”€โ”€ `animatedBorderRadius` originates here
2026-10-23T06:46:06.1026387Z  388 โ”‚   const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
2026-10-23T06:46:06.1026474Z  389 โ”‚   useLayoutEffect(() => {
2026-10-23T06:46:06.1026612Z  390 โ”‚     animatedBorderRadius.value = shouldAnimate
2026-10-23T06:46:06.1026741Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1026937Z      ยท               โ•ฐโ”€โ”€ `animatedBorderRadius` cannot be modified
2026-10-23T06:46:06.1027052Z  391 โ”‚       ? withTiming(targetBorderRadius, {
2026-10-23T06:46:06.1027246Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1027580Z   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-23T06:46:06.1027914Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.1027917Z
2026-10-23T06:46:06.1028230Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1028458Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5]
2026-10-23T06:46:06.1028548Z  55 โ”‚
2026-10-23T06:46:06.1028649Z  56 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1028758Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1028927Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1029036Z  57 โ”‚     scheduler.reset();
2026-10-23T06:46:06.1029223Z  58 โ”‚     highlightedRowIdsRef.current = new Set();
2026-10-23T06:46:06.1029338Z  59 โ”‚     visibleChunkIndexRef.current = 0;
2026-10-23T06:46:06.1029483Z  60 โ”‚     setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 });
2026-10-23T06:46:06.1029614Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1029817Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1029966Z  61 โ”‚     setTokensPatchJson(createEmptyTokenPatch(resetKey));
2026-10-23T06:46:06.1030026Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1030750Z   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-23T06:46:06.1031107Z   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-23T06:46:06.1031110Z
2026-10-23T06:46:06.1031350Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1031550Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7]
2026-10-23T06:46:06.1031664Z  62 โ”‚     return () => scheduler.cancel();
2026-10-23T06:46:06.1031812Z  63 โ”‚   }, [enabled, resetKey, rows.length, scheduler]);
2026-10-23T06:46:06.1031974Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1032209Z     ยท          โ”‚                    โ•ฐโ”€โ”€ Unnecessary dependency `rows.length`
2026-10-23T06:46:06.1032394Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `enabled`
2026-10-23T06:46:06.1032472Z  64 โ”‚
2026-10-23T06:46:06.1032560Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1032889Z   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-23T06:46:06.1033235Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1033238Z
2026-10-23T06:46:06.1033524Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1033801Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5]
2026-10-23T06:46:06.1034003Z  283 โ”‚   const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
2026-10-23T06:46:06.1034107Z  284 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1034256Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1034442Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1034564Z  285 โ”‚     setNow(new Date().toISOString());
2026-10-23T06:46:06.1034674Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T06:46:06.1034860Z      ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1035036Z  286 โ”‚     const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
2026-10-23T06:46:06.1035133Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1035787Z   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-23T06:46:06.1036143Z   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-23T06:46:06.1036146Z
2026-10-23T06:46:06.1036388Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1036580Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25]
2026-10-23T06:46:06.1036753Z  364 โ”‚     // range) the boundary string is identical and the chain would die.
2026-10-23T06:46:06.1036878Z  365 โ”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-23T06:46:06.1037012Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1037207Z      ยท                                โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-23T06:46:06.1037371Z  366 โ”‚   const listItems = ((): readonly SidebarListItem[] => {
2026-10-23T06:46:06.1037457Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1037841Z   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-23T06:46:06.1038159Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1038201Z
2026-10-23T06:46:06.1038394Z   โš  react(purity): Cannot call impure function during render
2026-10-23T06:46:06.1038645Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53]
2026-10-23T06:46:06.1038772Z  355 โ”‚     if (Number.isNaN(wakeAtMs)) return;
2026-10-23T06:46:06.1038953Z  356 โ”‚     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-23T06:46:06.1039102Z      ยท                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1039319Z      ยท                                                          โ•ฐโ”€โ”€ Cannot call impure function
2026-10-23T06:46:06.1039432Z  357 โ”‚     const id = setTimeout(() => {
2026-10-23T06:46:06.1039520Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1039815Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-23T06:46:06.1040222Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-23T06:46:06.1040262Z
2026-10-23T06:46:06.1040555Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1040742Z     โ•ญโ”€[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
2026-10-23T06:46:06.1040937Z  28 โ”‚   const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
2026-10-23T06:46:06.1041032Z  29 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1041147Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1041375Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1041543Z  30 โ”‚     if (snapshot && snapshot !== live) setHeld({ key, snapshot });
2026-10-23T06:46:06.1045272Z     ยท                                        โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1045501Z     ยท                                           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1045581Z  31 โ”‚   }, [key, live, snapshot]);
2026-10-23T06:46:06.1045640Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1046247Z   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-23T06:46:06.1046575Z   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-23T06:46:06.1046578Z
2026-10-23T06:46:06.1046799Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-23T06:46:06.1046943Z     โ•ญโ”€[packages/shared/src/composerContextLegacySend.ts:19:45]
2026-10-23T06:46:06.1047070Z  18 โ”‚   const occurrences = collectComposerContextReferences(text);
2026-10-23T06:46:06.1047181Z  19 โ”‚   for (const occurrence of [...occurrences].reverse()) {
2026-10-23T06:46:06.1047294Z     ยท                                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1047406Z  20 โ”‚     const record = recordsById.get(occurrence.contextId);
2026-10-23T06:46:06.1047460Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1047724Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-23T06:46:06.1047726Z
2026-10-23T06:46:06.1048011Z   โš  eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1048163Z     โ•ญโ”€[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
2026-10-23T06:46:06.1048218Z  60 โ”‚ ) {
2026-10-23T06:46:06.1048389Z  61 โ”‚   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
2026-10-23T06:46:06.1048511Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1048654Z     ยท               โ•ฐโ”€โ”€ 'useDragRegion' is declared here
2026-10-23T06:46:06.1048746Z  62 โ”‚   const isInline = props.mode === "inline";
2026-10-23T06:46:06.1048798Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1048904Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1048907Z
2026-10-23T06:46:06.1049113Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1049336Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:454:7]
2026-10-23T06:46:06.1049457Z  453 โ”‚     showAuxiliaryPane("inspector");
2026-10-23T06:46:06.1049566Z  454 โ”‚   }, [environmentId, showAuxiliaryPane, threadId]);
2026-10-23T06:46:06.1049712Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€                     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1049912Z      ยท             โ”‚                               โ•ฐโ”€โ”€ Unnecessary dependency `threadId`
2026-10-23T06:46:06.1050064Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `environmentId`
2026-10-23T06:46:06.1050126Z  455 โ”‚   const {
2026-10-23T06:46:06.1050179Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1050475Z   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-23T06:46:06.1050796Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1050802Z
2026-10-23T06:46:06.1050990Z   โš  react(static-components): Cannot create components during render
2026-10-23T06:46:06.1051130Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:725:20]
2026-10-23T06:46:06.1051196Z  492 โ”‚   // same check.
2026-10-23T06:46:06.1051322Z  493 โ”‚   const NativeReviewDiffView = resolveNativeReviewDiffView();
2026-10-23T06:46:06.1051445Z      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1051630Z      ยท                                             โ•ฐโ”€โ”€ The component is created during render here
2026-10-23T06:46:06.1051781Z  494 โ”‚   const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
2026-10-23T06:46:06.1051906Z  495 โ”‚   const showcasedReviewDrawRef = useRef<string | null>(null);
2026-10-23T06:46:06.1052040Z  496 โ”‚   const [isPullRefreshing, setIsPullRefreshing] = useState(false);
2026-10-23T06:46:06.1052133Z  497 โ”‚   const handlePullToRefresh = async () => {
2026-10-23T06:46:06.1052213Z  498 โ”‚     setIsPullRefreshing(true);
2026-10-23T06:46:06.1052295Z  499 โ”‚     await refreshSelectedSection();
2026-10-23T06:46:06.1052373Z  500 โ”‚     setIsPullRefreshing(false);
2026-10-23T06:46:06.1052429Z  501 โ”‚   };
2026-10-23T06:46:06.1052573Z  502 โ”‚   const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
2026-10-23T06:46:06.1052715Z  503 โ”‚   const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
2026-10-23T06:46:06.1052824Z  504 โ”‚   const fileVisibility = useReviewFileVisibility({
2026-10-23T06:46:06.1052910Z  505 โ”‚     threadKey: reviewCache.threadKey,
2026-10-23T06:46:06.1053056Z  506 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-23T06:46:06.1053169Z  507 โ”‚     files: reviewFiles,
2026-10-23T06:46:06.1053269Z  508 โ”‚     cachedExpandedFileIds: selectedSection?.id
2026-10-23T06:46:06.1053404Z  509 โ”‚       ? reviewCache.expandedFileIdsBySection[selectedSection.id]
2026-10-23T06:46:06.1053470Z  510 โ”‚       : undefined,
2026-10-23T06:46:06.1053566Z  511 โ”‚     cachedViewedFileIds: selectedSection?.id
2026-10-23T06:46:06.1053689Z  512 โ”‚       ? reviewCache.viewedFileIdsBySection[selectedSection.id]
2026-10-23T06:46:06.1053753Z  513 โ”‚       : undefined,
2026-10-23T06:46:06.1053808Z  514 โ”‚   });
2026-10-23T06:46:06.1054002Z  515 โ”‚   const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
2026-10-23T06:46:06.1054135Z  516 โ”‚   const commentSelection = useReviewCommentSelectionController({
2026-10-23T06:46:06.1054200Z  517 โ”‚     environmentId,
2026-10-23T06:46:06.1054267Z  518 โ”‚     threadId,
2026-10-23T06:46:06.1054337Z  519 โ”‚     selectedSection,
2026-10-23T06:46:06.1054407Z  520 โ”‚     nativeReviewDiffData,
2026-10-23T06:46:06.1054464Z  521 โ”‚   });
2026-10-23T06:46:06.1054568Z  522 โ”‚   const nativeBridge = useNativeReviewDiffBridge({
2026-10-23T06:46:06.1054654Z  523 โ”‚     threadKey: reviewCache.threadKey,
2026-10-23T06:46:06.1054745Z  524 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-23T06:46:06.1054823Z  525 โ”‚     diff: selectedSection?.diff,
2026-10-23T06:46:06.1054899Z  526 โ”‚     data: nativeReviewDiffData,
2026-10-23T06:46:06.1054968Z  527 โ”‚     collapsedFileIds,
2026-10-23T06:46:06.1055031Z  528 โ”‚     viewedFileIds,
2026-10-23T06:46:06.1055143Z  529 โ”‚     selectedRowIds: commentSelection.selectedRowIds,
2026-10-23T06:46:06.1055239Z  530 โ”‚     canHighlight: parsedDiff.kind === "files",
2026-10-23T06:46:06.1055294Z  531 โ”‚   });
2026-10-23T06:46:06.1055373Z  532 โ”‚   const showcaseReviewKey =
2026-10-23T06:46:06.1055509Z  533 โ”‚     SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
2026-10-23T06:46:06.1055717Z  534 โ”‚       ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
2026-10-23T06:46:06.1055781Z  535 โ”‚       : null;
2026-10-23T06:46:06.1055949Z  536 โ”‚   const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
2026-10-23T06:46:06.1056028Z  537 โ”‚     nativeBridge.onDebug(event);
2026-10-23T06:46:06.1056086Z  538 โ”‚     if (
2026-10-23T06:46:06.1056168Z  539 โ”‚       showcaseReviewKey === null ||
2026-10-23T06:46:06.1056292Z  540 โ”‚       showcasedReviewDrawRef.current === showcaseReviewKey ||
2026-10-23T06:46:06.1056404Z  541 โ”‚       !isNativeReviewDiffDrawEvent(event.nativeEvent)
2026-10-23T06:46:06.1056460Z  542 โ”‚     ) {
2026-10-23T06:46:06.1056525Z  543 โ”‚       return;
2026-10-23T06:46:06.1056582Z  544 โ”‚     }
2026-10-23T06:46:06.1056694Z  545 โ”‚     showcasedReviewDrawRef.current = showcaseReviewKey;
2026-10-23T06:46:06.1056857Z  546 โ”‚     reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
2026-10-23T06:46:06.1056912Z  547 โ”‚   };
2026-10-23T06:46:06.1056969Z  548 โ”‚
2026-10-23T06:46:06.1057086Z  549 โ”‚   const handleSelectFile = async (fileId: string | null) => {
2026-10-23T06:46:06.1057166Z  550 โ”‚     loadVisibleFile(fileId, true);
2026-10-23T06:46:06.1057256Z  551 โ”‚     commentSelection.clearSelection();
2026-10-23T06:46:06.1057376Z  552 โ”‚     if (fileId !== null && collapsedFileIds.includes(fileId)) {
2026-10-23T06:46:06.1057456Z  553 โ”‚       toggleExpandedFile(fileId);
2026-10-23T06:46:06.1057511Z  554 โ”‚     }
2026-10-23T06:46:06.1057624Z  555 โ”‚     const nativeView = nativeReviewDiffViewRef.current;
2026-10-23T06:46:06.1057755Z  556 โ”‚     if (!nativeView) return;
2026-10-23T06:46:06.1057878Z  557 โ”‚     const result = await settlePromise(() =>
2026-10-23T06:46:06.1058053Z  558 โ”‚       fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
2026-10-23T06:46:06.1058109Z  559 โ”‚     );
2026-10-23T06:46:06.1058199Z  560 โ”‚     if (AsyncResult.isFailure(result)) {
2026-10-23T06:46:06.1058379Z  561 โ”‚       console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
2026-10-23T06:46:06.1058468Z  562 โ”‚     }
2026-10-23T06:46:06.1058523Z  563 โ”‚   };
2026-10-23T06:46:06.1058608Z  564 โ”‚   const handleVisibleFileChange = (
2026-10-23T06:46:06.1058740Z  565 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
2026-10-23T06:46:06.1058799Z  566 โ”‚   ) => {
2026-10-23T06:46:06.1058910Z  567 โ”‚     loadVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-23T06:46:06.1059086Z  568 โ”‚     reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-23T06:46:06.1059141Z  569 โ”‚   };
2026-10-23T06:46:06.1059221Z  570 โ”‚   const renderInspector = () => (
2026-10-23T06:46:06.1059292Z  571 โ”‚     <ReviewFileNavigator
2026-10-23T06:46:06.1059375Z  572 โ”‚       ref={reviewFileNavigatorRef}
2026-10-23T06:46:06.1059463Z  573 โ”‚       files={nativeReviewDiffData.files}
2026-10-23T06:46:06.1059541Z  574 โ”‚       headerInset={insets.top}
2026-10-23T06:46:06.1059636Z  575 โ”‚       sectionId={selectedSection?.id ?? null}
2026-10-23T06:46:06.1059755Z  576 โ”‚       onSelectFile={(fileId) => void handleSelectFile(fileId)}
2026-10-23T06:46:06.1059811Z  577 โ”‚     />
2026-10-23T06:46:06.1059867Z  578 โ”‚   );
2026-10-23T06:46:06.1059920Z  579 โ”‚
2026-10-23T06:46:06.1060103Z  580 โ”‚   const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
2026-10-23T06:46:06.1060196Z  581 โ”‚     const { fileId } = event.nativeEvent;
2026-10-23T06:46:06.1060263Z  582 โ”‚     if (fileId) {
2026-10-23T06:46:06.1060344Z  583 โ”‚       loadVisibleFile(fileId, true);
2026-10-23T06:46:06.1060422Z  584 โ”‚       toggleExpandedFile(fileId);
2026-10-23T06:46:06.1060477Z  585 โ”‚     }
2026-10-23T06:46:06.1060533Z  586 โ”‚   };
2026-10-23T06:46:06.1060585Z  587 โ”‚
2026-10-23T06:46:06.1060674Z  588 โ”‚   const handleNativeToggleViewedFile = (
2026-10-23T06:46:06.1060795Z  589 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string }>,
2026-10-23T06:46:06.1060853Z  590 โ”‚   ) => {
2026-10-23T06:46:06.1060939Z  591 โ”‚     const { fileId } = event.nativeEvent;
2026-10-23T06:46:06.1061000Z  592 โ”‚     if (fileId) {
2026-10-23T06:46:06.1061076Z  593 โ”‚       toggleViewedFile(fileId);
2026-10-23T06:46:06.1061132Z  594 โ”‚     }
2026-10-23T06:46:06.1061185Z  595 โ”‚   };
2026-10-23T06:46:06.1061244Z  596 โ”‚
2026-10-23T06:46:06.1061319Z  597 โ”‚   const parsedDiffNotice =
2026-10-23T06:46:06.1061483Z  598 โ”‚     parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
2026-10-23T06:46:06.1061604Z  599 โ”‚   const hasCachedSelectedDiff = selectedSection?.diff != null;
2026-10-23T06:46:06.1061763Z  600 โ”‚   const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
2026-10-23T06:46:06.1061883Z  601 โ”‚   const sectionMenu = buildReviewSectionMenu(reviewSections);
2026-10-23T06:46:06.1062043Z  602 โ”‚   const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
2026-10-23T06:46:06.1062152Z  603 โ”‚     hasEnvironmentPresentation: environment.isReady,
2026-10-23T06:46:06.1062255Z  604 โ”‚     isEnvironmentConnected: isEnvironmentReady,
2026-10-23T06:46:06.1062327Z  605 โ”‚     hasCachedSelectedDiff,
2026-10-23T06:46:06.1062395Z  606 โ”‚     hasAnyCachedDiff,
2026-10-23T06:46:06.1062514Z  607 โ”‚   });
2026-10-23T06:46:06.1062631Z  608 โ”‚   const handleRetryEnvironment = () => {
2026-10-23T06:46:06.1062719Z  609 โ”‚     void retryEnvironment(environmentId);
2026-10-23T06:46:06.1062773Z  610 โ”‚   };
2026-10-23T06:46:06.1062858Z  611 โ”‚   const handleReturnToThread = () => {
2026-10-23T06:46:06.1062938Z  612 โ”‚     if (navigation.canGoBack()) {
2026-10-23T06:46:06.1063009Z  613 โ”‚       navigation.goBack();
2026-10-23T06:46:06.1063070Z  614 โ”‚       return;
2026-10-23T06:46:06.1063123Z  615 โ”‚     }
2026-10-23T06:46:06.1063205Z  616 โ”‚     navigation.navigate("Thread", {
2026-10-23T06:46:06.1063294Z  617 โ”‚       environmentId: String(environmentId),
2026-10-23T06:46:06.1063372Z  618 โ”‚       threadId: String(threadId),
2026-10-23T06:46:06.1063427Z  619 โ”‚     });
2026-10-23T06:46:06.1063481Z  620 โ”‚   };
2026-10-23T06:46:06.1063565Z  621 โ”‚   const androidHeaderSubtitle = [
2026-10-23T06:46:06.1063639Z  622 โ”‚     selectedSection?.title,
2026-10-23T06:46:06.1063720Z  623 โ”‚     headerDiffSummary.additions,
2026-10-23T06:46:06.1063799Z  624 โ”‚     headerDiffSummary.deletions,
2026-10-23T06:46:06.1063853Z  625 โ”‚   ]
2026-10-23T06:46:06.1063957Z  626 โ”‚     .filter((part): part is string => Boolean(part))
2026-10-23T06:46:06.1064023Z  627 โ”‚     .join(" ยท ");
2026-10-23T06:46:06.1064076Z  628 โ”‚
2026-10-23T06:46:06.1064154Z  629 โ”‚   const showChangedFilesPane =
2026-10-23T06:46:06.1064225Z  630 โ”‚     !showConnectionNotice &&
2026-10-23T06:46:06.1064299Z  631 โ”‚     selectedSection !== null &&
2026-10-23T06:46:06.1064379Z  632 โ”‚     parsedDiff.kind === "files" &&
2026-10-23T06:46:06.1064459Z  633 โ”‚     NativeReviewDiffView !== null;
2026-10-23T06:46:06.1064629Z  634 โ”‚   useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
2026-10-23T06:46:06.1064804Z  635 โ”‚   const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
2026-10-23T06:46:06.1064859Z  636 โ”‚
2026-10-23T06:46:06.1064932Z  637 โ”‚   const listHeader = (() => {
2026-10-23T06:46:06.1065016Z  638 โ”‚     const children: ReactElement[] = [];
2026-10-23T06:46:06.1065069Z  639 โ”‚
2026-10-23T06:46:06.1065131Z  640 โ”‚     if (error) {
2026-10-23T06:46:06.1065199Z  641 โ”‚       children.push(
2026-10-23T06:46:06.1065258Z  642 โ”‚         <View
2026-10-23T06:46:06.1065330Z  643 โ”‚           key="review-error"
2026-10-23T06:46:06.1065396Z  644 โ”‚           className={cn(
2026-10-23T06:46:06.1065474Z  645 โ”‚             "bg-card px-4 py-3",
2026-10-23T06:46:06.1065629Z  646 โ”‚             Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
2026-10-23T06:46:06.1065689Z  647 โ”‚           )}
2026-10-23T06:46:06.1065748Z  648 โ”‚         >
2026-10-23T06:46:06.1065917Z  649 โ”‚           <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
2026-10-23T06:46:06.1066079Z  650 โ”‚           <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
2026-10-23T06:46:06.1066140Z  651 โ”‚         </View>,
2026-10-23T06:46:06.1066197Z  652 โ”‚       );
2026-10-23T06:46:06.1066249Z  653 โ”‚     }
2026-10-23T06:46:06.1066302Z  654 โ”‚
2026-10-23T06:46:06.1066374Z  655 โ”‚     if (parsedDiffNotice) {
2026-10-23T06:46:06.1066537Z  656 โ”‚       children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
2026-10-23T06:46:06.1066590Z  657 โ”‚     }
2026-10-23T06:46:06.1066642Z  658 โ”‚
2026-10-23T06:46:06.1066720Z  659 โ”‚     if (children.length === 0) {
2026-10-23T06:46:06.1066783Z  660 โ”‚       return null;
2026-10-23T06:46:06.1066837Z  661 โ”‚     }
2026-10-23T06:46:06.1066889Z  662 โ”‚
2026-10-23T06:46:06.1067019Z  663 โ”‚     return <>{children}</>;
2026-10-23T06:46:06.1067102Z  664 โ”‚   })();
2026-10-23T06:46:06.1067173Z  665 โ”‚   const headerSubtitle = [
2026-10-23T06:46:06.1067254Z  666 โ”‚     headerDiffSummary.additions,
2026-10-23T06:46:06.1067333Z  667 โ”‚     headerDiffSummary.deletions,
2026-10-23T06:46:06.1067412Z  668 โ”‚     pendingReviewCommentCount > 0
2026-10-23T06:46:06.1067587Z  669 โ”‚       ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
2026-10-23T06:46:06.1067648Z  670 โ”‚       : null,
2026-10-23T06:46:06.1067701Z  671 โ”‚   ]
2026-10-23T06:46:06.1067764Z  672 โ”‚     .filter(Boolean)
2026-10-23T06:46:06.1067828Z  673 โ”‚     .join(" ยท ");
2026-10-23T06:46:06.1067963Z  674 โ”‚   const headerTitleText = selectedSection?.title ?? "Review changes";
2026-10-23T06:46:06.1068015Z  675 โ”‚
2026-10-23T06:46:06.1068074Z  676 โ”‚   return (
2026-10-23T06:46:06.1068129Z  677 โ”‚     <>
2026-10-23T06:46:06.1068199Z  678 โ”‚       <ReviewHeader
2026-10-23T06:46:06.1068287Z  679 โ”‚         environmentId={environmentId}
2026-10-23T06:46:06.1068356Z  680 โ”‚         threadId={threadId}
2026-10-23T06:46:06.1068450Z  681 โ”‚         title={headerTitleText}
2026-10-23T06:46:06.1068528Z  682 โ”‚         subtitle={headerSubtitle}
2026-10-23T06:46:06.1068625Z  683 โ”‚         androidSubtitle={androidHeaderSubtitle}
2026-10-23T06:46:06.1068699Z  684 โ”‚         iconColor={headerIcon}
2026-10-23T06:46:06.1068794Z  685 โ”‚         selectedThreadCwd={selectedThreadCwd}
2026-10-23T06:46:06.1068871Z  686 โ”‚         sectionMenu={sectionMenu}
2026-10-23T06:46:06.1068959Z  687 โ”‚         selectedSection={selectedSection}
2026-10-23T06:46:06.1069058Z  688 โ”‚         showSectionToolbar={showSectionToolbar}
2026-10-23T06:46:06.1069336Z  689 โ”‚         showChangedFilesToggle={showChangedFilesToggle}
2026-10-23T06:46:06.1069428Z  690 โ”‚         onRefresh={handlePullToRefresh}
2026-10-23T06:46:06.1069514Z  691 โ”‚         onSelectSection={selectSection}
2026-10-23T06:46:06.1069612Z  692 โ”‚         onReturnToThread={handleReturnToThread}
2026-10-23T06:46:06.1069669Z  693 โ”‚       />
2026-10-23T06:46:06.1069721Z  694 โ”‚
2026-10-23T06:46:06.1069786Z  695 โ”‚       <ScreenContent>
2026-10-23T06:46:06.1069909Z  696 โ”‚         <View className="flex-1 bg-sheet android:bg-sheet-solid">
2026-10-23T06:46:06.1069990Z  697 โ”‚           {showConnectionNotice ? (
2026-10-23T06:46:06.1070131Z  698 โ”‚             <View className="flex-1" style={{ paddingTop: topContentInset }}>
2026-10-23T06:46:06.1070220Z  699 โ”‚               <EnvironmentConnectionNotice
2026-10-23T06:46:06.1070396Z  700 โ”‚                 environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
2026-10-23T06:46:06.1070467Z  701 โ”‚                 connection={
2026-10-23T06:46:06.1070578Z  702 โ”‚                   environment.presentation?.connection ?? {
2026-10-23T06:46:06.1070661Z  703 โ”‚                     phase: "available",
2026-10-23T06:46:06.1070735Z  704 โ”‚                     error: null,
2026-10-23T06:46:06.1070811Z  705 โ”‚                     traceId: null,
2026-10-23T06:46:06.1070875Z  706 โ”‚                   }
2026-10-23T06:46:06.1070935Z  707 โ”‚                 }
2026-10-23T06:46:06.1071015Z  708 โ”‚                 resourceName="review"
2026-10-23T06:46:06.1071112Z  709 โ”‚                 onRetry={handleRetryEnvironment}
2026-10-23T06:46:06.1071172Z  710 โ”‚               />
2026-10-23T06:46:06.1071233Z  711 โ”‚             </View>
2026-10-23T06:46:06.1071391Z  712 โ”‚           ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
2026-10-23T06:46:06.1071452Z  713 โ”‚             <View
2026-10-23T06:46:06.1071528Z  714 โ”‚               className="flex-1"
2026-10-23T06:46:06.1071669Z  715 โ”‚               style={{
2026-10-23T06:46:06.1071825Z  716 โ”‚                 backgroundColor: nativeBridge.theme.background,
2026-10-23T06:46:06.1071886Z  717 โ”‚               }}
2026-10-23T06:46:06.1071944Z  718 โ”‚             >
2026-10-23T06:46:06.1072006Z  719 โ”‚               <View
2026-10-23T06:46:06.1072092Z  720 โ”‚                 className="min-w-0 flex-1"
2026-10-23T06:46:06.1072231Z  721 โ”‚                 style={listHeader ? { paddingTop: topContentInset } : undefined}
2026-10-23T06:46:06.1072292Z  722 โ”‚               >
2026-10-23T06:46:06.1072362Z  723 โ”‚                 {listHeader}
2026-10-23T06:46:06.1072483Z  724 โ”‚                 <View className="min-w-0 flex-1" collapsable={false}>
2026-10-23T06:46:06.1072566Z  725 โ”‚                   <NativeReviewDiffView
2026-10-23T06:46:06.1072673Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1072852Z      ยท                              โ•ฐโ”€โ”€ This component is created during render
2026-10-23T06:46:06.1072936Z  726 โ”‚                     collapsable={false}
2026-10-23T06:46:06.1072989Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1073240Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-23T06:46:06.1073565Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-23T06:46:06.1073568Z
2026-10-23T06:46:06.1073833Z   โš  eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used.
2026-10-23T06:46:06.1073990Z       โ•ญโ”€[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10]
2026-10-23T06:46:06.1074046Z  1619 โ”‚
2026-10-23T06:46:06.1074262Z  1620 โ”‚ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean {
2026-10-23T06:46:06.1074385Z       ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1074590Z       ยท                            โ•ฐโ”€โ”€ 'promptResponseHasMissingXAiStopReason' is declared here
2026-10-23T06:46:06.1074668Z  1621 โ”‚   const meta = response._meta;
2026-10-23T06:46:06.1074719Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1074825Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1074828Z
2026-10-23T06:46:06.1075024Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T06:46:06.1075177Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
2026-10-23T06:46:06.1075290Z  222 โ”‚               ? snippetTokens.map((line, lineIndex) => (
2026-10-23T06:46:06.1075387Z  223 โ”‚                   <NativeText key={lineIndex}>
2026-10-23T06:46:06.1075496Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1075591Z  224 โ”‚                     {lineIndex > 0 ? "\n" : ""}
2026-10-23T06:46:06.1075642Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1075791Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T06:46:06.1075794Z
2026-10-23T06:46:06.1075988Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T06:46:06.1076140Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25]
2026-10-23T06:46:06.1076216Z  226 โ”‚                       <NativeText
2026-10-23T06:46:06.1076299Z  227 โ”‚                         key={tokenIndex}
2026-10-23T06:46:06.1076460Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1076565Z  228 โ”‚                         style={{
2026-10-23T06:46:06.1076616Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1076762Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T06:46:06.1076764Z
2026-10-23T06:46:06.1077025Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1077191Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7]
2026-10-23T06:46:06.1077248Z  211 โ”‚   };
2026-10-23T06:46:06.1077313Z  212 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1077386Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1077519Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1077701Z  213 โ”‚     const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null;
2026-10-23T06:46:06.1077766Z  214 โ”‚     if (inserted) {
2026-10-23T06:46:06.1077842Z  215 โ”‚       setSelection((current) =>
2026-10-23T06:46:06.1077921Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1078094Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1078263Z  216 โ”‚         current.start === inserted.start && current.end === inserted.end ? current : inserted,
2026-10-23T06:46:06.1078315Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1078956Z   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-23T06:46:06.1079288Z   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-23T06:46:06.1079293Z
2026-10-23T06:46:06.1079554Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1079717Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7]
2026-10-23T06:46:06.1079795Z  284 โ”‚   }, [hasWorkspaceSnapshot]);
2026-10-23T06:46:06.1079860Z  285 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1079932Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1080062Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1080209Z  286 โ”‚     if (!environmentId || !projectCwd || !selectedProviderInstanceId) return;
2026-10-23T06:46:06.1080419Z  287 โ”‚     const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`;
2026-10-23T06:46:06.1080519Z  288 โ”‚     const now = Date.now();
2026-10-23T06:46:06.1080632Z  289 โ”‚     const lastRequest = workspaceRefreshKeyRef.current;
2026-10-23T06:46:06.1080690Z  290 โ”‚     if (
2026-10-23T06:46:06.1080767Z  291 โ”‚       lastRequest?.key === key &&
2026-10-23T06:46:06.1080909Z  292 โ”‚       now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS
2026-10-23T06:46:06.1080963Z  293 โ”‚     )
2026-10-23T06:46:06.1081024Z  294 โ”‚       return;
2026-10-23T06:46:06.1081204Z  295 โ”‚     if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) {
2026-10-23T06:46:06.1081291Z  296 โ”‚       setWorkspaceRefreshRetry(null);
2026-10-23T06:46:06.1081385Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1081563Z      ยท                   โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1081630Z  297 โ”‚       return;
2026-10-23T06:46:06.1081684Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1082288Z   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-23T06:46:06.1082612Z   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-23T06:46:06.1082615Z
2026-10-23T06:46:06.1082819Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1082983Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5]
2026-10-23T06:46:06.1083043Z  325 โ”‚   }, [
2026-10-23T06:46:06.1083108Z  326 โ”‚     draftMessage,
2026-10-23T06:46:06.1083186Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1083333Z      ยท           โ•ฐโ”€โ”€ Unnecessary dependency `draftMessage`
2026-10-23T06:46:06.1083397Z  327 โ”‚     environmentId,
2026-10-23T06:46:06.1083449Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1083746Z   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-23T06:46:06.1084060Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1084062Z
2026-10-23T06:46:06.1084326Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1084513Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
2026-10-23T06:46:06.1084567Z  104 โ”‚
2026-10-23T06:46:06.1084632Z  105 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1084705Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1084834Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1084913Z  106 โ”‚     clearReviewCommentTarget();
2026-10-23T06:46:06.1085011Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-23T06:46:06.1085119Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1085294Z      ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1085368Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-23T06:46:06.1085419Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1086077Z   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-23T06:46:06.1086434Z   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-23T06:46:06.1086436Z
2026-10-23T06:46:06.1086694Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1086879Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
2026-10-23T06:46:06.1086933Z  109 โ”‚
2026-10-23T06:46:06.1087002Z  110 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1087074Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1087204Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1087292Z  111 โ”‚     if (activeCommentTarget === null) {
2026-10-23T06:46:06.1087393Z  112 โ”‚       setPendingNativeCommentSelection(null);
2026-10-23T06:46:06.1087501Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1087679Z      ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1087735Z  113 โ”‚     }
2026-10-23T06:46:06.1087788Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1088395Z   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-23T06:46:06.1088742Z   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-23T06:46:06.1088745Z
2026-10-23T06:46:06.1088949Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1089133Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
2026-10-23T06:46:06.1089231Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-23T06:46:06.1089303Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-23T06:46:06.1089390Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1089560Z      ยท                โ•ฐโ”€โ”€ Unnecessary dependency `selectedSection?.id`
2026-10-23T06:46:06.1089616Z  109 โ”‚
2026-10-23T06:46:06.1089666Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1089962Z   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-23T06:46:06.1090277Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1090280Z
2026-10-23T06:46:06.1090542Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1090674Z      โ•ญโ”€[packages/provider-grok/src/server/adapter.ts:408:7]
2026-10-23T06:46:06.1090726Z  407 โ”‚
2026-10-23T06:46:06.1090797Z  408 โ”‚ const layer: Layer.Layer<
2026-10-23T06:46:06.1090919Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T06:46:06.1091076Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-23T06:46:06.1091168Z  409 โ”‚   ProviderAdapter.ProviderAdapterV2,
2026-10-23T06:46:06.1091221Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1091325Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1091328Z
2026-10-23T06:46:06.1091805Z   โš  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-23T06:46:06.1091983Z      โ•ญโ”€[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5]
2026-10-23T06:46:06.1092055Z  222 โ”‚         let idlePasses = 0;
2026-10-23T06:46:06.1092208Z  223 โ”‚ โ•ญโ”€โ–ถ     for (;;) {
2026-10-23T06:46:06.1092351Z  224 โ”‚ โ”‚         yield* Effect.promise(() => Promise.resolve());
2026-10-23T06:46:06.1092497Z  225 โ”‚ โ”‚         const pending = backgroundRuntime.pending.shift();
2026-10-23T06:46:06.1092594Z  226 โ”‚ โ”‚         if (!pending) {
2026-10-23T06:46:06.1092690Z  227 โ”‚ โ”‚           idlePasses++;
2026-10-23T06:46:06.1092796Z  228 โ”‚ โ”‚           if (idlePasses >= 3) {
2026-10-23T06:46:06.1092881Z  229 โ”‚ โ”‚             return;
2026-10-23T06:46:06.1092961Z  230 โ”‚ โ”‚           }
2026-10-23T06:46:06.1093049Z  231 โ”‚ โ”‚           continue;
2026-10-23T06:46:06.1093126Z  232 โ”‚ โ”‚         }
2026-10-23T06:46:06.1093219Z  233 โ”‚ โ”‚         idlePasses = 0;
2026-10-23T06:46:06.1093341Z  234 โ”‚ โ”‚         const exit = yield* Effect.exit(
2026-10-23T06:46:06.1093559Z  235 โ”‚ โ”‚           pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
2026-10-23T06:46:06.1093636Z  236 โ”‚ โ”‚         );
2026-10-23T06:46:06.1093742Z  237 โ”‚ โ”‚         yield* Effect.sync(() => {
2026-10-23T06:46:06.1093848Z  238 โ”‚ โ”‚           pending.resolve(exit);
2026-10-23T06:46:06.1093924Z  239 โ”‚ โ”‚         });
2026-10-23T06:46:06.1094053Z  240 โ”‚ โ•ฐโ”€โ–ถ     }
2026-10-23T06:46:06.1094110Z  241 โ”‚       },
2026-10-23T06:46:06.1094163Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1094165Z
2026-10-23T06:46:06.1094456Z   โš  eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1094606Z        โ•ญโ”€[apps/server/src/orchestration-v2/Orchestrator.ts:12316:7]
2026-10-23T06:46:06.1094660Z  12315 โ”‚
2026-10-23T06:46:06.1094803Z  12316 โ”‚ const layerUnavailable: Layer.Layer<OrchestratorV2> = Layer.succeed(
2026-10-23T06:46:06.1094890Z        ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1095041Z        ยท               โ•ฐโ”€โ”€ 'layerUnavailable' is declared here
2026-10-23T06:46:06.1095108Z  12317 โ”‚   OrchestratorV2,
2026-10-23T06:46:06.1095161Z        โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1095266Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1095269Z
2026-10-23T06:46:06.1095529Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1095734Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5]
2026-10-23T06:46:06.1095826Z  398 โ”‚
2026-10-23T06:46:06.1095891Z  399 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1095963Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1096092Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1096185Z  400 โ”‚     setInspectorSelection((current) => {
2026-10-23T06:46:06.1096272Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1096446Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1096547Z  401 โ”‚       if (props.renderInspector === undefined) {
2026-10-23T06:46:06.1096600Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1097211Z   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-23T06:46:06.1097540Z   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-23T06:46:06.1097543Z
2026-10-23T06:46:06.1097761Z   โš  react(no-unstable-nested-components): Do not define components during render.
2026-10-23T06:46:06.1097912Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24]
2026-10-23T06:46:06.1098074Z  527 โ”‚       const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
2026-10-23T06:46:06.1098248Z  528 โ”‚ โ•ญโ”€โ–ถ   const GitInspector = () => (
2026-10-23T06:46:06.1098351Z  529 โ”‚ โ”‚       <GitOverviewSheet
2026-10-23T06:46:06.1098503Z  530 โ”‚ โ”‚         headerInset={inspectorHeaderInset}
2026-10-23T06:46:06.1098610Z  531 โ”‚ โ”‚         presentation="inspector"
2026-10-23T06:46:06.1098792Z  532 โ”‚ โ”‚         route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
2026-10-23T06:46:06.1098869Z  533 โ”‚ โ”‚       />
2026-10-23T06:46:06.1098999Z  534 โ”‚ โ•ฐโ”€โ–ถ   );
2026-10-23T06:46:06.1099079Z  535 โ”‚       const FilesInspector = () =>
2026-10-23T06:46:06.1099130Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1099353Z   help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-23T06:46:06.1099356Z
2026-10-23T06:46:06.1099576Z   โš  react(no-unstable-nested-components): Do not define components during render.
2026-10-23T06:46:06.1099729Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26]
2026-10-23T06:46:06.1099788Z  534 โ”‚       );
2026-10-23T06:46:06.1099954Z  535 โ”‚ โ•ญโ”€โ–ถ   const FilesInspector = () =>
2026-10-23T06:46:06.1100107Z  536 โ”‚ โ”‚       selectedThread !== null && selectedThreadCwd !== null ? (
2026-10-23T06:46:06.1100213Z  537 โ”‚ โ”‚         <ThreadFileNavigatorPane
2026-10-23T06:46:06.1100321Z  538 โ”‚ โ”‚           cwd={selectedThreadCwd}
2026-10-23T06:46:06.1100461Z  539 โ”‚ โ”‚           environmentId={selectedThread.environmentId}
2026-10-23T06:46:06.1100584Z  540 โ”‚ โ”‚           headerInset={inspectorHeaderInset}
2026-10-23T06:46:06.1100796Z  541 โ”‚ โ”‚           projectName={selectedThreadProject?.title ?? "Files"}
2026-10-23T06:46:06.1100933Z  542 โ”‚ โ”‚           selectedPath={null}
2026-10-23T06:46:06.1101062Z  543 โ”‚ โ”‚           onSelectFile={handleSelectInspectorFile}
2026-10-23T06:46:06.1101141Z  544 โ”‚ โ”‚         />
2026-10-23T06:46:06.1101279Z  545 โ”‚ โ•ฐโ”€โ–ถ     ) : null;
2026-10-23T06:46:06.1101434Z  546 โ”‚       const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
2026-10-23T06:46:06.1101486Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1101703Z   help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-23T06:46:06.1101706Z
2026-10-23T06:46:06.1101851Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1102018Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
2026-10-23T06:46:06.1102181Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-23T06:46:06.1102302Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-23T06:46:06.1102426Z      ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1102600Z      ยท                                                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1102722Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-23T06:46:06.1102773Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1103256Z   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-23T06:46:06.1103553Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1103557Z
2026-10-23T06:46:06.1103701Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1103860Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
2026-10-23T06:46:06.1103914Z  125 โ”‚
2026-10-23T06:46:06.1104024Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T06:46:06.1104110Z      ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1104261Z      ยท                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1104364Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T06:46:06.1104414Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1104940Z   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-23T06:46:06.1105268Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1105271Z
2026-10-23T06:46:06.1105414Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1105570Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
2026-10-23T06:46:06.1105621Z  125 โ”‚
2026-10-23T06:46:06.1105729Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T06:46:06.1105816Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1105970Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1106074Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T06:46:06.1106126Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1106594Z   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-23T06:46:06.1106885Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1106888Z
2026-10-23T06:46:06.1107031Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1107192Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
2026-10-23T06:46:06.1107247Z  125 โ”‚
2026-10-23T06:46:06.1107353Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T06:46:06.1107468Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1107635Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1107735Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T06:46:06.1107787Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1108254Z   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-23T06:46:06.1108573Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1108579Z
2026-10-23T06:46:06.1108723Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1108881Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
2026-10-23T06:46:06.1108933Z  125 โ”‚
2026-10-23T06:46:06.1109040Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T06:46:06.1109209Z      ยท                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1109375Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1109475Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T06:46:06.1109527Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1110056Z   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-23T06:46:06.1110389Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1110392Z
2026-10-23T06:46:06.1110535Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1110693Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-23T06:46:06.1110804Z  126 โ”‚       if (!sessionRef.current || !recorderRef.current) {
2026-10-23T06:46:06.1110998Z  127 โ”‚ โ•ญโ”€โ–ถ     const recorder = createLazyVoiceRecorder({
2026-10-23T06:46:06.1111178Z  128 โ”‚ โ”‚         create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-23T06:46:06.1111307Z  129 โ”‚ โ”‚         onStatus: (status: RecordingStatus) => {
2026-10-23T06:46:06.1111461Z  130 โ”‚ โ”‚           sessionRef.current?.controller.handleRecorderStatus({
2026-10-23T06:46:06.1111579Z  131 โ”‚ โ”‚             isFinished: status.isFinished,
2026-10-23T06:46:06.1111759Z  132 โ”‚ โ”‚             hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-23T06:46:06.1111865Z  133 โ”‚ โ”‚             error: status.error,
2026-10-23T06:46:06.1111963Z  134 โ”‚ โ”‚             url: status.url,
2026-10-23T06:46:06.1112043Z  135 โ”‚ โ”‚           });
2026-10-23T06:46:06.1112120Z  136 โ”‚ โ”‚         },
2026-10-23T06:46:06.1112324Z  137 โ”‚ โ”‚         // Read when recording starts so preference changes do not re-render every composer.
2026-10-23T06:46:06.1112437Z  138 โ”‚ โ”‚         selectInput: (inputs) => {
2026-10-23T06:46:06.1112589Z  139 โ”‚ โ”‚           const preferences = registry.get(mobilePreferencesAtom);
2026-10-23T06:46:06.1112736Z  140 โ”‚ โ”‚           if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-23T06:46:06.1112902Z  141 โ”‚ โ”‚           const known = microphoneOrder(preferences.value.microphones);
2026-10-23T06:46:06.1113043Z  142 โ”‚ โ”‚           const order = rememberMicrophones(known, inputs);
2026-10-23T06:46:06.1113145Z  143 โ”‚ โ”‚           if (order !== known) {
2026-10-23T06:46:06.1113282Z  144 โ”‚ โ”‚             registry.set(updateMobilePreferencesAtom, {
2026-10-23T06:46:06.1113404Z  145 โ”‚ โ”‚               transform: (current) => ({
2026-10-23T06:46:06.1113613Z  146 โ”‚ โ”‚                 microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-23T06:46:06.1113701Z  147 โ”‚ โ”‚               }),
2026-10-23T06:46:06.1113782Z  148 โ”‚ โ”‚             });
2026-10-23T06:46:06.1113861Z  149 โ”‚ โ”‚           }
2026-10-23T06:46:06.1114000Z  150 โ”‚ โ”‚           return preferredMicrophoneInput(inputs, order);
2026-10-23T06:46:06.1114077Z  151 โ”‚ โ”‚         },
2026-10-23T06:46:06.1114208Z  152 โ”‚ โ”œโ”€โ–ถ     });
2026-10-23T06:46:06.1114447Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-23T06:46:06.1114670Z  153 โ”‚         recorderRef.current = recorder;
2026-10-23T06:46:06.1114779Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1115242Z   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-23T06:46:06.1115537Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1115540Z
2026-10-23T06:46:06.1115685Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1115844Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-23T06:46:06.1115902Z  152 โ”‚     });
2026-10-23T06:46:06.1115983Z  153 โ”‚     recorderRef.current = recorder;
2026-10-23T06:46:06.1116100Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1116288Z      ยท          โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-23T06:46:06.1116407Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-23T06:46:06.1116510Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-23T06:46:06.1116562Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1117030Z   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-23T06:46:06.1117321Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1117324Z
2026-10-23T06:46:06.1117473Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1117633Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-23T06:46:06.1117721Z  153 โ”‚         recorderRef.current = recorder;
2026-10-23T06:46:06.1117914Z  154 โ”‚ โ•ญโ”€โ–ถ     sessionRef.current = new VoiceInputSession({
2026-10-23T06:46:06.1118001Z  155 โ”‚ โ”‚         recorder,
2026-10-23T06:46:06.1118129Z  156 โ”‚ โ”‚         getTranscriber: getLocalVoiceTranscriber,
2026-10-23T06:46:06.1118247Z  157 โ”‚ โ”‚         requestPermission: async () => {
2026-10-23T06:46:06.1118454Z  158 โ”‚ โ”‚           const permission = await requestRecordingPermissionsAsync();
2026-10-23T06:46:06.1118650Z  159 โ”‚ โ”‚           return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-23T06:46:06.1118730Z  160 โ”‚ โ”‚         },
2026-10-23T06:46:06.1118873Z  161 โ”‚ โ”‚         configureRecording: configureVoiceRecordingAudio,
2026-10-23T06:46:06.1119009Z  162 โ”‚ โ”‚         releaseRecording: releaseVoiceRecordingAudio,
2026-10-23T06:46:06.1119144Z  163 โ”‚ โ”‚         deleteRecording: (uri) => new File(uri).delete(),
2026-10-23T06:46:06.1119254Z  164 โ”‚ โ”‚         onStateChange: (nextState) =>
2026-10-23T06:46:06.1119347Z  165 โ”‚ โ”‚           setState({
2026-10-23T06:46:06.1119449Z  166 โ”‚ โ”‚             state: nextState,
2026-10-23T06:46:06.1119587Z  167 โ”‚ โ”‚             ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-23T06:46:06.1119775Z  168 โ”‚ โ”‚             label: sessionRef.current?.label ?? null,
2026-10-23T06:46:06.1119894Z  169 โ”‚ โ”‚           }),
2026-10-23T06:46:06.1120022Z  170 โ”‚ โ”œโ”€โ–ถ     });
2026-10-23T06:46:06.1120220Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1120276Z  171 โ”‚       }
2026-10-23T06:46:06.1120329Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1120795Z   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-23T06:46:06.1121091Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1121101Z
2026-10-23T06:46:06.1121245Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1121402Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-23T06:46:06.1121484Z  153 โ”‚     recorderRef.current = recorder;
2026-10-23T06:46:06.1121587Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-23T06:46:06.1121699Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1121882Z      ยท          โ”‚        โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-23T06:46:06.1122000Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-23T06:46:06.1122064Z  155 โ”‚       recorder,
2026-10-23T06:46:06.1122116Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1122588Z   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-23T06:46:06.1122882Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1122885Z
2026-10-23T06:46:06.1123029Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1123189Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-23T06:46:06.1123276Z  184 โ”‚     return () => subscription.remove();
2026-10-23T06:46:06.1123340Z  185 โ”‚   }, [controller]);
2026-10-23T06:46:06.1123416Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1123565Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1123621Z  186 โ”‚
2026-10-23T06:46:06.1123692Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1124154Z   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-23T06:46:06.1124445Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1124448Z
2026-10-23T06:46:06.1124593Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1124749Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-23T06:46:06.1124888Z  184 โ”‚     return () => subscription.remove();
2026-10-23T06:46:06.1124990Z  185 โ”‚   }, [controller]);
2026-10-23T06:46:06.1125067Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1125208Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1125261Z  186 โ”‚
2026-10-23T06:46:06.1125314Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1125780Z   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-23T06:46:06.1126069Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1126072Z
2026-10-23T06:46:06.1126218Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1126376Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-23T06:46:06.1126432Z  191 โ”‚     },
2026-10-23T06:46:06.1126504Z  192 โ”‚     [controller, recorder],
2026-10-23T06:46:06.1126577Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1126721Z      ยท           โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1126778Z  193 โ”‚   );
2026-10-23T06:46:06.1126829Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1127293Z   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-23T06:46:06.1127587Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1127592Z
2026-10-23T06:46:06.1127734Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1127890Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-23T06:46:06.1127982Z  174 โ”‚   const controller = session.controller;
2026-10-23T06:46:06.1128067Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-23T06:46:06.1128172Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1128330Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1128383Z  176 โ”‚
2026-10-23T06:46:06.1128459Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1128932Z   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-23T06:46:06.1129223Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1129225Z
2026-10-23T06:46:06.1129368Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1129522Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-23T06:46:06.1129578Z  191 โ”‚     },
2026-10-23T06:46:06.1129651Z  192 โ”‚     [controller, recorder],
2026-10-23T06:46:06.1129740Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1129886Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1130003Z  193 โ”‚   );
2026-10-23T06:46:06.1130089Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1130555Z   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-23T06:46:06.1130844Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1130847Z
2026-10-23T06:46:06.1130988Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1131145Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-23T06:46:06.1131237Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-23T06:46:06.1131355Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-23T06:46:06.1131445Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1131602Z      ยท                         โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1131655Z  247 โ”‚
2026-10-23T06:46:06.1131707Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1132168Z   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-23T06:46:06.1132456Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1132459Z
2026-10-23T06:46:06.1132601Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1132761Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-23T06:46:06.1132854Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-23T06:46:06.1132962Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-23T06:46:06.1133094Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1133252Z      ยท                              โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1133305Z  247 โ”‚
2026-10-23T06:46:06.1133355Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1133817Z   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-23T06:46:06.1134172Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1134204Z
2026-10-23T06:46:06.1134348Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1134505Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-23T06:46:06.1134572Z  260 โ”‚     setOwnerFocused,
2026-10-23T06:46:06.1134633Z  261 โ”‚     session,
2026-10-23T06:46:06.1134705Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1134841Z      ยท        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1134901Z  262 โ”‚     stop,
2026-10-23T06:46:06.1134954Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1135424Z   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-23T06:46:06.1135715Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1135717Z
2026-10-23T06:46:06.1135858Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1136015Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-23T06:46:06.1136070Z  250 โ”‚
2026-10-23T06:46:06.1136211Z  251 โ”‚ โ•ญโ”€โ–ถ   return {
2026-10-23T06:46:06.1136422Z  252 โ”‚ โ”‚       isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-23T06:46:06.1136508Z  253 โ”‚ โ”‚       state,
2026-10-23T06:46:06.1136601Z  254 โ”‚ โ”‚       audioLevels,
2026-10-23T06:46:06.1136696Z  255 โ”‚ โ”‚       elapsedSeconds,
2026-10-23T06:46:06.1136825Z  256 โ”‚ โ”‚       isBusy: voiceInputBlocksSubmission(state),
2026-10-23T06:46:06.1136907Z  257 โ”‚ โ”‚       ownerKey,
2026-10-23T06:46:06.1136985Z  258 โ”‚ โ”‚       label,
2026-10-23T06:46:06.1137075Z  259 โ”‚ โ”‚       focusedOwners,
2026-10-23T06:46:06.1137168Z  260 โ”‚ โ”‚       setOwnerFocused,
2026-10-23T06:46:06.1137249Z  261 โ”‚ โ”‚       session,
2026-10-23T06:46:06.1137328Z  262 โ”‚ โ”‚       stop,
2026-10-23T06:46:06.1137408Z  263 โ”‚ โ”‚       cancel,
2026-10-23T06:46:06.1137542Z  264 โ”‚ โ”œโ”€โ–ถ   };
2026-10-23T06:46:06.1137744Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1137799Z  265 โ”‚     }
2026-10-23T06:46:06.1137852Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1138317Z   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-23T06:46:06.1138631Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1138634Z
2026-10-23T06:46:06.1138792Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.1139009Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-23T06:46:06.1139201Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-23T06:46:06.1139324Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-23T06:46:06.1139405Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1139541Z      ยท              โ•ฐโ”€โ”€ `audioLevels` originates here
2026-10-23T06:46:06.1139660Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-23T06:46:06.1139804Z  124 โ”‚   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-23T06:46:06.1139857Z  125 โ”‚
2026-10-23T06:46:06.1139964Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T06:46:06.1140064Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T06:46:06.1140207Z  128 โ”‚       create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-23T06:46:06.1140305Z  129 โ”‚       onStatus: (status: RecordingStatus) => {
2026-10-23T06:46:06.1140426Z  130 โ”‚         sessionRef.current?.controller.handleRecorderStatus({
2026-10-23T06:46:06.1140516Z  131 โ”‚           isFinished: status.isFinished,
2026-10-23T06:46:06.1140659Z  132 โ”‚           hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-23T06:46:06.1140733Z  133 โ”‚           error: status.error,
2026-10-23T06:46:06.1140801Z  134 โ”‚           url: status.url,
2026-10-23T06:46:06.1140860Z  135 โ”‚         });
2026-10-23T06:46:06.1140916Z  136 โ”‚       },
2026-10-23T06:46:06.1141080Z  137 โ”‚       // Read when recording starts so preference changes do not re-render every composer.
2026-10-23T06:46:06.1141158Z  138 โ”‚       selectInput: (inputs) => {
2026-10-23T06:46:06.1141288Z  139 โ”‚         const preferences = registry.get(mobilePreferencesAtom);
2026-10-23T06:46:06.1141402Z  140 โ”‚         if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-23T06:46:06.1141536Z  141 โ”‚         const known = microphoneOrder(preferences.value.microphones);
2026-10-23T06:46:06.1141645Z  142 โ”‚         const order = rememberMicrophones(known, inputs);
2026-10-23T06:46:06.1141717Z  143 โ”‚         if (order !== known) {
2026-10-23T06:46:06.1141822Z  144 โ”‚           registry.set(updateMobilePreferencesAtom, {
2026-10-23T06:46:06.1141905Z  145 โ”‚             transform: (current) => ({
2026-10-23T06:46:06.1142078Z  146 โ”‚               microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-23T06:46:06.1142141Z  147 โ”‚             }),
2026-10-23T06:46:06.1142201Z  148 โ”‚           });
2026-10-23T06:46:06.1142257Z  149 โ”‚         }
2026-10-23T06:46:06.1142367Z  150 โ”‚         return preferredMicrophoneInput(inputs, order);
2026-10-23T06:46:06.1142431Z  151 โ”‚       },
2026-10-23T06:46:06.1142488Z  152 โ”‚     });
2026-10-23T06:46:06.1142569Z  153 โ”‚     recorderRef.current = recorder;
2026-10-23T06:46:06.1142671Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-23T06:46:06.1142731Z  155 โ”‚       recorder,
2026-10-23T06:46:06.1142830Z  156 โ”‚       getTranscriber: getLocalVoiceTranscriber,
2026-10-23T06:46:06.1142914Z  157 โ”‚       requestPermission: async () => {
2026-10-23T06:46:06.1143046Z  158 โ”‚         const permission = await requestRecordingPermissionsAsync();
2026-10-23T06:46:06.1143203Z  159 โ”‚         return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-23T06:46:06.1143260Z  160 โ”‚       },
2026-10-23T06:46:06.1143373Z  161 โ”‚       configureRecording: configureVoiceRecordingAudio,
2026-10-23T06:46:06.1143479Z  162 โ”‚       releaseRecording: releaseVoiceRecordingAudio,
2026-10-23T06:46:06.1143636Z  163 โ”‚       deleteRecording: (uri) => new File(uri).delete(),
2026-10-23T06:46:06.1143764Z  164 โ”‚       onStateChange: (nextState) =>
2026-10-23T06:46:06.1143830Z  165 โ”‚         setState({
2026-10-23T06:46:06.1143900Z  166 โ”‚           state: nextState,
2026-10-23T06:46:06.1144005Z  167 โ”‚           ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-23T06:46:06.1144105Z  168 โ”‚           label: sessionRef.current?.label ?? null,
2026-10-23T06:46:06.1144165Z  169 โ”‚         }),
2026-10-23T06:46:06.1144220Z  170 โ”‚     });
2026-10-23T06:46:06.1144273Z  171 โ”‚   }
2026-10-23T06:46:06.1144325Z  172 โ”‚
2026-10-23T06:46:06.1144411Z  173 โ”‚   const session = sessionRef.current;
2026-10-23T06:46:06.1144499Z  174 โ”‚   const controller = session.controller;
2026-10-23T06:46:06.1144583Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-23T06:46:06.1144635Z  176 โ”‚
2026-10-23T06:46:06.1144708Z  177 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1144860Z  178 โ”‚     const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-23T06:46:06.1144999Z  179 โ”‚       // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-23T06:46:06.1145141Z  180 โ”‚       // real background state cancels preparation; recorder status handles
2026-10-23T06:46:06.1145247Z  181 โ”‚       // calls and route interruptions during capture.
2026-10-23T06:46:06.1145382Z  182 โ”‚       if (nextState === "background") controller.appMovedToBackground();
2026-10-23T06:46:06.1145437Z  183 โ”‚     });
2026-10-23T06:46:06.1145522Z  184 โ”‚     return () => subscription.remove();
2026-10-23T06:46:06.1145587Z  185 โ”‚   }, [controller]);
2026-10-23T06:46:06.1145639Z  186 โ”‚
2026-10-23T06:46:06.1145698Z  187 โ”‚   useEffect(
2026-10-23T06:46:06.1145760Z  188 โ”‚     () => () => {
2026-10-23T06:46:06.1145832Z  189 โ”‚       controller.dispose();
2026-10-23T06:46:06.1145905Z  190 โ”‚       recorder.release();
2026-10-23T06:46:06.1145963Z  191 โ”‚     },
2026-10-23T06:46:06.1146035Z  192 โ”‚     [controller, recorder],
2026-10-23T06:46:06.1146090Z  193 โ”‚   );
2026-10-23T06:46:06.1146141Z  194 โ”‚
2026-10-23T06:46:06.1146204Z  195 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1146299Z  196 โ”‚     if (state.phase !== "recording") return;
2026-10-23T06:46:06.1146350Z  197 โ”‚
2026-10-23T06:46:06.1146498Z  198 โ”‚     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-23T06:46:06.1146604Z  199 โ”‚     const activation = activateKeepAwakeAsync(tag);
2026-10-23T06:46:06.1146684Z  200 โ”‚     void activation.catch(() => {});
2026-10-23T06:46:06.1146751Z  201 โ”‚     return () => {
2026-10-23T06:46:06.1146900Z  202 โ”‚       // Release after activation settles, even if the recording ends immediately.
2026-10-23T06:46:06.1147046Z  203 โ”‚       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-23T06:46:06.1147104Z  204 โ”‚     };
2026-10-23T06:46:06.1147183Z  205 โ”‚   }, [keepAwakeId, state.phase]);
2026-10-23T06:46:06.1147234Z  206 โ”‚
2026-10-23T06:46:06.1147297Z  207 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1147431Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-23T06:46:06.1147482Z  209 โ”‚
2026-10-23T06:46:06.1147604Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-23T06:46:06.1147758Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-23T06:46:06.1147861Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-23T06:46:06.1147938Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1148078Z      ยท            โ•ฐโ”€โ”€ `audioLevels` cannot be modified
2026-10-23T06:46:06.1148195Z  213 โ”‚     }
2026-10-23T06:46:06.1148283Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1148567Z   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-23T06:46:06.1148879Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.1148882Z
2026-10-23T06:46:06.1149085Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-23T06:46:06.1149473Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-23T06:46:06.1149527Z  206 โ”‚
2026-10-23T06:46:06.1149590Z  207 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1149669Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1149893Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-23T06:46:06.1150033Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-23T06:46:06.1150084Z  209 โ”‚
2026-10-23T06:46:06.1150204Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-23T06:46:06.1150357Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-23T06:46:06.1150459Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-23T06:46:06.1150535Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1150670Z      ยท            โ•ฐโ”€โ”€ This modifies `audioLevels`
2026-10-23T06:46:06.1150725Z  213 โ”‚     }
2026-10-23T06:46:06.1150777Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1151123Z   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-23T06:46:06.1151433Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.1151436Z
2026-10-23T06:46:06.1151912Z   โš  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-23T06:46:06.1152086Z      โ•ญโ”€[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7]
2026-10-23T06:46:06.1152189Z  565 โ”‚           let afterSequence = created[0]!.sequence;
2026-10-23T06:46:06.1152388Z  566 โ”‚ โ•ญโ”€โ–ถ       for (let index = 1; index <= 32; index += 1) {
2026-10-23T06:46:06.1152492Z  567 โ”‚ โ”‚           const nextEvent = {
2026-10-23T06:46:06.1152651Z  568 โ”‚ โ”‚             id: EventId.make(`event:foundation-stream-race:${index}`),
2026-10-23T06:46:06.1152785Z  569 โ”‚ โ”‚             type: "thread.metadata-updated" as const,
2026-10-23T06:46:06.1152875Z  570 โ”‚ โ”‚             threadId,
2026-10-23T06:46:06.1152981Z  571 โ”‚ โ”‚             providerInstanceId,
2026-10-23T06:46:06.1153081Z  572 โ”‚ โ”‚             occurredAt: now,
2026-10-23T06:46:06.1153230Z  573 โ”‚ โ”‚             payload: { ...thread, title: `Race update ${index}` },
2026-10-23T06:46:06.1153359Z  574 โ”‚ โ”‚           } satisfies OrchestrationV2DomainEvent;
2026-10-23T06:46:06.1153551Z  575 โ”‚ โ”‚           const reader = yield* eventSink
2026-10-23T06:46:06.1153712Z  576 โ”‚ โ”‚             .stream({ threadId, afterSequence })
2026-10-23T06:46:06.1153842Z  577 โ”‚ โ”‚             .pipe(Stream.runHead, Effect.forkChild);
2026-10-23T06:46:06.1153947Z  578 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-23T06:46:06.1154110Z  579 โ”‚ โ”‚           const written = yield* eventSink.write({ events: [nextEvent] });
2026-10-23T06:46:06.1154239Z  580 โ”‚ โ”‚           const received = yield* Fiber.join(reader);
2026-10-23T06:46:06.1154354Z  581 โ”‚ โ”‚           if (Option.isNone(received)) {
2026-10-23T06:46:06.1154555Z  582 โ”‚ โ”‚             return yield* Effect.die("The event stream ended before delivering the live event.");
2026-10-23T06:46:06.1154634Z  583 โ”‚ โ”‚           }
2026-10-23T06:46:06.1154801Z  584 โ”‚ โ”‚           assert.equal(received.value.sequence, written[0]?.sequence);
2026-10-23T06:46:06.1154953Z  585 โ”‚ โ”‚           assert.equal(received.value.event.id, nextEvent.id);
2026-10-23T06:46:06.1155083Z  586 โ”‚ โ”‚           afterSequence = received.value.sequence;
2026-10-23T06:46:06.1155214Z  587 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-23T06:46:06.1155273Z  588 โ”‚         }),
2026-10-23T06:46:06.1155326Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1155328Z
2026-10-23T06:46:06.1155801Z   โš  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-23T06:46:06.1155981Z       โ•ญโ”€[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9]
2026-10-23T06:46:06.1156064Z  2326 โ”‚             let settled = false;
2026-10-23T06:46:06.1156225Z  2327 โ”‚ โ•ญโ”€โ–ถ         while (!settled) {
2026-10-23T06:46:06.1156384Z  2328 โ”‚ โ”‚             settled = (yield* outbox.listByCommandId(commandId)).every(
2026-10-23T06:46:06.1156515Z  2329 โ”‚ โ”‚               (effect) => effect.status === "succeeded",
2026-10-23T06:46:06.1156598Z  2330 โ”‚ โ”‚             );
2026-10-23T06:46:06.1156723Z  2331 โ”‚ โ”‚             if (!settled) yield* Effect.yieldNow;
2026-10-23T06:46:06.1156860Z  2332 โ”‚ โ•ฐโ”€โ–ถ         }
2026-10-23T06:46:06.1156978Z  2333 โ”‚           }).pipe(Effect.provide(layerWorker), Effect.scoped);
2026-10-23T06:46:06.1157030Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1157033Z
2026-10-23T06:46:06.1157303Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1157468Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-23T06:46:06.1157532Z  259 โ”‚     .join("|");
2026-10-23T06:46:06.1157596Z  260 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1157670Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1157801Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1157862Z  261 โ”‚     stop();
2026-10-23T06:46:06.1157930Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-23T06:46:06.1158095Z      ยท       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1158163Z  262 โ”‚   }, [orderVersion]);
2026-10-23T06:46:06.1158216Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1158924Z   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-23T06:46:06.1159282Z   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-23T06:46:06.1159285Z
2026-10-23T06:46:06.1159503Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-23T06:46:06.1159667Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-23T06:46:06.1159732Z  260 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1159792Z  261 โ”‚     stop();
2026-10-23T06:46:06.1159864Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-23T06:46:06.1159992Z      ยท       โ•ฐโ”€โ”€ Missing dependency `stop`
2026-10-23T06:46:06.1160057Z  262 โ”‚   }, [orderVersion]);
2026-10-23T06:46:06.1160138Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1160284Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `orderVersion`
2026-10-23T06:46:06.1160346Z  263 โ”‚   useEffect(
2026-10-23T06:46:06.1160398Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1160824Z   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-23T06:46:06.1161144Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1161150Z
2026-10-23T06:46:06.1161296Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1161456Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
2026-10-23T06:46:06.1161533Z  95 โ”‚   const latest = useRef(props);
2026-10-23T06:46:06.1161603Z  96 โ”‚   latest.current = props;
2026-10-23T06:46:06.1161708Z     ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1161887Z     ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-23T06:46:06.1161999Z     ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-23T06:46:06.1162069Z  97 โ”‚   const gesture = useMemo(
2026-10-23T06:46:06.1162121Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1162597Z   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-23T06:46:06.1162893Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1162896Z
2026-10-23T06:46:06.1163039Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1163201Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
2026-10-23T06:46:06.1163268Z  103 โ”‚         .runOnJS(true)
2026-10-23T06:46:06.1163369Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-23T06:46:06.1163486Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1163748Z      ยท                                 โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-23T06:46:06.1163918Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-23T06:46:06.1163970Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1164439Z   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-23T06:46:06.1164733Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1164735Z
2026-10-23T06:46:06.1164880Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1165045Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
2026-10-23T06:46:06.1165148Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-23T06:46:06.1165277Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-23T06:46:06.1165422Z      ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1165635Z      ยท                                             โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-23T06:46:06.1165760Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-23T06:46:06.1165811Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1166285Z   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-23T06:46:06.1166581Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1166583Z
2026-10-23T06:46:06.1166730Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1166888Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
2026-10-23T06:46:06.1167017Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-23T06:46:06.1167141Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-23T06:46:06.1167283Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1167557Z      ยท                                          โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-23T06:46:06.1167738Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-23T06:46:06.1167789Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1168253Z   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-23T06:46:06.1168565Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1168568Z
2026-10-23T06:46:06.1168713Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1168871Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
2026-10-23T06:46:06.1168998Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-23T06:46:06.1169125Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-23T06:46:06.1169264Z      ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1169471Z      ยท                                            โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-23T06:46:06.1169539Z  108 โ”‚     [props.disabled],
2026-10-23T06:46:06.1169590Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1170055Z   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-23T06:46:06.1170348Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1170354Z
2026-10-23T06:46:06.1170497Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1170656Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
2026-10-23T06:46:06.1170770Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-23T06:46:06.1170876Z  249 โ”‚   latest.current = { rows, planners, moveThread };
2026-10-23T06:46:06.1170980Z      ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1171160Z      ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-23T06:46:06.1171275Z      ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-23T06:46:06.1171330Z  250 โ”‚
2026-10-23T06:46:06.1171386Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1171853Z   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-23T06:46:06.1172144Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1172146Z
2026-10-23T06:46:06.1172291Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1172451Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
2026-10-23T06:46:06.1172569Z  246 โ”‚   const [preview, setPreview] = useState<Drag | null>(null);
2026-10-23T06:46:06.1172743Z  247 โ”‚   const translateY = useRef(new Animated.Value(0)).current;
2026-10-23T06:46:06.1172903Z      ยท                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1173071Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1173181Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-23T06:46:06.1173233Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1173696Z   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-23T06:46:06.1173987Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1173990Z
2026-10-23T06:46:06.1174163Z   โš  react(purity): Cannot call impure function during render
2026-10-23T06:46:06.1174326Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
2026-10-23T06:46:06.1174391Z  323 โ”‚     update(0);
2026-10-23T06:46:06.1174473Z  324 โ”‚     let last = performance.now();
2026-10-23T06:46:06.1174569Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1174709Z      ยท                        โ•ฐโ”€โ”€ Cannot call impure function
2026-10-23T06:46:06.1174778Z  325 โ”‚     const tick = () => {
2026-10-23T06:46:06.1174829Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1175130Z   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-23T06:46:06.1175430Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-23T06:46:06.1175435Z
2026-10-23T06:46:06.1175623Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-23T06:46:06.1175781Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
2026-10-23T06:46:06.1175841Z   98 โ”‚     () =>
2026-10-23T06:46:06.1175906Z   99 โ”‚       Gesture.Pan()
2026-10-23T06:46:06.1175982Z      ยท               โ”€โ”ฌโ”€
2026-10-23T06:46:06.1176113Z      ยท                โ•ฐโ”€โ”€ `Pan` may be a component
2026-10-23T06:46:06.1176195Z  100 โ”‚         .enabled(!props.disabled)
2026-10-23T06:46:06.1176245Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1176527Z   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-23T06:46:06.1176980Z   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-23T06:46:06.1176982Z
2026-10-23T06:46:06.1177169Z   โš  react(memo-dependencies): Found missing memoization dependencies
2026-10-23T06:46:06.1177328Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
2026-10-23T06:46:06.1177394Z  103 โ”‚         .runOnJS(true)
2026-10-23T06:46:06.1177497Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-23T06:46:06.1177585Z      ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T06:46:06.1178081Z      ยท                           โ•ฐโ”€โ”€ 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-23T06:46:06.1178246Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-23T06:46:06.1178370Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-23T06:46:06.1178516Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-23T06:46:06.1178583Z  108 โ”‚     [props.disabled],
2026-10-23T06:46:06.1178665Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1178853Z      ยท             โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-23T06:46:06.1178908Z  109 โ”‚   );
2026-10-23T06:46:06.1178960Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1179171Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-23T06:46:06.1179488Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1179491Z
2026-10-23T06:46:06.1179649Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.1179822Z     โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5]
2026-10-23T06:46:06.1179878Z  90 โ”‚ }) {
2026-10-23T06:46:06.1179992Z  91 โ”‚   const rotation = useSharedValue(props.hidden ? 1 : 0);
2026-10-23T06:46:06.1180071Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1180205Z     ยท             โ•ฐโ”€โ”€ `rotation` originates here
2026-10-23T06:46:06.1180275Z  92 โ”‚   useLayoutEffect(() => {
2026-10-23T06:46:06.1180423Z  93 โ”‚     rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
2026-10-23T06:46:06.1180497Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1180628Z     ยท         โ•ฐโ”€โ”€ `rotation` cannot be modified
2026-10-23T06:46:06.1180705Z  94 โ”‚   }, [props.hidden, rotation]);
2026-10-23T06:46:06.1180756Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1181022Z   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-23T06:46:06.1181327Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.1181330Z
2026-10-23T06:46:06.1181487Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.1181662Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5]
2026-10-23T06:46:06.1181760Z  266 โ”‚   const variant = props.variant ?? "plain";
2026-10-23T06:46:06.1181895Z  267 โ”‚   const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
2026-10-23T06:46:06.1181983Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1182130Z      ยท                 โ•ฐโ”€โ”€ `loadingVisibility` originates here
2026-10-23T06:46:06.1182199Z  268 โ”‚   useLayoutEffect(() => {
2026-10-23T06:46:06.1182358Z  269 โ”‚     loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
2026-10-23T06:46:06.1182442Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1182590Z      ยท             โ•ฐโ”€โ”€ `loadingVisibility` cannot be modified
2026-10-23T06:46:06.1182682Z  270 โ”‚   }, [loadingVisibility, props.loading]);
2026-10-23T06:46:06.1182734Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1183055Z   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-23T06:46:06.1183394Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.1183396Z
2026-10-23T06:46:06.1183550Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.1183719Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5]
2026-10-23T06:46:06.1183774Z  325 โ”‚ }) {
2026-10-23T06:46:06.1183937Z  326 โ”‚   const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
2026-10-23T06:46:06.1184025Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1184182Z      ยท                  โ•ฐโ”€โ”€ `recordingVisibility` originates here
2026-10-23T06:46:06.1184255Z  327 โ”‚   useLayoutEffect(() => {
2026-10-23T06:46:06.1184443Z  328 โ”‚     recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
2026-10-23T06:46:06.1184528Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1184682Z      ยท              โ•ฐโ”€โ”€ `recordingVisibility` cannot be modified
2026-10-23T06:46:06.1184772Z  329 โ”‚   }, [props.phase, recordingVisibility]);
2026-10-23T06:46:06.1184824Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1185083Z   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-23T06:46:06.1185388Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.1185396Z
2026-10-23T06:46:06.1185594Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T06:46:06.1185739Z     โ•ญโ”€[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-23T06:46:06.1185827Z  35 โ”‚       <T3SourceTextRunNativeComponent
2026-10-23T06:46:06.1185891Z  36 โ”‚         key={index}
2026-10-23T06:46:06.1185970Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1186044Z  37 โ”‚         style={flattenedStyle}
2026-10-23T06:46:06.1186096Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1186242Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T06:46:06.1186245Z
2026-10-23T06:46:06.1186401Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.1186623Z     โ•ญโ”€[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
2026-10-23T06:46:06.1186763Z  65 โ”‚   const [expanded, setExpanded] = useState(false);
2026-10-23T06:46:06.1186847Z  66 โ”‚   const progress = useSharedValue(0);
2026-10-23T06:46:06.1186920Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1187053Z     ยท             โ•ฐโ”€โ”€ `progress` originates here
2026-10-23T06:46:06.1187119Z  67 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1187243Z  68 โ”‚     progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
2026-10-23T06:46:06.1187314Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1187446Z     ยท         โ•ฐโ”€โ”€ `progress` cannot be modified
2026-10-23T06:46:06.1187516Z  69 โ”‚   }, [expanded, progress]);
2026-10-23T06:46:06.1187565Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1187835Z   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-23T06:46:06.1188142Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.1188145Z
2026-10-23T06:46:06.1188290Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1188488Z     โ•ญโ”€[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
2026-10-23T06:46:06.1188571Z  26 โ”‚   const latestInput = useRef(input);
2026-10-23T06:46:06.1188647Z  27 โ”‚   latestInput.current = input;
2026-10-23T06:46:06.1188760Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1188943Z     ยท        โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-23T06:46:06.1189065Z     ยท        โ•ฐโ”€โ”€ This value is a ref
2026-10-23T06:46:06.1189183Z  28 โ”‚   const mounted = useRef(true);
2026-10-23T06:46:06.1189235Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1189707Z   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-23T06:46:06.1189998Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1190001Z
2026-10-23T06:46:06.1190187Z   โš  react(static-components): Cannot create components during render
2026-10-23T06:46:06.1190349Z      โ•ญโ”€[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10]
2026-10-23T06:46:06.1190442Z  196 โ”‚   const { onInput, onResize } = props;
2026-10-23T06:46:06.1190592Z  197 โ”‚   const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView();
2026-10-23T06:46:06.1190724Z      ยท                                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1190914Z      ยท                                                     โ•ฐโ”€โ”€ The component is created during render here
2026-10-23T06:46:06.1191043Z  198 โ”‚   const hasNativeSurface = Boolean(NativeTerminalSurfaceView);
2026-10-23T06:46:06.1191095Z  199 โ”‚
2026-10-23T06:46:06.1191165Z  200 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1191253Z  201 โ”‚     terminalDebugLog("native:surface", {
2026-10-23T06:46:06.1191338Z  202 โ”‚       terminalKey: props.terminalKey,
2026-10-23T06:46:06.1191414Z  203 โ”‚       native: hasNativeSurface,
2026-10-23T06:46:06.1191550Z  204 โ”‚       hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(),
2026-10-23T06:46:06.1191802Z  205 โ”‚       bufferLen: props.buffer.length,
2026-10-23T06:46:06.1191923Z  206 โ”‚       isRunning: props.isRunning,
2026-10-23T06:46:06.1191979Z  207 โ”‚     });
2026-10-23T06:46:06.1192139Z  208 โ”‚   }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]);
2026-10-23T06:46:06.1192227Z  209 โ”‚   const handleNativeInput = useCallback(
2026-10-23T06:46:06.1192343Z  210 โ”‚     (event: NativeSyntheticEvent<TerminalInputEvent>) => {
2026-10-23T06:46:06.1192439Z  211 โ”‚       if (!props.isRunning || props.readOnly) {
2026-10-23T06:46:06.1192500Z  212 โ”‚         return;
2026-10-23T06:46:06.1192556Z  213 โ”‚       }
2026-10-23T06:46:06.1192649Z  214 โ”‚       terminalDebugLog("native:onInput", {
2026-10-23T06:46:06.1192798Z  215 โ”‚         codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)),
2026-10-23T06:46:06.1192856Z  216 โ”‚       });
2026-10-23T06:46:06.1192949Z  217 โ”‚       onInput(event.nativeEvent.data);
2026-10-23T06:46:06.1193007Z  218 โ”‚     },
2026-10-23T06:46:06.1193105Z  219 โ”‚     [onInput, props.isRunning, props.readOnly],
2026-10-23T06:46:06.1193158Z  220 โ”‚   );
2026-10-23T06:46:06.1193249Z  221 โ”‚   const handleNativeResize = useCallback(
2026-10-23T06:46:06.1193364Z  222 โ”‚     (event: NativeSyntheticEvent<TerminalResizeEvent>) => {
2026-10-23T06:46:06.1193426Z  223 โ”‚       onResize({
2026-10-23T06:46:06.1193511Z  224 โ”‚         cols: event.nativeEvent.cols,
2026-10-23T06:46:06.1193593Z  225 โ”‚         rows: event.nativeEvent.rows,
2026-10-23T06:46:06.1193649Z  226 โ”‚       });
2026-10-23T06:46:06.1193704Z  227 โ”‚     },
2026-10-23T06:46:06.1193765Z  228 โ”‚     [onResize],
2026-10-23T06:46:06.1193821Z  229 โ”‚   );
2026-10-23T06:46:06.1193872Z  230 โ”‚
2026-10-23T06:46:06.1193956Z  231 โ”‚   if (NativeTerminalSurfaceView) {
2026-10-23T06:46:06.1194021Z  232 โ”‚     return (
2026-10-23T06:46:06.1194104Z  233 โ”‚       <View style={props.style}>
2026-10-23T06:46:06.1194183Z  234 โ”‚         <NativeTerminalSurfaceView
2026-10-23T06:46:06.1194289Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1194448Z      ยท                      โ•ฐโ”€โ”€ This component is created during render
2026-10-23T06:46:06.1194544Z  235 โ”‚           appearanceScheme={themeAppearance}
2026-10-23T06:46:06.1194595Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1194847Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-23T06:46:06.1195165Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-23T06:46:06.1195168Z
2026-10-23T06:46:06.1195433Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1195594Z      โ•ญโ”€[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
2026-10-23T06:46:06.1195762Z  112 โ”‚   const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
2026-10-23T06:46:06.1195828Z  113 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1195900Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1196030Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1196196Z  114 โ”‚     if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
2026-10-23T06:46:06.1196258Z  115 โ”‚       return;
2026-10-23T06:46:06.1196313Z  116 โ”‚     }
2026-10-23T06:46:06.1196430Z  117 โ”‚     setEntry({ key: input.targetKey, location: candidate });
2026-10-23T06:46:06.1196562Z      ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T06:46:06.1196764Z      ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1196888Z  118 โ”‚   }, [candidate, entry.key, entry.location, input.targetKey]);
2026-10-23T06:46:06.1196940Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1197550Z   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-23T06:46:06.1197875Z   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-23T06:46:06.1197878Z
2026-10-23T06:46:06.1198089Z   โš  eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining
2026-10-23T06:46:06.1198261Z       โ•ญโ”€[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8]
2026-10-23T06:46:06.1198329Z  1782 โ”‚     assert.equal(
2026-10-23T06:46:06.1198499Z  1783 โ”‚       (stored.context?.records[0] as { attachmentId: string }).attachmentId,
2026-10-23T06:46:06.1198603Z       ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1198684Z  1784 โ”‚       stored.attachments[0]?.id,
2026-10-23T06:46:06.1198735Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1198907Z   help: If this short-circuits with 'undefined' the evaluation will throw TypeError
2026-10-23T06:46:06.1198909Z
2026-10-23T06:46:06.1199170Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1199344Z        โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10566:7]
2026-10-23T06:46:06.1199402Z  10565 โ”‚
2026-10-23T06:46:06.1199474Z  10566 โ”‚ const layer: Layer.Layer<
2026-10-23T06:46:06.1199547Z        ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T06:46:06.1199675Z        ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-23T06:46:06.1199769Z  10567 โ”‚   ProviderAdapter.ProviderAdapterV2,
2026-10-23T06:46:06.1199822Z        โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1199927Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1199929Z
2026-10-23T06:46:06.1200187Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1200358Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
2026-10-23T06:46:06.1200416Z  638 โ”‚
2026-10-23T06:46:06.1200485Z  639 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1200557Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1200685Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1200795Z  640 โ”‚     if (pendingLaunchEntry.key === launchTargetKey) {
2026-10-23T06:46:06.1201952Z  641 โ”‚       return;
2026-10-23T06:46:06.1202016Z  642 โ”‚     }
2026-10-23T06:46:06.1202090Z  643 โ”‚     setPendingLaunchEntry({
2026-10-23T06:46:06.1202179Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1202357Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1202427Z  644 โ”‚       key: launchTargetKey,
2026-10-23T06:46:06.1202478Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1203158Z   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-23T06:46:06.1203521Z   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-23T06:46:06.1203524Z
2026-10-23T06:46:06.1203784Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1203956Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
2026-10-23T06:46:06.1204008Z  648 โ”‚
2026-10-23T06:46:06.1204074Z  649 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1204144Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1204279Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1204396Z  650 โ”‚     if (initialAttachGridEntry.key === launchTargetKey) {
2026-10-23T06:46:06.1204457Z  651 โ”‚       return;
2026-10-23T06:46:06.1204511Z  652 โ”‚     }
2026-10-23T06:46:06.1204591Z  653 โ”‚     setInitialAttachGridEntry({
2026-10-23T06:46:06.1204684Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1204858Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1204929Z  654 โ”‚       key: launchTargetKey,
2026-10-23T06:46:06.1204980Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1205589Z   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-23T06:46:06.1205917Z   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-23T06:46:06.1205920Z
2026-10-23T06:46:06.1206177Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1206346Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
2026-10-23T06:46:06.1206399Z  743 โ”‚
2026-10-23T06:46:06.1206463Z  744 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1206533Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1206662Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1206767Z  745 โ”‚     if (!routeEnvironmentId || !routeThreadId) {
2026-10-23T06:46:06.1206841Z  746 โ”‚       setLastGridSize({
2026-10-23T06:46:06.1206923Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1207093Z      ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1207175Z  747 โ”‚         cols: DEFAULT_TERMINAL_COLS,
2026-10-23T06:46:06.1207225Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1207824Z   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-23T06:46:06.1208218Z   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-23T06:46:06.1208255Z
2026-10-23T06:46:06.1208488Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1208658Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
2026-10-23T06:46:06.1208714Z  537 โ”‚     });
2026-10-23T06:46:06.1208838Z  538 โ”‚   }, [terminal.buffer, terminal.buffer.length, terminalKey]);
2026-10-23T06:46:06.1208949Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1209194Z      ยท                                   โ•ฐโ”€โ”€ Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
2026-10-23T06:46:06.1209355Z  539 โ”‚   const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
2026-10-23T06:46:06.1209407Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1209711Z   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-23T06:46:06.1210032Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1210034Z
2026-10-23T06:46:06.1210236Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1210403Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
2026-10-23T06:46:06.1210500Z  708 โ”‚     sentInitialInputKeyRef.current = null;
2026-10-23T06:46:06.1210566Z  709 โ”‚   }, [terminalKey]);
2026-10-23T06:46:06.1210643Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1210790Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-23T06:46:06.1210846Z  710 โ”‚
2026-10-23T06:46:06.1210897Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1211188Z   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-23T06:46:06.1211499Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1211501Z
2026-10-23T06:46:06.1211702Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1211872Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
2026-10-23T06:46:06.1211928Z  799 โ”‚     };
2026-10-23T06:46:06.1212166Z  800 โ”‚   }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
2026-10-23T06:46:06.1212382Z      ยท                                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1212614Z      ยท                                                                โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-23T06:46:06.1212825Z      ยท                                                                โ•ฐโ”€โ”€ Unnecessary dependency `terminal.lifecycleVersion`
2026-10-23T06:46:06.1212878Z  801 โ”‚
2026-10-23T06:46:06.1212928Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1213218Z   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-23T06:46:06.1213537Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1213543Z
2026-10-23T06:46:06.1213687Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1213855Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
2026-10-23T06:46:06.1213908Z  792 โ”‚   }
2026-10-23T06:46:06.1214014Z  793 โ”‚   const pasteSession = pasteSessionRef.current;
2026-10-23T06:46:06.1214126Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1214289Z      ยท                                   โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T06:46:06.1214341Z  794 โ”‚
2026-10-23T06:46:06.1214392Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1214871Z   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-23T06:46:06.1215166Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1215168Z
2026-10-23T06:46:06.1215394Z   โš  unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-23T06:46:06.1215566Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15]
2026-10-23T06:46:06.1215634Z  1997 โ”‚       assert.equal(
2026-10-23T06:46:06.1215782Z  1998 โ”‚         items.filter((item) => item.type === "assistant_message").at(-1)?.text,
2026-10-23T06:46:06.1215861Z       ยท               โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1215944Z  1999 โ”‚         "authoritative answer",
2026-10-23T06:46:06.1215998Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1216168Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-23T06:46:06.1216170Z
2026-10-23T06:46:06.1216646Z   โš  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-23T06:46:06.1216815Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7]
2026-10-23T06:46:06.1216998Z  3950 โ”‚           const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped);
2026-10-23T06:46:06.1217206Z  3951 โ”‚ โ•ญโ”€โ–ถ       while (!responseLifecycle.includes("failed")) {
2026-10-23T06:46:06.1217371Z  3952 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-23T06:46:06.1217538Z  3953 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-23T06:46:06.1217661Z  3954 โ”‚           const responseExit = yield* Fiber.join(responseFiber);
2026-10-23T06:46:06.1217713Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1217716Z
2026-10-23T06:46:06.1218187Z   โš  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-23T06:46:06.1218354Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9]
2026-10-23T06:46:06.1218471Z  6061 โ”‚               .pipe(Effect.forkScoped);
2026-10-23T06:46:06.1218663Z  6062 โ”‚ โ•ญโ”€โ–ถ         while (promptGates.length < 1) {
2026-10-23T06:46:06.1218777Z  6063 โ”‚ โ”‚             yield* Effect.yieldNow;
2026-10-23T06:46:06.1218911Z  6064 โ”‚ โ•ฐโ”€โ–ถ         }
2026-10-23T06:46:06.1219081Z  6065 โ”‚             assert.isDefined(sessionUpdateHandler, "session update handler must be wired");
2026-10-23T06:46:06.1219133Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1219135Z
2026-10-23T06:46:06.1219597Z   โš  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-23T06:46:06.1219762Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9]
2026-10-23T06:46:06.1219855Z  6196 โ”‚               .pipe(Effect.forkScoped);
2026-10-23T06:46:06.1220040Z  6197 โ”‚ โ•ญโ”€โ–ถ         while (promptGates.length < 2) {
2026-10-23T06:46:06.1220150Z  6198 โ”‚ โ”‚             yield* Effect.yieldNow;
2026-10-23T06:46:06.1220284Z  6199 โ”‚ โ•ฐโ”€โ–ถ         }
2026-10-23T06:46:06.1220449Z  6200 โ”‚             if (sessionUpdateHandler === undefined || capturedMutation.current === null) {
2026-10-23T06:46:06.1220500Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1220503Z
2026-10-23T06:46:06.1220699Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T06:46:06.1220857Z     โ•ญโ”€[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15]
2026-10-23T06:46:06.1220924Z  71 โ”‚             <Pressable
2026-10-23T06:46:06.1220988Z  72 โ”‚               key={index}
2026-10-23T06:46:06.1221079Z     ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1221166Z  73 โ”‚               accessibilityRole="button"
2026-10-23T06:46:06.1221218Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1221364Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T06:46:06.1221366Z
2026-10-23T06:46:06.1221625Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1221796Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5]
2026-10-23T06:46:06.1221849Z  76 โ”‚
2026-10-23T06:46:06.1221914Z  77 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1221985Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1222115Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1222304Z  78 โ”‚     const { host, code } = parsePairingUrl(connectionPairingUrl);
2026-10-23T06:46:06.1222407Z  79 โ”‚     setHostInput(host);
2026-10-23T06:46:06.1222483Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1222653Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1222720Z  80 โ”‚     setCodeInput(code);
2026-10-23T06:46:06.1222771Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1223377Z   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-23T06:46:06.1223709Z   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-23T06:46:06.1223714Z
2026-10-23T06:46:06.1223973Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1224143Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5]
2026-10-23T06:46:06.1224195Z  82 โ”‚
2026-10-23T06:46:06.1224259Z  83 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1224328Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1224456Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1224544Z  84 โ”‚     if (routePairingUrl.length === 0) {
2026-10-23T06:46:06.1224604Z  85 โ”‚       return;
2026-10-23T06:46:06.1224659Z  86 โ”‚     }
2026-10-23T06:46:06.1224710Z  87 โ”‚
2026-10-23T06:46:06.1224825Z  88 โ”‚     const { host, code } = parsePairingUrl(routePairingUrl);
2026-10-23T06:46:06.1224897Z  89 โ”‚     setHostInput(host);
2026-10-23T06:46:06.1224975Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1225144Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1225209Z  90 โ”‚     setCodeInput(code);
2026-10-23T06:46:06.1225261Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1225864Z   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-23T06:46:06.1226186Z   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-23T06:46:06.1226189Z
2026-10-23T06:46:06.1226449Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T06:46:06.1226622Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7]
2026-10-23T06:46:06.1226674Z  92 โ”‚
2026-10-23T06:46:06.1226738Z  93 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1226807Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1226934Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T06:46:06.1227018Z  94 โ”‚     if (pairingConnectionError) {
2026-10-23T06:46:06.1227091Z  95 โ”‚       setIsSubmitting(false);
2026-10-23T06:46:06.1227173Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1227344Z     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T06:46:06.1227457Z  96 โ”‚     }
2026-10-23T06:46:06.1227537Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1228136Z   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-23T06:46:06.1228485Z   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-23T06:46:06.1228488Z
2026-10-23T06:46:06.1228645Z   โš  react(immutability): This value cannot be modified
2026-10-23T06:46:06.1228803Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
2026-10-23T06:46:06.1228904Z  53 โ”‚ function usePulseAnimation(pulse: boolean) {
2026-10-23T06:46:06.1228998Z  54 โ”‚   const pulseProgress = useSharedValue(0);
2026-10-23T06:46:06.1229078Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1229330Z     ยท               โ•ฐโ”€โ”€ `pulseProgress` originates here
2026-10-23T06:46:06.1229383Z  55 โ”‚
2026-10-23T06:46:06.1229445Z  56 โ”‚   useEffect(() => {
2026-10-23T06:46:06.1229508Z  57 โ”‚     if (pulse) {
2026-10-23T06:46:06.1229594Z  58 โ”‚       pulseProgress.value = withRepeat(
2026-10-23T06:46:06.1229674Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1229816Z     ยท             โ•ฐโ”€โ”€ `pulseProgress` cannot be modified
2026-10-23T06:46:06.1229883Z  59 โ”‚         withTiming(1, {
2026-10-23T06:46:06.1229935Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1230207Z   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-23T06:46:06.1230517Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T06:46:06.1230520Z
2026-10-23T06:46:06.1230777Z   โš  eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used.
2026-10-23T06:46:06.1230959Z      โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10]
2026-10-23T06:46:06.1231012Z  959 โ”‚
2026-10-23T06:46:06.1231121Z  960 โ”‚ function layerClaudeAgentSdkReplayQueryRunner(
2026-10-23T06:46:06.1231236Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1231435Z      ยท                            โ•ฐโ”€โ”€ 'layerClaudeAgentSdkReplayQueryRunner' is declared here
2026-10-23T06:46:06.1231545Z  961 โ”‚   transcript: ClaudeAgentSdkReplayTranscript,
2026-10-23T06:46:06.1231599Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1231703Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1231705Z
2026-10-23T06:46:06.1231907Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1232038Z      โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:542:25]
2026-10-23T06:46:06.1232170Z  541 โ”‚     // range) the boundary string is identical and the chain would die.
2026-10-23T06:46:06.1232260Z  542 โ”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-23T06:46:06.1232363Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1232529Z      ยท                                โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-23T06:46:06.1232749Z  543 โ”‚   const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase();
2026-10-23T06:46:06.1232843Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1233141Z   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-23T06:46:06.1233456Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1233459Z
2026-10-23T06:46:06.1233628Z   โš  react(purity): Cannot call impure function during render
2026-10-23T06:46:06.1233757Z      โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:533:53]
2026-10-23T06:46:06.1233843Z  532 โ”‚     if (Number.isNaN(wakeAtMs)) return;
2026-10-23T06:46:06.1234001Z  533 โ”‚     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-23T06:46:06.1234126Z      ยท                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1234296Z      ยท                                                          โ•ฐโ”€โ”€ Cannot call impure function
2026-10-23T06:46:06.1234374Z  534 โ”‚     const id = setTimeout(() => {
2026-10-23T06:46:06.1234425Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1234709Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-23T06:46:06.1235003Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-23T06:46:06.1235006Z
2026-10-23T06:46:06.1235206Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T06:46:06.1235373Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7]
2026-10-23T06:46:06.1235431Z  214 โ”‚     }
2026-10-23T06:46:06.1235499Z  215 โ”‚   }, [wrappedRender]);
2026-10-23T06:46:06.1235577Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1235727Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `wrappedRender`
2026-10-23T06:46:06.1235781Z  216 โ”‚
2026-10-23T06:46:06.1235832Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1236123Z   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-23T06:46:06.1236434Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T06:46:06.1236437Z
2026-10-23T06:46:06.1236742Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T06:46:06.1236940Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35]
2026-10-23T06:46:06.1236997Z  816 โ”‚       >
2026-10-23T06:46:06.1237109Z  817 โ”‚         <AdaptiveWorkspaceContext value={contextValue}>
2026-10-23T06:46:06.1237225Z      ยท                                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1237321Z  818 โ”‚           <NativeWorkspaceInspectorContext
2026-10-23T06:46:06.1237372Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1237595Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T06:46:06.1237734Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T06:46:06.1237736Z
2026-10-23T06:46:06.1237983Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T06:46:06.1238147Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:832:42]
2026-10-23T06:46:06.1238202Z  831 โ”‚     >
2026-10-23T06:46:06.1238328Z  832 โ”‚       <AdaptiveWorkspaceContext.Provider value={contextValue}>
2026-10-23T06:46:06.1238487Z      ยท                                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1238588Z  833 โ”‚         <WindowHingeContext value={windowHinge}>
2026-10-23T06:46:06.1238638Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1238860Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T06:46:06.1238994Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T06:46:06.1238996Z
2026-10-23T06:46:06.1239340Z   โš  eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1239505Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7]
2026-10-23T06:46:06.1239559Z  1443 โ”‚
2026-10-23T06:46:06.1239675Z  1444 โ”‚ const layerCodexAppServerClientFactoryCommand = (
2026-10-23T06:46:06.1239793Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1240000Z       ยท                          โ•ฐโ”€โ”€ 'layerCodexAppServerClientFactoryCommand' is declared here
2026-10-23T06:46:06.1240119Z  1445 โ”‚   options: CodexClient.CodexAppServerClientOptions & {
2026-10-23T06:46:06.1240172Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1240276Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1240278Z
2026-10-23T06:46:06.1240542Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1240707Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7]
2026-10-23T06:46:06.1240761Z  1679 โ”‚
2026-10-23T06:46:06.1240832Z  1680 โ”‚ const layer: Layer.Layer<
2026-10-23T06:46:06.1240903Z       ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T06:46:06.1241027Z       ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-23T06:46:06.1241121Z  1681 โ”‚   ProviderAdapter.ProviderAdapterV2,
2026-10-23T06:46:06.1241173Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1241275Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1241278Z
2026-10-23T06:46:06.1241603Z   โš  eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1241880Z      โ•ญโ”€[apps/server/src/orchestration-v2/EffectWorker.ts:914:7]
2026-10-23T06:46:06.1241933Z  913 โ”‚
2026-10-23T06:46:06.1242121Z  914 โ”‚ const layerDaemon: Layer.Layer<never, never, OrchestrationEffectWorkerV2> = Layer.effectDiscard(
2026-10-23T06:46:06.1242197Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1242335Z      ยท            โ•ฐโ”€โ”€ 'layerDaemon' is declared here
2026-10-23T06:46:06.1242421Z  915 โ”‚   runDaemon.pipe(Effect.forkScoped),
2026-10-23T06:46:06.1242472Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1242574Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1242576Z
2026-10-23T06:46:06.1243049Z   โš  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-23T06:46:06.1243181Z     โ•ญโ”€[packages/contracts/src/baseSchemas.test.ts:39:9]
2026-10-23T06:46:06.1243248Z  38 โ”‚       JSON.stringify(
2026-10-23T06:46:06.1243367Z  39 โ”‚         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
2026-10-23T06:46:06.1243462Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1243529Z  40 โ”‚           { name: "a" },
2026-10-23T06:46:06.1243580Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1243583Z
2026-10-23T06:46:06.1243769Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-23T06:46:06.1243940Z      โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70]
2026-10-23T06:46:06.1244020Z  554 โ”‚           assert.deepStrictEqual(
2026-10-23T06:46:06.1244193Z  555 โ”‚             (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-23T06:46:06.1244319Z      ยท                                                                      โ”ฌ
2026-10-23T06:46:06.1244482Z      ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
2026-10-23T06:46:06.1244544Z  556 โ”‚             [
2026-10-23T06:46:06.1244596Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1244697Z   help: Consider removing this parameter.
2026-10-23T06:46:06.1244700Z
2026-10-23T06:46:06.1244883Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-23T06:46:06.1245058Z       โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70]
2026-10-23T06:46:06.1245141Z  1154 โ”‚           assert.deepStrictEqual(
2026-10-23T06:46:06.1245313Z  1155 โ”‚             (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-23T06:46:06.1245436Z       ยท                                                                      โ”ฌ
2026-10-23T06:46:06.1245604Z       ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
2026-10-23T06:46:06.1245667Z  1156 โ”‚             [
2026-10-23T06:46:06.1245719Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1245818Z   help: Consider removing this parameter.
2026-10-23T06:46:06.1245823Z
2026-10-23T06:46:06.1246282Z   โš  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-23T06:46:06.1246420Z      โ•ญโ”€[packages/contracts/src/composerContext.test.ts:181:18]
2026-10-23T06:46:06.1246619Z  180 โ”‚   it("sends a message without the records the wire cannot carry", () => {
2026-10-23T06:46:06.1246840Z  181 โ”‚     const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
2026-10-23T06:46:06.1246946Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1247012Z  182 โ”‚       version: 1,
2026-10-23T06:46:06.1247063Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1247065Z
2026-10-23T06:46:06.1247323Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1247486Z      โ•ญโ”€[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:408:7]
2026-10-23T06:46:06.1247538Z  407 โ”‚
2026-10-23T06:46:06.1247664Z  408 โ”‚ const layer = Layer.effect(ThreadPullRequestServiceV2, make);
2026-10-23T06:46:06.1247742Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T06:46:06.1247869Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-23T06:46:06.1247920Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1248025Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1248027Z
2026-10-23T06:46:06.1248234Z   โš  eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used.
2026-10-23T06:46:06.1248397Z     โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13]
2026-10-23T06:46:06.1248508Z  24 โ”‚ import * as Schema from "effect/Schema";
2026-10-23T06:46:06.1248627Z  25 โ”‚ import * as HostProcess from "@t3tools/shared/HostProcess";
2026-10-23T06:46:06.1248710Z     ยท             โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1248854Z     ยท                  โ•ฐโ”€โ”€ 'HostProcess' is imported here
2026-10-23T06:46:06.1248907Z  26 โ”‚
2026-10-23T06:46:06.1248963Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1249064Z   help: Consider removing this import.
2026-10-23T06:46:06.1249067Z
2026-10-23T06:46:06.1249338Z   โš  eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1249502Z      โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11]
2026-10-23T06:46:06.1249585Z  123 โ”‚     const path = yield* Path.Path;
2026-10-23T06:46:06.1249702Z  124 โ”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-23T06:46:06.1249783Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1249920Z      ยท                 โ•ฐโ”€โ”€ 'serverConfig' is declared here
2026-10-23T06:46:06.1250062Z  125 โ”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-23T06:46:06.1250119Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1250225Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1250227Z
2026-10-23T06:46:06.1250501Z   โš  eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1250665Z      โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11]
2026-10-23T06:46:06.1250780Z  124 โ”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-23T06:46:06.1250919Z  125 โ”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-23T06:46:06.1251004Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1251148Z      ยท                  โ•ฐโ”€โ”€ 'serverSettings' is declared here
2026-10-23T06:46:06.1251284Z  126 โ”‚     const gitWorkflow = yield* GitWorkflowService.GitWorkflowService;
2026-10-23T06:46:06.1251395Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1251533Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1251535Z
2026-10-23T06:46:06.1251836Z   โš  eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'.
2026-10-23T06:46:06.1251998Z      โ•ญโ”€[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7]
2026-10-23T06:46:06.1252051Z  345 โ”‚
2026-10-23T06:46:06.1252152Z  346 โ”‚ const layerFromProviderAdapter: Layer.Layer<
2026-10-23T06:46:06.1252248Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1252413Z      ยท                   โ•ฐโ”€โ”€ 'layerFromProviderAdapter' is declared here
2026-10-23T06:46:06.1252492Z  347 โ”‚   ProviderAdapterRegistryV2,
2026-10-23T06:46:06.1252541Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1252650Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1252660Z
2026-10-23T06:46:06.1252825Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-23T06:46:06.1252945Z      โ•ญโ”€[apps/server/src/processRunner.test.ts:266:14]
2026-10-23T06:46:06.1252997Z  265 โ”‚
2026-10-23T06:46:06.1253103Z  266 โ”‚   for (const {} of ["timeout", "success"] as const) {
2026-10-23T06:46:06.1253176Z      ยท              โ”€โ”€
2026-10-23T06:46:06.1253231Z  267 โ”‚   }
2026-10-23T06:46:06.1253281Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1253513Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-23T06:46:06.1253515Z
2026-10-23T06:46:06.1253724Z   โš  unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-23T06:46:06.1253833Z      โ•ญโ”€[packages/contracts/src/rpc.ts:295:8]
2026-10-23T06:46:06.1253903Z  294 โ”‚ } from "./device.ts";
2026-10-23T06:46:06.1253995Z  295 โ”‚ import {} from "./previewAutomation.ts";
2026-10-23T06:46:06.1254063Z      ยท        โ”€โ”€
2026-10-23T06:46:06.1254122Z  296 โ”‚ import {
2026-10-23T06:46:06.1254172Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1254254Z   help: Remove empty braces
2026-10-23T06:46:06.1254256Z
2026-10-23T06:46:06.1254401Z   โš  react(refs): Cannot access refs during render
2026-10-23T06:46:06.1254519Z     โ•ญโ”€[apps/mobile/src/components/ui/Menu.tsx:54:36]
2026-10-23T06:46:06.1254699Z  53 โ”‚         const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
2026-10-23T06:46:06.1254875Z  54 โ”‚ โ•ญโ”€โ–ถ     children = cloneElement(child, {
2026-10-23T06:46:06.1254986Z  55 โ”‚ โ”‚         onTouchStart: (event) => {
2026-10-23T06:46:06.1255148Z  56 โ”‚ โ”‚           // Reset for a new touch, not onPressIn, which also fires when a
2026-10-23T06:46:06.1255307Z  57 โ”‚ โ”‚           // finger moves out of the row and back during the same gesture.
2026-10-23T06:46:06.1255432Z  58 โ”‚ โ”‚           menuPress.current.isPreparing = false;
2026-10-23T06:46:06.1255600Z  59 โ”‚ โ”‚           menuPress.current.suppressPress = menuPress.current.isOpen;
2026-10-23T06:46:06.1255711Z  60 โ”‚ โ”‚           pendingPress.current = null;
2026-10-23T06:46:06.1255832Z  61 โ”‚ โ”‚           child.props.onTouchStart?.(event);
2026-10-23T06:46:06.1255907Z  62 โ”‚ โ”‚         },
2026-10-23T06:46:06.1256067Z  63 โ”‚ โ”‚         onPress: (event) => {
2026-10-23T06:46:06.1256268Z  64 โ”‚ โ”‚           // Accessibility clicks have no touch identifier and must not inherit
2026-10-23T06:46:06.1256406Z  65 โ”‚ โ”‚           // cancellation from a previous physical gesture.
2026-10-23T06:46:06.1256573Z  66 โ”‚ โ”‚           const isTouch = typeof event.nativeEvent.identifier === "number";
2026-10-23T06:46:06.1256764Z  67 โ”‚ โ”‚           if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
2026-10-23T06:46:06.1256851Z  68 โ”‚ โ”‚             return;
2026-10-23T06:46:06.1256929Z  69 โ”‚ โ”‚           }
2026-10-23T06:46:06.1257067Z  70 โ”‚ โ”‚           if (isTouch && menuPress.current.isPreparing) {
2026-10-23T06:46:06.1257240Z  71 โ”‚ โ”‚             // A release can arrive between native menu preparation and display.
2026-10-23T06:46:06.1257414Z  72 โ”‚ โ”‚             // Let UIKit's display/cancel callback decide this press's outcome.
2026-10-23T06:46:06.1257517Z  73 โ”‚ โ”‚             event.persist();
2026-10-23T06:46:06.1257677Z  74 โ”‚ โ”‚             pendingPress.current = () => child.props.onPress?.(event);
2026-10-23T06:46:06.1257763Z  75 โ”‚ โ”‚             return;
2026-10-23T06:46:06.1257839Z  76 โ”‚ โ”‚           }
2026-10-23T06:46:06.1257952Z  77 โ”‚ โ”‚           child.props.onPress?.(event);
2026-10-23T06:46:06.1258027Z  78 โ”‚ โ”‚         },
2026-10-23T06:46:06.1258157Z  79 โ”‚ โ”œโ”€โ–ถ     });
2026-10-23T06:46:06.1258426Z     ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-23T06:46:06.1258534Z  80 โ”‚         menuProps.onMenuInteractionStart = () => {
2026-10-23T06:46:06.1258585Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1259059Z   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-23T06:46:06.1259356Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T06:46:06.1259359Z
2026-10-23T06:46:06.1259587Z   โš  eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used.
2026-10-23T06:46:06.1259750Z       โ•ญโ”€[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10]
2026-10-23T06:46:06.1259864Z  1397 โ”‚
2026-10-23T06:46:06.1259985Z  1398 โ”‚ function assertUserMessagesExclude(
2026-10-23T06:46:06.1260089Z       ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1260260Z       ยท                      โ•ฐโ”€โ”€ 'assertUserMessagesExclude' is declared here
2026-10-23T06:46:06.1260369Z  1399 โ”‚   projection: OrchestrationV2ThreadProjection,
2026-10-23T06:46:06.1260423Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T06:46:06.1260527Z   help: Consider removing this declaration.
2026-10-23T06:46:06.1260530Z
2026-10-23T06:46:06.1260612Z Found 0 errors and 358 warnings in 5403 files (5.3s, 8 threads)
2026-10-23T06:46:06.1774076Z Post job cleanup.
2026-10-23T06:46:06.2415854Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-23T06:46:06.2493142Z Post job cleanup.
2026-10-23T06:46:06.3435206Z ##[start-action display=Cache full pnpm store;id=__4bff6844-d1d2-4deb-ab0c-1e9185498bca.__actions_cache]
2026-10-23T06:46:06.3775144Z Post job cleanup.
2026-10-23T06:46:06.4409573Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-00e587c1edf31fe669c96bc4768c0e07a969fff8e8228235fb75ec6c0abf4161, not saving cache.
2026-10-23T06:46:06.4444106Z ##[end-action id=__4bff6844-d1d2-4deb-ab0c-1e9185498bca.__actions_cache;outcome=success;conclusion=success;duration_ms=100]
2026-10-23T06:46:06.4446663Z ##[start-action display=Cache Vite+;id=__4bff6844-d1d2-4deb-ab0c-1e9185498bca.vp_cache]
2026-10-23T06:46:06.4474927Z Post job cleanup.
2026-10-23T06:46:06.5131684Z 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-23T06:46:06.5167643Z ##[end-action id=__4bff6844-d1d2-4deb-ab0c-1e9185498bca.vp_cache;outcome=success;conclusion=success;duration_ms=72]
2026-10-23T06:46:06.5207831Z Post job cleanup.
2026-10-23T06:46:06.5669752Z [command]/usr/local/bin/git version
2026-10-23T06:46:06.5701852Z git version 2.55.0
2026-10-23T06:46:06.5720004Z Temporarily overriding HOME='/home/runner/_work/_temp/f886f750-b917-4c6b-b978-dcb887ad53c5' before making global git config changes
2026-10-23T06:46:06.5720632Z Adding repository directory to the temporary git global config as a safe directory
2026-10-23T06:46:06.5722724Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-23T06:46:06.5750174Z Removing SSH command configuration
2026-10-23T06:46:06.5753145Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-23T06:46:06.5777934Z [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-23T06:46:06.5954325Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-23T06:46:06.5980585Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-23T06:46:06.6022472Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-23T06:46:06.6040563Z ##[group]Run '/job_completed.sh'
2026-10-23T06:46:06.6050119Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-23T06:46:06.6050301Z env:
2026-10-23T06:46:06.6050421Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155
2026-10-23T06:46:06.6050576Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 367
2026-10-23T06:46:06.6050722Z   BLACKSMITH_CHECK_RUN_ID: 120281317441
2026-10-23T06:46:06.6050871Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-23T06:46:06.6051017Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-23T06:46:06.6051158Z ##[endgroup]
2026-10-23T06:46:06.6135127Z Docker container cache not activated, skipping hash computation.
2026-10-23T06:46:06.6390669Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-23T06:46:06.6440213Z Cleaning up orphan processes