GitHub check

256 KB of 604 KB loaded Download the full log (604 KB)
348 KB of earlier output not loaded
-10-24T20:31:55.8645106Z  1054 โ”‚   const floatingControlCoverage = useSharedValue(
      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                    โ•ฐโ”€โ”€ `floatingControlCoverage` originates here
 1055 โ”‚     showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
 1056 โ”‚   );
 1057 โ”‚   useEffect(() => {
 1058 โ”‚     floatingControlCoverage.value = withTiming(
      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                โ•ฐโ”€โ”€ `floatingControlCoverage` cannot be modified
 1059 โ”‚       showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
      โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): This value cannot be modified
      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1076:7]
 1066 โ”‚   const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
 1067 โ”‚   const combinedContentInsetEndAdjustment = useSharedValue(
      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                         โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` originates here
 1068 โ”‚     Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
 1069 โ”‚   );
 1070 โ”‚   useAnimatedReaction(
 1071 โ”‚     () =>
 1072 โ”‚       contentInsetEndAdjustment.value +
 1073 โ”‚       floatingControlCoverage.value +
 1074 โ”‚       (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
 1075 โ”‚     (value) => {
 1076 โ”‚       combinedContentInsetEndAdjustment.value = value;
      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                       โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` cannot be modified
 1077 โ”‚     },
      โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
 37 โ”‚   const [initialized, setInitialized] = useState(false);
 38 โ”‚   useLayoutEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท          โ•ฐโ”€โ”€ This is the containing effect
 39 โ”‚     reset();
 40 โ”‚     setInitialized(true);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 41 โ”‚   }, [reset]);
    โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
 88 โ”‚
 89 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 90 โ”‚     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
 91 โ”‚     const branchName = initialProjectRef.branch;
 92 โ”‚     let active = true;
 93 โ”‚     setPendingCheckouts((count) => count + 1);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 94 โ”‚     // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
    โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:111:5]
 107 โ”‚   );
 108 โ”‚   const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ `separationProgress` originates here
 109 โ”‚
 110 โ”‚   useEffect(() => {
 111 โ”‚     separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ `separationProgress` cannot be modified
 112 โ”‚   }, [props.showScrollToEnd, separationProgress]);
     โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
 128 โ”‚   // and repeatedly retargets the animation as it grows.
 129 โ”‚   const capsuleWidth = useSharedValue<number | null>(null);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ `capsuleWidth` originates here
 130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
 131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
 132 โ”‚     const width = event.nativeEvent.layout.width;
 133 โ”‚     if (width === measuredWidthRef.current) {
 134 โ”‚       return;
 135 โ”‚     }
 136 โ”‚     const first = measuredWidthRef.current === null;
 137 โ”‚     measuredWidthRef.current = width;
 138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท           โ•ฐโ”€โ”€ `capsuleWidth` cannot be modified
 139 โ”‚   };
     โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
 128 โ”‚   // and repeatedly retargets the animation as it grows.
 129 โ”‚   const capsuleWidth = useSharedValue<number | null>(null);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ `capsuleWidth` originates here
 130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
 131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
 132 โ”‚     const width = event.nativeEvent.layout.width;
 133 โ”‚     if (width === measuredWidthRef.current) {
 134 โ”‚       return;
 135 โ”‚     }
 136 โ”‚     const first = measuredWidthRef.current === null;
 137 โ”‚     measuredWidthRef.current = width;
 138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
 139 โ”‚   };
 140 โ”‚   const hasStatus = props.status !== null;
 141 โ”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
 142 โ”‚   useEffect(() => {
 143 โ”‚     if (!hasStatus) {
 144 โ”‚       measuredWidthRef.current = null;
 145 โ”‚       capsuleWidth.value = null;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ `capsuleWidth` cannot be modified
 146 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): Cannot modify local variables after render completes
     โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
 141 โ”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
 142 โ”‚   useEffect(() => {
     ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `capsuleWidth` after render
 143 โ”‚     if (!hasStatus) {
 144 โ”‚       measuredWidthRef.current = null;
 145 โ”‚       capsuleWidth.value = null;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ This modifies `capsuleWidth`
 146 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): Cannot modify local variables after render completes
     โ•ญโ”€[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
 130 โ”‚   const measuredWidthRef = useRef<number | null>(null);
 131 โ”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
     ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                            โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `capsuleWidth` after render
 132 โ”‚     const width = event.nativeEvent.layout.width;
 133 โ”‚     if (width === measuredWidthRef.current) {
 134 โ”‚       return;
 135 โ”‚     }
 136 โ”‚     const first = measuredWidthRef.current === null;
 137 โ”‚     measuredWidthRef.current = width;
 138 โ”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท           โ•ฐโ”€โ”€ This modifies `capsuleWidth`
 139 โ”‚   };
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'.
       โ•ญโ”€[apps/server/src/orchestration-v2/Orchestrator.ts:12395:7]
 12394 โ”‚
 12395 โ”‚ const layerUnavailable: Layer.Layer<OrchestratorV2> = Layer.succeed(
       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
       ยท               โ•ฐโ”€โ”€ 'layerUnavailable' is declared here
 12396 โ”‚   OrchestratorV2,
       โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
 259 โ”‚     .join("|");
 260 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 261 โ”‚     stop();
     ยท     โ”€โ”€โ”ฌโ”€
     ยท       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 262 โ”‚   }, [orderVersion]);
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
 260 โ”‚   useEffect(() => {
 261 โ”‚     stop();
     ยท     โ”€โ”€โ”ฌโ”€
     ยท       โ•ฐโ”€โ”€ Missing dependency `stop`
 262 โ”‚   }, [orderVersion]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ Unnecessary dependency `orderVersion`
 263 โ”‚   useEffect(
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(refs): Cannot access refs during render
    โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
 95 โ”‚   const latest = useRef(props);
 96 โ”‚   latest.current = props;
    ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
    ยท      โ•ฐโ”€โ”€ This value is a ref
 97 โ”‚   const gesture = useMemo(
    โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
 103 โ”‚         .runOnJS(true)
 104 โ”‚         .onStart(() => latest.current.onStart())
     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                 โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
 105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
 104 โ”‚         .onStart(() => latest.current.onStart())
 105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
     ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                             โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
 106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
 105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
 106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
     ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                          โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
 107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
 106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
 107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
     ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                            โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
 108 โ”‚     [props.disabled],
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
 248 โ”‚   const latest = useRef({ rows, planners, moveThread });
 249 โ”‚   latest.current = { rows, planners, moveThread };
     ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
     ยท      โ•ฐโ”€โ”€ This value is a ref
 250 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
 246 โ”‚   const [preview, setPreview] = useState<Drag | null>(null);
 247 โ”‚   const translateY = useRef(new Animated.Value(0)).current;
     ยท                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
 248 โ”‚   const latest = useRef({ rows, planners, moveThread });
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(purity): Cannot call impure function during render
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
 323 โ”‚     update(0);
 324 โ”‚     let last = performance.now();
     ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                        โ•ฐโ”€โ”€ Cannot call impure function
 325 โ”‚     const tick = () => {
     โ•ฐโ”€โ”€โ”€โ”€
  help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  โš  react(capitalized-calls): Capitalized function called without JSX
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
  98 โ”‚     () =>
  99 โ”‚       Gesture.Pan()
     ยท               โ”€โ”ฌโ”€
     ยท                โ•ฐโ”€โ”€ `Pan` may be a component
 100 โ”‚         .enabled(!props.disabled)
     โ•ฐโ”€โ”€โ”€โ”€
  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
  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

  โš  react(memo-dependencies): Found missing memoization dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
 103 โ”‚         .runOnJS(true)
 104 โ”‚         .onStart(() => latest.current.onStart())
     ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
     ยท                           โ•ฐโ”€โ”€ 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
 105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
 106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
 107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
 108 โ”‚     [props.disabled],
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 109 โ”‚   );
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(purity): Cannot call impure function during render
     โ•ญโ”€[apps/web/src/hooks/useThreadActions.ts:821:56]
 820 โ”‚     const resolved = resolveThreadTarget(target);
 821 โ”‚     if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
     ยท                                                        โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                                             โ•ฐโ”€โ”€ Cannot call impure function
 822 โ”‚       return AsyncResult.failure(
     โ•ฐโ”€โ”€โ”€โ”€
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  โš  react(purity): Cannot call impure function during render
     โ•ญโ”€[apps/web/src/hooks/useThreadActions.ts:709:46]
 708 โ”‚     const wokeAt = resolved
 709 โ”‚       ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
     ยท                                              โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                                   โ•ฐโ”€โ”€ Cannot call impure function
 710 โ”‚       : null;
     โ•ฐโ”€โ”€โ”€โ”€
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  โš  eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
    โ•ญโ”€[apps/server/src/scheduledTasks/Schedule.ts:79:10]
 78 โ”‚
 79 โ”‚ function describeSchedule(schedule: ScheduledTaskSchedule): string {
    ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท                  โ•ฐโ”€โ”€ 'describeSchedule' is declared here
 80 โ”‚   if (schedule.type === "webhook") return "On webhook";
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  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.
     โ•ญโ”€[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
 520 โ”‚                 })).delivery;
 521 โ”‚ โ•ญโ”€โ–ถ             while (delivery.outcome === "accepted") {
 522 โ”‚ โ”‚                 yield* Effect.yieldNow;
 523 โ”‚ โ”‚                 delivery = (yield* service.getWebhookDelivery({
 524 โ”‚ โ”‚                   id: task.id,
 525 โ”‚ โ”‚                   deliveryId: deliveryId!,
 526 โ”‚ โ”‚                 })).delivery;
 527 โ”‚ โ•ฐโ”€โ–ถ             }
 528 โ”‚                 assert.equal(delivery.outcome, "dispatch_failed");
     โ•ฐโ”€โ”€โ”€โ”€

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7]
 355 โ”‚   }, [cancelledIncomingShareId, navigation, props.incomingShareId]);
 356 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 357 โ”‚     if (!isReturningToProjectPicker) {
 358 โ”‚       return;
 359 โ”‚     }
 360 โ”‚     if (requestedInitialProjectAvailable) {
 361 โ”‚       setIsReturningToProjectPicker(false);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 362 โ”‚       return;
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9]
 447 โ”‚
 448 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 449 โ”‚     if (props.pendingTaskId || props.draftId) {
 450 โ”‚       return;
 451 โ”‚     }
 452 โ”‚     if (lastInitialProjectRefRef.current !== props.initialProjectRef) {
 453 โ”‚       lastInitialProjectRefRef.current = props.initialProjectRef;
 454 โ”‚       appliedInitialProjectKeyRef.current = null;
 455 โ”‚     }
 456 โ”‚     const initialEnvironmentId = props.initialProjectRef?.environmentId;
 457 โ”‚     const initialProjectId = props.initialProjectRef?.projectId;
 458 โ”‚     if (initialEnvironmentId && initialProjectId) {
 459 โ”‚       const directProject =
 460 โ”‚         projects.find(
 461 โ”‚           (project) =>
 462 โ”‚             project.environmentId === initialEnvironmentId && project.id === initialProjectId,
 463 โ”‚         ) ?? null;
 464 โ”‚
 465 โ”‚       if (directProject) {
 466 โ”‚         // Apply the route's project once. Re-applying on every change would
 467 โ”‚         // instantly revert environment/project switches made in the picker.
 468 โ”‚         const directProjectKey = `${directProject.environmentId}:${directProject.id}`;
 469 โ”‚         if (appliedInitialProjectKeyRef.current === directProjectKey) {
 470 โ”‚           return;
 471 โ”‚         }
 472 โ”‚         if (props.initialProjectRef?.branch) {
 473 โ”‚           if (
 474 โ”‚             selectedProject?.environmentId !== directProject.environmentId ||
 475 โ”‚             selectedProject.id !== directProject.id
 476 โ”‚           ) {
 477 โ”‚             setProject(directProject);
 478 โ”‚             return;
 479 โ”‚           }
 480 โ”‚           if (!flow.draftKey) return;
 481 โ”‚           // The route completes checkout before mounting this composer. Local
 482 โ”‚           // mode reuses an existing worktree; worktree mode would create another.
 483 โ”‚           updateComposerDraftSettings(flow.draftKey, {
 484 โ”‚             workspaceSelection: {
 485 โ”‚               mode: "local",
 486 โ”‚               branch: props.initialProjectRef.branch,
 487 โ”‚               worktreePath: props.initialProjectRef.worktreePath ?? null,
 488 โ”‚               startFromOrigin: false,
 489 โ”‚             },
 490 โ”‚           });
 491 โ”‚         }
 492 โ”‚         appliedInitialProjectKeyRef.current = directProjectKey;
 493 โ”‚         if (
 494 โ”‚           selectedProject?.environmentId === directProject.environmentId &&
 495 โ”‚           selectedProject.id === directProject.id
 496 โ”‚         ) {
 497 โ”‚           return;
 498 โ”‚         }
 499 โ”‚         setProject(directProject);
 500 โ”‚         return;
 501 โ”‚       }
 502 โ”‚
 503 โ”‚       if (projects.length > 0) {
 504 โ”‚         setIsReturningToProjectPicker(true);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 505 โ”‚       }
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5]
 545 โ”‚
 546 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 547 โ”‚     const shareId = props.incomingShareId;
 548 โ”‚     const draftKey = flow.draftKey;
 549 โ”‚     const destinationProject = selectedProject;
 550 โ”‚     const initialEnvironmentId = props.initialProjectRef?.environmentId;
 551 โ”‚     const initialProjectId = props.initialProjectRef?.projectId;
 552 โ”‚     const selectedProjectMatchesRoute =
 553 โ”‚       !initialEnvironmentId ||
 554 โ”‚       !initialProjectId ||
 555 โ”‚       (destinationProject?.environmentId === initialEnvironmentId &&
 556 โ”‚         destinationProject.id === initialProjectId);
 557 โ”‚     if (
 558 โ”‚       !shareId ||
 559 โ”‚       !draftKey ||
 560 โ”‚       !destinationProject ||
 561 โ”‚       !selectedProjectMatchesRoute ||
 562 โ”‚       cancelledIncomingShareId === shareId
 563 โ”‚     ) {
 564 โ”‚       return;
 565 โ”‚     }
 566 โ”‚     const importKey = `${shareId}:${draftKey}`;
 567 โ”‚     if (
 568 โ”‚       startedShareImportKeyRef.current === importKey ||
 569 โ”‚       cancellingShareImportKeyRef.current === importKey
 570 โ”‚     ) {
 571 โ”‚       return;
 572 โ”‚     }
 573 โ”‚
 574 โ”‚     if (!incomingShare) {
 575 โ”‚       if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
 576 โ”‚         alertedUnavailableIncomingShareIdRef.current = shareId;
 577 โ”‚         Dialog.alert(
 578 โ”‚           "Shared content unavailable",
 579 โ”‚           "The shared content is no longer in the inbox. You can continue editing this task draft.",
 580 โ”‚         );
 581 โ”‚       }
 582 โ”‚       return;
 583 โ”‚     }
 584 โ”‚
 585 โ”‚     if (
 586 โ”‚       incomingShare.attachments.some((attachment) => attachment.type === "file") &&
 587 โ”‚       selectedEnvironmentServerConfig === null
 588 โ”‚     ) {
 589 โ”‚       return;
 590 โ”‚     }
 591 โ”‚
 592 โ”‚     if (alertedUnavailableIncomingShareIdRef.current === shareId) {
 593 โ”‚       alertedUnavailableIncomingShareIdRef.current = null;
 594 โ”‚     }
 595 โ”‚     startedShareImportKeyRef.current = importKey;
 596 โ”‚     const draftBackup =
 597 โ”‚       shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
 598 โ”‚     shareImportDraftBackupRef.current.set(importKey, draftBackup);
 599 โ”‚     const importToken = Symbol(importKey);
 600 โ”‚     let didReserveShare = false;
 601 โ”‚     let didConsumeShare = false;
 602 โ”‚     let needsDraftRestore = false;
 603 โ”‚     activeShareImportTokenRef.current = importToken;
 604 โ”‚     setImportingShareKey(importKey);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 605 โ”‚     void (async () => {
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5]
 523 โ”‚     props.initialProjectRef,
 524 โ”‚     props.incomingShareId,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Unnecessary dependency `props.incomingShareId`
 525 โ”‚     props.pendingTaskId,
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5]
 542 โ”‚     loadedBranchesProjectKeyRef.current = projectKey;
 543 โ”‚     flow.loadBranches();
     ยท     โ”€โ”€โ”ฌโ”€
     ยท       โ•ฐโ”€โ”€ Missing dependency `flow`
 544 โ”‚   }, [flow.loadBranches, selectedProject]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Overly precise dependency `flow.loadBranches`, use `flow` instead
 545 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
 765 โ”‚     flow.draftKey,
 766 โ”‚     hasImportedIncomingShare,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Unnecessary dependency `hasImportedIncomingShare`
 767 โ”‚     incomingShare,
 768 โ”‚     isIncomingShareInboxLoading,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `isIncomingShareInboxLoading`
 769 โ”‚     isIncomingShareUnavailable,
 770 โ”‚     props.incomingShareId,
 771 โ”‚     props.initialProjectRef?.environmentId,
 772 โ”‚     props.initialProjectRef?.projectId,
 773 โ”‚     releaseShareReservation,
 774 โ”‚     reserveShare,
 775 โ”‚     selectedEnvironmentServerConfig,
 776 โ”‚     selectedProject,
 777 โ”‚     shareImportAttempt,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ Unnecessary dependency `shareImportAttempt`
 778 โ”‚   ]);
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  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.
     โ•ญโ”€[apps/server/src/assets/AssetAccess.test.ts:975:35]
 974 โ”‚       // Every client and server release spells the resource this way on the wire.
 975 โ”‚       const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({
     ยท                                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 976 โ”‚         resource: { _tag: "github-media", cwd: "/repo", url },
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
      โ•ญโ”€[apps/server/src/assets/AssetAccess.test.ts:1012:32]
 1011 โ”‚         expect(error._tag).toBe("AssetGitHubMediaUrlValidationError");
 1012 โ”‚         const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error);
      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1013 โ”‚         expect(encoded).not.toContain(url);
      โ•ฐโ”€โ”€โ”€โ”€

  โš  react(purity): Cannot call impure function during render
     โ•ญโ”€[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58]
 177 โ”‚   if (snoozeClockState.shell !== activeThreadShell) {
 178 โ”‚     setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() });
     ยท                                                          โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                                               โ•ฐโ”€โ”€ Cannot call impure function
 179 โ”‚   }
     โ•ฐโ”€โ”€โ”€โ”€
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  โš  eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/server/src/orchestration-v2/EffectWorker.ts:914:7]
 913 โ”‚
 914 โ”‚ const layerDaemon: Layer.Layer<never, never, OrchestrationEffectWorkerV2> = Layer.effectDiscard(
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ 'layerDaemon' is declared here
 915 โ”‚   runDaemon.pipe(Effect.forkScoped),
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
     โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70]
 554 โ”‚           assert.deepStrictEqual(
 555 โ”‚             (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest),
     ยท                                                                      โ”ฌ
     ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
 556 โ”‚             [
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
      โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70]
 1154 โ”‚           assert.deepStrictEqual(
 1155 โ”‚             (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest),
      ยท                                                                      โ”ฌ
      ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
 1156 โ”‚             [
      โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
    โ•ญโ”€[apps/mobile/src/state/thread-order.ts:29:7]
 28 โ”‚     getPendingThreadOrder();
 29 โ”‚   }, [nowMinute, snoozeWakeTick]);
    ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท           โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
    ยท           โ•ฐโ”€โ”€ Unnecessary dependency `nowMinute`
 30 โ”‚   return pending;
    โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
    โ•ญโ”€[apps/mobile/src/state/use-model-option-memory.ts:21:7]
 20 โ”‚     [instanceId]: {
 21 โ”‚       ...(state[instanceId] ?? {}),
    ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 22 โ”‚       [model]: options,
    โ•ฐโ”€โ”€โ”€โ”€
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
 55 โ”‚
 56 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 57 โ”‚     setDecodedSize(null);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 58 โ”‚   }, [props.sourceKey]);
    โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
 59 โ”‚
 60 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 61 โ”‚     setFailedUri(null);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
    ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 62 โ”‚   }, [props.uri]);
    โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
   โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
 6 โ”‚ import { parse, SvgAst, type JsxAST } from "react-native-svg";
 7 โ”‚ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
   ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
   ยท                  โ•ฐโ”€โ”€ 'ActivityIndicator' is imported here
 8 โ”‚
   โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
    โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
 57 โ”‚     setDecodedSize(null);
 58 โ”‚   }, [props.sourceKey]);
    ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท              โ•ฐโ”€โ”€ Unnecessary dependency `props.sourceKey`
 59 โ”‚
    โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
    โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
 61 โ”‚     setFailedUri(null);
 62 โ”‚   }, [props.uri]);
    ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท           โ•ฐโ”€โ”€ Unnecessary dependency `props.uri`
 63 โ”‚
    โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
    โ•ญโ”€[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
 14 โ”‚
 15 โ”‚ const legacyCredentials = {
    ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท               โ•ฐโ”€โ”€ 'legacyCredentials' is declared here
 16 โ”‚   version: 1 as const,
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
 150 โ”‚
 151 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 152 โ”‚     if (!controlledSelectedPath) {
 153 โ”‚       return;
 154 โ”‚     }
 155 โ”‚     setExpandedPaths((current) => {
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 156 โ”‚       const ancestors = ancestorPaths(controlledSelectedPath);
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts.
    โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:12:14]
 11 โ”‚       addEventListener(_type: string, listener: (event: { data: string }) => void) {
 12 โ”‚         this.onmessage = listener;
    ยท              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 13 โ”‚       }
    โ•ฐโ”€โ”€โ”€โ”€
  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on<event>` replaces any previously registered handler.

  โš  typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
    โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:16:9]
 15 โ”‚       constructor() {
 16 โ”‚         source = this;
    ยท         โ”€โ”€โ”€โ”€โ”€โ”€
 17 โ”‚       }
    โ•ฐโ”€โ”€โ”€โ”€
  help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well.

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
      โ•ญโ”€[apps/mobile/src/state/use-thread-outbox-drain.ts:1321:5]
 1320 โ”‚     queuedMessagesByThreadKey,
 1321 โ”‚     retryTick,
      ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
      ยท         โ•ฐโ”€โ”€ Unnecessary dependency `retryTick`
 1322 โ”‚     restoreQueuedMessage,
      โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(purity): Cannot call impure function during render
     โ•ญโ”€[apps/web/src/components/CustomSnoozeDialog.tsx:140:58]
 139 โ”‚                             {...(weekStartsOn === undefined ? {} : { weekStartsOn })}
 140 โ”‚                             disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }}
     ยท                                                          โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                                               โ•ฐโ”€โ”€ Cannot call impure function
 141 โ”‚                             onSelect={(selected) => {
     โ•ฐโ”€โ”€โ”€โ”€
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/state/use-vcs-action-state.ts:86:5]
 83 โ”‚   const [nowMs, setNowMs] = useState(() => Date.now());
 84 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 85 โ”‚     if (!actionState.isRunning) return;
 86 โ”‚     setNowMs(Date.now());
    ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 87 โ”‚     const interval = setInterval(() => setNowMs(Date.now()), 1000);
    โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
      โ•ญโ”€[apps/mobile/src/state/use-composer-drafts.ts:1022:15]
 1021 โ”‚             instanceId,
 1022 โ”‚             { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models },
      ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1023 โ”‚           ]),
      โ•ฐโ”€โ”€โ”€โ”€
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  โš  typescript(no-extraneous-class): Unexpected class with only a constructor.
     โ•ญโ”€[apps/desktop/src/preview/Manager.test.ts:158:18]
 157 โ”‚       BrowserWindow: browserWindowConstructor,
 158 โ”‚ โ•ญโ”€โ–ถ   ClipboardItem: class {
 159 โ”‚ โ”‚       constructor(data: Record<string, unknown>) {
 160 โ”‚ โ”‚         clipboardItemConstructor(data);
 161 โ”‚ โ”‚       }
 162 โ”‚ โ•ฐโ”€โ–ถ   },
 163 โ”‚       clipboard: {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Try replacing this class with a standalone function or deleting it entirely

  โš  eslint(no-empty-pattern): Empty object binding pattern
    โ•ญโ”€[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
 52 โ”‚
 53 โ”‚   for (const {} of [
    ยท              โ”€โ”€
 54 โ”‚     { healthy: true },
    โ•ฐโ”€โ”€โ”€โ”€
  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.

  โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
     โ•ญโ”€[scripts/lib/cli-external-packages.test.ts:114:11]
 113 โ”‚         const declared = {
 114 โ”‚           ...(manifest.dependencies ?? {}),
     ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 115 โ”‚           ...(manifest.optionalDependencies ?? {}),
     โ•ฐโ”€โ”€โ”€โ”€
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
     โ•ญโ”€[scripts/lib/cli-external-packages.test.ts:115:11]
 114 โ”‚           ...(manifest.dependencies ?? {}),
 115 โ”‚           ...(manifest.optionalDependencies ?? {}),
     ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 116 โ”‚           ...(manifest.peerDependencies ?? {}),
     โ•ฐโ”€โ”€โ”€โ”€
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
     โ•ญโ”€[scripts/lib/cli-external-packages.test.ts:116:11]
 115 โ”‚           ...(manifest.optionalDependencies ?? {}),
 116 โ”‚           ...(manifest.peerDependencies ?? {}),
     ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 117 โ”‚         };
     โ•ฐโ”€โ”€โ”€โ”€
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  โš  eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
    โ•ญโ”€[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
 60 โ”‚ ) {
 61 โ”‚   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
    ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท               โ•ฐโ”€โ”€ 'useDragRegion' is declared here
 62 โ”‚   const isInline = props.mode === "inline";
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
      โ•ญโ”€[packages/provider-opencode/src/server/adapter.ts:3755:7]
 3754 โ”‚
 3755 โ”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, OpenCodeAdapterV2DriverEnv> =
      ยท       โ”€โ”€โ”ฌโ”€โ”€
      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
 3756 โ”‚   Layer.effect(
      โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  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.
     โ•ญโ”€[apps/server/src/background/HostPowerMonitor.test.ts:133:11]
 132 โ”‚               const monitor = yield* HostPowerMonitor.HostPowerMonitor;
 133 โ”‚ โ•ญโ”€โ–ถ           for (
 134 โ”‚ โ”‚               let attempt = 0;
 135 โ”‚ โ”‚               attempt < 100 && (yield* monitor.snapshot).onBattery !== "true";
 136 โ”‚ โ”‚               attempt += 1
 137 โ”‚ โ”‚             ) {
 138 โ”‚ โ”‚               yield* Effect.yieldNow;
 139 โ”‚ โ•ฐโ”€โ–ถ           }
 140 โ”‚               expect((yield* monitor.snapshot).onBattery).toBe("true");
     โ•ฐโ”€โ”€โ”€โ”€

  โš  unicorn(require-module-specifiers): Empty import specifier is not allowed
    โ•ญโ”€[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13]
 14 โ”‚ } from "@t3tools/contracts";
 15 โ”‚ import type {} from "@t3tools/contracts";
    ยท             โ”€โ”€
 16 โ”‚
    โ•ฐโ”€โ”€โ”€โ”€
  help: Remove empty braces

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:333:7]
 328 โ”‚   };
 329 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 330 โ”‚     if (!guidesEnabled && section === "guide") {
 331 โ”‚       requestedSection.current = "overview";
 332 โ”‚       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
 333 โ”‚       setSection("overview");
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 334 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found missing effect dependencies
     โ•ญโ”€[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:6]
 330 โ”‚     if (!guidesEnabled && section === "guide") {
 331 โ”‚       requestedSection.current = "overview";
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Missing dependency `requestedSection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 332 โ”‚       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€           โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ”‚                          โ•ฐโ”€โ”€ Missing dependency `scrollOffsets`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
     ยท                โ•ฐโ”€โ”€ Missing dependency `currentScrollOffset`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 333 โ”‚       setSection("overview");
 334 โ”‚     }
 335 โ”‚   }, [guidesEnabled, section, insets.top]);
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                        โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 336 โ”‚   const tabContent = activityContent;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause an effect to fire less often than it should
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found missing effect dependencies
     โ•ญโ”€[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:877:6]
 860 โ”‚     if (
 861 โ”‚       lastSelection.current.path === route.params.path &&
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ Missing dependency `lastSelection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 862 โ”‚       lastSelection.current.id === route.params.fileSelectionId
 863 โ”‚     )
 864 โ”‚       return;
 865 โ”‚     lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId };
 866 โ”‚     if (route.params.focus) navigation.setParams({ focus: undefined });
 867 โ”‚     setJumpPath(route.params.path);
 868 โ”‚     setSelectedRowId(null);
 869 โ”‚     jumpStarted.current = false;
 870 โ”‚     const file = data.files.find((entry) => entry.path === route.params.path);
 871 โ”‚     if (!file || !nativeView.current) return;
     ยท                   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                        โ•ฐโ”€โ”€ Missing dependency `nativeView`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 872 โ”‚     setCollapsedIds((ids) => ids.filter((id) => id !== file.id));
 873 โ”‚     jumpStarted.current = true;
 874 โ”‚     void nativeView.current.scrollToFile(file.id, false).catch(() => {
 875 โ”‚       jumpStarted.current = false;
 876 โ”‚     });
 877 โ”‚   }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]);
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                                    โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 878 โ”‚   const appliedFilter = useRef(filter.hideTestFiles);
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause an effect to fire less often than it should
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used.
    โ•ญโ”€[apps/server/src/checkpointing/Utils.ts:12:10]
 11 โ”‚
 12 โ”‚ function resolveThreadWorkspaceCwd(input: {
    ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท                      โ•ฐโ”€โ”€ 'resolveThreadWorkspaceCwd' is declared here
 13 โ”‚   readonly thread: {
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/server/src/usage/UsageService.ts:169:7]
 168 โ”‚
 169 โ”‚ const layerTest = Layer.succeed(
     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
 170 โ”‚   UsageService,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
      โ•ญโ”€[apps/server/src/serverSettings.test.ts:1741:32]
 1740 โ”‚       const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
 1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
      โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
      โ•ญโ”€[apps/server/src/serverSettings.test.ts:1742:34]
 1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
 1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
      ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1743 โ”‚         Schema.fromJsonString(Schema.Array(ProjectScript)),
      โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
      โ•ญโ”€[apps/server/src/usage/UsageService.test.ts:2615:7]
 2614 โ”‚           let orphanedAt: number | undefined;
 2615 โ”‚ โ•ญโ”€โ–ถ       for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
 2616 โ”‚ โ”‚           const tasks: Array<() => void> = [];
 2617 โ”‚ โ”‚           const dispatcher: Scheduler.SchedulerDispatcher = {
 2618 โ”‚ โ”‚             scheduleTask: (task) => tasks.push(task),
 2619 โ”‚ โ”‚             flush: () => {
 2620 โ”‚ โ”‚               let task: (() => void) | undefined;
 2621 โ”‚ โ”‚               while ((task = tasks.shift()) !== undefined) task();
 2622 โ”‚ โ”‚             },
 2623 โ”‚ โ”‚           };
 2624 โ”‚ โ”‚
 2625 โ”‚ โ”‚           let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
 2626 โ”‚ โ”‚           let requestChecks = 0;
 2627 โ”‚ โ”‚           const scheduler: Scheduler.Scheduler = {
 2628 โ”‚ โ”‚             executionMode: "async",
 2629 โ”‚ โ”‚             makeDispatcher: () => dispatcher,
 2630 โ”‚ โ”‚             shouldYield: (fiber) => {
 2631 โ”‚ โ”‚               if (fiber !== requestFiber) return false;
 2632 โ”‚ โ”‚               requestChecks += 1;
 2633 โ”‚ โ”‚               if (requestChecks !== interruptAt) return false;
 2634 โ”‚ โ”‚               fiber.interruptUnsafe();
 2635 โ”‚ โ”‚               return true;
 2636 โ”‚ โ”‚             },
 2637 โ”‚ โ”‚           };
 2638 โ”‚ โ”‚
 2639 โ”‚ โ”‚           const input: UsageSummaryInput = {
 2640 โ”‚ โ”‚             ...WINDOW,
 2641 โ”‚ โ”‚             sinceDay: UsageDay.make("2026-09-01"),
 2642 โ”‚ โ”‚             untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
 2643 โ”‚ โ”‚           };
 2644 โ”‚ โ”‚           const first = yield* service
 2645 โ”‚ โ”‚             .readSummary(input)
 2646 โ”‚ โ”‚             .pipe(
 2647 โ”‚ โ”‚               Effect.exit,
 2648 โ”‚ โ”‚               Effect.provideService(Scheduler.Scheduler, scheduler),
 2649 โ”‚ โ”‚               Effect.forkChild,
 2650 โ”‚ โ”‚             );
 2651 โ”‚ โ”‚           requestFiber = first;
 2652 โ”‚ โ”‚           yield* Effect.yieldNow;
 2653 โ”‚ โ”‚           dispatcher.flush();
 2654 โ”‚ โ”‚
 2655 โ”‚ โ”‚           const second = yield* service.readSummary(input).pipe(
 2656 โ”‚ โ”‚             Effect.match({
 2657 โ”‚ โ”‚               onFailure: (error) => error.reason,
 2658 โ”‚ โ”‚               onSuccess: () => "success" as const,
 2659 โ”‚ โ”‚             }),
 2660 โ”‚ โ”‚             Effect.provideService(Scheduler.Scheduler, scheduler),
 2661 โ”‚ โ”‚             Effect.forkChild,
 2662 โ”‚ โ”‚           );
 2663 โ”‚ โ”‚           yield* Effect.yieldNow;
 2664 โ”‚ โ”‚           dispatcher.flush();
 2665 โ”‚ โ”‚           const secondExit = second.pollUnsafe();
 2666 โ”‚ โ”‚           if (secondExit === undefined) {
 2667 โ”‚ โ”‚             second.interruptUnsafe();
 2668 โ”‚ โ”‚             orphanedAt = interruptAt;
 2669 โ”‚ โ”‚             break;
 2670 โ”‚ โ”‚           }
 2671 โ”‚ โ”‚           if (Exit.isFailure(secondExit)) {
 2672 โ”‚ โ”‚             assert.fail("the matching request fiber was interrupted");
 2673 โ”‚ โ”‚           }
 2674 โ”‚ โ”‚           assert.strictEqual(secondExit.value, "invalidWindow");
 2675 โ”‚ โ•ฐโ”€โ–ถ       }
 2676 โ”‚
      โ•ฐโ”€โ”€โ”€โ”€

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
    โ•ญโ”€[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15]
 71 โ”‚             <Pressable
 72 โ”‚               key={index}
    ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 73 โ”‚               accessibilityRole="button"
    โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
     โ•ญโ”€[apps/server/src/auth/RpcAuthorization.ts:237:17]
 236 โ”‚ const requiredScopesForSettingsUpdate = (payload: unknown) => {
 237 โ”‚   const input = Schema.decodeUnknownSync(SettingsUpdate)(payload);
     ยท                 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 238 โ”‚   const scopes = requiredScopesForServerSettingsPatch(input.patch);
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
     โ•ญโ”€[apps/server/src/auth/RpcAuthorization.ts:256:26]
 255 โ”‚   if (method === WS_METHODS.assetsCreateUrl) {
 256 โ”‚     const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload);
     ยท                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 257 โ”‚     return [
     โ•ฐโ”€โ”€โ”€โ”€

  โš  eslint(no-empty-pattern): Empty object binding pattern
     โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:186:12]
 185 โ”‚
 186 โ”‚ for (const {} of ["darwin", "linux"] as const) {
     ยท            โ”€โ”€
 187 โ”‚ }
     โ•ฐโ”€โ”€โ”€โ”€
  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.

  โš  eslint(no-empty-pattern): Empty object binding pattern
     โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:189:12]
 188 โ”‚
 189 โ”‚ for (const {} of [
     ยท            โ”€โ”€
 190 โ”‚   { kind: "browser", folderVerb: "none" },
     โ•ฐโ”€โ”€โ”€โ”€
  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.

  โš  eslint(no-empty-pattern): Empty object binding pattern
     โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:311:12]
 310 โ”‚
 311 โ”‚ for (const {} of ["rejected", "spawn-error", "stalled"] as const) {
     ยท            โ”€โ”€
 312 โ”‚ }
     โ•ฐโ”€โ”€โ”€โ”€
  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.

  โš  eslint(no-empty-pattern): Empty object binding pattern
     โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:314:12]
 313 โ”‚
 314 โ”‚ for (const {} of [
     ยท            โ”€โ”€
 315 โ”‚   {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
 638 โ”‚
 639 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 640 โ”‚     if (pendingLaunchEntry.key === launchTargetKey) {
 641 โ”‚       return;
 642 โ”‚     }
 643 โ”‚     setPendingLaunchEntry({
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 644 โ”‚       key: launchTargetKey,
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
 648 โ”‚
 649 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 650 โ”‚     if (initialAttachGridEntry.key === launchTargetKey) {
 651 โ”‚       return;
 652 โ”‚     }
 653 โ”‚     setInitialAttachGridEntry({
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 654 โ”‚       key: launchTargetKey,
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
 743 โ”‚
 744 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 745 โ”‚     if (!routeEnvironmentId || !routeThreadId) {
 746 โ”‚       setLastGridSize({
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 747 โ”‚         cols: DEFAULT_TERMINAL_COLS,
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
 537 โ”‚     });
 538 โ”‚   }, [terminal.buffer, terminal.buffer.length, terminalKey]);
     ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                   โ•ฐโ”€โ”€ Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
 539 โ”‚   const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
 708 โ”‚     sentInitialInputKeyRef.current = null;
 709 โ”‚   }, [terminalKey]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
 710 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
 799 โ”‚     };
 800 โ”‚   }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
     ยท                                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท                                                                โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
     ยท                                                                โ•ฐโ”€โ”€ Unnecessary dependency `terminal.lifecycleVersion`
 801 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
 792 โ”‚   }
 793 โ”‚   const pasteSession = pasteSessionRef.current;
     ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                   โ•ฐโ”€โ”€ Cannot access ref value during render
 794 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
 112 โ”‚   const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
 113 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 114 โ”‚     if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
 115 โ”‚       return;
 116 โ”‚     }
 117 โ”‚     setEntry({ key: input.targetKey, location: candidate });
     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 118 โ”‚   }, [candidate, entry.key, entry.location, input.targetKey]);
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(static-components): Cannot create components during render
     โ•ญโ”€[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10]
 196 โ”‚   const { onInput, onResize } = props;
 197 โ”‚   const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView();
     ยท                                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                                     โ•ฐโ”€โ”€ The component is created during render here
 198 โ”‚   const hasNativeSurface = Boolean(NativeTerminalSurfaceView);
 199 โ”‚
 200 โ”‚   useEffect(() => {
 201 โ”‚     terminalDebugLog("native:surface", {
 202 โ”‚       terminalKey: props.terminalKey,
 203 โ”‚       native: hasNativeSurface,
 204 โ”‚       hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(),
 205 โ”‚       bufferLen: props.buffer.length,
 206 โ”‚       isRunning: props.isRunning,
 207 โ”‚     });
 208 โ”‚   }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]);
 209 โ”‚   const handleNativeInput = useCallback(
 210 โ”‚     (event: NativeSyntheticEvent<TerminalInputEvent>) => {
 211 โ”‚       if (!props.isRunning || props.readOnly) {
 212 โ”‚         return;
 213 โ”‚       }
 214 โ”‚       terminalDebugLog("native:onInput", {
 215 โ”‚         codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)),
 216 โ”‚       });
 217 โ”‚       onInput(event.nativeEvent.data);
 218 โ”‚     },
 219 โ”‚     [onInput, props.isRunning, props.readOnly],
 220 โ”‚   );
 221 โ”‚   const handleNativeResize = useCallback(
 222 โ”‚     (event: NativeSyntheticEvent<TerminalResizeEvent>) => {
 223 โ”‚       onResize({
 224 โ”‚         cols: event.nativeEvent.cols,
 225 โ”‚         rows: event.nativeEvent.rows,
 226 โ”‚       });
 227 โ”‚     },
 228 โ”‚     [onResize],
 229 โ”‚   );
 230 โ”‚
 231 โ”‚   if (NativeTerminalSurfaceView) {
 232 โ”‚     return (
 233 โ”‚       <View style={props.style}>
 234 โ”‚         <NativeTerminalSurfaceView
     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                      โ•ฐโ”€โ”€ This component is created during render
 235 โ”‚           appearanceScheme={themeAppearance}
     โ•ฐโ”€โ”€โ”€โ”€
  help: Components created during render will reset their state each time they are created. Declare components outside of render
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7]
 154 โ”‚     }
 155 โ”‚   }, [wrappedRender]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ Unnecessary dependency `wrappedRender`
 156 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
     โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42]
 799 โ”‚     >
 800 โ”‚       <AdaptiveWorkspaceContext.Provider value={contextValue}>
     ยท                                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 801 โ”‚         <WindowHingeContext value={windowHinge}>
     โ•ฐโ”€โ”€โ”€โ”€
  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
        Alternatively, move the value outside the render function if it doesn't depend on props or state.

  โš  react(immutability): This value cannot be modified
    โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5]
 35 โ”‚
 36 โ”‚   const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0);
    ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท                 โ•ฐโ”€โ”€ `inspectorProgress` originates here
 37 โ”‚   const { renderedInspectorWidth } = props;
 38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
 39 โ”‚
 40 โ”‚   const onClosed = props.onClosed;
 41 โ”‚   useEffect(() => {
 42 โ”‚     inspectorProgress.value = withTiming(
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท             โ•ฐโ”€โ”€ `inspectorProgress` cannot be modified
 43 โ”‚       inspectorVisible ? 1 : 0,
    โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): This value cannot be modified
    โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7]
 37 โ”‚   const { renderedInspectorWidth } = props;
 38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
    ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท                   โ•ฐโ”€โ”€ `renderedContentWidth` originates here
 39 โ”‚
 40 โ”‚   const onClosed = props.onClosed;
 41 โ”‚   useEffect(() => {
 42 โ”‚     inspectorProgress.value = withTiming(
 43 โ”‚       inspectorVisible ? 1 : 0,
 44 โ”‚       WORKSPACE_PANE_TIMING,
 45 โ”‚       (finished) => {
 46 โ”‚         if (finished === true && !inspectorVisible && onClosed !== undefined) {
 47 โ”‚           runOnJS(onClosed)();
 48 โ”‚         }
 49 โ”‚       },
 50 โ”‚     );
 51 โ”‚     const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
 52 โ”‚     renderedInspectorWidth.set(
 53 โ”‚       resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
 54 โ”‚     );
 55 โ”‚   }, [
 56 โ”‚     inspectorProgress,
 57 โ”‚     inspectorVisible,
 58 โ”‚     inspectorWidth,
 59 โ”‚     onClosed,
 60 โ”‚     renderedInspectorWidth,
 61 โ”‚     resizing,
 62 โ”‚   ]);
 63 โ”‚
 64 โ”‚   useEffect(() => {
 65 โ”‚     const targetWidth = inspectorWidth ?? 0;
 66 โ”‚     if (!inspectorVisible || resizing) {
 67 โ”‚       renderedContentWidth.value = targetWidth;
    ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท                 โ•ฐโ”€โ”€ `renderedContentWidth` cannot be modified
 68 โ”‚       return;
    โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39]
 276 โ”‚
 277 โ”‚ โ•ญโ”€โ–ถ   return createElement(RawNativeView, {
 278 โ”‚ โ”‚       ...nativeProps,
 279 โ”‚ โ”‚       refreshEnabled: props.onPullToRefresh !== undefined,
 280 โ”‚ โ”‚       ref: nativeRef,
 281 โ”‚ โ”œโ”€โ–ถ   });
     ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
 282 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
     โ•ญโ”€[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
 162 โ”‚   keys,
 163 โ”‚   overridingProjects = [],
     ยท                        โ”€โ”€
 164 โ”‚   onClearOverrides,
     โ•ฐโ”€โ”€โ”€โ”€
  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.

  โš  eslint(no-empty-pattern): Empty object binding pattern
     โ•ญโ”€[apps/server/src/processRunner.test.ts:266:14]
 265 โ”‚
 266 โ”‚   for (const {} of ["timeout", "success"] as const) {
     ยท              โ”€โ”€
 267 โ”‚   }
     โ•ฐโ”€โ”€โ”€โ”€
  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.

  โš  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.
    โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:50:18]
 49 โ”‚   for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) {
 50 โ”‚     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
    ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 51 โ”‚     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
    โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
    โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:51:18]
 50 โ”‚     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
 51 โ”‚     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
    ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 52 โ”‚   }
    โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
    โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:55:5]
 54 โ”‚   assert.equal(
 55 โ”‚     Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"),
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 56 โ”‚     true,
    โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
    โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:59:5]
 58 โ”‚   assert.equal(
 59 โ”‚     Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"),
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 60 โ”‚     true,
    โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:103:16]
 102 โ”‚
 103 โ”‚   assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true);
     ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 104 โ”‚ });
     โ•ฐโ”€โ”€โ”€โ”€

  โš  eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used.
      โ•ญโ”€[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10]
 1619 โ”‚
 1620 โ”‚ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean {
      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                            โ•ฐโ”€โ”€ 'promptResponseHasMissingXAiStopReason' is declared here
 1621 โ”‚   const meta = response._meta;
      โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  eslint(no-new): Do not use 'new' for side effects.
     โ•ญโ”€[apps/server/src/mcp/McpToolAccess.test.ts:168:3]
 167 โ”‚   // @ts-expect-error a declaration constructed directly
 168 โ”‚   new McpToolAccess.Declaration(unchecked);
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 169 โ”‚   // @ts-expect-error a handlers layer built outside McpToolAccess
     โ•ฐโ”€โ”€โ”€โ”€
  help: Assign the result of 'new' to a variable or compare it to a reference.

  โš  eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:218:7]
 217 โ”‚
 218 โ”‚ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect<void> =>
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ 'revokeActiveMcpThread' is declared here
 219 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:221:7]
 220 โ”‚
 221 โ”‚ const revokeAllActiveMcpCredentials = (): Effect.Effect<void> =>
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                     โ•ฐโ”€โ”€ 'revokeAllActiveMcpCredentials' is declared here
 222 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
    โ•ญโ”€[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
 35 โ”‚       <T3SourceTextRunNativeComponent
 36 โ”‚         key={index}
    ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 37 โ”‚         style={flattenedStyle}
    โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[packages/provider-grok/src/server/adapter.ts:408:7]
 407 โ”‚
 408 โ”‚ const layer: Layer.Layer<
     ยท       โ”€โ”€โ”ฌโ”€โ”€
     ยท         โ•ฐโ”€โ”€ 'layer' is declared here
 409 โ”‚   ProviderAdapter.ProviderAdapterV2,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
     โ•ญโ”€[apps/server/src/terminal/Manager.test.ts:731:31]
 730 โ”‚       );
 731 โ”‚       const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot;
     ยท                               โ”€โ”€โ”€โ”€โ”€โ”€
 732 โ”‚       expect(snapshot?.history).toBe("aa๐Ÿ˜€\rEND");
     โ•ฐโ”€โ”€โ”€โ”€
  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.

  โš  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.
    โ•ญโ”€[apps/server/src/project/ProjectService.test.ts:94:3]
 93 โ”‚     ) {
 94 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
 95 โ”‚ โ”‚       const project = Option.getOrThrow(yield* service.getById(projectId));
 96 โ”‚ โ”‚       if (predicate(project)) return project;
 97 โ”‚ โ”‚       yield* Effect.yieldNow;
 98 โ”‚ โ•ฐโ”€โ–ถ   }
 99 โ”‚       return yield* Effect.die(`Project ${projectId} was not enriched in time.`);
    โ•ฐโ”€โ”€โ”€โ”€

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
     โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
 120 โ”‚   const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
 121 โ”‚   const dispatch = vi.fn((_: unknown) =>
     ยท                           โ”ฌ
     ยท                           โ•ฐโ”€โ”€ '_' is declared here
 122 โ”‚     (options.dispatchGate ?? Effect.void).pipe(
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
     โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
 133 โ”‚   );
 134 โ”‚   const listLocalBranchNames = vi.fn((_: string) =>
     ยท                                       โ”ฌ
     ยท                                       โ•ฐโ”€โ”€ '_' is declared here
 135 โ”‚     Effect.succeed(
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
     โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
 177 โ”‚   });
 178 โ”‚   const sendToThread = vi.fn((_: unknown) => {
     ยท                               โ”ฌ
     ยท                               โ•ฐโ”€โ”€ '_' is declared here
 179 โ”‚     switch (options.continuation ?? "queued") {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
     โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
 202 โ”‚   );
 203 โ”‚   const removeWorktree = vi.fn((_: unknown) =>
     ยท                                 โ”ฌ
     ยท                                 โ•ฐโ”€โ”€ '_' is declared here
 204 โ”‚     options.removeWorktreeFails
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
     โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
 207 โ”‚   );
 208 โ”‚   const deleteLocalBranch = vi.fn((_: unknown) =>
     ยท                                    โ”ฌ
     ยท                                    โ•ฐโ”€โ”€ '_' is declared here
 209 โ”‚     options.deleteLocalBranchFails
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
     โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
 212 โ”‚   );
 213 โ”‚   const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
     ยท                                          โ”ฌ
     ยท                                          โ•ฐโ”€โ”€ '_' is declared here
 214 โ”‚     options.fetchWorktreeBaseFails
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
     โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
 253 โ”‚   );
 254 โ”‚   const localStatus = vi.fn((_: unknown) =>
     ยท                              โ”ฌ
     ยท                              โ•ฐโ”€โ”€ '_' is declared here
 255 โ”‚     Effect.succeed({
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
     โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
 263 โ”‚   );
 264 โ”‚   const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
     ยท                                โ”ฌ
     ยท                                โ•ฐโ”€โ”€ '_' is declared here
 265 โ”‚   const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  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.
    โ•ญโ”€[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3]
 27 โ”‚     ) {
 28 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
 29 โ”‚ โ”‚       const available = yield* service.peek(workspaceRoot);
 30 โ”‚ โ”‚       if (predicate(available)) return available;
 31 โ”‚ โ”‚       yield* Effect.yieldNow;
 32 โ”‚ โ•ฐโ”€โ–ถ   }
 33 โ”‚       return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`);
    โ•ฐโ”€โ”€โ”€โ”€

  โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
   โ•ญโ”€[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
 3 โ”‚   AuthProvidersManageScope,
 4 โ”‚   type AuthSessionState,
   ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
   ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
 5 โ”‚   type EnvironmentId,
   โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
 256 โ”‚     return () => cancelAnimationFrame(frame);
 257 โ”‚   }, [props.path, targetIndex]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ Unnecessary dependency `props.path`
 258 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
     โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
 292 โ”‚                     <SourceText
 293 โ”‚                       key={`${index}:${tokenIndex}`}
     ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 294 โ”‚                       style={{
     โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
     โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
 308 โ”‚             return (
 309 โ”‚               <SourceText key={index}>
     ยท                           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 310 โ”‚                 {body}
     โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
     โ•ญโ”€[packages/provider-cursor/src/server/auth.ts:249:20]
 248 โ”‚     },
 249 โ”‚     (effect, flow, stopSessions) =>
     ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท                          โ•ฐโ”€โ”€ 'stopSessions' is declared here
 250 โ”‚       effect.pipe(
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  eslint(no-control-regex): Unexpected control character
     โ•ญโ”€[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46]
 219 โ”‚               <Text selectable className="font-mono text-sm text-foreground">
 220 โ”‚                 {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")}
     ยท                                              โ”€โ”€โ”ฌโ”€
     ยท                                                โ•ฐโ”€โ”€ 'U+001B' is a control character.
 221 โ”‚               </Text>
     โ•ฐโ”€โ”€โ”€โ”€
  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression.

  โš  react(memo-dependencies): Found extra memoization dependencies
     โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85]
  99 โ”‚   const startEditor = startScheduledTaskEditor;
 100 โ”‚   const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
     ยท                                                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท                                                                                          โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
 101 โ”‚   const readEditor = useCallback(
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(memo-dependencies): Found extra memoization dependencies
     โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7]
 120 โ”‚       setEditor,
 121 โ”‚       startEditor,
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
 122 โ”‚       hasChanges,
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  eslint(no-empty-pattern): Empty array binding pattern
      โ•ญโ”€[apps/server/src/pullRequest/PullRequestService.test.ts:1437:12]
 1436 โ”‚
 1437 โ”‚ for (const [] of [
      ยท            โ”€โ”€
 1438 โ”‚   ["github", "github.com"],
      โ•ฐโ”€โ”€โ”€โ”€
  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.

  โš  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.
    โ•ญโ”€[packages/effect-acp/src/schema.test.ts:18:12]
 17 โ”‚     const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
 18 โ”‚     expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
    ยท            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 19 โ”‚     expect(
    โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
    โ•ญโ”€[packages/effect-acp/src/schema.test.ts:20:7]
 19 โ”‚     expect(
 20 โ”‚       Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
    ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 21 โ”‚     ).toBe(true);
    โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
      โ•ญโ”€[packages/effect-acp/src/client.ts:1269:11]
 1268 โ”‚         extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
 1269 โ”‚           Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1270 โ”‚             Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
      โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
     โ•ญโ”€[packages/effect-acp/src/errors.test.ts:129:28]
 128 โ”‚       const secret = "acp-summary-secret";
 129 โ”‚       const cause = yield* Schema.decodeUnknownEffect(
     ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 130 โ”‚         Schema.Struct({
     โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
     โ•ญโ”€[packages/effect-acp/src/protocol.test.ts:500:31]
 499 โ”‚
 500 โ”‚       const response = yield* Schema.decodeUnknownEffect(
     ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 501 โ”‚         Schema.fromJsonString(JsonRpcErrorResponse),
     โ•ฐโ”€โ”€โ”€โ”€

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10]
 117 โ”‚
 118 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 119 โ”‚     void refreshNotifications();
     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                    โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 120 โ”‚     const subscription = AppState.addEventListener("change", (state) => {
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7]
 125 โ”‚
 126 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 127 โ”‚     if (!isLoaded) {
 128 โ”‚       setLiveActivityStatus("checking");
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 129 โ”‚       return;
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5]
 55 โ”‚
 56 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 57 โ”‚     scheduler.reset();
 58 โ”‚     highlightedRowIdsRef.current = new Set();
 59 โ”‚     visibleChunkIndexRef.current = 0;
 60 โ”‚     setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 });
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 61 โ”‚     setTokensPatchJson(createEmptyTokenPatch(resetKey));
    โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
    โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7]
 62 โ”‚     return () => scheduler.cancel();
 63 โ”‚   }, [enabled, resetKey, rows.length, scheduler]);
    ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
    ยท          โ”‚                    โ•ฐโ”€โ”€ Unnecessary dependency `rows.length`
    ยท          โ•ฐโ”€โ”€ Unnecessary dependency `enabled`
 64 โ”‚
    โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/server/src/telemetry/AnalyticsService.ts:340:7]
 339 โ”‚
 340 โ”‚ const layerTest = AnalyticsService.layerTest;
     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
 104 โ”‚
 105 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 106 โ”‚     clearReviewCommentTarget();
 107 โ”‚     setPendingNativeCommentSelection(null);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 108 โ”‚   }, [selectedSection?.id]);
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
 109 โ”‚
 110 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 111 โ”‚     if (activeCommentTarget === null) {
 112 โ”‚       setPendingNativeCommentSelection(null);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 113 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
 107 โ”‚     setPendingNativeCommentSelection(null);
 108 โ”‚   }, [selectedSection?.id]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ Unnecessary dependency `selectedSection?.id`
 109 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
     โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
 222 โ”‚               ? snippetTokens.map((line, lineIndex) => (
 223 โ”‚                   <NativeText key={lineIndex}>
     ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 224 โ”‚                     {lineIndex > 0 ? "\n" : ""}
     โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
     โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25]
 226 โ”‚                       <NativeText
 227 โ”‚                         key={tokenIndex}
     ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 228 โ”‚                         style={{
     โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  t3code(no-inline-schema-compile): Hoist Schema.decodeEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
      โ•ญโ”€[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34]
 1785 โ”‚           const stat = branch.files!.find((file) => file.path === path)!;
 1786 โ”‚           const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({
      ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1787 โ”‚             cwd,
      โ•ฐโ”€โ”€โ”€โ”€

  โš  unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret.
     โ•ญโ”€[apps/server/src/vcs/GitVcsDriverCore.ts:517:11]
 516 โ”‚         GIT_DIAGNOSTIC_LINE_PATTERN.test(line) ||
 517 โ”‚         (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)),
     ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 518 โ”‚     )
     โ•ฐโ”€โ”€โ”€โ”€
  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`.

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33]
 113 โ”‚     return () => cancelAnimationFrame(frame);
 114 โ”‚   }, [restoreSearch, tabActive, bottomSearch]);
     ยท                                 โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท                                       โ•ฐโ”€โ”€ Unnecessary dependency `bottomSearch`
 115 โ”‚   const composeButton = nativeToolbarCompose ? (
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:454:7]
 453 โ”‚     showAuxiliaryPane("inspector");
 454 โ”‚   }, [environmentId, showAuxiliaryPane, threadId]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€                     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท             โ”‚                               โ•ฐโ”€โ”€ Unnecessary dependency `threadId`
     ยท             โ•ฐโ”€โ”€ Unnecessary dependency `environmentId`
 455 โ”‚   const {
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(static-components): Cannot create components during render
     โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:725:20]
 492 โ”‚   // same check.
 493 โ”‚   const NativeReviewDiffView = resolveNativeReviewDiffView();
     ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                             โ•ฐโ”€โ”€ The component is created during render here
 494 โ”‚   const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
 495 โ”‚   const showcasedReviewDrawRef = useRef<string | null>(null);
 496 โ”‚   const [isPullRefreshing, setIsPullRefreshing] = useState(false);
 497 โ”‚   const handlePullToRefresh = async () => {
 498 โ”‚     setIsPullRefreshing(true);
 499 โ”‚     await refreshSelectedSection();
 500 โ”‚     setIsPullRefreshing(false);
 501 โ”‚   };
 502 โ”‚   const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
 503 โ”‚   const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
 504 โ”‚   const fileVisibility = useReviewFileVisibility({
 505 โ”‚     threadKey: reviewCache.threadKey,
 506 โ”‚     sectionId: selectedSection?.id ?? null,
 507 โ”‚     files: reviewFiles,
 508 โ”‚     cachedExpandedFileIds: selectedSection?.id
 509 โ”‚       ? reviewCache.expandedFileIdsBySection[selectedSection.id]
 510 โ”‚       : undefined,
 511 โ”‚     cachedViewedFileIds: selectedSection?.id
 512 โ”‚       ? reviewCache.viewedFileIdsBySection[selectedSection.id]
 513 โ”‚       : undefined,
 514 โ”‚   });
 515 โ”‚   const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
 516 โ”‚   const commentSelection = useReviewCommentSelectionController({
 517 โ”‚     environmentId,
 518 โ”‚     threadId,
 519 โ”‚     selectedSection,
 520 โ”‚     nativeReviewDiffData,
 521 โ”‚   });
 522 โ”‚   const nativeBridge = useNativeReviewDiffBridge({
 523 โ”‚     threadKey: reviewCache.threadKey,
 524 โ”‚     sectionId: selectedSection?.id ?? null,
 525 โ”‚     diff: selectedSection?.diff,
 526 โ”‚     data: nativeReviewDiffData,
 527 โ”‚     collapsedFileIds,
 528 โ”‚     viewedFileIds,
 529 โ”‚     selectedRowIds: commentSelection.selectedRowIds,
 530 โ”‚     canHighlight: parsedDiff.kind === "files",
 531 โ”‚   });
 532 โ”‚   const showcaseReviewKey =
 533 โ”‚     SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
 534 โ”‚       ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
 535 โ”‚       : null;
 536 โ”‚   const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
 537 โ”‚     nativeBridge.onDebug(event);
 538 โ”‚     if (
 539 โ”‚       showcaseReviewKey === null ||
 540 โ”‚       showcasedReviewDrawRef.current === showcaseReviewKey ||
 541 โ”‚       !isNativeReviewDiffDrawEvent(event.nativeEvent)
 542 โ”‚     ) {
 543 โ”‚       return;
 544 โ”‚     }
 545 โ”‚     showcasedReviewDrawRef.current = showcaseReviewKey;
 546 โ”‚     reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
 547 โ”‚   };
 548 โ”‚
 549 โ”‚   const handleSelectFile = async (fileId: string | null) => {
 550 โ”‚     loadVisibleFile(fileId, true);
 551 โ”‚     commentSelection.clearSelection();
 552 โ”‚     if (fileId !== null && collapsedFileIds.includes(fileId)) {
 553 โ”‚       toggleExpandedFile(fileId);
 554 โ”‚     }
 555 โ”‚     const nativeView = nativeReviewDiffViewRef.current;
 556 โ”‚     if (!nativeView) return;
 557 โ”‚     const result = await settlePromise(() =>
 558 โ”‚       fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
 559 โ”‚     );
 560 โ”‚     if (AsyncResult.isFailure(result)) {
 561 โ”‚       console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
 562 โ”‚     }
 563 โ”‚   };
 564 โ”‚   const handleVisibleFileChange = (
 565 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
 566 โ”‚   ) => {
 567 โ”‚     loadVisibleFile(event.nativeEvent.fileId ?? null);
 568 โ”‚     reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
 569 โ”‚   };
 570 โ”‚   const renderInspector = () => (
 571 โ”‚     <ReviewFileNavigator
 572 โ”‚       ref={reviewFileNavigatorRef}
 573 โ”‚       files={nativeReviewDiffData.files}
 574 โ”‚       headerInset={insets.top}
 575 โ”‚       sectionId={selectedSection?.id ?? null}
 576 โ”‚       onSelectFile={(fileId) => void handleSelectFile(fileId)}
 577 โ”‚     />
 578 โ”‚   );
 579 โ”‚
 580 โ”‚   const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
 581 โ”‚     const { fileId } = event.nativeEvent;
 582 โ”‚     if (fileId) {
 583 โ”‚       loadVisibleFile(fileId, true);
 584 โ”‚       toggleExpandedFile(fileId);
 585 โ”‚     }
 586 โ”‚   };
 587 โ”‚
 588 โ”‚   const handleNativeToggleViewedFile = (
 589 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string }>,
 590 โ”‚   ) => {
 591 โ”‚     const { fileId } = event.nativeEvent;
 592 โ”‚     if (fileId) {
 593 โ”‚       toggleViewedFile(fileId);
 594 โ”‚     }
 595 โ”‚   };
 596 โ”‚
 597 โ”‚   const parsedDiffNotice =
 598 โ”‚     parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
 599 โ”‚   const hasCachedSelectedDiff = selectedSection?.diff != null;
 600 โ”‚   const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
 601 โ”‚   const sectionMenu = buildReviewSectionMenu(reviewSections);
 602 โ”‚   const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
 603 โ”‚     hasEnvironmentPresentation: environment.isReady,
 604 โ”‚     isEnvironmentConnected: isEnvironmentReady,
 605 โ”‚     hasCachedSelectedDiff,
 606 โ”‚     hasAnyCachedDiff,
 607 โ”‚   });
 608 โ”‚   const handleRetryEnvironment = () => {
 609 โ”‚     void retryEnvironment(environmentId);
 610 โ”‚   };
 611 โ”‚   const handleReturnToThread = () => {
 612 โ”‚     if (navigation.canGoBack()) {
 613 โ”‚       navigation.goBack();
 614 โ”‚       return;
 615 โ”‚     }
 616 โ”‚     navigation.navigate("Thread", {
 617 โ”‚       environmentId: String(environmentId),
 618 โ”‚       threadId: String(threadId),
 619 โ”‚     });
 620 โ”‚   };
 621 โ”‚   const androidHeaderSubtitle = [
 622 โ”‚     selectedSection?.title,
 623 โ”‚     headerDiffSummary.additions,
 624 โ”‚     headerDiffSummary.deletions,
 625 โ”‚   ]
 626 โ”‚     .filter((part): part is string => Boolean(part))
 627 โ”‚     .join(" ยท ");
 628 โ”‚
 629 โ”‚   const showChangedFilesPane =
 630 โ”‚     !showConnectionNotice &&
 631 โ”‚     selectedSection !== null &&
 632 โ”‚     parsedDiff.kind === "files" &&
 633 โ”‚     NativeReviewDiffView !== null;
 634 โ”‚   useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
 635 โ”‚   const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
 636 โ”‚
 637 โ”‚   const listHeader = (() => {
 638 โ”‚     const children: ReactElement[] = [];
 639 โ”‚
 640 โ”‚     if (error) {
 641 โ”‚       children.push(
 642 โ”‚         <View
 643 โ”‚           key="review-error"
 644 โ”‚           className={cn(
 645 โ”‚             "bg-card px-4 py-3",
 646 โ”‚             Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
 647 โ”‚           )}
 648 โ”‚         >
 649 โ”‚           <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
 650 โ”‚           <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
 651 โ”‚         </View>,
 652 โ”‚       );
 653 โ”‚     }
 654 โ”‚
 655 โ”‚     if (parsedDiffNotice) {
 656 โ”‚       children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
 657 โ”‚     }
 658 โ”‚
 659 โ”‚     if (children.length === 0) {
 660 โ”‚       return null;
 661 โ”‚     }
 662 โ”‚
 663 โ”‚     return <>{children}</>;
 664 โ”‚   })();
 665 โ”‚   const headerSubtitle = [
 666 โ”‚     headerDiffSummary.additions,
 667 โ”‚     headerDiffSummary.deletions,
 668 โ”‚     pendingReviewCommentCount > 0
 669 โ”‚       ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
 670 โ”‚       : null,
 671 โ”‚   ]
 672 โ”‚     .filter(Boolean)
 673 โ”‚     .join(" ยท ");
 674 โ”‚   const headerTitleText = selectedSection?.title ?? "Review changes";
 675 โ”‚
 676 โ”‚   return (
 677 โ”‚     <>
 678 โ”‚       <ReviewHeader
 679 โ”‚         environmentId={environmentId}
 680 โ”‚         threadId={threadId}
 681 โ”‚         title={headerTitleText}
 682 โ”‚         subtitle={headerSubtitle}
 683 โ”‚         androidSubtitle={androidHeaderSubtitle}
 684 โ”‚         iconColor={headerIcon}
 685 โ”‚         selectedThreadCwd={selectedThreadCwd}
 686 โ”‚         sectionMenu={sectionMenu}
 687 โ”‚         selectedSection={selectedSection}
 688 โ”‚         showSectionToolbar={showSectionToolbar}
 689 โ”‚         showChangedFilesToggle={showChangedFilesToggle}
 690 โ”‚         onRefresh={handlePullToRefresh}
 691 โ”‚         onSelectSection={selectSection}
 692 โ”‚         onReturnToThread={handleReturnToThread}
 693 โ”‚       />
 694 โ”‚
 695 โ”‚       <ScreenContent>
 696 โ”‚         <View className="flex-1 bg-sheet android:bg-sheet-solid">
 697 โ”‚           {showConnectionNotice ? (
 698 โ”‚             <View className="flex-1" style={{ paddingTop: topContentInset }}>
 699 โ”‚               <EnvironmentConnectionNotice
 700 โ”‚                 environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
 701 โ”‚                 connection={
 702 โ”‚                   environment.presentation?.connection ?? {
 703 โ”‚                     phase: "available",
 704 โ”‚                     error: null,
 705 โ”‚                     traceId: null,
 706 โ”‚                   }
 707 โ”‚                 }
 708 โ”‚                 resourceName="review"
 709 โ”‚                 onRetry={handleRetryEnvironment}
 710 โ”‚               />
 711 โ”‚             </View>
 712 โ”‚           ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
 713 โ”‚             <View
 714 โ”‚               className="flex-1"
 715 โ”‚               style={{
 716 โ”‚                 backgroundColor: nativeBridge.theme.background,
 717 โ”‚               }}
 718 โ”‚             >
 719 โ”‚               <View
 720 โ”‚                 className="min-w-0 flex-1"
 721 โ”‚                 style={listHeader ? { paddingTop: topContentInset } : undefined}
 722 โ”‚               >
 723 โ”‚                 {listHeader}
 724 โ”‚                 <View className="min-w-0 flex-1" collapsable={false}>
 725 โ”‚                   <NativeReviewDiffView
     ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                              โ•ฐโ”€โ”€ This component is created during render
 726 โ”‚                     collapsable={false}
     โ•ฐโ”€โ”€โ”€โ”€
  help: Components created during render will reset their state each time they are created. Declare components outside of render
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7]
 100 โ”‚
 101 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 102 โ”‚     if (!target || selectedLines.length === 0) {
 103 โ”‚       setHighlightedLinesById({});
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 104 โ”‚       return;
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27]
 493 โ”‚         >
 494 โ”‚           {props.children(close)}
     ยท                           โ”€โ”€โ”ฌโ”€โ”€
     ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
 495 โ”‚         </ReanimatedSwipeable>
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/components/ProjectFavicon.tsx:172:5]
 167 โ”‚   const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
 168 โ”‚   useLayoutEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท          โ•ฐโ”€โ”€ This is the containing effect
 169 โ”‚     if (faviconRequest === null) return;
 170 โ”‚
 171 โ”‚     const endRequest = beginProjectFaviconRequest(faviconRequest);
 172 โ”‚     setActiveFaviconRequest(faviconRequest);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 173 โ”‚     return endRequest;
     โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
     โ•ญโ”€[apps/mobile/src/components/ComposerContextSheet.tsx:272:25]
 271 โ”‚                 {record.elements?.map((element, index) => (
 272 โ”‚                   <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
     ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 273 โ”‚                     <ContextField
     โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55]
 61 โ”‚   }, []);
 62 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 63 โ”‚     if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl);
    ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท                                                              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 64 โ”‚   }, [playbackUrl, resolvedUrl]);
    โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
    โ•ญโ”€[apps/mobile/src/components/ComposerEditor.tsx:82:6]
 81 โ”‚     },
 82 โ”‚     [draftKey],
    ยท      โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท          โ•ฐโ”€โ”€ Unnecessary dependency `draftKey`
 83 โ”‚   );
    โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
 57 โ”‚
 58 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 59 โ”‚     const controller = new AbortController();
 60 โ”‚     setLoadState("pending");
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
    ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 61 โ”‚     // A renewed signature is used on Retry, not as a reason to reset the native player.
    โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
    โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
 70 โ”‚     return () => controller.abort();
 71 โ”‚   }, [player, props.playRequested, attempt]);
    ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท          โ”‚             โ”‚              โ•ฐโ”€โ”€ Unnecessary dependency `attempt`
    ยท          โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `props.playRequested`
    ยท          โ•ฐโ”€โ”€ Unnecessary dependency `player_0`
 72 โ”‚
    โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:68:5]
 66 โ”‚   const { id: attachmentId, fileUri } = attachment;
 67 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 68 โ”‚     setUri(null);
    ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
    ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 69 โ”‚     setError(null);
    โ•ฐโ”€โ”€โ”€โ”€
  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.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
    โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:91:7]
 90 โ”‚     };
 91 โ”‚   }, [attachmentId, fileUri]);
    ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท             โ”‚          โ•ฐโ”€โ”€ Unnecessary dependency `fileUri`
    ยท             โ•ฐโ”€โ”€ Unnecessary dependency `attachmentId`
 92 โ”‚   const mimeType = videoMimeType(attachment) ?? attachment.mimeType;
    โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:213:34]
 212 โ”‚   useEffect(() => {
 213 โ”‚     if (!isFocused && hasSource) props.onRequestClose();
     ยท                                  โ”€โ”€โ”ฌโ”€โ”€
     ยท                                    โ•ฐโ”€โ”€ Missing dependency `props`
 214 โ”‚   }, [isFocused, hasSource, props.onRequestClose]);
     ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                       โ•ฐโ”€โ”€ Overly precise dependency `props.onRequestClose`, use `props` instead
 215 โ”‚   const { source } = props;
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(refs): Cannot access refs during render
    โ•ญโ”€[apps/mobile/src/components/ui/Menu.tsx:54:36]
 53 โ”‚         const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
 54 โ”‚ โ•ญโ”€โ–ถ     children = cloneElement(child, {
 55 โ”‚ โ”‚         onTouchStart: (event) => {
 56 โ”‚ โ”‚           // Reset for a new touch, not onPressIn, which also fires when a
 57 โ”‚ โ”‚           // finger moves out of the row and back during the same gesture.
 58 โ”‚ โ”‚           menuPress.current.isPreparing = false;
 59 โ”‚ โ”‚           menuPress.current.suppressPress = menuPress.current.isOpen;
 60 โ”‚ โ”‚           pendingPress.current = null;
 61 โ”‚ โ”‚           child.props.onTouchStart?.(event);
 62 โ”‚ โ”‚         },
 63 โ”‚ โ”‚         onPress: (event) => {
 64 โ”‚ โ”‚           // Accessibility clicks have no touch identifier and must not inherit
 65 โ”‚ โ”‚           // cancellation from a previous physical gesture.
 66 โ”‚ โ”‚           const isTouch = typeof event.nativeEvent.identifier === "number";
 67 โ”‚ โ”‚           if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
 68 โ”‚ โ”‚             return;
 69 โ”‚ โ”‚           }
 70 โ”‚ โ”‚           if (isTouch && menuPress.current.isPreparing) {
 71 โ”‚ โ”‚             // A release can arrive between native menu preparation and display.
 72 โ”‚ โ”‚             // Let UIKit's display/cancel callback decide this press's outcome.
 73 โ”‚ โ”‚             event.persist();
 74 โ”‚ โ”‚             pendingPress.current = () => child.props.onPress?.(event);
 75 โ”‚ โ”‚             return;
 76 โ”‚ โ”‚           }
 77 โ”‚ โ”‚           child.props.onPress?.(event);
 78 โ”‚ โ”‚         },
 79 โ”‚ โ”œโ”€โ–ถ     });
    ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
 80 โ”‚         menuProps.onMenuInteractionStart = () => {
    โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27]
 151 โ”‚         <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
 152 โ”‚           {props.children(open)}
     ยท                           โ”€โ”€โ”ฌโ”€
     ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
 153 โ”‚         </View>
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(memo-dependencies): Found missing/extra memoization dependencies
     โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9]
 139 โ”‚       if (action.id !== undefined) {
 140 โ”‚         props.onPressAction?.({
     ยท         โ”€โ”€โ”ฌโ”€โ”€
     ยท           โ•ฐโ”€โ”€ Missing dependency `props`
 141 โ”‚           nativeEvent: { event: action.id },
 142 โ”‚         } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
 143 โ”‚       }
 144 โ”‚     },
 145 โ”‚     [close, props.onPressAction],
     ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                      โ•ฐโ”€โ”€ Overly precise dependency `props.onPressAction`, use `props` instead
 146 โ”‚   );
     โ•ฐโ”€โ”€โ”€โ”€
  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
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(purity): Cannot call impure function during render
      โ•ญโ”€[apps/web/src/components/CommandPalette.tsx:2037:20]
 2036 โ”‚         title: inferProjectTitleFromPath(destinationPath),
 2037 โ”‚         createdAt: new Date().toISOString(),
      ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
      ยท                         โ•ฐโ”€โ”€ Cannot call impure function
 2038 โ”‚         remoteUrl: addProjectCloneFlow.remoteUrl,
      โ•ฐโ”€โ”€โ”€โ”€
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

Found 0 errors and 367 warnings in 5477 files (5.8s, 8 threads)
Post job cleanup.
Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
Post job cleanup.
##[start-action display=Cache full pnpm store;id=__77dfdaa9-e6db-4945-8b73-b7ba2ecb681e.__actions_cache]
Post job cleanup.
Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074, not saving cache.
##[end-action id=__77dfdaa9-e6db-4945-8b73-b7ba2ecb681e.__actions_cache;outcome=success;conclusion=success;duration_ms=96]
##[start-action display=Cache Vite+;id=__77dfdaa9-e6db-4945-8b73-b7ba2ecb681e.vp_cache]
Post job cleanup.
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.
##[end-action id=__77dfdaa9-e6db-4945-8b73-b7ba2ecb681e.vp_cache;outcome=success;conclusion=success;duration_ms=64]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/37438e74-43b1-4c3a-8d41-3b67d0ff0f75' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
Removing SSH command configuration
[command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
[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' || :"
fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
Warning: The process '/usr/local/bin/git' failed with exit code 128
A job completed hook has been configured by the self-hosted runner administrator
โ–ธ Run '/job_completed.sh'
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
env:
  BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 164
  BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 436
  BLACKSMITH_CHECK_RUN_ID: 120979910217
  BLACKSMITH_JOB_DISPLAY_NAME: Lint
  GITHUB_ACTIONS_CACHE_MODE: write
Docker container cache not activated, skipping hash computation.
No active SSH sessions detected. Proceeding with shutdown immediately.
Cleaning up orphan processes