GitHub check

256 KB of 598 KB loaded Download the full log (598 KB)
342 KB of earlier output not loaded
Consider moving the modification into the hook where the value is constructed
2026-10-24T02:58:54.8964170Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.8964172Z
2026-10-24T02:58:54.8964323Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.8964528Z     โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7]
2026-10-24T02:58:54.8964726Z  37 โ”‚   const { renderedInspectorWidth } = props;
2026-10-24T02:58:54.8964856Z  38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-24T02:58:54.8964943Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8965091Z     ยท                   โ•ฐโ”€โ”€ `renderedContentWidth` originates here
2026-10-24T02:58:54.8965144Z  39 โ”‚
2026-10-24T02:58:54.8965224Z  40 โ”‚   const onClosed = props.onClosed;
2026-10-24T02:58:54.8965290Z  41 โ”‚   useEffect(() => {
2026-10-24T02:58:54.8965375Z  42 โ”‚     inspectorProgress.value = withTiming(
2026-10-24T02:58:54.8965449Z  43 โ”‚       inspectorVisible ? 1 : 0,
2026-10-24T02:58:54.8965520Z  44 โ”‚       WORKSPACE_PANE_TIMING,
2026-10-24T02:58:54.8965586Z  45 โ”‚       (finished) => {
2026-10-24T02:58:54.8965727Z  46 โ”‚         if (finished === true && !inspectorVisible && onClosed !== undefined) {
2026-10-24T02:58:54.8965801Z  47 โ”‚           runOnJS(onClosed)();
2026-10-24T02:58:54.8965856Z  48 โ”‚         }
2026-10-24T02:58:54.8965911Z  49 โ”‚       },
2026-10-24T02:58:54.8965962Z  50 โ”‚     );
2026-10-24T02:58:54.8966091Z  51 โ”‚     const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
2026-10-24T02:58:54.8966168Z  52 โ”‚     renderedInspectorWidth.set(
2026-10-24T02:58:54.8966307Z  53 โ”‚       resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
2026-10-24T02:58:54.8966361Z  54 โ”‚     );
2026-10-24T02:58:54.8966415Z  55 โ”‚   }, [
2026-10-24T02:58:54.8966482Z  56 โ”‚     inspectorProgress,
2026-10-24T02:58:54.8966546Z  57 โ”‚     inspectorVisible,
2026-10-24T02:58:54.8966609Z  58 โ”‚     inspectorWidth,
2026-10-24T02:58:54.8966669Z  59 โ”‚     onClosed,
2026-10-24T02:58:54.8966747Z  60 โ”‚     renderedInspectorWidth,
2026-10-24T02:58:54.8966805Z  61 โ”‚     resizing,
2026-10-24T02:58:54.8966858Z  62 โ”‚   ]);
2026-10-24T02:58:54.8966909Z  63 โ”‚
2026-10-24T02:58:54.8966972Z  64 โ”‚   useEffect(() => {
2026-10-24T02:58:54.8967061Z  65 โ”‚     const targetWidth = inspectorWidth ?? 0;
2026-10-24T02:58:54.8967146Z  66 โ”‚     if (!inspectorVisible || resizing) {
2026-10-24T02:58:54.8967242Z  67 โ”‚       renderedContentWidth.value = targetWidth;
2026-10-24T02:58:54.8967327Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8967482Z     ยท                 โ•ฐโ”€โ”€ `renderedContentWidth` cannot be modified
2026-10-24T02:58:54.8967540Z  68 โ”‚       return;
2026-10-24T02:58:54.8967591Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8967846Z   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-24T02:58:54.8968155Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.8968160Z
2026-10-24T02:58:54.8968413Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.8968580Z      โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7]
2026-10-24T02:58:54.8968633Z  118 โ”‚
2026-10-24T02:58:54.8968695Z  119 โ”‚   useEffect(() => {
2026-10-24T02:58:54.8968766Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8968895Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.8968977Z  120 โ”‚     if (orientationSettled) return;
2026-10-24T02:58:54.8969138Z  121 โ”‚     const orientation = getNativeShowcaseOrientation();
2026-10-24T02:58:54.8969240Z  122 โ”‚     if (orientation === null) {
2026-10-24T02:58:54.8969321Z  123 โ”‚       setOrientationSettled(true);
2026-10-24T02:58:54.8969409Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8969576Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.8969636Z  124 โ”‚       return;
2026-10-24T02:58:54.8969689Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8970302Z   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-24T02:58:54.8970618Z   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-24T02:58:54.8970625Z
2026-10-24T02:58:54.8970873Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.8971041Z      โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7]
2026-10-24T02:58:54.8971093Z  292 โ”‚
2026-10-24T02:58:54.8971158Z  293 โ”‚   useEffect(() => {
2026-10-24T02:58:54.8971226Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8971353Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.8971410Z  294 โ”‚     if (
2026-10-24T02:58:54.8971475Z  295 โ”‚       scene === null ||
2026-10-24T02:58:54.8971552Z  296 โ”‚       requestedScene === null ||
2026-10-24T02:58:54.8971627Z  297 โ”‚       scene !== requestedScene ||
2026-10-24T02:58:54.8971694Z  298 โ”‚       !hasFixture ||
2026-10-24T02:58:54.8971768Z  299 โ”‚       !orientationSettled ||
2026-10-24T02:58:54.8971834Z  300 โ”‚       !themeApplied ||
2026-10-24T02:58:54.8971949Z  301 โ”‚       (scene === "agent-activity" && !agentActivityStaged) ||
2026-10-24T02:58:54.8972080Z  302 โ”‚       !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
2026-10-24T02:58:54.8972134Z  303 โ”‚     ) {
2026-10-24T02:58:54.8972203Z  304 โ”‚       setReadyScene(null);
2026-10-24T02:58:54.8972280Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8972445Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.8972505Z  305 โ”‚       return;
2026-10-24T02:58:54.8972555Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8973141Z   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-24T02:58:54.8973454Z   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-24T02:58:54.8973457Z
2026-10-24T02:58:54.8973719Z   โš  eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'.
2026-10-24T02:58:54.8973883Z      โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9]
2026-10-24T02:58:54.8973952Z  127 โ”‚     let cancelled = false;
2026-10-24T02:58:54.8974041Z  128 โ”‚     let lastOutcome: string | null = null;
2026-10-24T02:58:54.8974169Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8974328Z      ยท              โ•ฐโ”€โ”€ 'lastOutcome' is declared here
2026-10-24T02:58:54.8974502Z  129 โ”‚     void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
2026-10-24T02:58:54.8974552Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8974655Z   help: Consider removing this declaration.
2026-10-24T02:58:54.8974658Z
2026-10-24T02:58:54.8974840Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T02:58:54.8974953Z    โ•ญโ”€[apps/mobile/src/lib/useHoverGesture.ts:8:15]
2026-10-24T02:58:54.8975010Z  7 โ”‚     () =>
2026-10-24T02:58:54.8975075Z  8 โ”‚       Gesture.Hover()
2026-10-24T02:58:54.8975148Z    ยท               โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T02:58:54.8975281Z    ยท                 โ•ฐโ”€โ”€ `Hover` may be a component
2026-10-24T02:58:54.8975360Z  9 โ”‚         .manualActivation(true)
2026-10-24T02:58:54.8975412Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8975685Z   help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
2026-10-24T02:58:54.8976125Z   note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T02:58:54.8976127Z
2026-10-24T02:58:54.8976305Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T02:58:54.8976489Z      โ•ญโ”€[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34]
2026-10-24T02:58:54.8976556Z  115 โ”‚     return [...commands];
2026-10-24T02:58:54.8976691Z  116 โ”‚   }, [activeThreadRef, pathname, registrationVersion, navigation]);
2026-10-24T02:58:54.8976808Z      ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8976988Z      ยท                                           โ•ฐโ”€โ”€ Unnecessary dependency `registrationVersion`
2026-10-24T02:58:54.8977040Z  117 โ”‚
2026-10-24T02:58:54.8977089Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8977394Z   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-24T02:58:54.8977695Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.8977698Z
2026-10-24T02:58:54.8977909Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T02:58:54.8978032Z      โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:259:28]
2026-10-24T02:58:54.8978128Z  258 โ”‚   visit(parser.parse(markdown), false, false);
2026-10-24T02:58:54.8978211Z  259 โ”‚   for (const edit of edits.reverse())
2026-10-24T02:58:54.8978304Z      ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8978465Z  260 โ”‚     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T02:58:54.8978514Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8978768Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T02:58:54.8978771Z
2026-10-24T02:58:54.8978975Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T02:58:54.8979144Z      โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:290:28]
2026-10-24T02:58:54.8979256Z  289 โ”‚   visit(parser.parse(markdown));
2026-10-24T02:58:54.8979338Z  290 โ”‚   for (const edit of edits.reverse())
2026-10-24T02:58:54.8979645Z      ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8979804Z  291 โ”‚     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T02:58:54.8979891Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8980154Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T02:58:54.8980157Z
2026-10-24T02:58:54.8980360Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T02:58:54.8980480Z      โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:344:38]
2026-10-24T02:58:54.8980565Z  343 โ”‚   visit(parser.parse(markdown));
2026-10-24T02:58:54.8980668Z  344 โ”‚   for (const lineStart of lineStarts.reverse()) {
2026-10-24T02:58:54.8980768Z      ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8980927Z  345 โ”‚     // The header row may be a lazy line without its container markers (`>` or list indent),
2026-10-24T02:58:54.8980978Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8981227Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T02:58:54.8981229Z
2026-10-24T02:58:54.8981479Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.8981627Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5]
2026-10-24T02:58:54.8981681Z  398 โ”‚
2026-10-24T02:58:54.8981751Z  399 โ”‚   useEffect(() => {
2026-10-24T02:58:54.8981825Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8981952Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.8982042Z  400 โ”‚     setInspectorSelection((current) => {
2026-10-24T02:58:54.8982126Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8982291Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.8982393Z  401 โ”‚       if (props.renderInspector === undefined) {
2026-10-24T02:58:54.8982444Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8983087Z   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-24T02:58:54.8983442Z   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-24T02:58:54.8983444Z
2026-10-24T02:58:54.8983651Z   โš  react(no-unstable-nested-components): Do not define components during render.
2026-10-24T02:58:54.8983801Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24]
2026-10-24T02:58:54.8983959Z  527 โ”‚       const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
2026-10-24T02:58:54.8984124Z  528 โ”‚ โ•ญโ”€โ–ถ   const GitInspector = () => (
2026-10-24T02:58:54.8984220Z  529 โ”‚ โ”‚       <GitOverviewSheet
2026-10-24T02:58:54.8984346Z  530 โ”‚ โ”‚         headerInset={inspectorHeaderInset}
2026-10-24T02:58:54.8984452Z  531 โ”‚ โ”‚         presentation="inspector"
2026-10-24T02:58:54.8984626Z  532 โ”‚ โ”‚         route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
2026-10-24T02:58:54.8984701Z  533 โ”‚ โ”‚       />
2026-10-24T02:58:54.8984828Z  534 โ”‚ โ•ฐโ”€โ–ถ   );
2026-10-24T02:58:54.8984908Z  535 โ”‚       const FilesInspector = () =>
2026-10-24T02:58:54.8984958Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8985173Z   help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-24T02:58:54.8985176Z
2026-10-24T02:58:54.8985380Z   โš  react(no-unstable-nested-components): Do not define components during render.
2026-10-24T02:58:54.8985533Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26]
2026-10-24T02:58:54.8985593Z  534 โ”‚       );
2026-10-24T02:58:54.8985754Z  535 โ”‚ โ•ญโ”€โ–ถ   const FilesInspector = () =>
2026-10-24T02:58:54.8985905Z  536 โ”‚ โ”‚       selectedThread !== null && selectedThreadCwd !== null ? (
2026-10-24T02:58:54.8986010Z  537 โ”‚ โ”‚         <ThreadFileNavigatorPane
2026-10-24T02:58:54.8986113Z  538 โ”‚ โ”‚           cwd={selectedThreadCwd}
2026-10-24T02:58:54.8986247Z  539 โ”‚ โ”‚           environmentId={selectedThread.environmentId}
2026-10-24T02:58:54.8986368Z  540 โ”‚ โ”‚           headerInset={inspectorHeaderInset}
2026-10-24T02:58:54.8986511Z  541 โ”‚ โ”‚           projectName={selectedThreadProject?.title ?? "Files"}
2026-10-24T02:58:54.8986616Z  542 โ”‚ โ”‚           selectedPath={null}
2026-10-24T02:58:54.8986744Z  543 โ”‚ โ”‚           onSelectFile={handleSelectInspectorFile}
2026-10-24T02:58:54.8986820Z  544 โ”‚ โ”‚         />
2026-10-24T02:58:54.8986953Z  545 โ”‚ โ•ฐโ”€โ–ถ     ) : null;
2026-10-24T02:58:54.8987102Z  546 โ”‚       const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
2026-10-24T02:58:54.8987152Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8987364Z   help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-24T02:58:54.8987366Z
2026-10-24T02:58:54.8987521Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.8987682Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:111:5]
2026-10-24T02:58:54.8987786Z  107 โ”‚   );
2026-10-24T02:58:54.8987963Z  108 โ”‚   const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0);
2026-10-24T02:58:54.8988052Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8988201Z      ยท                  โ•ฐโ”€โ”€ `separationProgress` originates here
2026-10-24T02:58:54.8988251Z  109 โ”‚
2026-10-24T02:58:54.8988316Z  110 โ”‚   useEffect(() => {
2026-10-24T02:58:54.8988486Z  111 โ”‚     separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING);
2026-10-24T02:58:54.8988570Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8988718Z      ยท              โ•ฐโ”€โ”€ `separationProgress` cannot be modified
2026-10-24T02:58:54.8988824Z  112 โ”‚   }, [props.showScrollToEnd, separationProgress]);
2026-10-24T02:58:54.8988875Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8989140Z   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-24T02:58:54.8989447Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.8989449Z
2026-10-24T02:58:54.8989599Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.8989756Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-24T02:58:54.8989874Z  128 โ”‚   // and repeatedly retargets the animation as it grows.
2026-10-24T02:58:54.8990016Z  129 โ”‚   const capsuleWidth = useSharedValue<number | null>(null);
2026-10-24T02:58:54.8990098Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8990238Z      ยท               โ•ฐโ”€โ”€ `capsuleWidth` originates here
2026-10-24T02:58:54.8990351Z  130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
2026-10-24T02:58:54.8990465Z  131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-24T02:58:54.8990566Z  132 โ”‚     const width = event.nativeEvent.layout.width;
2026-10-24T02:58:54.8990659Z  133 โ”‚     if (width === measuredWidthRef.current) {
2026-10-24T02:58:54.8990720Z  134 โ”‚       return;
2026-10-24T02:58:54.8990775Z  135 โ”‚     }
2026-10-24T02:58:54.8990879Z  136 โ”‚     const first = measuredWidthRef.current === null;
2026-10-24T02:58:54.8990963Z  137 โ”‚     measuredWidthRef.current = width;
2026-10-24T02:58:54.8991104Z  138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-24T02:58:54.8991178Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8991314Z      ยท           โ•ฐโ”€โ”€ `capsuleWidth` cannot be modified
2026-10-24T02:58:54.8991374Z  139 โ”‚   };
2026-10-24T02:58:54.8991427Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8991682Z   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-24T02:58:54.8991979Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.8991982Z
2026-10-24T02:58:54.8992134Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.8992294Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-24T02:58:54.8992403Z  128 โ”‚   // and repeatedly retargets the animation as it grows.
2026-10-24T02:58:54.8992514Z  129 โ”‚   const capsuleWidth = useSharedValue<number | null>(null);
2026-10-24T02:58:54.8992643Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8992808Z      ยท               โ•ฐโ”€โ”€ `capsuleWidth` originates here
2026-10-24T02:58:54.8992916Z  130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
2026-10-24T02:58:54.8993025Z  131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-24T02:58:54.8993125Z  132 โ”‚     const width = event.nativeEvent.layout.width;
2026-10-24T02:58:54.8993218Z  133 โ”‚     if (width === measuredWidthRef.current) {
2026-10-24T02:58:54.8993278Z  134 โ”‚       return;
2026-10-24T02:58:54.8993330Z  135 โ”‚     }
2026-10-24T02:58:54.8993434Z  136 โ”‚     const first = measuredWidthRef.current === null;
2026-10-24T02:58:54.8993517Z  137 โ”‚     measuredWidthRef.current = width;
2026-10-24T02:58:54.8993656Z  138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-24T02:58:54.8993707Z  139 โ”‚   };
2026-10-24T02:58:54.8993802Z  140 โ”‚   const hasStatus = props.status !== null;
2026-10-24T02:58:54.8993936Z  141 โ”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-24T02:58:54.8994001Z  142 โ”‚   useEffect(() => {
2026-10-24T02:58:54.8994065Z  143 โ”‚     if (!hasStatus) {
2026-10-24T02:58:54.8994150Z  144 โ”‚       measuredWidthRef.current = null;
2026-10-24T02:58:54.8994228Z  145 โ”‚       capsuleWidth.value = null;
2026-10-24T02:58:54.8994304Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8994441Z      ยท             โ•ฐโ”€โ”€ `capsuleWidth` cannot be modified
2026-10-24T02:58:54.8994495Z  146 โ”‚     }
2026-10-24T02:58:54.8994548Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8994802Z   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-24T02:58:54.8995103Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.8995108Z
2026-10-24T02:58:54.8995306Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T02:58:54.8995464Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-24T02:58:54.8995595Z  141 โ”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-24T02:58:54.8995658Z  142 โ”‚   useEffect(() => {
2026-10-24T02:58:54.8995734Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.8995953Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-24T02:58:54.8996018Z  143 โ”‚     if (!hasStatus) {
2026-10-24T02:58:54.8996107Z  144 โ”‚       measuredWidthRef.current = null;
2026-10-24T02:58:54.8996187Z  145 โ”‚       capsuleWidth.value = null;
2026-10-24T02:58:54.8996262Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8996395Z      ยท             โ•ฐโ”€โ”€ This modifies `capsuleWidth`
2026-10-24T02:58:54.8996447Z  146 โ”‚     }
2026-10-24T02:58:54.8996498Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8996834Z   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-24T02:58:54.8997129Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.8997131Z
2026-10-24T02:58:54.8997375Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T02:58:54.8997567Z      โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-24T02:58:54.8997675Z  130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
2026-10-24T02:58:54.8997790Z  131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-24T02:58:54.8997910Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8998143Z      ยท                                            โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-24T02:58:54.8998246Z  132 โ”‚     const width = event.nativeEvent.layout.width;
2026-10-24T02:58:54.8998341Z  133 โ”‚     if (width === measuredWidthRef.current) {
2026-10-24T02:58:54.8998400Z  134 โ”‚       return;
2026-10-24T02:58:54.8998453Z  135 โ”‚     }
2026-10-24T02:58:54.8998564Z  136 โ”‚     const first = measuredWidthRef.current === null;
2026-10-24T02:58:54.8998651Z  137 โ”‚     measuredWidthRef.current = width;
2026-10-24T02:58:54.8998791Z  138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-24T02:58:54.8998864Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8998996Z      ยท           โ•ฐโ”€โ”€ This modifies `capsuleWidth`
2026-10-24T02:58:54.8999050Z  139 โ”‚   };
2026-10-24T02:58:54.8999102Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.8999432Z   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-24T02:58:54.8999729Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.8999731Z
2026-10-24T02:58:54.8999898Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.9000084Z      โ•ญโ”€[apps/mobile/src/features/threads/thread-work-log.tsx:174:5]
2026-10-24T02:58:54.9000226Z  170 โ”‚   const expandedAngle = props.collapsedDirection === "right" ? 90 : 180;
2026-10-24T02:58:54.9000357Z  171 โ”‚   const rotation = useSharedValue(props.expanded ? expandedAngle : 0);
2026-10-24T02:58:54.9000430Z      ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9000558Z      ยท             โ•ฐโ”€โ”€ `rotation` originates here
2026-10-24T02:58:54.9000610Z  172 โ”‚
2026-10-24T02:58:54.9000677Z  173 โ”‚   useLayoutEffect(() => {
2026-10-24T02:58:54.9000809Z  174 โ”‚     rotation.value = withTiming(props.expanded ? expandedAngle : 0, {
2026-10-24T02:58:54.9000879Z      ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9001014Z      ยท         โ•ฐโ”€โ”€ `rotation` cannot be modified
2026-10-24T02:58:54.9001111Z  175 โ”‚       duration: THREAD_DISCLOSURE_TRANSITION_MS,
2026-10-24T02:58:54.9001163Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9001418Z   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-24T02:58:54.9001715Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9001717Z
2026-10-24T02:58:54.9001905Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T02:58:54.9002053Z       โ•ญโ”€[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23]
2026-10-24T02:58:54.9002122Z  1245 โ”‚                     <Text
2026-10-24T02:58:54.9002265Z  1246 โ”‚                       key={`${index}:${line}`}
2026-10-24T02:58:54.9002409Z       ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9002484Z  1247 โ”‚                       selectable
2026-10-24T02:58:54.9002536Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9002680Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T02:58:54.9002683Z
2026-10-24T02:58:54.9002958Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T02:58:54.9003110Z      โ•ญโ”€[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
2026-10-24T02:58:54.9003165Z  162 โ”‚   keys,
2026-10-24T02:58:54.9003238Z  163 โ”‚   overridingProjects = [],
2026-10-24T02:58:54.9003317Z      ยท                        โ”€โ”€
2026-10-24T02:58:54.9003383Z  164 โ”‚   onClearOverrides,
2026-10-24T02:58:54.9003442Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9003753Z   help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
2026-10-24T02:58:54.9003756Z
2026-10-24T02:58:54.9004005Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9004151Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7]
2026-10-24T02:58:54.9004287Z  355 โ”‚   }, [cancelledIncomingShareId, navigation, props.incomingShareId]);
2026-10-24T02:58:54.9004351Z  356 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9004421Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9004546Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9004641Z  357 โ”‚     if (!isReturningToProjectPicker) {
2026-10-24T02:58:54.9004702Z  358 โ”‚       return;
2026-10-24T02:58:54.9004755Z  359 โ”‚     }
2026-10-24T02:58:54.9004849Z  360 โ”‚     if (requestedInitialProjectAvailable) {
2026-10-24T02:58:54.9004942Z  361 โ”‚       setIsReturningToProjectPicker(false);
2026-10-24T02:58:54.9005043Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9005215Z      ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9005272Z  362 โ”‚       return;
2026-10-24T02:58:54.9005323Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9005957Z   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-24T02:58:54.9006301Z   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-24T02:58:54.9006303Z
2026-10-24T02:58:54.9006549Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9006696Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9]
2026-10-24T02:58:54.9006749Z  447 โ”‚
2026-10-24T02:58:54.9006813Z  448 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9006881Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9007008Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9007108Z  449 โ”‚     if (props.pendingTaskId || props.draftId) {
2026-10-24T02:58:54.9007173Z  450 โ”‚       return;
2026-10-24T02:58:54.9007228Z  451 โ”‚     }
2026-10-24T02:58:54.9007367Z  452 โ”‚     if (lastInitialProjectRefRef.current !== props.initialProjectRef) {
2026-10-24T02:58:54.9007498Z  453 โ”‚       lastInitialProjectRefRef.current = props.initialProjectRef;
2026-10-24T02:58:54.9007602Z  454 โ”‚       appliedInitialProjectKeyRef.current = null;
2026-10-24T02:58:54.9007653Z  455 โ”‚     }
2026-10-24T02:58:54.9007792Z  456 โ”‚     const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-24T02:58:54.9007918Z  457 โ”‚     const initialProjectId = props.initialProjectRef?.projectId;
2026-10-24T02:58:54.9008021Z  458 โ”‚     if (initialEnvironmentId && initialProjectId) {
2026-10-24T02:58:54.9008090Z  459 โ”‚       const directProject =
2026-10-24T02:58:54.9008157Z  460 โ”‚         projects.find(
2026-10-24T02:58:54.9008222Z  461 โ”‚           (project) =>
2026-10-24T02:58:54.9008401Z  462 โ”‚             project.environmentId === initialEnvironmentId && project.id === initialProjectId,
2026-10-24T02:58:54.9008463Z  463 โ”‚         ) ?? null;
2026-10-24T02:58:54.9008514Z  464 โ”‚
2026-10-24T02:58:54.9008582Z  465 โ”‚       if (directProject) {
2026-10-24T02:58:54.9008717Z  466 โ”‚         // Apply the route's project once. Re-applying on every change would
2026-10-24T02:58:54.9008852Z  467 โ”‚         // instantly revert environment/project switches made in the picker.
2026-10-24T02:58:54.9009008Z  468 โ”‚         const directProjectKey = `${directProject.environmentId}:${directProject.id}`;
2026-10-24T02:58:54.9009140Z  469 โ”‚         if (appliedInitialProjectKeyRef.current === directProjectKey) {
2026-10-24T02:58:54.9009202Z  470 โ”‚           return;
2026-10-24T02:58:54.9009257Z  471 โ”‚         }
2026-10-24T02:58:54.9009353Z  472 โ”‚         if (props.initialProjectRef?.branch) {
2026-10-24T02:58:54.9009414Z  473 โ”‚           if (
2026-10-24T02:58:54.9009559Z  474 โ”‚             selectedProject?.environmentId !== directProject.environmentId ||
2026-10-24T02:58:54.9009662Z  475 โ”‚             selectedProject.id !== directProject.id
2026-10-24T02:58:54.9009721Z  476 โ”‚           ) {
2026-10-24T02:58:54.9009804Z  477 โ”‚             setProject(directProject);
2026-10-24T02:58:54.9009892Z  478 โ”‚             return;
2026-10-24T02:58:54.9009948Z  479 โ”‚           }
2026-10-24T02:58:54.9010028Z  480 โ”‚           if (!flow.draftKey) return;
2026-10-24T02:58:54.9010167Z  481 โ”‚           // The route completes checkout before mounting this composer. Local
2026-10-24T02:58:54.9010307Z  482 โ”‚           // mode reuses an existing worktree; worktree mode would create another.
2026-10-24T02:58:54.9010412Z  483 โ”‚           updateComposerDraftSettings(flow.draftKey, {
2026-10-24T02:58:54.9010490Z  484 โ”‚             workspaceSelection: {
2026-10-24T02:58:54.9010610Z  485 โ”‚               mode: "local",
2026-10-24T02:58:54.9010743Z  486 โ”‚               branch: props.initialProjectRef.branch,
2026-10-24T02:58:54.9010875Z  487 โ”‚               worktreePath: props.initialProjectRef.worktreePath ?? null,
2026-10-24T02:58:54.9010955Z  488 โ”‚               startFromOrigin: false,
2026-10-24T02:58:54.9011015Z  489 โ”‚             },
2026-10-24T02:58:54.9011075Z  490 โ”‚           });
2026-10-24T02:58:54.9011130Z  491 โ”‚         }
2026-10-24T02:58:54.9011256Z  492 โ”‚         appliedInitialProjectKeyRef.current = directProjectKey;
2026-10-24T02:58:54.9011314Z  493 โ”‚         if (
2026-10-24T02:58:54.9011450Z  494 โ”‚           selectedProject?.environmentId === directProject.environmentId &&
2026-10-24T02:58:54.9011547Z  495 โ”‚           selectedProject.id === directProject.id
2026-10-24T02:58:54.9011605Z  496 โ”‚         ) {
2026-10-24T02:58:54.9011665Z  497 โ”‚           return;
2026-10-24T02:58:54.9011724Z  498 โ”‚         }
2026-10-24T02:58:54.9011806Z  499 โ”‚         setProject(directProject);
2026-10-24T02:58:54.9011866Z  500 โ”‚         return;
2026-10-24T02:58:54.9011919Z  501 โ”‚       }
2026-10-24T02:58:54.9011969Z  502 โ”‚
2026-10-24T02:58:54.9012049Z  503 โ”‚       if (projects.length > 0) {
2026-10-24T02:58:54.9012143Z  504 โ”‚         setIsReturningToProjectPicker(true);
2026-10-24T02:58:54.9012249Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9012424Z      ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9012480Z  505 โ”‚       }
2026-10-24T02:58:54.9012531Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9013117Z   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-24T02:58:54.9013434Z   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-24T02:58:54.9013437Z
2026-10-24T02:58:54.9013686Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9013835Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5]
2026-10-24T02:58:54.9013887Z  545 โ”‚
2026-10-24T02:58:54.9013952Z  546 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9014021Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9014149Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9014245Z  547 โ”‚     const shareId = props.incomingShareId;
2026-10-24T02:58:54.9014330Z  548 โ”‚     const draftKey = flow.draftKey;
2026-10-24T02:58:54.9014428Z  549 โ”‚     const destinationProject = selectedProject;
2026-10-24T02:58:54.9014569Z  550 โ”‚     const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-24T02:58:54.9014695Z  551 โ”‚     const initialProjectId = props.initialProjectRef?.projectId;
2026-10-24T02:58:54.9014783Z  552 โ”‚     const selectedProjectMatchesRoute =
2026-10-24T02:58:54.9014855Z  553 โ”‚       !initialEnvironmentId ||
2026-10-24T02:58:54.9014924Z  554 โ”‚       !initialProjectId ||
2026-10-24T02:58:54.9015051Z  555 โ”‚       (destinationProject?.environmentId === initialEnvironmentId &&
2026-10-24T02:58:54.9015153Z  556 โ”‚         destinationProject.id === initialProjectId);
2026-10-24T02:58:54.9015209Z  557 โ”‚     if (
2026-10-24T02:58:54.9015271Z  558 โ”‚       !shareId ||
2026-10-24T02:58:54.9015388Z  559 โ”‚       !draftKey ||
2026-10-24T02:58:54.9015487Z  560 โ”‚       !destinationProject ||
2026-10-24T02:58:54.9015573Z  561 โ”‚       !selectedProjectMatchesRoute ||
2026-10-24T02:58:54.9015661Z  562 โ”‚       cancelledIncomingShareId === shareId
2026-10-24T02:58:54.9015718Z  563 โ”‚     ) {
2026-10-24T02:58:54.9015775Z  564 โ”‚       return;
2026-10-24T02:58:54.9015828Z  565 โ”‚     }
2026-10-24T02:58:54.9015923Z  566 โ”‚     const importKey = `${shareId}:${draftKey}`;
2026-10-24T02:58:54.9015979Z  567 โ”‚     if (
2026-10-24T02:58:54.9016086Z  568 โ”‚       startedShareImportKeyRef.current === importKey ||
2026-10-24T02:58:54.9016194Z  569 โ”‚       cancellingShareImportKeyRef.current === importKey
2026-10-24T02:58:54.9016249Z  570 โ”‚     ) {
2026-10-24T02:58:54.9016308Z  571 โ”‚       return;
2026-10-24T02:58:54.9016359Z  572 โ”‚     }
2026-10-24T02:58:54.9016409Z  573 โ”‚
2026-10-24T02:58:54.9016480Z  574 โ”‚     if (!incomingShare) {
2026-10-24T02:58:54.9016673Z  575 โ”‚       if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
2026-10-24T02:58:54.9016798Z  576 โ”‚         alertedUnavailableIncomingShareIdRef.current = shareId;
2026-10-24T02:58:54.9016863Z  577 โ”‚         Dialog.alert(
2026-10-24T02:58:54.9016946Z  578 โ”‚           "Shared content unavailable",
2026-10-24T02:58:54.9017115Z  579 โ”‚           "The shared content is no longer in the inbox. You can continue editing this task draft.",
2026-10-24T02:58:54.9017172Z  580 โ”‚         );
2026-10-24T02:58:54.9017225Z  581 โ”‚       }
2026-10-24T02:58:54.9017283Z  582 โ”‚       return;
2026-10-24T02:58:54.9017335Z  583 โ”‚     }
2026-10-24T02:58:54.9017385Z  584 โ”‚
2026-10-24T02:58:54.9017440Z  585 โ”‚     if (
2026-10-24T02:58:54.9017602Z  586 โ”‚       incomingShare.attachments.some((attachment) => attachment.type === "file") &&
2026-10-24T02:58:54.9017700Z  587 โ”‚       selectedEnvironmentServerConfig === null
2026-10-24T02:58:54.9017754Z  588 โ”‚     ) {
2026-10-24T02:58:54.9017811Z  589 โ”‚       return;
2026-10-24T02:58:54.9017864Z  590 โ”‚     }
2026-10-24T02:58:54.9017913Z  591 โ”‚
2026-10-24T02:58:54.9018050Z  592 โ”‚     if (alertedUnavailableIncomingShareIdRef.current === shareId) {
2026-10-24T02:58:54.9018167Z  593 โ”‚       alertedUnavailableIncomingShareIdRef.current = null;
2026-10-24T02:58:54.9018219Z  594 โ”‚     }
2026-10-24T02:58:54.9018322Z  595 โ”‚     startedShareImportKeyRef.current = importKey;
2026-10-24T02:58:54.9018394Z  596 โ”‚     const draftBackup =
2026-10-24T02:58:54.9018577Z  597 โ”‚       shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
2026-10-24T02:58:54.9018711Z  598 โ”‚     shareImportDraftBackupRef.current.set(importKey, draftBackup);
2026-10-24T02:58:54.9018804Z  599 โ”‚     const importToken = Symbol(importKey);
2026-10-24T02:58:54.9018885Z  600 โ”‚     let didReserveShare = false;
2026-10-24T02:58:54.9018961Z  601 โ”‚     let didConsumeShare = false;
2026-10-24T02:58:54.9019039Z  602 โ”‚     let needsDraftRestore = false;
2026-10-24T02:58:54.9019145Z  603 โ”‚     activeShareImportTokenRef.current = importToken;
2026-10-24T02:58:54.9019229Z  604 โ”‚     setImportingShareKey(importKey);
2026-10-24T02:58:54.9019313Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9019499Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9019642Z  605 โ”‚     void (async () => {
2026-10-24T02:58:54.9019693Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9020374Z   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-24T02:58:54.9020728Z   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-24T02:58:54.9020731Z
2026-10-24T02:58:54.9020929Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9021078Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5]
2026-10-24T02:58:54.9021152Z  523 โ”‚     props.initialProjectRef,
2026-10-24T02:58:54.9021224Z  524 โ”‚     props.incomingShareId,
2026-10-24T02:58:54.9021308Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9021478Z      ยท               โ•ฐโ”€โ”€ Unnecessary dependency `props.incomingShareId`
2026-10-24T02:58:54.9021550Z  525 โ”‚     props.pendingTaskId,
2026-10-24T02:58:54.9021601Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9021886Z   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-24T02:58:54.9022192Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9022195Z
2026-10-24T02:58:54.9022406Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T02:58:54.9022552Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5]
2026-10-24T02:58:54.9022665Z  542 โ”‚     loadedBranchesProjectKeyRef.current = projectKey;
2026-10-24T02:58:54.9022735Z  543 โ”‚     flow.loadBranches();
2026-10-24T02:58:54.9022807Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-24T02:58:54.9022929Z      ยท       โ•ฐโ”€โ”€ Missing dependency `flow`
2026-10-24T02:58:54.9023020Z  544 โ”‚   }, [flow.loadBranches, selectedProject]);
2026-10-24T02:58:54.9023102Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9023296Z      ยท               โ•ฐโ”€โ”€ Overly precise dependency `flow.loadBranches`, use `flow` instead
2026-10-24T02:58:54.9023348Z  545 โ”‚
2026-10-24T02:58:54.9023400Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9023809Z   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-24T02:58:54.9024116Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9024122Z
2026-10-24T02:58:54.9024318Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9024465Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
2026-10-24T02:58:54.9024528Z  765 โ”‚     flow.draftKey,
2026-10-24T02:58:54.9024604Z  766 โ”‚     hasImportedIncomingShare,
2026-10-24T02:58:54.9024693Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9024863Z      ยท                 โ•ฐโ”€โ”€ Unnecessary dependency `hasImportedIncomingShare`
2026-10-24T02:58:54.9024926Z  767 โ”‚     incomingShare,
2026-10-24T02:58:54.9025004Z  768 โ”‚     isIncomingShareInboxLoading,
2026-10-24T02:58:54.9025098Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9025327Z      ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `isIncomingShareInboxLoading`
2026-10-24T02:58:54.9025436Z  769 โ”‚     isIncomingShareUnavailable,
2026-10-24T02:58:54.9025506Z  770 โ”‚     props.incomingShareId,
2026-10-24T02:58:54.9025598Z  771 โ”‚     props.initialProjectRef?.environmentId,
2026-10-24T02:58:54.9025683Z  772 โ”‚     props.initialProjectRef?.projectId,
2026-10-24T02:58:54.9025755Z  773 โ”‚     releaseShareReservation,
2026-10-24T02:58:54.9025818Z  774 โ”‚     reserveShare,
2026-10-24T02:58:54.9025903Z  775 โ”‚     selectedEnvironmentServerConfig,
2026-10-24T02:58:54.9025969Z  776 โ”‚     selectedProject,
2026-10-24T02:58:54.9026035Z  777 โ”‚     shareImportAttempt,
2026-10-24T02:58:54.9026120Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9026285Z      ยท              โ•ฐโ”€โ”€ Unnecessary dependency `shareImportAttempt`
2026-10-24T02:58:54.9026342Z  778 โ”‚   ]);
2026-10-24T02:58:54.9026391Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9026676Z   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-24T02:58:54.9026980Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9026983Z
2026-10-24T02:58:54.9027257Z   โš  eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
2026-10-24T02:58:54.9027402Z     โ•ญโ”€[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
2026-10-24T02:58:54.9027454Z  60 โ”‚ ) {
2026-10-24T02:58:54.9027626Z  61 โ”‚   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
2026-10-24T02:58:54.9027709Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9027848Z     ยท               โ•ฐโ”€โ”€ 'useDragRegion' is declared here
2026-10-24T02:58:54.9027935Z  62 โ”‚   const isInline = props.mode === "inline";
2026-10-24T02:58:54.9027988Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9028093Z   help: Consider removing this declaration.
2026-10-24T02:58:54.9028095Z
2026-10-24T02:58:54.9028248Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.9028399Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T02:58:54.9028454Z   86 โ”‚
2026-10-24T02:58:54.9028546Z   87 โ”‚   const cardCoverage = props.cardCoverage;
2026-10-24T02:58:54.9028627Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9028811Z      ยท               โ•ฐโ”€โ”€ `cardCoverage` originates here
2026-10-24T02:58:54.9028920Z   88 โ”‚   const barHeightRef = useRef(0);
2026-10-24T02:58:54.9029000Z   89 โ”‚   const cardHeightRef = useRef(0);
2026-10-24T02:58:54.9029085Z   90 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T02:58:54.9029175Z   91 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T02:58:54.9029243Z   92 โ”‚     if (!cardCoverage) {
2026-10-24T02:58:54.9029307Z   93 โ”‚       return;
2026-10-24T02:58:54.9029361Z   94 โ”‚     }
2026-10-24T02:58:54.9029506Z   95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T02:58:54.9029593Z   96 โ”‚     if (coverage === cardCoverage.value) {
2026-10-24T02:58:54.9029652Z   97 โ”‚       return;
2026-10-24T02:58:54.9029708Z   98 โ”‚     }
2026-10-24T02:58:54.9029786Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T02:58:54.9029883Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T02:58:54.9029998Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9030145Z      ยท             โ•ฐโ”€โ”€ `cardCoverage` cannot be modified
2026-10-24T02:58:54.9030203Z  101 โ”‚       return;
2026-10-24T02:58:54.9030256Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9030544Z   help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state
2026-10-24T02:58:54.9030843Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9030845Z
2026-10-24T02:58:54.9030996Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.9031157Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
2026-10-24T02:58:54.9031240Z   89 โ”‚   const cardHeightRef = useRef(0);
2026-10-24T02:58:54.9031325Z   90 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T02:58:54.9031400Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9031535Z      ยท              โ•ฐโ”€โ”€ `cardHeight` originates here
2026-10-24T02:58:54.9031627Z   91 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T02:58:54.9031695Z   92 โ”‚     if (!cardCoverage) {
2026-10-24T02:58:54.9031752Z   93 โ”‚       return;
2026-10-24T02:58:54.9031807Z   94 โ”‚     }
2026-10-24T02:58:54.9031953Z   95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T02:58:54.9032039Z   96 โ”‚     if (coverage === cardCoverage.value) {
2026-10-24T02:58:54.9032095Z   97 โ”‚       return;
2026-10-24T02:58:54.9032151Z   98 โ”‚     }
2026-10-24T02:58:54.9032239Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T02:58:54.9032324Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T02:58:54.9032380Z  101 โ”‚       return;
2026-10-24T02:58:54.9032435Z  102 โ”‚     }
2026-10-24T02:58:54.9032536Z  103 โ”‚     cardCoverage.value = withTiming(coverage, {
2026-10-24T02:58:54.9032629Z  104 โ”‚       duration: USER_INPUT_TOGGLE_DURATION_MS,
2026-10-24T02:58:54.9032713Z  105 โ”‚       easing: Easing.out(Easing.cubic),
2026-10-24T02:58:54.9032770Z  106 โ”‚     });
2026-10-24T02:58:54.9032839Z  107 โ”‚   }, [cardCoverage]);
2026-10-24T02:58:54.9032920Z  108 โ”‚   const handleBarLayout = useCallback(
2026-10-24T02:58:54.9033000Z  109 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T02:58:54.9033127Z  110 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T02:58:54.9033196Z  111 โ”‚       notifyCoverage();
2026-10-24T02:58:54.9033251Z  112 โ”‚     },
2026-10-24T02:58:54.9033376Z  113 โ”‚     [notifyCoverage],
2026-10-24T02:58:54.9033461Z  114 โ”‚   );
2026-10-24T02:58:54.9033544Z  115 โ”‚   const handleCardLayout = useCallback(
2026-10-24T02:58:54.9033623Z  116 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T02:58:54.9033749Z  117 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T02:58:54.9033862Z  118 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T02:58:54.9033938Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9034072Z      ยท            โ•ฐโ”€โ”€ `cardHeight` cannot be modified
2026-10-24T02:58:54.9034141Z  119 โ”‚       notifyCoverage();
2026-10-24T02:58:54.9034193Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9034452Z   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-24T02:58:54.9034755Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9034760Z
2026-10-24T02:58:54.9034958Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T02:58:54.9035112Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T02:58:54.9035196Z   90 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T02:58:54.9035287Z   91 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T02:58:54.9035392Z      ยท                                      โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9035628Z      ยท                                         โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T02:58:54.9035697Z   92 โ”‚     if (!cardCoverage) {
2026-10-24T02:58:54.9035763Z   93 โ”‚       return;
2026-10-24T02:58:54.9035819Z   94 โ”‚     }
2026-10-24T02:58:54.9035966Z   95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T02:58:54.9036052Z   96 โ”‚     if (coverage === cardCoverage.value) {
2026-10-24T02:58:54.9036108Z   97 โ”‚       return;
2026-10-24T02:58:54.9036164Z   98 โ”‚     }
2026-10-24T02:58:54.9036246Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T02:58:54.9036328Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T02:58:54.9036405Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9036539Z      ยท             โ•ฐโ”€โ”€ This modifies `cardCoverage`
2026-10-24T02:58:54.9036604Z  101 โ”‚       return;
2026-10-24T02:58:54.9036656Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9036994Z   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-24T02:58:54.9037296Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9037299Z
2026-10-24T02:58:54.9037495Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T02:58:54.9037648Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T02:58:54.9037728Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T02:58:54.9037807Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T02:58:54.9037886Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9038016Z      ยท             โ•ฐโ”€โ”€ This modifies `cardCoverage`
2026-10-24T02:58:54.9038126Z  101 โ”‚       return;
2026-10-24T02:58:54.9038293Z  102 โ”‚     }
2026-10-24T02:58:54.9038396Z  103 โ”‚     cardCoverage.value = withTiming(coverage, {
2026-10-24T02:58:54.9038491Z  104 โ”‚       duration: USER_INPUT_TOGGLE_DURATION_MS,
2026-10-24T02:58:54.9038575Z  105 โ”‚       easing: Easing.out(Easing.cubic),
2026-10-24T02:58:54.9038630Z  106 โ”‚     });
2026-10-24T02:58:54.9038696Z  107 โ”‚   }, [cardCoverage]);
2026-10-24T02:58:54.9038779Z  108 โ”‚   const handleBarLayout = useCallback(
2026-10-24T02:58:54.9038857Z  109 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T02:58:54.9038963Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9039182Z      ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T02:58:54.9039307Z  110 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T02:58:54.9039362Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9039695Z   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-24T02:58:54.9040042Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9040044Z
2026-10-24T02:58:54.9040241Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T02:58:54.9040395Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
2026-10-24T02:58:54.9040478Z  115 โ”‚   const handleCardLayout = useCallback(
2026-10-24T02:58:54.9040560Z  116 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T02:58:54.9040669Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9040885Z      ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardHeight` after render
2026-10-24T02:58:54.9041010Z  117 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T02:58:54.9041124Z  118 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T02:58:54.9041200Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9041329Z      ยท            โ•ฐโ”€โ”€ This modifies `cardHeight`
2026-10-24T02:58:54.9041395Z  119 โ”‚       notifyCoverage();
2026-10-24T02:58:54.9041448Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9041776Z   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-24T02:58:54.9042077Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9042081Z
2026-10-24T02:58:54.9042335Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9042491Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
2026-10-24T02:58:54.9042604Z  37 โ”‚   const [initialized, setInitialized] = useState(false);
2026-10-24T02:58:54.9042673Z  38 โ”‚   useLayoutEffect(() => {
2026-10-24T02:58:54.9042749Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9042878Z     ยท          โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9042941Z  39 โ”‚     reset();
2026-10-24T02:58:54.9043010Z  40 โ”‚     setInitialized(true);
2026-10-24T02:58:54.9043140Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9043335Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9043396Z  41 โ”‚   }, [reset]);
2026-10-24T02:58:54.9043450Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9044037Z   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-24T02:58:54.9044352Z   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-24T02:58:54.9044356Z
2026-10-24T02:58:54.9044609Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9044767Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
2026-10-24T02:58:54.9044820Z  88 โ”‚
2026-10-24T02:58:54.9044886Z  89 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9044954Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9045082Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9045237Z  90 โ”‚     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
2026-10-24T02:58:54.9045338Z  91 โ”‚     const branchName = initialProjectRef.branch;
2026-10-24T02:58:54.9045403Z  92 โ”‚     let active = true;
2026-10-24T02:58:54.9045499Z  93 โ”‚     setPendingCheckouts((count) => count + 1);
2026-10-24T02:58:54.9045583Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9045765Z     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9045917Z  94 โ”‚     // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
2026-10-24T02:58:54.9045969Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9046990Z   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-24T02:58:54.9047306Z   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-24T02:58:54.9047308Z
2026-10-24T02:58:54.9047550Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T02:58:54.9047703Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
2026-10-24T02:58:54.9047763Z  289 โ”‚   return (
2026-10-24T02:58:54.9047895Z  290 โ”‚     <ExistingThreadSettingsRouteContext.Provider value={value}>
2026-10-24T02:58:54.9048147Z      ยท                                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9048215Z  291 โ”‚       {props.children}
2026-10-24T02:58:54.9048267Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9048488Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T02:58:54.9048627Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T02:58:54.9048629Z
2026-10-24T02:58:54.9048918Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T02:58:54.9049106Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
2026-10-24T02:58:54.9049165Z  653 โ”‚   return (
2026-10-24T02:58:54.9049284Z  654 โ”‚     <ThreadSettingsSessionContext.Provider value={value}>
2026-10-24T02:58:54.9049396Z      ยท                                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9049464Z  655 โ”‚       {props.children}
2026-10-24T02:58:54.9049516Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9049733Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T02:58:54.9049908Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T02:58:54.9049913Z
2026-10-24T02:58:54.9050145Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T02:58:54.9050305Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
2026-10-24T02:58:54.9050373Z  1461 โ”‚   return (
2026-10-24T02:58:54.9050533Z  1462 โ”‚     <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
2026-10-24T02:58:54.9050661Z       ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9050759Z  1463 โ”‚       <ThreadSettingsPickerStack.Navigator
2026-10-24T02:58:54.9050812Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9051026Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T02:58:54.9051157Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T02:58:54.9051159Z
2026-10-24T02:58:54.9051416Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9051599Z      โ•ญโ”€[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10]
2026-10-24T02:58:54.9051651Z  117 โ”‚
2026-10-24T02:58:54.9051714Z  118 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9051787Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9051916Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9051998Z  119 โ”‚     void refreshNotifications();
2026-10-24T02:58:54.9052086Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9052259Z      ยท                    โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9052401Z  120 โ”‚     const subscription = AppState.addEventListener("change", (state) => {
2026-10-24T02:58:54.9052453Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9053084Z   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-24T02:58:54.9053431Z   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-24T02:58:54.9053434Z
2026-10-24T02:58:54.9053684Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9053868Z      โ•ญโ”€[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7]
2026-10-24T02:58:54.9053920Z  125 โ”‚
2026-10-24T02:58:54.9053988Z  126 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9054062Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9054191Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9054257Z  127 โ”‚     if (!isLoaded) {
2026-10-24T02:58:54.9054345Z  128 โ”‚       setLiveActivityStatus("checking");
2026-10-24T02:58:54.9054434Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9054603Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9054665Z  129 โ”‚       return;
2026-10-24T02:58:54.9054715Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9055305Z   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-24T02:58:54.9055619Z   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-24T02:58:54.9055621Z
2026-10-24T02:58:54.9055869Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9056025Z      โ•ญโ”€[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5]
2026-10-24T02:58:54.9056085Z  434 โ”‚       : null;
2026-10-24T02:58:54.9056152Z  435 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9056221Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9056347Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9056404Z  436 โ”‚     if (
2026-10-24T02:58:54.9056487Z  437 โ”‚       props.active === false ||
2026-10-24T02:58:54.9056566Z  438 โ”‚       activeDraftKey !== null ||
2026-10-24T02:58:54.9056648Z  439 โ”‚       editingPendingTask !== null ||
2026-10-24T02:58:54.9056722Z  440 โ”‚       selectedProject === null
2026-10-24T02:58:54.9056778Z  441 โ”‚     ) {
2026-10-24T02:58:54.9056838Z  442 โ”‚       return;
2026-10-24T02:58:54.9056891Z  443 โ”‚     }
2026-10-24T02:58:54.9056960Z  444 โ”‚     setActiveDraftKey(
2026-10-24T02:58:54.9057043Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9057208Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9057279Z  445 โ”‚       createNewTaskDraft({
2026-10-24T02:58:54.9057334Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9057968Z   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-24T02:58:54.9058307Z   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-24T02:58:54.9058310Z
2026-10-24T02:58:54.9058542Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T02:58:54.9058702Z       โ•ญโ”€[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36]
2026-10-24T02:58:54.9058807Z  1243 โ”‚     <ActiveNewTaskContext value={activeNewTask}>
2026-10-24T02:58:54.9059002Z  1244 โ”‚       <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
2026-10-24T02:58:54.9059118Z       ยท                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9059194Z  1245 โ”‚     </ActiveNewTaskContext>
2026-10-24T02:58:54.9059245Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9059535Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T02:58:54.9059706Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T02:58:54.9059709Z
2026-10-24T02:58:54.9059909Z   โš  react(purity): Cannot call impure function during render
2026-10-24T02:58:54.9060074Z      โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76]
2026-10-24T02:58:54.9060255Z  696 โ”‚   const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() }));
2026-10-24T02:58:54.9060425Z  697 โ”‚   if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() });
2026-10-24T02:58:54.9060561Z      ยท                                                                            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9060738Z      ยท                                                                                 โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T02:58:54.9060874Z  698 โ”‚   const snoozeGateNow = new Date(snoozeGateClock.now).toISOString();
2026-10-24T02:58:54.9060927Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9061206Z   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-24T02:58:54.9061496Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T02:58:54.9061498Z
2026-10-24T02:58:54.9061666Z   โš  react(purity): Cannot call impure function during render
2026-10-24T02:58:54.9061822Z      โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71]
2026-10-24T02:58:54.9061902Z  717 โ”‚   const snoozePresets = useMemo(
2026-10-24T02:58:54.9062079Z  718 โ”‚     () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-24T02:58:54.9062205Z      ยท                                                                       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9062381Z      ยท                                                                            โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T02:58:54.9062497Z  719 โ”‚     [props.snoozePresetMinute, swipeActions.secondary],
2026-10-24T02:58:54.9062549Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9062882Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T02:58:54.9063207Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T02:58:54.9063209Z
2026-10-24T02:58:54.9063388Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T02:58:54.9063540Z      โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6]
2026-10-24T02:58:54.9063715Z  718 โ”‚     () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-24T02:58:54.9063827Z  719 โ”‚     [props.snoozePresetMinute, swipeActions.secondary],
2026-10-24T02:58:54.9063920Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9064100Z      ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `props.snoozePresetMinute`
2026-10-24T02:58:54.9064158Z  720 โ”‚   );
2026-10-24T02:58:54.9064208Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9064517Z   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-24T02:58:54.9064823Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9064826Z
2026-10-24T02:58:54.9065002Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T02:58:54.9065151Z      โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7]
2026-10-24T02:58:54.9065218Z  764 โ”‚       thread.pinnedAt,
2026-10-24T02:58:54.9065281Z  765 โ”‚       variant,
2026-10-24T02:58:54.9065362Z      ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9065496Z      ยท          โ•ฐโ”€โ”€ Unnecessary dependency `variant`
2026-10-24T02:58:54.9065554Z  766 โ”‚     ],
2026-10-24T02:58:54.9065606Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9065914Z   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-24T02:58:54.9066220Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9066222Z
2026-10-24T02:58:54.9066411Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T02:58:54.9066573Z       โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21]
2026-10-24T02:58:54.9066703Z  1214 โ”‚             {providerDrivers.slice(0, -1).map((driver, index) => (
2026-10-24T02:58:54.9068348Z  1215 โ”‚               <View key={`${driver}:${index}`} className="-mr-1 opacity-30">
2026-10-24T02:58:54.9068469Z       ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9068578Z  1216 โ”‚                 <ProviderIcon provider={driver} size={12} />
2026-10-24T02:58:54.9068629Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9068774Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T02:58:54.9068777Z
2026-10-24T02:58:54.9069031Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T02:58:54.9069159Z       โ•ญโ”€[packages/provider-pi/src/server/adapter.ts:3405:7]
2026-10-24T02:58:54.9069214Z  3404 โ”‚
2026-10-24T02:58:54.9069479Z  3405 โ”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
2026-10-24T02:58:54.9069578Z       ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T02:58:54.9069703Z       ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T02:58:54.9069768Z  3406 โ”‚   Layer.effect(
2026-10-24T02:58:54.9069818Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9069931Z   help: Consider removing this declaration.
2026-10-24T02:58:54.9069934Z
2026-10-24T02:58:54.9070156Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T02:58:54.9070315Z      โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85]
2026-10-24T02:58:54.9070418Z   99 โ”‚   const startEditor = startScheduledTaskEditor;
2026-10-24T02:58:54.9070602Z  100 โ”‚   const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
2026-10-24T02:58:54.9070746Z      ยท                                                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9070943Z      ยท                                                                                          โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
2026-10-24T02:58:54.9071021Z  101 โ”‚   const readEditor = useCallback(
2026-10-24T02:58:54.9071071Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9071376Z   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-24T02:58:54.9071681Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9071683Z
2026-10-24T02:58:54.9071864Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T02:58:54.9072021Z      โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7]
2026-10-24T02:58:54.9072082Z  120 โ”‚       setEditor,
2026-10-24T02:58:54.9072145Z  121 โ”‚       startEditor,
2026-10-24T02:58:54.9072220Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9072361Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
2026-10-24T02:58:54.9072423Z  122 โ”‚       hasChanges,
2026-10-24T02:58:54.9072474Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9072779Z   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-24T02:58:54.9073088Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9073093Z
2026-10-24T02:58:54.9073344Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9073491Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5]
2026-10-24T02:58:54.9073550Z  510 โ”‚   }, []);
2026-10-24T02:58:54.9073615Z  511 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9073686Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9073811Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9073897Z  512 โ”‚     setKeyboardStateSuspect(false);
2026-10-24T02:58:54.9073986Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9074206Z      ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9074334Z  513 โ”‚   }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-24T02:58:54.9074384Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9074968Z   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-24T02:58:54.9075280Z   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-24T02:58:54.9075284Z
2026-10-24T02:58:54.9075534Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9075689Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7]
2026-10-24T02:58:54.9075844Z  869 โ”‚   const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
2026-10-24T02:58:54.9075909Z  870 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9075979Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9076103Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9076260Z  871 โ”‚     if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
2026-10-24T02:58:54.9076370Z  872 โ”‚       setLastKnownKeyboardHeight(liveKeyboardHeight);
2026-10-24T02:58:54.9076464Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9076634Z      ยท                    โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9076690Z  873 โ”‚     }
2026-10-24T02:58:54.9076740Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9077329Z   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-24T02:58:54.9077645Z   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-24T02:58:54.9077647Z
2026-10-24T02:58:54.9077896Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9078048Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5]
2026-10-24T02:58:54.9078100Z  1117 โ”‚
2026-10-24T02:58:54.9078171Z  1118 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9078241Z       ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9078369Z       ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9078445Z  1119 โ”‚     setAnchorMessageId(null);
2026-10-24T02:58:54.9078528Z       ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9078693Z       ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9078773Z  1120 โ”‚     setSubmittedMessageId(null);
2026-10-24T02:58:54.9078824Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9079406Z   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-24T02:58:54.9079767Z   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-24T02:58:54.9079802Z
2026-10-24T02:58:54.9080041Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9080191Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7]
2026-10-24T02:58:54.9080273Z  512 โ”‚     setKeyboardStateSuspect(false);
2026-10-24T02:58:54.9080369Z  513 โ”‚   }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-24T02:58:54.9080503Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9080706Z      ยท               โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `liveKeyboardHeight`
2026-10-24T02:58:54.9080865Z      ยท               โ•ฐโ”€โ”€ Unnecessary dependency `isKeyboardVisible`
2026-10-24T02:58:54.9080992Z  514 โ”‚   const handleOwnedInputFocusChange = (focused: boolean) => {
2026-10-24T02:58:54.9081041Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9081326Z   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-24T02:58:54.9081626Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9081628Z
2026-10-24T02:58:54.9081823Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9081973Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7]
2026-10-24T02:58:54.9082060Z  1066 โ”‚     userInputInsetProgress.set(1);
2026-10-24T02:58:54.9082221Z  1067 โ”‚   }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
2026-10-24T02:58:54.9082313Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9082487Z       ยท                   โ•ฐโ”€โ”€ Unnecessary dependency `activeUserInputRequestId`
2026-10-24T02:58:54.9082591Z  1068 โ”‚   const showContent = props.showContent ?? true;
2026-10-24T02:58:54.9082643Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9082927Z   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-24T02:58:54.9083231Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9083233Z
2026-10-24T02:58:54.9083476Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9083654Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15]
2026-10-24T02:58:54.9083722Z  1124 โ”‚     freeze.set(false);
2026-10-24T02:58:54.9083803Z  1125 โ”‚   }, [freeze, selectedThreadKey]);
2026-10-24T02:58:54.9083895Z       ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9084055Z       ยท                       โ•ฐโ”€โ”€ Unnecessary dependency `selectedThreadKey`
2026-10-24T02:58:54.9084108Z  1126 โ”‚
2026-10-24T02:58:54.9084158Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9084444Z   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-24T02:58:54.9084748Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9084753Z
2026-10-24T02:58:54.9084907Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.9085054Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5]
2026-10-24T02:58:54.9085162Z  950 โ”‚   const composerPopoverHeight = useSharedValue(0);
2026-10-24T02:58:54.9085264Z  951 โ”‚   const floatingControlCoverage = useSharedValue(
2026-10-24T02:58:54.9085356Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9085513Z      ยท                    โ•ฐโ”€โ”€ `floatingControlCoverage` originates here
2026-10-24T02:58:54.9085636Z  952 โ”‚     showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-24T02:58:54.9085689Z  953 โ”‚   );
2026-10-24T02:58:54.9085761Z  954 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9085864Z  955 โ”‚     floatingControlCoverage.value = withTiming(
2026-10-24T02:58:54.9085951Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9086107Z      ยท                โ•ฐโ”€โ”€ `floatingControlCoverage` cannot be modified
2026-10-24T02:58:54.9086232Z  956 โ”‚       showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-24T02:58:54.9086284Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9086545Z   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-24T02:58:54.9086846Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9086850Z
2026-10-24T02:58:54.9087005Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.9087154Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7]
2026-10-24T02:58:54.9087335Z  963 โ”‚   const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
2026-10-24T02:58:54.9087455Z  964 โ”‚   const combinedContentInsetEndAdjustment = useSharedValue(
2026-10-24T02:58:54.9087562Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9087743Z      ยท                         โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` originates here
2026-10-24T02:58:54.9087867Z  965 โ”‚     Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
2026-10-24T02:58:54.9087921Z  966 โ”‚   );
2026-10-24T02:58:54.9087988Z  967 โ”‚   useAnimatedReaction(
2026-10-24T02:58:54.9088046Z  968 โ”‚     () =>
2026-10-24T02:58:54.9088192Z  969 โ”‚       contentInsetEndAdjustment.value +
2026-10-24T02:58:54.9088306Z  970 โ”‚       floatingControlCoverage.value +
2026-10-24T02:58:54.9088495Z  971 โ”‚       (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
2026-10-24T02:58:54.9088556Z  972 โ”‚     (value) => {
2026-10-24T02:58:54.9088666Z  973 โ”‚       combinedContentInsetEndAdjustment.value = value;
2026-10-24T02:58:54.9088771Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9088956Z      ยท                       โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` cannot be modified
2026-10-24T02:58:54.9089012Z  974 โ”‚     },
2026-10-24T02:58:54.9089062Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9089318Z   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-24T02:58:54.9089619Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9089624Z
2026-10-24T02:58:54.9089818Z   โš  eslint(no-unused-vars): Identifier 'Duration' is imported but never used.
2026-10-24T02:58:54.9089980Z     โ•ญโ”€[packages/provider-pi/src/server/adapter.test.ts:24:13]
2026-10-24T02:58:54.9090073Z  23 โ”‚ import * as Deferred from "effect/Deferred";
2026-10-24T02:58:54.9090162Z  24 โ”‚ import * as Duration from "effect/Duration";
2026-10-24T02:58:54.9090240Z     ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9090371Z     ยท                 โ•ฐโ”€โ”€ 'Duration' is imported here
2026-10-24T02:58:54.9090455Z  25 โ”‚ import * as Effect from "effect/Effect";
2026-10-24T02:58:54.9090505Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9090606Z   help: Consider removing this import.
2026-10-24T02:58:54.9090611Z
2026-10-24T02:58:54.9090862Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9091010Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
2026-10-24T02:58:54.9091061Z  55 โ”‚
2026-10-24T02:58:54.9091124Z  56 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9091194Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9091491Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9091557Z  57 โ”‚     setDecodedSize(null);
2026-10-24T02:58:54.9091632Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9091796Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9091870Z  58 โ”‚   }, [props.sourceKey]);
2026-10-24T02:58:54.9091922Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9092504Z   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-24T02:58:54.9092821Z   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-24T02:58:54.9092824Z
2026-10-24T02:58:54.9093073Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9093219Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
2026-10-24T02:58:54.9093323Z  59 โ”‚
2026-10-24T02:58:54.9093424Z  60 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9093493Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9093617Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9093682Z  61 โ”‚     setFailedUri(null);
2026-10-24T02:58:54.9093755Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9093916Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9093981Z  62 โ”‚   }, [props.uri]);
2026-10-24T02:58:54.9094029Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9094615Z   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-24T02:58:54.9094932Z   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-24T02:58:54.9094934Z
2026-10-24T02:58:54.9095144Z   โš  eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-24T02:58:54.9095290Z    โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
2026-10-24T02:58:54.9095411Z  6 โ”‚ import { parse, SvgAst, type JsxAST } from "react-native-svg";
2026-10-24T02:58:54.9095589Z  7 โ”‚ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
2026-10-24T02:58:54.9095677Z    ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9095826Z    ยท                  โ•ฐโ”€โ”€ 'ActivityIndicator' is imported here
2026-10-24T02:58:54.9095882Z  8 โ”‚
2026-10-24T02:58:54.9095936Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9096032Z   help: Consider removing this import.
2026-10-24T02:58:54.9096034Z
2026-10-24T02:58:54.9096230Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9096376Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
2026-10-24T02:58:54.9096443Z  57 โ”‚     setDecodedSize(null);
2026-10-24T02:58:54.9096511Z  58 โ”‚   }, [props.sourceKey]);
2026-10-24T02:58:54.9096592Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9096739Z     ยท              โ•ฐโ”€โ”€ Unnecessary dependency `props.sourceKey`
2026-10-24T02:58:54.9096792Z  59 โ”‚
2026-10-24T02:58:54.9096841Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9097135Z   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-24T02:58:54.9097445Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9097447Z
2026-10-24T02:58:54.9097641Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9097788Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
2026-10-24T02:58:54.9097855Z  61 โ”‚     setFailedUri(null);
2026-10-24T02:58:54.9097921Z  62 โ”‚   }, [props.uri]);
2026-10-24T02:58:54.9097991Z     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9098129Z     ยท           โ•ฐโ”€โ”€ Unnecessary dependency `props.uri`
2026-10-24T02:58:54.9098181Z  63 โ”‚
2026-10-24T02:58:54.9098231Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9098565Z   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-24T02:58:54.9098900Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9098903Z
2026-10-24T02:58:54.9099111Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T02:58:54.9099278Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7]
2026-10-24T02:58:54.9099355Z  248 โ”‚       mountedRef.current = false;
2026-10-24T02:58:54.9099525Z  249 โ”‚       flow.setBranchQuery("");
2026-10-24T02:58:54.9099629Z      ยท       โ”€โ”€โ”ฌโ”€
2026-10-24T02:58:54.9099765Z      ยท         โ•ฐโ”€โ”€ Missing dependency `flow`
2026-10-24T02:58:54.9099822Z  250 โ”‚     };
2026-10-24T02:58:54.9099935Z  251 โ”‚   }, [flow.setBranchQuery]);
2026-10-24T02:58:54.9100025Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9100225Z      ยท                โ•ฐโ”€โ”€ Overly precise dependency `flow.setBranchQuery`, use `flow` instead
2026-10-24T02:58:54.9100276Z  252 โ”‚
2026-10-24T02:58:54.9100329Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9100741Z   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-24T02:58:54.9101050Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9101055Z
2026-10-24T02:58:54.9101305Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9101462Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5]
2026-10-24T02:58:54.9101581Z  283 โ”‚   const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
2026-10-24T02:58:54.9101646Z  284 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9101717Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9101843Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9101926Z  285 โ”‚     setNow(new Date().toISOString());
2026-10-24T02:58:54.9101993Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T02:58:54.9102153Z      ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9102361Z  286 โ”‚     const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
2026-10-24T02:58:54.9102459Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9103043Z   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-24T02:58:54.9103362Z   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-24T02:58:54.9103365Z
2026-10-24T02:58:54.9103560Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9103722Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25]
2026-10-24T02:58:54.9103855Z  364 โ”‚     // range) the boundary string is identical and the chain would die.
2026-10-24T02:58:54.9103944Z  365 โ”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-24T02:58:54.9104044Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9104204Z      ยท                                โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-24T02:58:54.9104317Z  366 โ”‚   const listItems = ((): readonly SidebarListItem[] => {
2026-10-24T02:58:54.9104369Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9104655Z   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-24T02:58:54.9104961Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9104968Z
2026-10-24T02:58:54.9105131Z   โš  react(purity): Cannot call impure function during render
2026-10-24T02:58:54.9105289Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53]
2026-10-24T02:58:54.9105375Z  355 โ”‚     if (Number.isNaN(wakeAtMs)) return;
2026-10-24T02:58:54.9105528Z  356 โ”‚     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-24T02:58:54.9105645Z      ยท                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9105805Z      ยท                                                          โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T02:58:54.9105883Z  357 โ”‚     const id = setTimeout(() => {
2026-10-24T02:58:54.9105935Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9106217Z   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-24T02:58:54.9106508Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T02:58:54.9106510Z
2026-10-24T02:58:54.9106762Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9106909Z     โ•ญโ”€[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
2026-10-24T02:58:54.9107067Z  28 โ”‚   const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
2026-10-24T02:58:54.9107130Z  29 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9107200Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9107374Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9107639Z  30 โ”‚     if (snapshot && snapshot !== live) setHeld({ key, snapshot });
2026-10-24T02:58:54.9107740Z     ยท                                        โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9107929Z     ยท                                           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9108001Z  31 โ”‚   }, [key, live, snapshot]);
2026-10-24T02:58:54.9108052Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9108632Z   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-24T02:58:54.9108951Z   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-24T02:58:54.9108955Z
2026-10-24T02:58:54.9109155Z   โš  unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-24T02:58:54.9109319Z     โ•ญโ”€[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13]
2026-10-24T02:58:54.9109390Z  14 โ”‚ } from "@t3tools/contracts";
2026-10-24T02:58:54.9109479Z  15 โ”‚ import type {} from "@t3tools/contracts";
2026-10-24T02:58:54.9109546Z     ยท             โ”€โ”€
2026-10-24T02:58:54.9109725Z  16 โ”‚ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl";
2026-10-24T02:58:54.9109777Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9109892Z   help: Remove empty braces
2026-10-24T02:58:54.9109895Z
2026-10-24T02:58:54.9110154Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9110328Z     โ•ญโ”€[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5]
2026-10-24T02:58:54.9110383Z  58 โ”‚
2026-10-24T02:58:54.9110444Z  59 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9110512Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9110640Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9110720Z  60 โ”‚     setMountedModes((current) => {
2026-10-24T02:58:54.9110797Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9110961Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9111044Z  61 โ”‚       if (current.has(props.mode)) {
2026-10-24T02:58:54.9111094Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9111681Z   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-24T02:58:54.9111997Z   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-24T02:58:54.9112000Z
2026-10-24T02:58:54.9112251Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T02:58:54.9112391Z       โ•ญโ”€[packages/provider-opencode/src/server/adapter.ts:3755:7]
2026-10-24T02:58:54.9112446Z  3754 โ”‚
2026-10-24T02:58:54.9112692Z  3755 โ”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, OpenCodeAdapterV2DriverEnv> =
2026-10-24T02:58:54.9112793Z       ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T02:58:54.9112916Z       ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T02:58:54.9112980Z  3756 โ”‚   Layer.effect(
2026-10-24T02:58:54.9113029Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9113132Z   help: Consider removing this declaration.
2026-10-24T02:58:54.9113134Z
2026-10-24T02:58:54.9113295Z   โš  eslint(no-empty-pattern): Empty array binding pattern
2026-10-24T02:58:54.9113447Z       โ•ญโ”€[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12]
2026-10-24T02:58:54.9113498Z  1525 โ”‚
2026-10-24T02:58:54.9113567Z  1526 โ”‚ for (const [] of [
2026-10-24T02:58:54.9113637Z       ยท            โ”€โ”€
2026-10-24T02:58:54.9113708Z  1527 โ”‚   ["github", "github.com"],
2026-10-24T02:58:54.9113764Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9114037Z   help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.
2026-10-24T02:58:54.9114040Z
2026-10-24T02:58:54.9114204Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T02:58:54.9114390Z     โ•ญโ”€[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
2026-10-24T02:58:54.9114442Z  52 โ”‚
2026-10-24T02:58:54.9114507Z  53 โ”‚   for (const {} of [
2026-10-24T02:58:54.9114575Z     ยท              โ”€โ”€
2026-10-24T02:58:54.9114640Z  54 โ”‚     { healthy: true },
2026-10-24T02:58:54.9114690Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9114915Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T02:58:54.9114917Z
2026-10-24T02:58:54.9115173Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9115339Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7]
2026-10-24T02:58:54.9115391Z  211 โ”‚   };
2026-10-24T02:58:54.9115454Z  212 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9115528Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9115657Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9115827Z  213 โ”‚     const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null;
2026-10-24T02:58:54.9115890Z  214 โ”‚     if (inserted) {
2026-10-24T02:58:54.9115966Z  215 โ”‚       setSelection((current) =>
2026-10-24T02:58:54.9116043Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9116213Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9116383Z  216 โ”‚         current.start === inserted.start && current.end === inserted.end ? current : inserted,
2026-10-24T02:58:54.9116433Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9117018Z   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-24T02:58:54.9117329Z   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-24T02:58:54.9117332Z
2026-10-24T02:58:54.9117712Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9117898Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7]
2026-10-24T02:58:54.9117975Z  284 โ”‚   }, [hasWorkspaceSnapshot]);
2026-10-24T02:58:54.9118039Z  285 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9118107Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9118233Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9118377Z  286 โ”‚     if (!environmentId || !projectCwd || !selectedProviderInstanceId) return;
2026-10-24T02:58:54.9118523Z  287 โ”‚     const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`;
2026-10-24T02:58:54.9118591Z  288 โ”‚     const now = Date.now();
2026-10-24T02:58:54.9118704Z  289 โ”‚     const lastRequest = workspaceRefreshKeyRef.current;
2026-10-24T02:58:54.9118761Z  290 โ”‚     if (
2026-10-24T02:58:54.9118842Z  291 โ”‚       lastRequest?.key === key &&
2026-10-24T02:58:54.9118978Z  292 โ”‚       now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS
2026-10-24T02:58:54.9119033Z  293 โ”‚     )
2026-10-24T02:58:54.9119095Z  294 โ”‚       return;
2026-10-24T02:58:54.9119268Z  295 โ”‚     if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) {
2026-10-24T02:58:54.9119353Z  296 โ”‚       setWorkspaceRefreshRetry(null);
2026-10-24T02:58:54.9119448Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9119620Z      ยท                   โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9119680Z  297 โ”‚       return;
2026-10-24T02:58:54.9119729Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9120363Z   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-24T02:58:54.9120679Z   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-24T02:58:54.9120682Z
2026-10-24T02:58:54.9120877Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9121035Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5]
2026-10-24T02:58:54.9121088Z  325 โ”‚   }, [
2026-10-24T02:58:54.9121151Z  326 โ”‚     draftMessage,
2026-10-24T02:58:54.9121226Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9121372Z      ยท           โ•ฐโ”€โ”€ Unnecessary dependency `draftMessage`
2026-10-24T02:58:54.9121436Z  327 โ”‚     environmentId,
2026-10-24T02:58:54.9121488Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9121776Z   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-24T02:58:54.9122078Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9122080Z
2026-10-24T02:58:54.9122263Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T02:58:54.9122413Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27]
2026-10-24T02:58:54.9122577Z  601 โ”‚   const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
2026-10-24T02:58:54.9122702Z  602 โ”‚   const gesture = Gesture.Pan()
2026-10-24T02:58:54.9122821Z      ยท                           โ”€โ”ฌโ”€
2026-10-24T02:58:54.9122958Z      ยท                            โ•ฐโ”€โ”€ `Pan` may be a component
2026-10-24T02:58:54.9123032Z  603 โ”‚     .enabled(!props.disabled)
2026-10-24T02:58:54.9123082Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9123349Z   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-24T02:58:54.9123782Z   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-24T02:58:54.9123785Z
2026-10-24T02:58:54.9124039Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9124197Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T02:58:54.9124259Z  259 โ”‚     .join("|");
2026-10-24T02:58:54.9124322Z  260 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9124392Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9124519Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9124580Z  261 โ”‚     stop();
2026-10-24T02:58:54.9124646Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-24T02:58:54.9124807Z      ยท       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9124872Z  262 โ”‚   }, [orderVersion]);
2026-10-24T02:58:54.9124923Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9125508Z   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-24T02:58:54.9125823Z   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-24T02:58:54.9125825Z
2026-10-24T02:58:54.9126036Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T02:58:54.9126190Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T02:58:54.9126254Z  260 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9126311Z  261 โ”‚     stop();
2026-10-24T02:58:54.9126379Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-24T02:58:54.9126505Z      ยท       โ•ฐโ”€โ”€ Missing dependency `stop`
2026-10-24T02:58:54.9126572Z  262 โ”‚   }, [orderVersion]);
2026-10-24T02:58:54.9126647Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9126791Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `orderVersion`
2026-10-24T02:58:54.9126855Z  263 โ”‚   useEffect(
2026-10-24T02:58:54.9126906Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9127314Z   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-24T02:58:54.9127618Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9127620Z
2026-10-24T02:58:54.9127809Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9127992Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
2026-10-24T02:58:54.9128068Z  95 โ”‚   const latest = useRef(props);
2026-10-24T02:58:54.9128134Z  96 โ”‚   latest.current = props;
2026-10-24T02:58:54.9128238Z     ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9128412Z     ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T02:58:54.9128524Z     ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-24T02:58:54.9128590Z  97 โ”‚   const gesture = useMemo(
2026-10-24T02:58:54.9128641Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9129108Z   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-24T02:58:54.9129393Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9129395Z
2026-10-24T02:58:54.9129533Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9129690Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
2026-10-24T02:58:54.9129755Z  103 โ”‚         .runOnJS(true)
2026-10-24T02:58:54.9129875Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T02:58:54.9129990Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9130191Z      ยท                                 โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T02:58:54.9130325Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T02:58:54.9130376Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9130829Z   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-24T02:58:54.9131111Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9131113Z
2026-10-24T02:58:54.9131253Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9131407Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
2026-10-24T02:58:54.9131548Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T02:58:54.9131702Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T02:58:54.9131838Z      ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9132040Z      ยท                                             โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T02:58:54.9132162Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T02:58:54.9132213Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9132660Z   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-24T02:58:54.9132948Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9132954Z
2026-10-24T02:58:54.9133092Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9133247Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
2026-10-24T02:58:54.9133373Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T02:58:54.9133492Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T02:58:54.9133629Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9133828Z      ยท                                          โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T02:58:54.9133956Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T02:58:54.9134009Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9134459Z   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-24T02:58:54.9134745Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9134747Z
2026-10-24T02:58:54.9134885Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9135040Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
2026-10-24T02:58:54.9135157Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T02:58:54.9135281Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T02:58:54.9135416Z      ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9135616Z      ยท                                            โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T02:58:54.9135682Z  108 โ”‚     [props.disabled],
2026-10-24T02:58:54.9135733Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9136183Z   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-24T02:58:54.9136513Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9136545Z
2026-10-24T02:58:54.9136682Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9136835Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
2026-10-24T02:58:54.9136946Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-24T02:58:54.9137049Z  249 โ”‚   latest.current = { rows, planners, moveThread };
2026-10-24T02:58:54.9137151Z      ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9137325Z      ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T02:58:54.9137437Z      ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-24T02:58:54.9137490Z  250 โ”‚
2026-10-24T02:58:54.9137541Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9137992Z   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-24T02:58:54.9138276Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9138278Z
2026-10-24T02:58:54.9138417Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9138573Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
2026-10-24T02:58:54.9138690Z  246 โ”‚   const [preview, setPreview] = useState<Drag | null>(null);
2026-10-24T02:58:54.9138800Z  247 โ”‚   const translateY = useRef(new Animated.Value(0)).current;
2026-10-24T02:58:54.9138924Z      ยท                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9139089Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T02:58:54.9139198Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-24T02:58:54.9139247Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9139797Z   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-24T02:58:54.9140117Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9140120Z
2026-10-24T02:58:54.9140283Z   โš  react(purity): Cannot call impure function during render
2026-10-24T02:58:54.9140442Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
2026-10-24T02:58:54.9140506Z  323 โ”‚     update(0);
2026-10-24T02:58:54.9140584Z  324 โ”‚     let last = performance.now();
2026-10-24T02:58:54.9140679Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9140814Z      ยท                        โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T02:58:54.9140882Z  325 โ”‚     const tick = () => {
2026-10-24T02:58:54.9140932Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9141224Z   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-24T02:58:54.9141512Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T02:58:54.9141597Z
2026-10-24T02:58:54.9141814Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T02:58:54.9141970Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
2026-10-24T02:58:54.9142028Z   98 โ”‚     () =>
2026-10-24T02:58:54.9142093Z   99 โ”‚       Gesture.Pan()
2026-10-24T02:58:54.9142166Z      ยท               โ”€โ”ฌโ”€
2026-10-24T02:58:54.9142294Z      ยท                โ•ฐโ”€โ”€ `Pan` may be a component
2026-10-24T02:58:54.9142372Z  100 โ”‚         .enabled(!props.disabled)
2026-10-24T02:58:54.9142423Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9142687Z   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-24T02:58:54.9143124Z   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-24T02:58:54.9143130Z
2026-10-24T02:58:54.9143312Z   โš  react(memo-dependencies): Found missing memoization dependencies
2026-10-24T02:58:54.9143466Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
2026-10-24T02:58:54.9143532Z  103 โ”‚         .runOnJS(true)
2026-10-24T02:58:54.9143626Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T02:58:54.9143713Z      ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T02:58:54.9144139Z      ยท                           โ•ฐโ”€โ”€ 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-24T02:58:54.9144270Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T02:58:54.9144389Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T02:58:54.9144510Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T02:58:54.9144577Z  108 โ”‚     [props.disabled],
2026-10-24T02:58:54.9144656Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9144837Z      ยท             โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T02:58:54.9144892Z  109 โ”‚   );
2026-10-24T02:58:54.9144942Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9145145Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T02:58:54.9145456Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9145463Z
2026-10-24T02:58:54.9145714Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9145848Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5]
2026-10-24T02:58:54.9145905Z  2137 โ”‚   );
2026-10-24T02:58:54.9145971Z  2138 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9146042Z       ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9146171Z       ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9146246Z  2139 โ”‚     setExpandedVideo(null);
2026-10-24T02:58:54.9146325Z       ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9146545Z       ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9146648Z  2140 โ”‚     setExpandedFile(null);
2026-10-24T02:58:54.9146699Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9147285Z   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-24T02:58:54.9147601Z   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-24T02:58:54.9147603Z
2026-10-24T02:58:54.9147826Z   โš  eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
2026-10-24T02:58:54.9147963Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10]
2026-10-24T02:58:54.9148102Z  65 โ”‚ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
2026-10-24T02:58:54.9148240Z  66 โ”‚ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
2026-10-24T02:58:54.9148333Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9148496Z     ยท                     โ•ฐโ”€โ”€ 'isMarkdownFileLinkLabel' is imported here
2026-10-24T02:58:54.9148650Z  67 โ”‚ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
2026-10-24T02:58:54.9148702Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9148797Z   help: Consider removing this import.
2026-10-24T02:58:54.9148800Z
2026-10-24T02:58:54.9149103Z   โš  eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
2026-10-24T02:58:54.9149236Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3]
2026-10-24T02:58:54.9149295Z  91 โ”‚ import {
2026-10-24T02:58:54.9149356Z  92 โ”‚   createContext,
2026-10-24T02:58:54.9149431Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9149563Z     ยท         โ•ฐโ”€โ”€ 'createContext' is imported here
2026-10-24T02:58:54.9149619Z  93 โ”‚   memo,
2026-10-24T02:58:54.9149667Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9149763Z   help: Consider removing this import.
2026-10-24T02:58:54.9149765Z
2026-10-24T02:58:54.9150144Z   โš  eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-24T02:58:54.9150277Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3]
2026-10-24T02:58:54.9150333Z  107 โ”‚ import {
2026-10-24T02:58:54.9150401Z  108 โ”‚   ActivityIndicator,
2026-10-24T02:58:54.9150530Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9150699Z      ยท           โ•ฐโ”€โ”€ 'ActivityIndicator' is imported here
2026-10-24T02:58:54.9150754Z  109 โ”‚   Image,
2026-10-24T02:58:54.9150804Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9150897Z   help: Consider removing this import.
2026-10-24T02:58:54.9150900Z
2026-10-24T02:58:54.9151095Z   โš  eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
2026-10-24T02:58:54.9151223Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3]
2026-10-24T02:58:54.9151286Z  114 โ”‚   Pressable,
2026-10-24T02:58:54.9151348Z  115 โ”‚   ScrollView,
2026-10-24T02:58:54.9151421Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9151548Z      ยท        โ•ฐโ”€โ”€ 'ScrollView' is imported here
2026-10-24T02:58:54.9151609Z  116 โ”‚   StyleSheet,
2026-10-24T02:58:54.9151664Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9151760Z   help: Consider removing this import.
2026-10-24T02:58:54.9151762Z
2026-10-24T02:58:54.9151953Z   โš  eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
2026-10-24T02:58:54.9152083Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11]
2026-10-24T02:58:54.9152142Z  116 โ”‚   StyleSheet,
2026-10-24T02:58:54.9152208Z  117 โ”‚   Text as NativeText,
2026-10-24T02:58:54.9152284Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9152417Z      ยท                โ•ฐโ”€โ”€ 'NativeText' is imported here
2026-10-24T02:58:54.9152481Z  118 โ”‚   type ColorValue,
2026-10-24T02:58:54.9152531Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9152622Z   help: Consider removing this import.
2026-10-24T02:58:54.9152624Z
2026-10-24T02:58:54.9152837Z   โš  eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
2026-10-24T02:58:54.9152968Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10]
2026-10-24T02:58:54.9153101Z  139 โ”‚ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
2026-10-24T02:58:54.9153223Z  140 โ”‚ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
2026-10-24T02:58:54.9153310Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9153459Z      ยท                   โ•ฐโ”€โ”€ 'tryOpenExternalUrl' is imported here
2026-10-24T02:58:54.9153603Z  141 โ”‚ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
2026-10-24T02:58:54.9153652Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9153746Z   help: Consider removing this import.
2026-10-24T02:58:54.9153748Z
2026-10-24T02:58:54.9153965Z   โš  eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
2026-10-24T02:58:54.9154100Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10]
2026-10-24T02:58:54.9154231Z  142 โ”‚ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
2026-10-24T02:58:54.9154353Z  143 โ”‚ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
2026-10-24T02:58:54.9154441Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9154591Z      ยท                   โ•ฐโ”€โ”€ 'faviconUrlForOrigin' is imported here
2026-10-24T02:58:54.9154647Z  144 โ”‚ import {
2026-10-24T02:58:54.9154700Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9154794Z   help: Consider removing this import.
2026-10-24T02:58:54.9154796Z
2026-10-24T02:58:54.9155055Z   โš  eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
2026-10-24T02:58:54.9155211Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10]
2026-10-24T02:58:54.9155354Z  156 โ”‚ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
2026-10-24T02:58:54.9155487Z  157 โ”‚ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
2026-10-24T02:58:54.9155574Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9155720Z      ยท                  โ•ฐโ”€โ”€ 'MediaVideoPlayer' is imported here
2026-10-24T02:58:54.9155855Z  158 โ”‚ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
2026-10-24T02:58:54.9155907Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9156000Z   help: Consider removing this import.
2026-10-24T02:58:54.9156002Z
2026-10-24T02:58:54.9156220Z   โš  eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
2026-10-24T02:58:54.9156348Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3]
2026-10-24T02:58:54.9156429Z  160 โ”‚   attachmentVideoPreviewSource,
2026-10-24T02:58:54.9156499Z  161 โ”‚   mediaVideoPreviewUri,
2026-10-24T02:58:54.9156581Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9156727Z      ยท             โ•ฐโ”€โ”€ 'mediaVideoPreviewUri' is imported here
2026-10-24T02:58:54.9156798Z  162 โ”‚   mediaVideoThumbnailKey,
2026-10-24T02:58:54.9156849Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9156943Z   help: Consider removing this import.
2026-10-24T02:58:54.9156945Z
2026-10-24T02:58:54.9157161Z   โš  eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
2026-10-24T02:58:54.9157290Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3]
2026-10-24T02:58:54.9157363Z  161 โ”‚   mediaVideoPreviewUri,
2026-10-24T02:58:54.9157436Z  162 โ”‚   mediaVideoThumbnailKey,
2026-10-24T02:58:54.9157520Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9157672Z      ยท              โ•ฐโ”€โ”€ 'mediaVideoThumbnailKey' is imported here
2026-10-24T02:58:54.9157750Z  163 โ”‚   type MediaVideoPreviewSource,
2026-10-24T02:58:54.9157801Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9157892Z   help: Consider removing this import.
2026-10-24T02:58:54.9157894Z
2026-10-24T02:58:54.9158103Z   โš  eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
2026-10-24T02:58:54.9158231Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8]
2026-10-24T02:58:54.9158301Z  162 โ”‚   mediaVideoThumbnailKey,
2026-10-24T02:58:54.9158379Z  163 โ”‚   type MediaVideoPreviewSource,
2026-10-24T02:58:54.9158478Z      ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9158639Z      ยท                   โ•ฐโ”€โ”€ 'MediaVideoPreviewSource' is imported here
2026-10-24T02:58:54.9158725Z  164 โ”‚ } from "../../lib/videoPreviewSource";
2026-10-24T02:58:54.9158773Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9158866Z   help: Consider removing this import.
2026-10-24T02:58:54.9158868Z
2026-10-24T02:58:54.9159062Z   โš  eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used.
2026-10-24T02:58:54.9159191Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15]
2026-10-24T02:58:54.9159360Z  170 โ”‚ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection";
2026-10-24T02:58:54.9159499Z  171 โ”‚ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter";
2026-10-24T02:58:54.9159639Z      ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9159811Z      ยท                      โ•ฐโ”€โ”€ 'ReviewDiffTheme' is imported here
2026-10-24T02:58:54.9159902Z  172 โ”‚ import {
2026-10-24T02:58:54.9159958Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9160050Z   help: Consider removing this import.
2026-10-24T02:58:54.9160052Z
2026-10-24T02:58:54.9160273Z   โš  eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
2026-10-24T02:58:54.9160401Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3]
2026-10-24T02:58:54.9160457Z  185 โ”‚ import {
2026-10-24T02:58:54.9160530Z  186 โ”‚   resolveMarkdownFontSizes,
2026-10-24T02:58:54.9160619Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9160778Z      ยท               โ•ฐโ”€โ”€ 'resolveMarkdownFontSizes' is imported here
2026-10-24T02:58:54.9160864Z  187 โ”‚   resolveNativeMarkdownTypography,
2026-10-24T02:58:54.9160915Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9161007Z   help: Consider removing this import.
2026-10-24T02:58:54.9161009Z
2026-10-24T02:58:54.9161222Z   โš  eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used.
2026-10-24T02:58:54.9161350Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10]
2026-10-24T02:58:54.9161480Z  190 โ”‚ import { PierreEntryIcon } from "../../components/PierreEntryIcon";
2026-10-24T02:58:54.9161615Z  191 โ”‚ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons";
2026-10-24T02:58:54.9161707Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9161863Z      ยท                     โ•ฐโ”€โ”€ 'markdownLinkIconSource' is imported here
2026-10-24T02:58:54.9161926Z  192 โ”‚ import {
2026-10-24T02:58:54.9161979Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9162071Z   help: Consider removing this import.
2026-10-24T02:58:54.9162074Z
2026-10-24T02:58:54.9162322Z   โš  eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
2026-10-24T02:58:54.9162449Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3]
2026-10-24T02:58:54.9162526Z  193 โ”‚   normalizeNativeMarkdownUrl,
2026-10-24T02:58:54.9162619Z  194 โ”‚   resolveMarkdownInlineCodePresentation,
2026-10-24T02:58:54.9162725Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9162916Z      ยท                     โ•ฐโ”€โ”€ 'resolveMarkdownInlineCodePresentation' is imported here
2026-10-24T02:58:54.9162988Z  195 โ”‚   resolveMarkdownLinkIcon,
2026-10-24T02:58:54.9163045Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9163138Z   help: Consider removing this import.
2026-10-24T02:58:54.9163140Z
2026-10-24T02:58:54.9163358Z   โš  eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used.
2026-10-24T02:58:54.9163486Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3]
2026-10-24T02:58:54.9163578Z  194 โ”‚   resolveMarkdownInlineCodePresentation,
2026-10-24T02:58:54.9163648Z  195 โ”‚   resolveMarkdownLinkIcon,
2026-10-24T02:58:54.9163735Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9163887Z      ยท              โ•ฐโ”€โ”€ 'resolveMarkdownLinkIcon' is imported here
2026-10-24T02:58:54.9163971Z  196 โ”‚   resolveMarkdownLinkPresentation,
2026-10-24T02:58:54.9164021Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9164113Z   help: Consider removing this import.
2026-10-24T02:58:54.9164166Z
2026-10-24T02:58:54.9164413Z   โš  eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used.
2026-10-24T02:58:54.9164541Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10]
2026-10-24T02:58:54.9164640Z  233 โ”‚ import { ThreadMcpApp } from "./McpAppWebView";
2026-10-24T02:58:54.9164781Z  234 โ”‚ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState";
2026-10-24T02:58:54.9164878Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9165041Z      ยท                      โ•ฐโ”€โ”€ 'useMarkdownCodeHighlight' is imported here
2026-10-24T02:58:54.9165099Z  235 โ”‚ import {
2026-10-24T02:58:54.9165147Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9165240Z   help: Consider removing this import.
2026-10-24T02:58:54.9165242Z
2026-10-24T02:58:54.9165451Z   โš  eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
2026-10-24T02:58:54.9165580Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3]
2026-10-24T02:58:54.9165642Z  237 โ”‚   useAssetUrl,
2026-10-24T02:58:54.9165709Z  238 โ”‚   useAssetUrlState,
2026-10-24T02:58:54.9165788Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9165927Z      ยท           โ•ฐโ”€โ”€ 'useAssetUrlState' is imported here
2026-10-24T02:58:54.9165993Z  239 โ”‚   useRefreshAssetUrl,
2026-10-24T02:58:54.9166044Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9166136Z   help: Consider removing this import.
2026-10-24T02:58:54.9166139Z
2026-10-24T02:58:54.9166335Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9166470Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7]
2026-10-24T02:58:54.9166546Z  2140 โ”‚     setExpandedFile(null);
2026-10-24T02:58:54.9166701Z  2141 โ”‚   }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
2026-10-24T02:58:54.9166915Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9167200Z       ยท                โ”‚                  โ”‚                       โ•ฐโ”€โ”€ Unnecessary dependency `props.contentPresentation.kind`
2026-10-24T02:58:54.9167394Z       ยท                โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `props.threadId`
2026-10-24T02:58:54.9167554Z       ยท                โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
2026-10-24T02:58:54.9167743Z  2142 โ”‚   const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
2026-10-24T02:58:54.9167831Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9168120Z   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-24T02:58:54.9168430Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9168432Z
2026-10-24T02:58:54.9168628Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9168761Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7]
2026-10-24T02:58:54.9168854Z  2608 โ”‚     reportHeaderMaterialVisibility(false);
2026-10-24T02:58:54.9168971Z  2609 โ”‚   }, [feedThreadKey, reportHeaderMaterialVisibility]);
2026-10-24T02:58:54.9169053Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9169206Z       ยท             โ•ฐโ”€โ”€ Unnecessary dependency `feedThreadKey`
2026-10-24T02:58:54.9169258Z  2610 โ”‚
2026-10-24T02:58:54.9169311Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9169603Z   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-24T02:58:54.9169933Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9169936Z
2026-10-24T02:58:54.9170132Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9170270Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7]
2026-10-24T02:58:54.9170330Z  2624 โ”‚     }
2026-10-24T02:58:54.9170459Z  2625 โ”‚   }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
2026-10-24T02:58:54.9170536Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9170679Z       ยท             โ•ฐโ”€โ”€ Unnecessary dependency `listMountKey`
2026-10-24T02:58:54.9170733Z  2626 โ”‚
2026-10-24T02:58:54.9170787Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9171069Z   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-24T02:58:54.9171372Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9171374Z
2026-10-24T02:58:54.9171575Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9171709Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7]
2026-10-24T02:58:54.9171766Z  2781 โ”‚     }
2026-10-24T02:58:54.9171944Z  2782 โ”‚   }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
2026-10-24T02:58:54.9172135Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9172379Z       ยท              โ”‚                  โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `expandedWorkRows`
2026-10-24T02:58:54.9172576Z       ยท              โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `expandedWorkGroups`
2026-10-24T02:58:54.9172776Z       ยท              โ•ฐโ”€โ”€ Unnecessary dependency `expandedTurnIds`
2026-10-24T02:58:54.9172864Z  2783 โ”‚
2026-10-24T02:58:54.9172916Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9173201Z   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-24T02:58:54.9173503Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9173505Z
2026-10-24T02:58:54.9173680Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T02:58:54.9173812Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9]
2026-10-24T02:58:54.9173870Z  612 โ”‚       };
2026-10-24T02:58:54.9173983Z  613 โ”‚     }, [props.environmentId, attachment.id, httpBaseUrl]),
2026-10-24T02:58:54.9174169Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9174406Z      ยท                  โ”‚                 โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `httpBaseUrl`
2026-10-24T02:58:54.9174598Z      ยท                  โ”‚                 โ•ฐโ”€โ”€ Unnecessary dependency `attachment.id`
2026-10-24T02:58:54.9174759Z      ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
2026-10-24T02:58:54.9174813Z  614 โ”‚   );
2026-10-24T02:58:54.9174862Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9175168Z   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-24T02:58:54.9175478Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9175483Z
2026-10-24T02:58:54.9175662Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9175831Z      โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70]
2026-10-24T02:58:54.9175913Z  554 โ”‚           assert.deepStrictEqual(
2026-10-24T02:58:54.9176075Z  555 โ”‚             (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-24T02:58:54.9176194Z      ยท                                                                      โ”ฌ
2026-10-24T02:58:54.9176352Z      ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9176418Z  556 โ”‚             [
2026-10-24T02:58:54.9176472Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9176575Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9176577Z
2026-10-24T02:58:54.9176754Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9176924Z       โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70]
2026-10-24T02:58:54.9177006Z  1154 โ”‚           assert.deepStrictEqual(
2026-10-24T02:58:54.9177165Z  1155 โ”‚             (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-24T02:58:54.9177284Z       ยท                                                                      โ”ฌ
2026-10-24T02:58:54.9177495Z       ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9177586Z  1156 โ”‚             [
2026-10-24T02:58:54.9177638Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9177738Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9177741Z
2026-10-24T02:58:54.9178191Z   โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T02:58:54.9178311Z      โ•ญโ”€[packages/effect-acp/src/errors.test.ts:129:28]
2026-10-24T02:58:54.9178403Z  128 โ”‚       const secret = "acp-summary-secret";
2026-10-24T02:58:54.9178511Z  129 โ”‚       const cause = yield* Schema.decodeUnknownEffect(
2026-10-24T02:58:54.9178627Z      ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9178694Z  130 โ”‚         Schema.Struct({
2026-10-24T02:58:54.9178749Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9178754Z
2026-10-24T02:58:54.9179080Z   โš  t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T02:58:54.9179196Z     โ•ญโ”€[packages/effect-acp/src/schema.test.ts:18:12]
2026-10-24T02:58:54.9179351Z  17 โ”‚     const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
2026-10-24T02:58:54.9179489Z  18 โ”‚     expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
2026-10-24T02:58:54.9179626Z     ยท            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9179687Z  19 โ”‚     expect(
2026-10-24T02:58:54.9179737Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9179740Z
2026-10-24T02:58:54.9180108Z   โš  t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T02:58:54.9180227Z     โ•ญโ”€[packages/effect-acp/src/schema.test.ts:20:7]
2026-10-24T02:58:54.9180286Z  19 โ”‚     expect(
2026-10-24T02:58:54.9180450Z  20 โ”‚       Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
2026-10-24T02:58:54.9180524Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9180587Z  21 โ”‚     ).toBe(true);
2026-10-24T02:58:54.9180637Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9180640Z
2026-10-24T02:58:54.9180848Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T02:58:54.9180990Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
2026-10-24T02:58:54.9181090Z  772 โ”‚     if (settingsSheetPresentation.isActive) {
2026-10-24T02:58:54.9181221Z  773 โ”‚       settingsRoutePresentation.present(settingsRouteSession);
2026-10-24T02:58:54.9181314Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9181483Z      ยท                   โ•ฐโ”€โ”€ Missing dependency `settingsRoutePresentation`
2026-10-24T02:58:54.9181538Z  774 โ”‚     }
2026-10-24T02:58:54.9181736Z  775 โ”‚   }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
2026-10-24T02:58:54.9181840Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9182115Z      ยท                       โ•ฐโ”€โ”€ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
2026-10-24T02:58:54.9182179Z  776 โ”‚
2026-10-24T02:58:54.9182270Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9182747Z   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-24T02:58:54.9183091Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9183094Z
2026-10-24T02:58:54.9183248Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.9183389Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5]
2026-10-24T02:58:54.9183546Z  387 โ”‚     typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
2026-10-24T02:58:54.9183678Z  388 โ”‚   const animatedBorderRadius = useSharedValue(targetBorderRadius);
2026-10-24T02:58:54.9183767Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9183923Z      ยท                   โ•ฐโ”€โ”€ `animatedBorderRadius` originates here
2026-10-24T02:58:54.9184080Z  389 โ”‚   const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
2026-10-24T02:58:54.9184149Z  390 โ”‚   useLayoutEffect(() => {
2026-10-24T02:58:54.9184248Z  391 โ”‚     animatedBorderRadius.value = shouldAnimate
2026-10-24T02:58:54.9184334Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9184486Z      ยท               โ•ฐโ”€โ”€ `animatedBorderRadius` cannot be modified
2026-10-24T02:58:54.9184572Z  392 โ”‚       ? withTiming(targetBorderRadius, {
2026-10-24T02:58:54.9184623Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9184882Z   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-24T02:58:54.9185187Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9185193Z
2026-10-24T02:58:54.9185556Z   โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T02:58:54.9185672Z       โ•ญโ”€[packages/effect-acp/src/client.ts:1269:11]
2026-10-24T02:58:54.9185819Z  1268 โ”‚         extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
2026-10-24T02:58:54.9185988Z  1269 โ”‚           Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
2026-10-24T02:58:54.9186091Z       ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9186232Z  1270 โ”‚             Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
2026-10-24T02:58:54.9186284Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9186287Z
2026-10-24T02:58:54.9186479Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9186739Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27]
2026-10-24T02:58:54.9186912Z  151 โ”‚         <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
2026-10-24T02:58:54.9186989Z  152 โ”‚           {props.children(open)}
2026-10-24T02:58:54.9187076Z      ยท                           โ”€โ”€โ”ฌโ”€
2026-10-24T02:58:54.9187232Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T02:58:54.9187291Z  153 โ”‚         </View>
2026-10-24T02:58:54.9187342Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9187804Z   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-24T02:58:54.9188092Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9188095Z
2026-10-24T02:58:54.9188288Z   โš  react(memo-dependencies): Found missing/extra memoization dependencies
2026-10-24T02:58:54.9188431Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9]
2026-10-24T02:58:54.9188513Z  139 โ”‚       if (action.id !== undefined) {
2026-10-24T02:58:54.9188590Z  140 โ”‚         props.onPressAction?.({
2026-10-24T02:58:54.9188661Z      ยท         โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T02:58:54.9188787Z      ยท           โ•ฐโ”€โ”€ Missing dependency `props`
2026-10-24T02:58:54.9188877Z  141 โ”‚           nativeEvent: { event: action.id },
2026-10-24T02:58:54.9189025Z  142 โ”‚         } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
2026-10-24T02:58:54.9189083Z  143 โ”‚       }
2026-10-24T02:58:54.9189137Z  144 โ”‚     },
2026-10-24T02:58:54.9189217Z  145 โ”‚     [close, props.onPressAction],
2026-10-24T02:58:54.9189309Z      ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9189518Z      ยท                      โ•ฐโ”€โ”€ Overly precise dependency `props.onPressAction`, use `props` instead
2026-10-24T02:58:54.9189571Z  146 โ”‚   );
2026-10-24T02:58:54.9189623Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9190131Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-24T02:58:54.9190443Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9190447Z
2026-10-24T02:58:54.9190610Z   โš  eslint(no-control-regex): Unexpected control character
2026-10-24T02:58:54.9190796Z      โ•ญโ”€[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46]
2026-10-24T02:58:54.9190932Z  219 โ”‚               <Text selectable className="font-mono text-sm text-foreground">
2026-10-24T02:58:54.9191069Z  220 โ”‚                 {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")}
2026-10-24T02:58:54.9191175Z      ยท                                              โ”€โ”€โ”ฌโ”€
2026-10-24T02:58:54.9191335Z      ยท                                                โ•ฐโ”€โ”€ 'U+001B' is a control character.
2026-10-24T02:58:54.9191448Z  221 โ”‚               </Text>
2026-10-24T02:58:54.9191532Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9191757Z   help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression.
2026-10-24T02:58:54.9191759Z
2026-10-24T02:58:54.9191979Z   โš  eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used.
2026-10-24T02:58:54.9192139Z       โ•ญโ”€[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10]
2026-10-24T02:58:54.9192193Z  1397 โ”‚
2026-10-24T02:58:54.9192281Z  1398 โ”‚ function assertUserMessagesExclude(
2026-10-24T02:58:54.9192381Z       ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9192546Z       ยท                      โ•ฐโ”€โ”€ 'assertUserMessagesExclude' is declared here
2026-10-24T02:58:54.9192661Z  1399 โ”‚   projection: OrchestrationV2ThreadProjection,
2026-10-24T02:58:54.9192715Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9192815Z   help: Consider removing this declaration.
2026-10-24T02:58:54.9192820Z
2026-10-24T02:58:54.9193276Z   โš  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-24T02:58:54.9193443Z      โ•ญโ”€[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7]
2026-10-24T02:58:54.9193544Z  565 โ”‚           let afterSequence = created[0]!.sequence;
2026-10-24T02:58:54.9193738Z  566 โ”‚ โ•ญโ”€โ–ถ       for (let index = 1; index <= 32; index += 1) {
2026-10-24T02:58:54.9193835Z  567 โ”‚ โ”‚           const nextEvent = {
2026-10-24T02:58:54.9193997Z  568 โ”‚ โ”‚             id: EventId.make(`event:foundation-stream-race:${index}`),
2026-10-24T02:58:54.9194128Z  569 โ”‚ โ”‚             type: "thread.metadata-updated" as const,
2026-10-24T02:58:54.9194217Z  570 โ”‚ โ”‚             threadId,
2026-10-24T02:58:54.9194317Z  571 โ”‚ โ”‚             providerInstanceId,
2026-10-24T02:58:54.9194415Z  572 โ”‚ โ”‚             occurredAt: now,
2026-10-24T02:58:54.9194559Z  573 โ”‚ โ”‚             payload: { ...thread, title: `Race update ${index}` },
2026-10-24T02:58:54.9194685Z  574 โ”‚ โ”‚           } satisfies OrchestrationV2DomainEvent;
2026-10-24T02:58:54.9194796Z  575 โ”‚ โ”‚           const reader = yield* eventSink
2026-10-24T02:58:54.9194916Z  576 โ”‚ โ”‚             .stream({ threadId, afterSequence })
2026-10-24T02:58:54.9195051Z  577 โ”‚ โ”‚             .pipe(Stream.runHead, Effect.forkChild);
2026-10-24T02:58:54.9195157Z  578 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T02:58:54.9195317Z  579 โ”‚ โ”‚           const written = yield* eventSink.write({ events: [nextEvent] });
2026-10-24T02:58:54.9195439Z  580 โ”‚ โ”‚           const received = yield* Fiber.join(reader);
2026-10-24T02:58:54.9195553Z  581 โ”‚ โ”‚           if (Option.isNone(received)) {
2026-10-24T02:58:54.9195749Z  582 โ”‚ โ”‚             return yield* Effect.die("The event stream ended before delivering the live event.");
2026-10-24T02:58:54.9195828Z  583 โ”‚ โ”‚           }
2026-10-24T02:58:54.9195984Z  584 โ”‚ โ”‚           assert.equal(received.value.sequence, written[0]?.sequence);
2026-10-24T02:58:54.9196176Z  585 โ”‚ โ”‚           assert.equal(received.value.event.id, nextEvent.id);
2026-10-24T02:58:54.9196329Z  586 โ”‚ โ”‚           afterSequence = received.value.sequence;
2026-10-24T02:58:54.9196456Z  587 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T02:58:54.9196514Z  588 โ”‚         }),
2026-10-24T02:58:54.9196567Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9196569Z
2026-10-24T02:58:54.9197021Z   โš  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-24T02:58:54.9197189Z       โ•ญโ”€[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9]
2026-10-24T02:58:54.9197265Z  2326 โ”‚             let settled = false;
2026-10-24T02:58:54.9197427Z  2327 โ”‚ โ•ญโ”€โ–ถ         while (!settled) {
2026-10-24T02:58:54.9197585Z  2328 โ”‚ โ”‚             settled = (yield* outbox.listByCommandId(commandId)).every(
2026-10-24T02:58:54.9197716Z  2329 โ”‚ โ”‚               (effect) => effect.status === "succeeded",
2026-10-24T02:58:54.9197797Z  2330 โ”‚ โ”‚             );
2026-10-24T02:58:54.9197918Z  2331 โ”‚ โ”‚             if (!settled) yield* Effect.yieldNow;
2026-10-24T02:58:54.9198054Z  2332 โ”‚ โ•ฐโ”€โ–ถ         }
2026-10-24T02:58:54.9198172Z  2333 โ”‚           }).pipe(Effect.provide(layerWorker), Effect.scoped);
2026-10-24T02:58:54.9198224Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9198226Z
2026-10-24T02:58:54.9198683Z   โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T02:58:54.9198811Z      โ•ญโ”€[packages/effect-acp/src/protocol.test.ts:500:31]
2026-10-24T02:58:54.9198864Z  499 โ”‚
2026-10-24T02:58:54.9198976Z  500 โ”‚       const response = yield* Schema.decodeUnknownEffect(
2026-10-24T02:58:54.9199092Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9199197Z  501 โ”‚         Schema.fromJsonString(JsonRpcErrorResponse),
2026-10-24T02:58:54.9199247Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9199249Z
2026-10-24T02:58:54.9199538Z   โš  eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'.
2026-10-24T02:58:54.9199658Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:218:7]
2026-10-24T02:58:54.9199715Z  217 โ”‚
2026-10-24T02:58:54.9199876Z  218 โ”‚ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect<void> =>
2026-10-24T02:58:54.9200016Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9200167Z      ยท                 โ•ฐโ”€โ”€ 'revokeActiveMcpThread' is declared here
2026-10-24T02:58:54.9200352Z  219 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void;
2026-10-24T02:58:54.9200403Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9200504Z   help: Consider removing this declaration.
2026-10-24T02:58:54.9200506Z
2026-10-24T02:58:54.9200808Z   โš  eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T02:58:54.9200927Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:221:7]
2026-10-24T02:58:54.9200980Z  220 โ”‚
2026-10-24T02:58:54.9201160Z  221 โ”‚ const revokeAllActiveMcpCredentials = (): Effect.Effect<void> =>
2026-10-24T02:58:54.9201289Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9201462Z      ยท                     โ•ฐโ”€โ”€ 'revokeAllActiveMcpCredentials' is declared here
2026-10-24T02:58:54.9201620Z  222 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void;
2026-10-24T02:58:54.9201671Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9201771Z   help: Consider removing this declaration.
2026-10-24T02:58:54.9201773Z
2026-10-24T02:58:54.9201950Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9202084Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
2026-10-24T02:58:54.9202250Z  120 โ”‚   const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
2026-10-24T02:58:54.9202340Z  121 โ”‚   const dispatch = vi.fn((_: unknown) =>
2026-10-24T02:58:54.9202420Z      ยท                           โ”ฌ
2026-10-24T02:58:54.9202547Z      ยท                           โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9202647Z  122 โ”‚     (options.dispatchGate ?? Effect.void).pipe(
2026-10-24T02:58:54.9202698Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9202796Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9202798Z
2026-10-24T02:58:54.9202976Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9203109Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
2026-10-24T02:58:54.9203165Z  133 โ”‚   );
2026-10-24T02:58:54.9203267Z  134 โ”‚   const listLocalBranchNames = vi.fn((_: string) =>
2026-10-24T02:58:54.9203368Z      ยท                                       โ”ฌ
2026-10-24T02:58:54.9203505Z      ยท                                       โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9203571Z  135 โ”‚     Effect.succeed(
2026-10-24T02:58:54.9203620Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9203720Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9203723Z
2026-10-24T02:58:54.9203899Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9204030Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
2026-10-24T02:58:54.9204083Z  177 โ”‚   });
2026-10-24T02:58:54.9204181Z  178 โ”‚   const sendToThread = vi.fn((_: unknown) => {
2026-10-24T02:58:54.9204267Z      ยท                               โ”ฌ
2026-10-24T02:58:54.9204402Z      ยท                               โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9204500Z  179 โ”‚     switch (options.continuation ?? "queued") {
2026-10-24T02:58:54.9204551Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9204646Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9204649Z
2026-10-24T02:58:54.9204824Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9204953Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
2026-10-24T02:58:54.9205007Z  202 โ”‚   );
2026-10-24T02:58:54.9205104Z  203 โ”‚   const removeWorktree = vi.fn((_: unknown) =>
2026-10-24T02:58:54.9205192Z      ยท                                 โ”ฌ
2026-10-24T02:58:54.9205322Z      ยท                                 โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9205404Z  204 โ”‚     options.removeWorktreeFails
2026-10-24T02:58:54.9205512Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9205639Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9205641Z
2026-10-24T02:58:54.9205813Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9205945Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
2026-10-24T02:58:54.9206000Z  207 โ”‚   );
2026-10-24T02:58:54.9206100Z  208 โ”‚   const deleteLocalBranch = vi.fn((_: unknown) =>
2026-10-24T02:58:54.9206190Z      ยท                                    โ”ฌ
2026-10-24T02:58:54.9206324Z      ยท                                    โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9206410Z  209 โ”‚     options.deleteLocalBranchFails
2026-10-24T02:58:54.9206463Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9206558Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9206562Z
2026-10-24T02:58:54.9206741Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9206874Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
2026-10-24T02:58:54.9206926Z  212 โ”‚   );
2026-10-24T02:58:54.9207038Z  213 โ”‚   const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
2026-10-24T02:58:54.9207133Z      ยท                                          โ”ฌ
2026-10-24T02:58:54.9207271Z      ยท                                          โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9207357Z  214 โ”‚     options.fetchWorktreeBaseFails
2026-10-24T02:58:54.9207408Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9207502Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9207505Z
2026-10-24T02:58:54.9207684Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9207818Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
2026-10-24T02:58:54.9207873Z  253 โ”‚   );
2026-10-24T02:58:54.9207960Z  254 โ”‚   const localStatus = vi.fn((_: unknown) =>
2026-10-24T02:58:54.9208046Z      ยท                              โ”ฌ
2026-10-24T02:58:54.9208175Z      ยท                              โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9208243Z  255 โ”‚     Effect.succeed({
2026-10-24T02:58:54.9208293Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9208391Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9208393Z
2026-10-24T02:58:54.9208567Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T02:58:54.9208699Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
2026-10-24T02:58:54.9208802Z  263 โ”‚   );
2026-10-24T02:58:54.9208980Z  264 โ”‚   const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
2026-10-24T02:58:54.9209067Z      ยท                                โ”ฌ
2026-10-24T02:58:54.9209199Z      ยท                                โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T02:58:54.9209341Z  265 โ”‚   const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
2026-10-24T02:58:54.9209390Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9209487Z   help: Consider removing this parameter.
2026-10-24T02:58:54.9209490Z
2026-10-24T02:58:54.9209641Z   โš  eslint(no-new): Do not use 'new' for side effects.
2026-10-24T02:58:54.9209761Z      โ•ญโ”€[apps/server/src/mcp/McpToolAccess.test.ts:168:3]
2026-10-24T02:58:54.9209881Z  167 โ”‚   // @ts-expect-error a declaration constructed directly
2026-10-24T02:58:54.9210003Z  168 โ”‚   new McpToolAccess.Declaration(unchecked);
2026-10-24T02:58:54.9210105Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9210229Z  169 โ”‚   // @ts-expect-error a handlers layer built outside McpToolAccess
2026-10-24T02:58:54.9210280Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9210437Z   help: Assign the result of 'new' to a variable or compare it to a reference.
2026-10-24T02:58:54.9210440Z
2026-10-24T02:58:54.9210895Z   โš  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-24T02:58:54.9211040Z      โ•ญโ”€[apps/server/src/background/HostPowerMonitor.test.ts:133:11]
2026-10-24T02:58:54.9211164Z  132 โ”‚               const monitor = yield* HostPowerMonitor.HostPowerMonitor;
2026-10-24T02:58:54.9211311Z  133 โ”‚ โ•ญโ”€โ–ถ           for (
2026-10-24T02:58:54.9211413Z  134 โ”‚ โ”‚               let attempt = 0;
2026-10-24T02:58:54.9211580Z  135 โ”‚ โ”‚               attempt < 100 && (yield* monitor.snapshot).onBattery !== "true";
2026-10-24T02:58:54.9211674Z  136 โ”‚ โ”‚               attempt += 1
2026-10-24T02:58:54.9211756Z  137 โ”‚ โ”‚             ) {
2026-10-24T02:58:54.9211868Z  138 โ”‚ โ”‚               yield* Effect.yieldNow;
2026-10-24T02:58:54.9211999Z  139 โ”‚ โ•ฐโ”€โ–ถ           }
2026-10-24T02:58:54.9212119Z  140 โ”‚               expect((yield* monitor.snapshot).onBattery).toBe("true");
2026-10-24T02:58:54.9212171Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9212173Z
2026-10-24T02:58:54.9212335Z   โš  react(immutability): This value cannot be modified
2026-10-24T02:58:54.9212492Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
2026-10-24T02:58:54.9212584Z  53 โ”‚ function usePulseAnimation(pulse: boolean) {
2026-10-24T02:58:54.9212675Z  54 โ”‚   const pulseProgress = useSharedValue(0);
2026-10-24T02:58:54.9212754Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9212892Z     ยท               โ•ฐโ”€โ”€ `pulseProgress` originates here
2026-10-24T02:58:54.9212942Z  55 โ”‚
2026-10-24T02:58:54.9213008Z  56 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9213070Z  57 โ”‚     if (pulse) {
2026-10-24T02:58:54.9213155Z  58 โ”‚       pulseProgress.value = withRepeat(
2026-10-24T02:58:54.9213230Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9213420Z     ยท             โ•ฐโ”€โ”€ `pulseProgress` cannot be modified
2026-10-24T02:58:54.9213519Z  59 โ”‚         withTiming(1, {
2026-10-24T02:58:54.9213569Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9213828Z   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-24T02:58:54.9214133Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T02:58:54.9214135Z
2026-10-24T02:58:54.9214388Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9214521Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:68:5]
2026-10-24T02:58:54.9214620Z  66 โ”‚   const { id: attachmentId, fileUri } = attachment;
2026-10-24T02:58:54.9214684Z  67 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9214758Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9214885Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9214947Z  68 โ”‚     setUri(null);
2026-10-24T02:58:54.9215015Z     ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T02:58:54.9215177Z     ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9215240Z  69 โ”‚     setError(null);
2026-10-24T02:58:54.9215290Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9215870Z   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-24T02:58:54.9216194Z   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-24T02:58:54.9216199Z
2026-10-24T02:58:54.9216395Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9216528Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:91:7]
2026-10-24T02:58:54.9216581Z  90 โ”‚     };
2026-10-24T02:58:54.9216658Z  91 โ”‚   }, [attachmentId, fileUri]);
2026-10-24T02:58:54.9216775Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9216953Z     ยท             โ”‚          โ•ฐโ”€โ”€ Unnecessary dependency `fileUri`
2026-10-24T02:58:54.9217096Z     ยท             โ•ฐโ”€โ”€ Unnecessary dependency `attachmentId`
2026-10-24T02:58:54.9217235Z  92 โ”‚   const mimeType = videoMimeType(attachment) ?? attachment.mimeType;
2026-10-24T02:58:54.9217289Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9217575Z   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-24T02:58:54.9217879Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9217881Z
2026-10-24T02:58:54.9218090Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T02:58:54.9218226Z      โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:213:34]
2026-10-24T02:58:54.9218294Z  212 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9218405Z  213 โ”‚     if (!isFocused && hasSource) props.onRequestClose();
2026-10-24T02:58:54.9218549Z      ยท                                  โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T02:58:54.9218723Z      ยท                                    โ•ฐโ”€โ”€ Missing dependency `props`
2026-10-24T02:58:54.9218828Z  214 โ”‚   }, [isFocused, hasSource, props.onRequestClose]);
2026-10-24T02:58:54.9218937Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9219157Z      ยท                                       โ•ฐโ”€โ”€ Overly precise dependency `props.onRequestClose`, use `props` instead
2026-10-24T02:58:54.9219232Z  215 โ”‚   const { source } = props;
2026-10-24T02:58:54.9219284Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9219801Z   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-24T02:58:54.9220154Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9220159Z
2026-10-24T02:58:54.9220352Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9220479Z     โ•ญโ”€[apps/mobile/src/components/ComposerEditor.tsx:82:6]
2026-10-24T02:58:54.9220535Z  81 โ”‚     },
2026-10-24T02:58:54.9220599Z  82 โ”‚     [draftKey],
2026-10-24T02:58:54.9220668Z     ยท      โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9220803Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `draftKey`
2026-10-24T02:58:54.9220857Z  83 โ”‚   );
2026-10-24T02:58:54.9220907Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9221195Z   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-24T02:58:54.9221501Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9221503Z
2026-10-24T02:58:54.9221753Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9221920Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5]
2026-10-24T02:58:54.9221970Z  76 โ”‚
2026-10-24T02:58:54.9222035Z  77 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9222104Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9222229Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9222357Z  78 โ”‚     const { host, code } = parsePairingUrl(connectionPairingUrl);
2026-10-24T02:58:54.9222429Z  79 โ”‚     setHostInput(host);
2026-10-24T02:58:54.9222503Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9222666Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9222731Z  80 โ”‚     setCodeInput(code);
2026-10-24T02:58:54.9222781Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9223365Z   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-24T02:58:54.9223679Z   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-24T02:58:54.9223743Z
2026-10-24T02:58:54.9224029Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9224192Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5]
2026-10-24T02:58:54.9224246Z  82 โ”‚
2026-10-24T02:58:54.9224308Z  83 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9224377Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9224501Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9224590Z  84 โ”‚     if (routePairingUrl.length === 0) {
2026-10-24T02:58:54.9224650Z  85 โ”‚       return;
2026-10-24T02:58:54.9224702Z  86 โ”‚     }
2026-10-24T02:58:54.9224752Z  87 โ”‚
2026-10-24T02:58:54.9224867Z  88 โ”‚     const { host, code } = parsePairingUrl(routePairingUrl);
2026-10-24T02:58:54.9224941Z  89 โ”‚     setHostInput(host);
2026-10-24T02:58:54.9225019Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9225180Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9225246Z  90 โ”‚     setCodeInput(code);
2026-10-24T02:58:54.9225297Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9225875Z   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-24T02:58:54.9226190Z   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-24T02:58:54.9226195Z
2026-10-24T02:58:54.9226445Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9226612Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7]
2026-10-24T02:58:54.9226664Z  92 โ”‚
2026-10-24T02:58:54.9226727Z  93 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9226794Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9226920Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9227002Z  94 โ”‚     if (pairingConnectionError) {
2026-10-24T02:58:54.9227073Z  95 โ”‚       setIsSubmitting(false);
2026-10-24T02:58:54.9227152Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9227319Z     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9227373Z  96 โ”‚     }
2026-10-24T02:58:54.9227428Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9228017Z   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-24T02:58:54.9228333Z   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-24T02:58:54.9228336Z
2026-10-24T02:58:54.9228585Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9228715Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
2026-10-24T02:58:54.9228768Z  57 โ”‚
2026-10-24T02:58:54.9228884Z  58 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9228982Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9229111Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9229205Z  59 โ”‚     const controller = new AbortController();
2026-10-24T02:58:54.9229278Z  60 โ”‚     setLoadState("pending");
2026-10-24T02:58:54.9229350Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9229510Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9229664Z  61 โ”‚     // A renewed signature is used on Retry, not as a reason to reset the native player.
2026-10-24T02:58:54.9229716Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9230330Z   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-24T02:58:54.9230643Z   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-24T02:58:54.9230646Z
2026-10-24T02:58:54.9230844Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9230974Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
2026-10-24T02:58:54.9231054Z  70 โ”‚     return () => controller.abort();
2026-10-24T02:58:54.9231148Z  71 โ”‚   }, [player, props.playRequested, attempt]);
2026-10-24T02:58:54.9231314Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9231538Z     ยท          โ”‚             โ”‚              โ•ฐโ”€โ”€ Unnecessary dependency `attempt`
2026-10-24T02:58:54.9231734Z     ยท          โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `props.playRequested`
2026-10-24T02:58:54.9231870Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `player_0`
2026-10-24T02:58:54.9231923Z  72 โ”‚
2026-10-24T02:58:54.9231973Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9232256Z   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-24T02:58:54.9232557Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9232560Z
2026-10-24T02:58:54.9232749Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9232893Z     โ•ญโ”€[apps/mobile/src/components/ui/Menu.tsx:54:36]
2026-10-24T02:58:54.9233065Z  53 โ”‚         const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
2026-10-24T02:58:54.9233234Z  54 โ”‚ โ•ญโ”€โ–ถ     children = cloneElement(child, {
2026-10-24T02:58:54.9233339Z  55 โ”‚ โ”‚         onTouchStart: (event) => {
2026-10-24T02:58:54.9233493Z  56 โ”‚ โ”‚           // Reset for a new touch, not onPressIn, which also fires when a
2026-10-24T02:58:54.9233647Z  57 โ”‚ โ”‚           // finger moves out of the row and back during the same gesture.
2026-10-24T02:58:54.9233771Z  58 โ”‚ โ”‚           menuPress.current.isPreparing = false;
2026-10-24T02:58:54.9233939Z  59 โ”‚ โ”‚           menuPress.current.suppressPress = menuPress.current.isOpen;
2026-10-24T02:58:54.9234051Z  60 โ”‚ โ”‚           pendingPress.current = null;
2026-10-24T02:58:54.9234171Z  61 โ”‚ โ”‚           child.props.onTouchStart?.(event);
2026-10-24T02:58:54.9234245Z  62 โ”‚ โ”‚         },
2026-10-24T02:58:54.9235819Z  63 โ”‚ โ”‚         onPress: (event) => {
2026-10-24T02:58:54.9235996Z  64 โ”‚ โ”‚           // Accessibility clicks have no touch identifier and must not inherit
2026-10-24T02:58:54.9236132Z  65 โ”‚ โ”‚           // cancellation from a previous physical gesture.
2026-10-24T02:58:54.9236295Z  66 โ”‚ โ”‚           const isTouch = typeof event.nativeEvent.identifier === "number";
2026-10-24T02:58:54.9236487Z  67 โ”‚ โ”‚           if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
2026-10-24T02:58:54.9236575Z  68 โ”‚ โ”‚             return;
2026-10-24T02:58:54.9236651Z  69 โ”‚ โ”‚           }
2026-10-24T02:58:54.9236786Z  70 โ”‚ โ”‚           if (isTouch && menuPress.current.isPreparing) {
2026-10-24T02:58:54.9236950Z  71 โ”‚ โ”‚             // A release can arrive between native menu preparation and display.
2026-10-24T02:58:54.9237110Z  72 โ”‚ โ”‚             // Let UIKit's display/cancel callback decide this press's outcome.
2026-10-24T02:58:54.9237209Z  73 โ”‚ โ”‚             event.persist();
2026-10-24T02:58:54.9237363Z  74 โ”‚ โ”‚             pendingPress.current = () => child.props.onPress?.(event);
2026-10-24T02:58:54.9237447Z  75 โ”‚ โ”‚             return;
2026-10-24T02:58:54.9237523Z  76 โ”‚ โ”‚           }
2026-10-24T02:58:54.9237639Z  77 โ”‚ โ”‚           child.props.onPress?.(event);
2026-10-24T02:58:54.9237715Z  78 โ”‚ โ”‚         },
2026-10-24T02:58:54.9237843Z  79 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T02:58:54.9238072Z     ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T02:58:54.9238173Z  80 โ”‚         menuProps.onMenuInteractionStart = () => {
2026-10-24T02:58:54.9238222Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9238681Z   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-24T02:58:54.9239038Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9239073Z
2026-10-24T02:58:54.9239281Z   โš  react(no-unstable-nested-components): Do not define components during render.
2026-10-24T02:58:54.9239385Z       โ•ญโ”€[apps/mobile/src/Stack.tsx:1074:21]
2026-10-24T02:58:54.9239448Z  1073 โ”‚     <Navigator
2026-10-24T02:58:54.9239578Z  1074 โ”‚       screenLayout={(props) => <GuardedScreenLayout {...props} />}
2026-10-24T02:58:54.9239713Z       ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9239782Z  1075 โ”‚       screenListeners={{
2026-10-24T02:58:54.9239833Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9240232Z   help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true.
2026-10-24T02:58:54.9240238Z
2026-10-24T02:58:54.9240427Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T02:58:54.9240571Z      โ•ญโ”€[apps/mobile/src/components/ComposerContextSheet.tsx:267:25]
2026-10-24T02:58:54.9240677Z  266 โ”‚                 {record.elements?.map((element, index) => (
2026-10-24T02:58:54.9240837Z  267 โ”‚                   <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
2026-10-24T02:58:54.9240987Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9241062Z  268 โ”‚                     <ContextField
2026-10-24T02:58:54.9241112Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9241256Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T02:58:54.9241258Z
2026-10-24T02:58:54.9241515Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9241661Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55]
2026-10-24T02:58:54.9241719Z  61 โ”‚   }, []);
2026-10-24T02:58:54.9241782Z  62 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9241852Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9241977Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9242125Z  63 โ”‚     if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl);
2026-10-24T02:58:54.9242242Z     ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9242448Z     ยท                                                              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9242529Z  64 โ”‚   }, [playbackUrl, resolvedUrl]);
2026-10-24T02:58:54.9242579Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9243165Z   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-24T02:58:54.9243478Z   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-24T02:58:54.9243481Z
2026-10-24T02:58:54.9243729Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9243907Z      โ•ญโ”€[apps/mobile/src/components/ProjectFavicon.tsx:159:5]
2026-10-24T02:58:54.9244129Z  154 โ”‚   const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
2026-10-24T02:58:54.9244197Z  155 โ”‚   useLayoutEffect(() => {
2026-10-24T02:58:54.9244273Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9244402Z      ยท          โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9244488Z  156 โ”‚     if (faviconRequest === null) return;
2026-10-24T02:58:54.9244538Z  157 โ”‚
2026-10-24T02:58:54.9244668Z  158 โ”‚     const endRequest = beginProjectFaviconRequest(faviconRequest);
2026-10-24T02:58:54.9244761Z  159 โ”‚     setActiveFaviconRequest(faviconRequest);
2026-10-24T02:58:54.9244850Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9245015Z      ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9245088Z  160 โ”‚     return endRequest;
2026-10-24T02:58:54.9245141Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9245723Z   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-24T02:58:54.9246038Z   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-24T02:58:54.9246040Z
2026-10-24T02:58:54.9246229Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T02:58:54.9246383Z     โ•ญโ”€[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15]
2026-10-24T02:58:54.9246451Z  71 โ”‚             <Pressable
2026-10-24T02:58:54.9246516Z  72 โ”‚               key={index}
2026-10-24T02:58:54.9246597Z     ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9246680Z  73 โ”‚               accessibilityRole="button"
2026-10-24T02:58:54.9246730Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9246872Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T02:58:54.9246875Z
2026-10-24T02:58:54.9247119Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9247270Z      โ•ญโ”€[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
2026-10-24T02:58:54.9247434Z  112 โ”‚   const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
2026-10-24T02:58:54.9247499Z  113 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9247574Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9247701Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9247861Z  114 โ”‚     if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
2026-10-24T02:58:54.9247923Z  115 โ”‚       return;
2026-10-24T02:58:54.9247976Z  116 โ”‚     }
2026-10-24T02:58:54.9248092Z  117 โ”‚     setEntry({ key: input.targetKey, location: candidate });
2026-10-24T02:58:54.9248161Z      ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T02:58:54.9248325Z      ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9248443Z  118 โ”‚   }, [candidate, entry.key, entry.location, input.targetKey]);
2026-10-24T02:58:54.9248494Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9249125Z   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-24T02:58:54.9249465Z   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-24T02:58:54.9249468Z
2026-10-24T02:58:54.9249716Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9249904Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
2026-10-24T02:58:54.9249956Z  638 โ”‚
2026-10-24T02:58:54.9250019Z  639 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9250086Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9250215Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9250324Z  640 โ”‚     if (pendingLaunchEntry.key === launchTargetKey) {
2026-10-24T02:58:54.9250384Z  641 โ”‚       return;
2026-10-24T02:58:54.9250437Z  642 โ”‚     }
2026-10-24T02:58:54.9250508Z  643 โ”‚     setPendingLaunchEntry({
2026-10-24T02:58:54.9250593Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9250761Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9250830Z  644 โ”‚       key: launchTargetKey,
2026-10-24T02:58:54.9250879Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9251466Z   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-24T02:58:54.9251780Z   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-24T02:58:54.9251783Z
2026-10-24T02:58:54.9252027Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9252191Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
2026-10-24T02:58:54.9252241Z  648 โ”‚
2026-10-24T02:58:54.9252306Z  649 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9252373Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9252501Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9252615Z  650 โ”‚     if (initialAttachGridEntry.key === launchTargetKey) {
2026-10-24T02:58:54.9252676Z  651 โ”‚       return;
2026-10-24T02:58:54.9252730Z  652 โ”‚     }
2026-10-24T02:58:54.9252807Z  653 โ”‚     setInitialAttachGridEntry({
2026-10-24T02:58:54.9252898Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9253064Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9253134Z  654 โ”‚       key: launchTargetKey,
2026-10-24T02:58:54.9253184Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9253762Z   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-24T02:58:54.9254122Z   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-24T02:58:54.9254155Z
2026-10-24T02:58:54.9254400Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T02:58:54.9254563Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
2026-10-24T02:58:54.9254616Z  743 โ”‚
2026-10-24T02:58:54.9254678Z  744 โ”‚   useEffect(() => {
2026-10-24T02:58:54.9254746Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9254870Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T02:58:54.9254970Z  745 โ”‚     if (!routeEnvironmentId || !routeThreadId) {
2026-10-24T02:58:54.9255036Z  746 โ”‚       setLastGridSize({
2026-10-24T02:58:54.9255120Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9255286Z      ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T02:58:54.9255366Z  747 โ”‚         cols: DEFAULT_TERMINAL_COLS,
2026-10-24T02:58:54.9255415Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9256000Z   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-24T02:58:54.9256313Z   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-24T02:58:54.9256315Z
2026-10-24T02:58:54.9256515Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9256684Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
2026-10-24T02:58:54.9256738Z  537 โ”‚     });
2026-10-24T02:58:54.9256862Z  538 โ”‚   }, [terminal.buffer, terminal.buffer.length, terminalKey]);
2026-10-24T02:58:54.9256968Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9257209Z      ยท                                   โ•ฐโ”€โ”€ Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
2026-10-24T02:58:54.9257368Z  539 โ”‚   const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
2026-10-24T02:58:54.9257418Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9257753Z   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-24T02:58:54.9258086Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9258089Z
2026-10-24T02:58:54.9258287Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9258449Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
2026-10-24T02:58:54.9258545Z  708 โ”‚     sentInitialInputKeyRef.current = null;
2026-10-24T02:58:54.9258610Z  709 โ”‚   }, [terminalKey]);
2026-10-24T02:58:54.9258685Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9258824Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-24T02:58:54.9258875Z  710 โ”‚
2026-10-24T02:58:54.9258925Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9259215Z   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-24T02:58:54.9259659Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9259661Z
2026-10-24T02:58:54.9259888Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T02:58:54.9260056Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
2026-10-24T02:58:54.9260111Z  799 โ”‚     };
2026-10-24T02:58:54.9260284Z  800 โ”‚   }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
2026-10-24T02:58:54.9260461Z      ยท                                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9260693Z      ยท                                                                โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-24T02:58:54.9260898Z      ยท                                                                โ•ฐโ”€โ”€ Unnecessary dependency `terminal.lifecycleVersion`
2026-10-24T02:58:54.9260949Z  801 โ”‚
2026-10-24T02:58:54.9260998Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9261280Z   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-24T02:58:54.9261584Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T02:58:54.9261586Z
2026-10-24T02:58:54.9261733Z   โš  react(refs): Cannot access refs during render
2026-10-24T02:58:54.9261897Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
2026-10-24T02:58:54.9261950Z  792 โ”‚   }
2026-10-24T02:58:54.9262056Z  793 โ”‚   const pasteSession = pasteSessionRef.current;
2026-10-24T02:58:54.9262166Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9262325Z      ยท                                   โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T02:58:54.9262375Z  794 โ”‚
2026-10-24T02:58:54.9262425Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T02:58:54.9262958Z   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-24T02:58:54.9263378Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T02:58:54.9263381Z
2026-10-24T02:58:54.9263462Z Found 0 errors and 362 warnings in 5407 files (5.2s, 8 threads)
2026-10-24T02:58:54.9689199Z Post job cleanup.
2026-10-24T02:58:55.0291556Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-24T02:58:55.0359461Z Post job cleanup.
2026-10-24T02:58:55.0370895Z ##[start-action display=Cache full pnpm store;id=__f6ac6304-82d7-4d9a-8e03-922c651584ec.__actions_cache]
2026-10-24T02:58:55.0975793Z Post job cleanup.
2026-10-24T02:58:55.1621187Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache.
2026-10-24T02:58:55.1653262Z ##[end-action id=__f6ac6304-82d7-4d9a-8e03-922c651584ec.__actions_cache;outcome=success;conclusion=success;duration_ms=128]
2026-10-24T02:58:55.1654812Z ##[start-action display=Cache Vite+;id=__f6ac6304-82d7-4d9a-8e03-922c651584ec.vp_cache]
2026-10-24T02:58:55.1673873Z Post job cleanup.
2026-10-24T02:58:55.2284423Z 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-24T02:58:55.2317445Z ##[end-action id=__f6ac6304-82d7-4d9a-8e03-922c651584ec.vp_cache;outcome=success;conclusion=success;duration_ms=66]
2026-10-24T02:58:55.2360933Z Post job cleanup.
2026-10-24T02:58:55.2751114Z [command]/usr/local/bin/git version
2026-10-24T02:58:55.2777659Z git version 2.55.0
2026-10-24T02:58:55.2794135Z Temporarily overriding HOME='/home/runner/_work/_temp/2f9ebf18-3e72-445f-be97-a50f417dbf4f' before making global git config changes
2026-10-24T02:58:55.2794499Z Adding repository directory to the temporary git global config as a safe directory
2026-10-24T02:58:55.2796917Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-24T02:58:55.2818223Z Removing SSH command configuration
2026-10-24T02:58:55.2821380Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-24T02:58:55.2846585Z [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-24T02:58:55.2968649Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-24T02:58:55.2988498Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-24T02:58:55.3028506Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-24T02:58:55.3044595Z ##[group]Run '/job_completed.sh'
2026-10-24T02:58:55.3051532Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-24T02:58:55.3051697Z env:
2026-10-24T02:58:55.3051810Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 5307
2026-10-24T02:58:55.3051964Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 407
2026-10-24T02:58:55.3052104Z   BLACKSMITH_CHECK_RUN_ID: 120760135878
2026-10-24T02:58:55.3052240Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-24T02:58:55.3052378Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-24T02:58:55.3052504Z ##[endgroup]
2026-10-24T02:58:55.3121466Z Docker container cache not activated, skipping hash computation.
2026-10-24T02:58:55.3364893Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-24T02:58:55.3404647Z Cleaning up orphan processes