GitHub check

256 KB of 598 KB loaded Download the full log (598 KB)
342 KB of earlier output not loaded
6Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:616:9]
2026-10-24T04:18:54.1926923Z  615 โ”‚       };
2026-10-24T04:18:54.1927037Z  616 โ”‚     }, [props.environmentId, attachment.id, httpBaseUrl]),
2026-10-24T04:18:54.1927223Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1927453Z      ยท                  โ”‚                 โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `httpBaseUrl`
2026-10-24T04:18:54.1927643Z      ยท                  โ”‚                 โ•ฐโ”€โ”€ Unnecessary dependency `attachment.id`
2026-10-24T04:18:54.1927863Z      ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
2026-10-24T04:18:54.1927973Z  617 โ”‚   );
2026-10-24T04:18:54.1928025Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1928331Z   help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-24T04:18:54.1928638Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.1928640Z
2026-10-24T04:18:54.1928945Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T04:18:54.1929101Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
2026-10-24T04:18:54.1929164Z  289 โ”‚   return (
2026-10-24T04:18:54.1929302Z  290 โ”‚     <ExistingThreadSettingsRouteContext.Provider value={value}>
2026-10-24T04:18:54.1929424Z      ยท                                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1929494Z  291 โ”‚       {props.children}
2026-10-24T04:18:54.1929547Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1929765Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T04:18:54.1929900Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T04:18:54.1929906Z
2026-10-24T04:18:54.1930139Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T04:18:54.1930292Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
2026-10-24T04:18:54.1930352Z  653 โ”‚   return (
2026-10-24T04:18:54.1930476Z  654 โ”‚     <ThreadSettingsSessionContext.Provider value={value}>
2026-10-24T04:18:54.1930590Z      ยท                                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1930659Z  655 โ”‚       {props.children}
2026-10-24T04:18:54.1930711Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1930927Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T04:18:54.1931058Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T04:18:54.1931061Z
2026-10-24T04:18:54.1931290Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T04:18:54.1931445Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
2026-10-24T04:18:54.1931505Z  1461 โ”‚   return (
2026-10-24T04:18:54.1931713Z  1462 โ”‚     <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
2026-10-24T04:18:54.1931952Z       ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1932051Z  1463 โ”‚       <ThreadSettingsPickerStack.Navigator
2026-10-24T04:18:54.1932103Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1932314Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T04:18:54.1932453Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T04:18:54.1932455Z
2026-10-24T04:18:54.1932675Z   โš  react(purity): Cannot call impure function during render
2026-10-24T04:18:54.1932820Z      โ•ญโ”€[apps/web/src/components/CustomSnoozeDialog.tsx:140:58]
2026-10-24T04:18:54.1932955Z  139 โ”‚                             {...(weekStartsOn === undefined ? {} : { weekStartsOn })}
2026-10-24T04:18:54.1933106Z  140 โ”‚                             disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }}
2026-10-24T04:18:54.1933227Z      ยท                                                          โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1933394Z      ยท                                                               โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T04:18:54.1933498Z  141 โ”‚                             onSelect={(selected) => {
2026-10-24T04:18:54.1933549Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1933823Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T04:18:54.1934150Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T04:18:54.1934157Z
2026-10-24T04:18:54.1934350Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.1934515Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T04:18:54.1934602Z   86 โ”‚
2026-10-24T04:18:54.1934724Z   87 โ”‚   const cardCoverage = props.cardCoverage;
2026-10-24T04:18:54.1934892Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1935038Z      ยท               โ•ฐโ”€โ”€ `cardCoverage` originates here
2026-10-24T04:18:54.1935154Z   88 โ”‚   const barHeightRef = useRef(0);
2026-10-24T04:18:54.1935265Z   89 โ”‚   const cardHeightRef = useRef(0);
2026-10-24T04:18:54.1935382Z   90 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T04:18:54.1935492Z   91 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T04:18:54.1935594Z   92 โ”‚     if (!cardCoverage) {
2026-10-24T04:18:54.1935691Z   93 โ”‚       return;
2026-10-24T04:18:54.1935774Z   94 โ”‚     }
2026-10-24T04:18:54.1935945Z   95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T04:18:54.1936071Z   96 โ”‚     if (coverage === cardCoverage.value) {
2026-10-24T04:18:54.1936161Z   97 โ”‚       return;
2026-10-24T04:18:54.1936241Z   98 โ”‚     }
2026-10-24T04:18:54.1936325Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T04:18:54.1936571Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T04:18:54.1936717Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1936886Z      ยท             โ•ฐโ”€โ”€ `cardCoverage` cannot be modified
2026-10-24T04:18:54.1936958Z  101 โ”‚       return;
2026-10-24T04:18:54.1937042Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1937441Z   help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state
2026-10-24T04:18:54.1937869Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.1937872Z
2026-10-24T04:18:54.1938035Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.1938218Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
2026-10-24T04:18:54.1938386Z   89 โ”‚   const cardHeightRef = useRef(0);
2026-10-24T04:18:54.1938550Z   90 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T04:18:54.1938637Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1938799Z      ยท              โ•ฐโ”€โ”€ `cardHeight` originates here
2026-10-24T04:18:54.1938920Z   91 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T04:18:54.1939028Z   92 โ”‚     if (!cardCoverage) {
2026-10-24T04:18:54.1939102Z   93 โ”‚       return;
2026-10-24T04:18:54.1939249Z   94 โ”‚     }
2026-10-24T04:18:54.1939423Z   95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T04:18:54.1939554Z   96 โ”‚     if (coverage === cardCoverage.value) {
2026-10-24T04:18:54.1939623Z   97 โ”‚       return;
2026-10-24T04:18:54.1939707Z   98 โ”‚     }
2026-10-24T04:18:54.1939817Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T04:18:54.1939930Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T04:18:54.1940007Z  101 โ”‚       return;
2026-10-24T04:18:54.1940089Z  102 โ”‚     }
2026-10-24T04:18:54.1940218Z  103 โ”‚     cardCoverage.value = withTiming(coverage, {
2026-10-24T04:18:54.1940331Z  104 โ”‚       duration: USER_INPUT_TOGGLE_DURATION_MS,
2026-10-24T04:18:54.1940437Z  105 โ”‚       easing: Easing.out(Easing.cubic),
2026-10-24T04:18:54.1940533Z  106 โ”‚     });
2026-10-24T04:18:54.1940635Z  107 โ”‚   }, [cardCoverage]);
2026-10-24T04:18:54.1940752Z  108 โ”‚   const handleBarLayout = useCallback(
2026-10-24T04:18:54.1940835Z  109 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T04:18:54.1941008Z  110 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T04:18:54.1941102Z  111 โ”‚       notifyCoverage();
2026-10-24T04:18:54.1941252Z  112 โ”‚     },
2026-10-24T04:18:54.1941331Z  113 โ”‚     [notifyCoverage],
2026-10-24T04:18:54.1941419Z  114 โ”‚   );
2026-10-24T04:18:54.1941537Z  115 โ”‚   const handleCardLayout = useCallback(
2026-10-24T04:18:54.1941649Z  116 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T04:18:54.1941784Z  117 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T04:18:54.1941916Z  118 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T04:18:54.1942040Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1942211Z      ยท            โ•ฐโ”€โ”€ `cardHeight` cannot be modified
2026-10-24T04:18:54.1942290Z  119 โ”‚       notifyCoverage();
2026-10-24T04:18:54.1942368Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1942658Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T04:18:54.1942994Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.1942997Z
2026-10-24T04:18:54.1943218Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T04:18:54.1943381Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T04:18:54.1943541Z   90 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T04:18:54.1943746Z   91 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T04:18:54.1943947Z      ยท                                      โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.1944228Z      ยท                                         โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T04:18:54.1944353Z   92 โ”‚     if (!cardCoverage) {
2026-10-24T04:18:54.1944483Z   93 โ”‚       return;
2026-10-24T04:18:54.1944573Z   94 โ”‚     }
2026-10-24T04:18:54.1944733Z   95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T04:18:54.1944847Z   96 โ”‚     if (coverage === cardCoverage.value) {
2026-10-24T04:18:54.1944931Z   97 โ”‚       return;
2026-10-24T04:18:54.1945028Z   98 โ”‚     }
2026-10-24T04:18:54.1945122Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T04:18:54.1945231Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T04:18:54.1945341Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1945504Z      ยท             โ•ฐโ”€โ”€ This modifies `cardCoverage`
2026-10-24T04:18:54.1945582Z  101 โ”‚       return;
2026-10-24T04:18:54.1945661Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1946021Z   help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T04:18:54.1946346Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.1946349Z
2026-10-24T04:18:54.1946654Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T04:18:54.1946822Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T04:18:54.1946932Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T04:18:54.1947045Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T04:18:54.1947157Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1947307Z      ยท             โ•ฐโ”€โ”€ This modifies `cardCoverage`
2026-10-24T04:18:54.1947395Z  101 โ”‚       return;
2026-10-24T04:18:54.1947480Z  102 โ”‚     }
2026-10-24T04:18:54.1947610Z  103 โ”‚     cardCoverage.value = withTiming(coverage, {
2026-10-24T04:18:54.1947729Z  104 โ”‚       duration: USER_INPUT_TOGGLE_DURATION_MS,
2026-10-24T04:18:54.1947849Z  105 โ”‚       easing: Easing.out(Easing.cubic),
2026-10-24T04:18:54.1947936Z  106 โ”‚     });
2026-10-24T04:18:54.1948031Z  107 โ”‚   }, [cardCoverage]);
2026-10-24T04:18:54.1948124Z  108 โ”‚   const handleBarLayout = useCallback(
2026-10-24T04:18:54.1948252Z  109 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T04:18:54.1948384Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1948638Z      ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T04:18:54.1948770Z  110 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T04:18:54.1948863Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1949289Z   help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T04:18:54.1949616Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.1949619Z
2026-10-24T04:18:54.1949878Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T04:18:54.1950109Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
2026-10-24T04:18:54.1950244Z  115 โ”‚   const handleCardLayout = useCallback(
2026-10-24T04:18:54.1950348Z  116 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T04:18:54.1950481Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1950761Z      ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardHeight` after render
2026-10-24T04:18:54.1950928Z  117 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T04:18:54.1951082Z  118 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T04:18:54.1951182Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1951324Z      ยท            โ•ฐโ”€โ”€ This modifies `cardHeight`
2026-10-24T04:18:54.1951415Z  119 โ”‚       notifyCoverage();
2026-10-24T04:18:54.1951515Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1951860Z   help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T04:18:54.1952162Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.1952180Z
2026-10-24T04:18:54.1952421Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T04:18:54.1952644Z     โ•ญโ”€[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
2026-10-24T04:18:54.1952731Z  52 โ”‚
2026-10-24T04:18:54.1952827Z  53 โ”‚   for (const {} of [
2026-10-24T04:18:54.1952914Z     ยท              โ”€โ”€
2026-10-24T04:18:54.1953002Z  54 โ”‚     { healthy: true },
2026-10-24T04:18:54.1953099Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1953346Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T04:18:54.1953349Z
2026-10-24T04:18:54.1953557Z   โš  eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used.
2026-10-24T04:18:54.1953679Z     โ•ญโ”€[apps/web/src/types.ts:22:3]
2026-10-24T04:18:54.1953777Z  21 โ”‚   EnvironmentThreadShell,
2026-10-24T04:18:54.1953876Z  22 โ”‚   ThreadRunSummary,
2026-10-24T04:18:54.1953964Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1954177Z     ยท           โ•ฐโ”€โ”€ 'ThreadRunSummary' is imported here
2026-10-24T04:18:54.1954274Z  23 โ”‚   ThreadRuntimeSummary,
2026-10-24T04:18:54.1954377Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1954484Z   help: Consider removing this import.
2026-10-24T04:18:54.1954487Z
2026-10-24T04:18:54.1954709Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.1954936Z     โ•ญโ”€[apps/mobile/src/components/ComposerEditor.tsx:82:6]
2026-10-24T04:18:54.1955020Z  81 โ”‚     },
2026-10-24T04:18:54.1955101Z  82 โ”‚     [draftKey],
2026-10-24T04:18:54.1955197Z     ยท      โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.1955359Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `draftKey`
2026-10-24T04:18:54.1955433Z  83 โ”‚   );
2026-10-24T04:18:54.1955503Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1955876Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.1956273Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.1956276Z
2026-10-24T04:18:54.1956553Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.1956721Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:68:5]
2026-10-24T04:18:54.1956903Z  66 โ”‚   const { id: attachmentId, fileUri } = attachment;
2026-10-24T04:18:54.1956998Z  67 โ”‚   useEffect(() => {
2026-10-24T04:18:54.1957093Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1957239Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.1957323Z  68 โ”‚     setUri(null);
2026-10-24T04:18:54.1957435Z     ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T04:18:54.1957689Z     ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.1957781Z  69 โ”‚     setError(null);
2026-10-24T04:18:54.1957837Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1958462Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.1958798Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.1958801Z
2026-10-24T04:18:54.1959027Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.1959179Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:91:7]
2026-10-24T04:18:54.1959256Z  90 โ”‚     };
2026-10-24T04:18:54.1959368Z  91 โ”‚   }, [attachmentId, fileUri]);
2026-10-24T04:18:54.1959509Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.1959711Z     ยท             โ”‚          โ•ฐโ”€โ”€ Unnecessary dependency `fileUri`
2026-10-24T04:18:54.1959856Z     ยท             โ•ฐโ”€โ”€ Unnecessary dependency `attachmentId`
2026-10-24T04:18:54.1960034Z  92 โ”‚   const mimeType = videoMimeType(attachment) ?? attachment.mimeType;
2026-10-24T04:18:54.1960113Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1960478Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.1960860Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.1960863Z
2026-10-24T04:18:54.1961088Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T04:18:54.1961385Z      โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:213:34]
2026-10-24T04:18:54.1961478Z  212 โ”‚   useEffect(() => {
2026-10-24T04:18:54.1961620Z  213 โ”‚     if (!isFocused && hasSource) props.onRequestClose();
2026-10-24T04:18:54.1961721Z      ยท                                  โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T04:18:54.1961908Z      ยท                                    โ•ฐโ”€โ”€ Missing dependency `props`
2026-10-24T04:18:54.1962044Z  214 โ”‚   }, [isFocused, hasSource, props.onRequestClose]);
2026-10-24T04:18:54.1962189Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1962427Z      ยท                                       โ•ฐโ”€โ”€ Overly precise dependency `props.onRequestClose`, use `props` instead
2026-10-24T04:18:54.1962520Z  215 โ”‚   const { source } = props;
2026-10-24T04:18:54.1962604Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1963039Z   help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.1963363Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.1963365Z
2026-10-24T04:18:54.1963560Z   โš  react(purity): Cannot call impure function during render
2026-10-24T04:18:54.1963724Z      โ•ญโ”€[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
2026-10-24T04:18:54.1963886Z  371 โ”‚   const { open, onOpenChange, onSnooze, timestampFormat } = props;
2026-10-24T04:18:54.1964081Z  372 โ”‚   const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
2026-10-24T04:18:54.1964241Z      ยท                                               โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1964416Z      ยท                                                    โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T04:18:54.1964577Z  373 โ”‚   return (
2026-10-24T04:18:54.1964661Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1964962Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T04:18:54.1965251Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T04:18:54.1965279Z
2026-10-24T04:18:54.1965457Z   โš  react(purity): Cannot call impure function during render
2026-10-24T04:18:54.1965633Z      โ•ญโ”€[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39]
2026-10-24T04:18:54.1965754Z  852 โ”‚   if (snoozeGateClock.thread !== thread) {
2026-10-24T04:18:54.1965900Z  853 โ”‚     setSnoozeGateClock({ thread, now: new Date().toISOString() });
2026-10-24T04:18:54.1966024Z      ยท                                       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1966213Z      ยท                                            โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T04:18:54.1966294Z  854 โ”‚   }
2026-10-24T04:18:54.1966429Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1966764Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T04:18:54.1967095Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T04:18:54.1967097Z
2026-10-24T04:18:54.1967330Z   โš  unicorn(no-new-array): Do not use `new Array(singleArgument)`.
2026-10-24T04:18:54.1967511Z      โ•ญโ”€[apps/web/src/terminal/ghostty/core.ts:194:19]
2026-10-24T04:18:54.1967726Z  193 โ”‚     const count = Math.min(CHUNK_SIZE, graphemeLength - start);
2026-10-24T04:18:54.1967836Z  194 โ”‚     const codes = new Array<number>(count);
2026-10-24T04:18:54.1967981Z      ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1968113Z  195 โ”‚     for (let index = 0; index < count; index += 1) {
2026-10-24T04:18:54.1968196Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1968601Z   help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`.
2026-10-24T04:18:54.1968604Z
2026-10-24T04:18:54.1968872Z   โš  unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-24T04:18:54.1969031Z      โ•ญโ”€[apps/web/src/components/chat/useComposerSend.ts:985:13]
2026-10-24T04:18:54.1969176Z  984 โ”‚           const changedBeforeDecline = draftChangedSinceSend();
2026-10-24T04:18:54.1969441Z  985 โ”‚ โ•ญโ”€โ–ถ       const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
2026-10-24T04:18:54.1969583Z  986 โ”‚ โ”‚           (approval) => approval.requestId,
2026-10-24T04:18:54.1969746Z  987 โ”‚ โ•ฐโ”€โ–ถ       );
2026-10-24T04:18:54.1969909Z  988 โ”‚           const approvalResponding = approvalsToDecline.some((approval) =>
2026-10-24T04:18:54.1969991Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1970074Z   help: Switch to `Set`
2026-10-24T04:18:54.1970077Z
2026-10-24T04:18:54.1970275Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.1970459Z     โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5]
2026-10-24T04:18:54.1970608Z  35 โ”‚
2026-10-24T04:18:54.1970753Z  36 โ”‚   const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0);
2026-10-24T04:18:54.1970879Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1971062Z     ยท                 โ•ฐโ”€โ”€ `inspectorProgress` originates here
2026-10-24T04:18:54.1971187Z  37 โ”‚   const { renderedInspectorWidth } = props;
2026-10-24T04:18:54.1971325Z  38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-24T04:18:54.1971397Z  39 โ”‚
2026-10-24T04:18:54.1971520Z  40 โ”‚   const onClosed = props.onClosed;
2026-10-24T04:18:54.1971613Z  41 โ”‚   useEffect(() => {
2026-10-24T04:18:54.1971717Z  42 โ”‚     inspectorProgress.value = withTiming(
2026-10-24T04:18:54.1971827Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1972002Z     ยท             โ•ฐโ”€โ”€ `inspectorProgress` cannot be modified
2026-10-24T04:18:54.1972116Z  43 โ”‚       inspectorVisible ? 1 : 0,
2026-10-24T04:18:54.1972184Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1972530Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T04:18:54.1972916Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.1976559Z
2026-10-24T04:18:54.1976743Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.1976900Z     โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7]
2026-10-24T04:18:54.1976991Z  37 โ”‚   const { renderedInspectorWidth } = props;
2026-10-24T04:18:54.1977117Z  38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-24T04:18:54.1977207Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1977368Z     ยท                   โ•ฐโ”€โ”€ `renderedContentWidth` originates here
2026-10-24T04:18:54.1977424Z  39 โ”‚
2026-10-24T04:18:54.1977503Z  40 โ”‚   const onClosed = props.onClosed;
2026-10-24T04:18:54.1977564Z  41 โ”‚   useEffect(() => {
2026-10-24T04:18:54.1977650Z  42 โ”‚     inspectorProgress.value = withTiming(
2026-10-24T04:18:54.1977723Z  43 โ”‚       inspectorVisible ? 1 : 0,
2026-10-24T04:18:54.1977792Z  44 โ”‚       WORKSPACE_PANE_TIMING,
2026-10-24T04:18:54.1977854Z  45 โ”‚       (finished) => {
2026-10-24T04:18:54.1977990Z  46 โ”‚         if (finished === true && !inspectorVisible && onClosed !== undefined) {
2026-10-24T04:18:54.1978062Z  47 โ”‚           runOnJS(onClosed)();
2026-10-24T04:18:54.1978116Z  48 โ”‚         }
2026-10-24T04:18:54.1978168Z  49 โ”‚       },
2026-10-24T04:18:54.1978220Z  50 โ”‚     );
2026-10-24T04:18:54.1978346Z  51 โ”‚     const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
2026-10-24T04:18:54.1978430Z  52 โ”‚     renderedInspectorWidth.set(
2026-10-24T04:18:54.1978572Z  53 โ”‚       resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
2026-10-24T04:18:54.1978625Z  54 โ”‚     );
2026-10-24T04:18:54.1978677Z  55 โ”‚   }, [
2026-10-24T04:18:54.1978742Z  56 โ”‚     inspectorProgress,
2026-10-24T04:18:54.1978805Z  57 โ”‚     inspectorVisible,
2026-10-24T04:18:54.1978868Z  58 โ”‚     inspectorWidth,
2026-10-24T04:18:54.1978926Z  59 โ”‚     onClosed,
2026-10-24T04:18:54.1978993Z  60 โ”‚     renderedInspectorWidth,
2026-10-24T04:18:54.1979050Z  61 โ”‚     resizing,
2026-10-24T04:18:54.1979102Z  62 โ”‚   ]);
2026-10-24T04:18:54.1979151Z  63 โ”‚
2026-10-24T04:18:54.1979209Z  64 โ”‚   useEffect(() => {
2026-10-24T04:18:54.1979299Z  65 โ”‚     const targetWidth = inspectorWidth ?? 0;
2026-10-24T04:18:54.1979381Z  66 โ”‚     if (!inspectorVisible || resizing) {
2026-10-24T04:18:54.1979481Z  67 โ”‚       renderedContentWidth.value = targetWidth;
2026-10-24T04:18:54.1979570Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1979725Z     ยท                 โ•ฐโ”€โ”€ `renderedContentWidth` cannot be modified
2026-10-24T04:18:54.1979782Z  68 โ”‚       return;
2026-10-24T04:18:54.1979830Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1980087Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T04:18:54.1980382Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.1980385Z
2026-10-24T04:18:54.1980573Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T04:18:54.1980820Z      โ•ญโ”€[apps/mobile/src/components/ComposerContextSheet.tsx:267:25]
2026-10-24T04:18:54.1981012Z  266 โ”‚                 {record.elements?.map((element, index) => (
2026-10-24T04:18:54.1981173Z  267 โ”‚                   <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
2026-10-24T04:18:54.1981325Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1981399Z  268 โ”‚                     <ContextField
2026-10-24T04:18:54.1981447Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1981602Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T04:18:54.1981606Z
2026-10-24T04:18:54.1981856Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.1982010Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7]
2026-10-24T04:18:54.1982061Z  214 โ”‚     }
2026-10-24T04:18:54.1982134Z  215 โ”‚   }, [wrappedRender]);
2026-10-24T04:18:54.1982214Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1982357Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `wrappedRender`
2026-10-24T04:18:54.1982406Z  216 โ”‚
2026-10-24T04:18:54.1982454Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1982738Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.1983036Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.1983038Z
2026-10-24T04:18:54.1983270Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T04:18:54.1983429Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35]
2026-10-24T04:18:54.1983487Z  816 โ”‚       >
2026-10-24T04:18:54.1983598Z  817 โ”‚         <AdaptiveWorkspaceContext value={contextValue}>
2026-10-24T04:18:54.1983709Z      ยท                                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1983798Z  818 โ”‚           <NativeWorkspaceInspectorContext
2026-10-24T04:18:54.1983849Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1984104Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T04:18:54.1984239Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T04:18:54.1984241Z
2026-10-24T04:18:54.1984466Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T04:18:54.1984625Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:832:42]
2026-10-24T04:18:54.1984681Z  831 โ”‚     >
2026-10-24T04:18:54.1984803Z  832 โ”‚       <AdaptiveWorkspaceContext.Provider value={contextValue}>
2026-10-24T04:18:54.1984920Z      ยท                                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1985017Z  833 โ”‚         <WindowHingeContext value={windowHinge}>
2026-10-24T04:18:54.1985069Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1985280Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T04:18:54.1985409Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T04:18:54.1985414Z
2026-10-24T04:18:54.1985663Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.1985845Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
2026-10-24T04:18:54.1986003Z  57 โ”‚
2026-10-24T04:18:54.1986067Z  58 โ”‚   useEffect(() => {
2026-10-24T04:18:54.1986134Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1986259Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.1986349Z  59 โ”‚     const controller = new AbortController();
2026-10-24T04:18:54.1986420Z  60 โ”‚     setLoadState("pending");
2026-10-24T04:18:54.1986492Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1986705Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.1986875Z  61 โ”‚     // A renewed signature is used on Retry, not as a reason to reset the native player.
2026-10-24T04:18:54.1986924Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1987506Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.1987819Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.1987822Z
2026-10-24T04:18:54.1988013Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.1988142Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
2026-10-24T04:18:54.1988221Z  70 โ”‚     return () => controller.abort();
2026-10-24T04:18:54.1988311Z  71 โ”‚   }, [player, props.playRequested, attempt]);
2026-10-24T04:18:54.1988482Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.1988705Z     ยท          โ”‚             โ”‚              โ•ฐโ”€โ”€ Unnecessary dependency `attempt`
2026-10-24T04:18:54.1988896Z     ยท          โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `props.playRequested`
2026-10-24T04:18:54.1989027Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `player_0`
2026-10-24T04:18:54.1989077Z  72 โ”‚
2026-10-24T04:18:54.1989126Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1989409Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.1989756Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.1989800Z
2026-10-24T04:18:54.1989952Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.1990098Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27]
2026-10-24T04:18:54.1990273Z  151 โ”‚         <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
2026-10-24T04:18:54.1990350Z  152 โ”‚           {props.children(open)}
2026-10-24T04:18:54.1990435Z      ยท                           โ”€โ”€โ”ฌโ”€
2026-10-24T04:18:54.1990661Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.1990725Z  153 โ”‚         </View>
2026-10-24T04:18:54.1990776Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1991229Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.1991513Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.1991516Z
2026-10-24T04:18:54.1991705Z   โš  react(memo-dependencies): Found missing/extra memoization dependencies
2026-10-24T04:18:54.1991850Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9]
2026-10-24T04:18:54.1991927Z  139 โ”‚       if (action.id !== undefined) {
2026-10-24T04:18:54.1992005Z  140 โ”‚         props.onPressAction?.({
2026-10-24T04:18:54.1992074Z      ยท         โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T04:18:54.1992203Z      ยท           โ•ฐโ”€โ”€ Missing dependency `props`
2026-10-24T04:18:54.1992293Z  141 โ”‚           nativeEvent: { event: action.id },
2026-10-24T04:18:54.1992433Z  142 โ”‚         } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
2026-10-24T04:18:54.1992486Z  143 โ”‚       }
2026-10-24T04:18:54.1992541Z  144 โ”‚     },
2026-10-24T04:18:54.1992618Z  145 โ”‚     [close, props.onPressAction],
2026-10-24T04:18:54.1992712Z      ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1992915Z      ยท                      โ•ฐโ”€โ”€ Overly precise dependency `props.onPressAction`, use `props` instead
2026-10-24T04:18:54.1992968Z  146 โ”‚   );
2026-10-24T04:18:54.1993016Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1993480Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-24T04:18:54.1993781Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.1993783Z
2026-10-24T04:18:54.1994065Z   โš  eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used.
2026-10-24T04:18:54.1994215Z       โ•ญโ”€[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10]
2026-10-24T04:18:54.1994266Z  1619 โ”‚
2026-10-24T04:18:54.1994470Z  1620 โ”‚ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean {
2026-10-24T04:18:54.1994584Z       ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1994827Z       ยท                            โ•ฐโ”€โ”€ 'promptResponseHasMissingXAiStopReason' is declared here
2026-10-24T04:18:54.1994960Z  1621 โ”‚   const meta = response._meta;
2026-10-24T04:18:54.1995012Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1995114Z   help: Consider removing this declaration.
2026-10-24T04:18:54.1995117Z
2026-10-24T04:18:54.1995569Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.1995800Z      โ•ญโ”€[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5]
2026-10-24T04:18:54.1995876Z  222 โ”‚         let idlePasses = 0;
2026-10-24T04:18:54.1996015Z  223 โ”‚ โ•ญโ”€โ–ถ     for (;;) {
2026-10-24T04:18:54.1996151Z  224 โ”‚ โ”‚         yield* Effect.promise(() => Promise.resolve());
2026-10-24T04:18:54.1996294Z  225 โ”‚ โ”‚         const pending = backgroundRuntime.pending.shift();
2026-10-24T04:18:54.1996384Z  226 โ”‚ โ”‚         if (!pending) {
2026-10-24T04:18:54.1996476Z  227 โ”‚ โ”‚           idlePasses++;
2026-10-24T04:18:54.1996578Z  228 โ”‚ โ”‚           if (idlePasses >= 3) {
2026-10-24T04:18:54.1996661Z  229 โ”‚ โ”‚             return;
2026-10-24T04:18:54.1996735Z  230 โ”‚ โ”‚           }
2026-10-24T04:18:54.1996819Z  231 โ”‚ โ”‚           continue;
2026-10-24T04:18:54.1996892Z  232 โ”‚ โ”‚         }
2026-10-24T04:18:54.1996982Z  233 โ”‚ โ”‚         idlePasses = 0;
2026-10-24T04:18:54.1997098Z  234 โ”‚ โ”‚         const exit = yield* Effect.exit(
2026-10-24T04:18:54.1997306Z  235 โ”‚ โ”‚           pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
2026-10-24T04:18:54.1997381Z  236 โ”‚ โ”‚         );
2026-10-24T04:18:54.1997486Z  237 โ”‚ โ”‚         yield* Effect.sync(() => {
2026-10-24T04:18:54.1997585Z  238 โ”‚ โ”‚           pending.resolve(exit);
2026-10-24T04:18:54.1997660Z  239 โ”‚ โ”‚         });
2026-10-24T04:18:54.1997785Z  240 โ”‚ โ•ฐโ”€โ–ถ     }
2026-10-24T04:18:54.1997840Z  241 โ”‚       },
2026-10-24T04:18:54.1997889Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1997891Z
2026-10-24T04:18:54.1998142Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T04:18:54.1998273Z      โ•ญโ”€[packages/provider-grok/src/server/adapter.ts:408:7]
2026-10-24T04:18:54.1998327Z  407 โ”‚
2026-10-24T04:18:54.1998393Z  408 โ”‚ const layer: Layer.Layer<
2026-10-24T04:18:54.1998462Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T04:18:54.1998580Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T04:18:54.1998667Z  409 โ”‚   ProviderAdapter.ProviderAdapterV2,
2026-10-24T04:18:54.1998716Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1998815Z   help: Consider removing this declaration.
2026-10-24T04:18:54.1998817Z
2026-10-24T04:18:54.1999065Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.1999229Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
2026-10-24T04:18:54.1999279Z  638 โ”‚
2026-10-24T04:18:54.1999396Z  639 โ”‚   useEffect(() => {
2026-10-24T04:18:54.1999524Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.1999651Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.1999757Z  640 โ”‚     if (pendingLaunchEntry.key === launchTargetKey) {
2026-10-24T04:18:54.1999817Z  641 โ”‚       return;
2026-10-24T04:18:54.1999870Z  642 โ”‚     }
2026-10-24T04:18:54.1999942Z  643 โ”‚     setPendingLaunchEntry({
2026-10-24T04:18:54.2000027Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2000240Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2000330Z  644 โ”‚       key: launchTargetKey,
2026-10-24T04:18:54.2000380Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2000963Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2001276Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2001279Z
2026-10-24T04:18:54.2001526Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2001687Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
2026-10-24T04:18:54.2001739Z  648 โ”‚
2026-10-24T04:18:54.2001800Z  649 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2001868Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2001995Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2002109Z  650 โ”‚     if (initialAttachGridEntry.key === launchTargetKey) {
2026-10-24T04:18:54.2002168Z  651 โ”‚       return;
2026-10-24T04:18:54.2002222Z  652 โ”‚     }
2026-10-24T04:18:54.2002300Z  653 โ”‚     setInitialAttachGridEntry({
2026-10-24T04:18:54.2002388Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2002554Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2002624Z  654 โ”‚       key: launchTargetKey,
2026-10-24T04:18:54.2002673Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2003263Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2003574Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2003576Z
2026-10-24T04:18:54.2003821Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2003981Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
2026-10-24T04:18:54.2004053Z  743 โ”‚
2026-10-24T04:18:54.2004116Z  744 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2004206Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2004328Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2004475Z  745 โ”‚     if (!routeEnvironmentId || !routeThreadId) {
2026-10-24T04:18:54.2004598Z  746 โ”‚       setLastGridSize({
2026-10-24T04:18:54.2004679Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2004842Z      ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2004921Z  747 โ”‚         cols: DEFAULT_TERMINAL_COLS,
2026-10-24T04:18:54.2004969Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2005629Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2005942Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2005947Z
2026-10-24T04:18:54.2006141Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.2006305Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
2026-10-24T04:18:54.2006357Z  537 โ”‚     });
2026-10-24T04:18:54.2006476Z  538 โ”‚   }, [terminal.buffer, terminal.buffer.length, terminalKey]);
2026-10-24T04:18:54.2006582Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2006817Z      ยท                                   โ•ฐโ”€โ”€ Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
2026-10-24T04:18:54.2006975Z  539 โ”‚   const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
2026-10-24T04:18:54.2007022Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2007311Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.2007611Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2007613Z
2026-10-24T04:18:54.2007805Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.2007964Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
2026-10-24T04:18:54.2008057Z  708 โ”‚     sentInitialInputKeyRef.current = null;
2026-10-24T04:18:54.2008122Z  709 โ”‚   }, [terminalKey]);
2026-10-24T04:18:54.2008197Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2008339Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-24T04:18:54.2008393Z  710 โ”‚
2026-10-24T04:18:54.2008441Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2008721Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.2009017Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2009021Z
2026-10-24T04:18:54.2009210Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.2009370Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
2026-10-24T04:18:54.2009424Z  799 โ”‚     };
2026-10-24T04:18:54.2009596Z  800 โ”‚   }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
2026-10-24T04:18:54.2009815Z      ยท                                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2010096Z      ยท                                                                โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-24T04:18:54.2010296Z      ยท                                                                โ•ฐโ”€โ”€ Unnecessary dependency `terminal.lifecycleVersion`
2026-10-24T04:18:54.2010348Z  801 โ”‚
2026-10-24T04:18:54.2010395Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2010749Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.2011052Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2011058Z
2026-10-24T04:18:54.2011198Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2011360Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
2026-10-24T04:18:54.2011412Z  792 โ”‚   }
2026-10-24T04:18:54.2011515Z  793 โ”‚   const pasteSession = pasteSessionRef.current;
2026-10-24T04:18:54.2011624Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2011783Z      ยท                                   โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2011832Z  794 โ”‚
2026-10-24T04:18:54.2011881Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2012342Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2012626Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2012628Z
2026-10-24T04:18:54.2012817Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T04:18:54.2012968Z     โ•ญโ”€[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15]
2026-10-24T04:18:54.2013033Z  71 โ”‚             <Pressable
2026-10-24T04:18:54.2013099Z  72 โ”‚               key={index}
2026-10-24T04:18:54.2013183Z     ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2013264Z  73 โ”‚               accessibilityRole="button"
2026-10-24T04:18:54.2013314Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2013511Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T04:18:54.2013550Z
2026-10-24T04:18:54.2013729Z   โš  react(purity): Cannot call impure function during render
2026-10-24T04:18:54.2013855Z       โ•ญโ”€[apps/web/src/components/CommandPalette.tsx:1996:20]
2026-10-24T04:18:54.2013971Z  1995 โ”‚         title: inferProjectTitleFromPath(destinationPath),
2026-10-24T04:18:54.2014093Z  1996 โ”‚         createdAt: new Date().toISOString(),
2026-10-24T04:18:54.2014181Z       ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2014376Z       ยท                         โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T04:18:54.2014493Z  1997 โ”‚         remoteUrl: addProjectCloneFlow.remoteUrl,
2026-10-24T04:18:54.2014544Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2014820Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T04:18:54.2015107Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T04:18:54.2015110Z
2026-10-24T04:18:54.2015359Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2015528Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5]
2026-10-24T04:18:54.2015579Z  55 โ”‚
2026-10-24T04:18:54.2015641Z  56 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2015711Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2015834Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2015903Z  57 โ”‚     scheduler.reset();
2026-10-24T04:18:54.2015999Z  58 โ”‚     highlightedRowIdsRef.current = new Set();
2026-10-24T04:18:54.2016083Z  59 โ”‚     visibleChunkIndexRef.current = 0;
2026-10-24T04:18:54.2016197Z  60 โ”‚     setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 });
2026-10-24T04:18:54.2016276Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2016437Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2016707Z  61 โ”‚     setTokensPatchJson(createEmptyTokenPatch(resetKey));
2026-10-24T04:18:54.2016762Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2017344Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2017657Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2017660Z
2026-10-24T04:18:54.2017853Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.2018020Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7]
2026-10-24T04:18:54.2018098Z  62 โ”‚     return () => scheduler.cancel();
2026-10-24T04:18:54.2018198Z  63 โ”‚   }, [enabled, resetKey, rows.length, scheduler]);
2026-10-24T04:18:54.2018319Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2018504Z     ยท          โ”‚                    โ•ฐโ”€โ”€ Unnecessary dependency `rows.length`
2026-10-24T04:18:54.2018707Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `enabled`
2026-10-24T04:18:54.2018822Z  64 โ”‚
2026-10-24T04:18:54.2018869Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2019152Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.2019458Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2019461Z
2026-10-24T04:18:54.2019706Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T04:18:54.2019863Z      โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85]
2026-10-24T04:18:54.2019960Z   99 โ”‚   const startEditor = startScheduledTaskEditor;
2026-10-24T04:18:54.2020142Z  100 โ”‚   const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
2026-10-24T04:18:54.2020284Z      ยท                                                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2020479Z      ยท                                                                                          โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
2026-10-24T04:18:54.2020555Z  101 โ”‚   const readEditor = useCallback(
2026-10-24T04:18:54.2020605Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2020907Z   help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-24T04:18:54.2021214Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2021219Z
2026-10-24T04:18:54.2021392Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T04:18:54.2021544Z      โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7]
2026-10-24T04:18:54.2021607Z  120 โ”‚       setEditor,
2026-10-24T04:18:54.2021669Z  121 โ”‚       startEditor,
2026-10-24T04:18:54.2021745Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2021882Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
2026-10-24T04:18:54.2021943Z  122 โ”‚       hasChanges,
2026-10-24T04:18:54.2021991Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2022290Z   help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-24T04:18:54.2022593Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2022600Z
2026-10-24T04:18:54.2022747Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.2022909Z     โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5]
2026-10-24T04:18:54.2022962Z  90 โ”‚ }) {
2026-10-24T04:18:54.2023069Z  91 โ”‚   const rotation = useSharedValue(props.hidden ? 1 : 0);
2026-10-24T04:18:54.2023141Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2023269Z     ยท             โ•ฐโ”€โ”€ `rotation` originates here
2026-10-24T04:18:54.2023336Z  92 โ”‚   useLayoutEffect(() => {
2026-10-24T04:18:54.2023471Z  93 โ”‚     rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
2026-10-24T04:18:54.2023592Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2023776Z     ยท         โ•ฐโ”€โ”€ `rotation` cannot be modified
2026-10-24T04:18:54.2023850Z  94 โ”‚   }, [props.hidden, rotation]);
2026-10-24T04:18:54.2023898Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2024195Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T04:18:54.2024568Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.2024570Z
2026-10-24T04:18:54.2024722Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.2024886Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5]
2026-10-24T04:18:54.2024980Z  266 โ”‚   const variant = props.variant ?? "plain";
2026-10-24T04:18:54.2025112Z  267 โ”‚   const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
2026-10-24T04:18:54.2025198Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2025341Z      ยท                 โ•ฐโ”€โ”€ `loadingVisibility` originates here
2026-10-24T04:18:54.2025407Z  268 โ”‚   useLayoutEffect(() => {
2026-10-24T04:18:54.2025562Z  269 โ”‚     loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
2026-10-24T04:18:54.2025640Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2025782Z      ยท             โ•ฐโ”€โ”€ `loadingVisibility` cannot be modified
2026-10-24T04:18:54.2025869Z  270 โ”‚   }, [loadingVisibility, props.loading]);
2026-10-24T04:18:54.2025917Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2026178Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T04:18:54.2026473Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.2026475Z
2026-10-24T04:18:54.2026623Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.2026785Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5]
2026-10-24T04:18:54.2026838Z  325 โ”‚ }) {
2026-10-24T04:18:54.2026991Z  326 โ”‚   const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
2026-10-24T04:18:54.2027077Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2027223Z      ยท                  โ•ฐโ”€โ”€ `recordingVisibility` originates here
2026-10-24T04:18:54.2027296Z  327 โ”‚   useLayoutEffect(() => {
2026-10-24T04:18:54.2027480Z  328 โ”‚     recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
2026-10-24T04:18:54.2027563Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2027708Z      ยท              โ•ฐโ”€โ”€ `recordingVisibility` cannot be modified
2026-10-24T04:18:54.2027796Z  329 โ”‚   }, [props.phase, recordingVisibility]);
2026-10-24T04:18:54.2027846Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2028099Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T04:18:54.2028390Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.2028393Z
2026-10-24T04:18:54.2028586Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2028804Z     โ•ญโ”€[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
2026-10-24T04:18:54.2028885Z  26 โ”‚   const latestInput = useRef(input);
2026-10-24T04:18:54.2028958Z  27 โ”‚   latestInput.current = input;
2026-10-24T04:18:54.2029067Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2029244Z     ยท        โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T04:18:54.2029387Z     ยท        โ•ฐโ”€โ”€ This value is a ref
2026-10-24T04:18:54.2029495Z  28 โ”‚   const mounted = useRef(true);
2026-10-24T04:18:54.2029544Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2030002Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2030290Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2030293Z
2026-10-24T04:18:54.2030443Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.2030600Z     โ•ญโ”€[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
2026-10-24T04:18:54.2030700Z  65 โ”‚   const [expanded, setExpanded] = useState(false);
2026-10-24T04:18:54.2030783Z  66 โ”‚   const progress = useSharedValue(0);
2026-10-24T04:18:54.2030855Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2030979Z     ยท             โ•ฐโ”€โ”€ `progress` originates here
2026-10-24T04:18:54.2031047Z  67 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2031168Z  68 โ”‚     progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
2026-10-24T04:18:54.2031236Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2031364Z     ยท         โ•ฐโ”€โ”€ `progress` cannot be modified
2026-10-24T04:18:54.2031432Z  69 โ”‚   }, [expanded, progress]);
2026-10-24T04:18:54.2031481Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2031734Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T04:18:54.2032026Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.2032030Z
2026-10-24T04:18:54.2032173Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2032330Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
2026-10-24T04:18:54.2032483Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T04:18:54.2032603Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T04:18:54.2032718Z      ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2032884Z      ยท                                                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2032999Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T04:18:54.2033050Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2033549Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2033886Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2033888Z
2026-10-24T04:18:54.2034056Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2034209Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
2026-10-24T04:18:54.2034260Z  125 โ”‚
2026-10-24T04:18:54.2034378Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T04:18:54.2034513Z      ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2034668Z      ยท                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2034772Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T04:18:54.2034823Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2035267Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2035545Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2035548Z
2026-10-24T04:18:54.2035685Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2035835Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
2026-10-24T04:18:54.2035886Z  125 โ”‚
2026-10-24T04:18:54.2035989Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T04:18:54.2036077Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2036219Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2036316Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T04:18:54.2036366Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2036814Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2037093Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2037095Z
2026-10-24T04:18:54.2037232Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2037437Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
2026-10-24T04:18:54.2037540Z  125 โ”‚
2026-10-24T04:18:54.2037643Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T04:18:54.2037753Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2037916Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2038013Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T04:18:54.2038062Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2038590Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2038874Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2038878Z
2026-10-24T04:18:54.2039016Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2039167Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
2026-10-24T04:18:54.2039216Z  125 โ”‚
2026-10-24T04:18:54.2039317Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T04:18:54.2039426Z      ยท                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2039586Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2039682Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T04:18:54.2039730Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2040185Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2040466Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2040468Z
2026-10-24T04:18:54.2040606Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2040759Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-24T04:18:54.2040864Z  126 โ”‚       if (!sessionRef.current || !recorderRef.current) {
2026-10-24T04:18:54.2041055Z  127 โ”‚ โ•ญโ”€โ–ถ     const recorder = createLazyVoiceRecorder({
2026-10-24T04:18:54.2041226Z  128 โ”‚ โ”‚         create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T04:18:54.2041386Z  129 โ”‚ โ”‚         onStatus: (status: RecordingStatus) => {
2026-10-24T04:18:54.2041603Z  130 โ”‚ โ”‚           sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T04:18:54.2041776Z  131 โ”‚ โ”‚             isFinished: status.isFinished,
2026-10-24T04:18:54.2042045Z  132 โ”‚ โ”‚             hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T04:18:54.2042188Z  133 โ”‚ โ”‚             error: status.error,
2026-10-24T04:18:54.2042281Z  134 โ”‚ โ”‚             url: status.url,
2026-10-24T04:18:54.2042360Z  135 โ”‚ โ”‚           });
2026-10-24T04:18:54.2042435Z  136 โ”‚ โ”‚         },
2026-10-24T04:18:54.2042683Z  137 โ”‚ โ”‚         // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T04:18:54.2042885Z  138 โ”‚ โ”‚         selectInput: (inputs) => {
2026-10-24T04:18:54.2043034Z  139 โ”‚ โ”‚           const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T04:18:54.2043175Z  140 โ”‚ โ”‚           if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T04:18:54.2043333Z  141 โ”‚ โ”‚           const known = microphoneOrder(preferences.value.microphones);
2026-10-24T04:18:54.2043502Z  142 โ”‚ โ”‚           const order = rememberMicrophones(known, inputs);
2026-10-24T04:18:54.2043659Z  143 โ”‚ โ”‚           if (order !== known) {
2026-10-24T04:18:54.2043804Z  144 โ”‚ โ”‚             registry.set(updateMobilePreferencesAtom, {
2026-10-24T04:18:54.2043921Z  145 โ”‚ โ”‚               transform: (current) => ({
2026-10-24T04:18:54.2044151Z  146 โ”‚ โ”‚                 microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T04:18:54.2044235Z  147 โ”‚ โ”‚               }),
2026-10-24T04:18:54.2044313Z  148 โ”‚ โ”‚             });
2026-10-24T04:18:54.2044389Z  149 โ”‚ โ”‚           }
2026-10-24T04:18:54.2044524Z  150 โ”‚ โ”‚           return preferredMicrophoneInput(inputs, order);
2026-10-24T04:18:54.2044596Z  151 โ”‚ โ”‚         },
2026-10-24T04:18:54.2044723Z  152 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T04:18:54.2044960Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T04:18:54.2045045Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T04:18:54.2045094Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2045544Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2045823Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2045826Z
2026-10-24T04:18:54.2045964Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2046116Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-24T04:18:54.2046170Z  152 โ”‚     });
2026-10-24T04:18:54.2046252Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T04:18:54.2046363Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2046540Z      ยท          โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T04:18:54.2046650Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T04:18:54.2046755Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T04:18:54.2046804Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2047250Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2047577Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2047639Z
2026-10-24T04:18:54.2047790Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2047943Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-24T04:18:54.2048025Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T04:18:54.2048211Z  154 โ”‚ โ•ญโ”€โ–ถ     sessionRef.current = new VoiceInputSession({
2026-10-24T04:18:54.2048292Z  155 โ”‚ โ”‚         recorder,
2026-10-24T04:18:54.2048485Z  156 โ”‚ โ”‚         getTranscriber: getLocalVoiceTranscriber,
2026-10-24T04:18:54.2048598Z  157 โ”‚ โ”‚         requestPermission: async () => {
2026-10-24T04:18:54.2048762Z  158 โ”‚ โ”‚           const permission = await requestRecordingPermissionsAsync();
2026-10-24T04:18:54.2048947Z  159 โ”‚ โ”‚           return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T04:18:54.2049022Z  160 โ”‚ โ”‚         },
2026-10-24T04:18:54.2049158Z  161 โ”‚ โ”‚         configureRecording: configureVoiceRecordingAudio,
2026-10-24T04:18:54.2049289Z  162 โ”‚ โ”‚         releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T04:18:54.2049417Z  163 โ”‚ โ”‚         deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T04:18:54.2049526Z  164 โ”‚ โ”‚         onStateChange: (nextState) =>
2026-10-24T04:18:54.2049613Z  165 โ”‚ โ”‚           setState({
2026-10-24T04:18:54.2049711Z  166 โ”‚ โ”‚             state: nextState,
2026-10-24T04:18:54.2049846Z  167 โ”‚ โ”‚             ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T04:18:54.2049973Z  168 โ”‚ โ”‚             label: sessionRef.current?.label ?? null,
2026-10-24T04:18:54.2050050Z  169 โ”‚ โ”‚           }),
2026-10-24T04:18:54.2050174Z  170 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T04:18:54.2050362Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2050417Z  171 โ”‚       }
2026-10-24T04:18:54.2050468Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2050915Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2051198Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2051204Z
2026-10-24T04:18:54.2051341Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2051495Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-24T04:18:54.2051575Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T04:18:54.2051675Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T04:18:54.2051780Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2051955Z      ยท          โ”‚        โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T04:18:54.2052065Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T04:18:54.2052128Z  155 โ”‚       recorder,
2026-10-24T04:18:54.2052230Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2052740Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2053023Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2053025Z
2026-10-24T04:18:54.2053231Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2053383Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-24T04:18:54.2053465Z  184 โ”‚     return () => subscription.remove();
2026-10-24T04:18:54.2053528Z  185 โ”‚   }, [controller]);
2026-10-24T04:18:54.2053606Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2053746Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2053796Z  186 โ”‚
2026-10-24T04:18:54.2053846Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2054335Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2054614Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2054617Z
2026-10-24T04:18:54.2054752Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2054907Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-24T04:18:54.2054992Z  184 โ”‚     return () => subscription.remove();
2026-10-24T04:18:54.2055056Z  185 โ”‚   }, [controller]);
2026-10-24T04:18:54.2055129Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2055266Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2055317Z  186 โ”‚
2026-10-24T04:18:54.2055364Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2055809Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2056085Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2056087Z
2026-10-24T04:18:54.2056228Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2056382Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-24T04:18:54.2056437Z  191 โ”‚     },
2026-10-24T04:18:54.2056580Z  192 โ”‚     [controller, recorder],
2026-10-24T04:18:54.2056682Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2056820Z      ยท           โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2056875Z  193 โ”‚   );
2026-10-24T04:18:54.2056922Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2057367Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2057711Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2057760Z
2026-10-24T04:18:54.2057950Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2058101Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-24T04:18:54.2058188Z  174 โ”‚   const controller = session.controller;
2026-10-24T04:18:54.2058272Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T04:18:54.2058373Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2058532Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2058613Z  176 โ”‚
2026-10-24T04:18:54.2058693Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2059191Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2059473Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2059475Z
2026-10-24T04:18:54.2059611Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2059761Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-24T04:18:54.2059813Z  191 โ”‚     },
2026-10-24T04:18:54.2059881Z  192 โ”‚     [controller, recorder],
2026-10-24T04:18:54.2059967Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2060114Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2060173Z  193 โ”‚   );
2026-10-24T04:18:54.2060221Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2060665Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2060942Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2060944Z
2026-10-24T04:18:54.2061080Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2061232Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-24T04:18:54.2061322Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T04:18:54.2061430Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T04:18:54.2061516Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2061665Z      ยท                         โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2061716Z  247 โ”‚
2026-10-24T04:18:54.2061766Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2062211Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2062490Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2062493Z
2026-10-24T04:18:54.2062677Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2062945Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-24T04:18:54.2063030Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T04:18:54.2063136Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T04:18:54.2063262Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2063418Z      ยท                              โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2063468Z  247 โ”‚
2026-10-24T04:18:54.2063535Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2064068Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2064374Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2064377Z
2026-10-24T04:18:54.2064514Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2064663Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-24T04:18:54.2064729Z  260 โ”‚     setOwnerFocused,
2026-10-24T04:18:54.2064788Z  261 โ”‚     session,
2026-10-24T04:18:54.2064857Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2064990Z      ยท        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2065047Z  262 โ”‚     stop,
2026-10-24T04:18:54.2065096Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2065548Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2065826Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2065828Z
2026-10-24T04:18:54.2065965Z   โš  react(refs): Cannot access refs during render
2026-10-24T04:18:54.2066116Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-24T04:18:54.2066169Z  250 โ”‚
2026-10-24T04:18:54.2066304Z  251 โ”‚ โ•ญโ”€โ–ถ   return {
2026-10-24T04:18:54.2066552Z  252 โ”‚ โ”‚       isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-24T04:18:54.2066687Z  253 โ”‚ โ”‚       state,
2026-10-24T04:18:54.2066772Z  254 โ”‚ โ”‚       audioLevels,
2026-10-24T04:18:54.2066860Z  255 โ”‚ โ”‚       elapsedSeconds,
2026-10-24T04:18:54.2066985Z  256 โ”‚ โ”‚       isBusy: voiceInputBlocksSubmission(state),
2026-10-24T04:18:54.2067066Z  257 โ”‚ โ”‚       ownerKey,
2026-10-24T04:18:54.2067142Z  258 โ”‚ โ”‚       label,
2026-10-24T04:18:54.2067227Z  259 โ”‚ โ”‚       focusedOwners,
2026-10-24T04:18:54.2067323Z  260 โ”‚ โ”‚       setOwnerFocused,
2026-10-24T04:18:54.2067418Z  261 โ”‚ โ”‚       session,
2026-10-24T04:18:54.2067537Z  262 โ”‚ โ”‚       stop,
2026-10-24T04:18:54.2067616Z  263 โ”‚ โ”‚       cancel,
2026-10-24T04:18:54.2067746Z  264 โ”‚ โ”œโ”€โ–ถ   };
2026-10-24T04:18:54.2067943Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T04:18:54.2067995Z  265 โ”‚     }
2026-10-24T04:18:54.2068044Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2068490Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T04:18:54.2068768Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T04:18:54.2068771Z
2026-10-24T04:18:54.2068926Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.2069079Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T04:18:54.2069231Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T04:18:54.2069349Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T04:18:54.2069428Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2069558Z      ยท              โ•ฐโ”€โ”€ `audioLevels` originates here
2026-10-24T04:18:54.2069670Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T04:18:54.2069809Z  124 โ”‚   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-24T04:18:54.2069859Z  125 โ”‚
2026-10-24T04:18:54.2069962Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T04:18:54.2070063Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T04:18:54.2070200Z  128 โ”‚       create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T04:18:54.2070291Z  129 โ”‚       onStatus: (status: RecordingStatus) => {
2026-10-24T04:18:54.2070406Z  130 โ”‚         sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T04:18:54.2070487Z  131 โ”‚           isFinished: status.isFinished,
2026-10-24T04:18:54.2070625Z  132 โ”‚           hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T04:18:54.2070697Z  133 โ”‚           error: status.error,
2026-10-24T04:18:54.2070762Z  134 โ”‚           url: status.url,
2026-10-24T04:18:54.2070818Z  135 โ”‚         });
2026-10-24T04:18:54.2070875Z  136 โ”‚       },
2026-10-24T04:18:54.2071034Z  137 โ”‚       // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T04:18:54.2071108Z  138 โ”‚       selectInput: (inputs) => {
2026-10-24T04:18:54.2071274Z  139 โ”‚         const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T04:18:54.2071443Z  140 โ”‚         if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T04:18:54.2071570Z  141 โ”‚         const known = microphoneOrder(preferences.value.microphones);
2026-10-24T04:18:54.2071675Z  142 โ”‚         const order = rememberMicrophones(known, inputs);
2026-10-24T04:18:54.2071743Z  143 โ”‚         if (order !== known) {
2026-10-24T04:18:54.2071846Z  144 โ”‚           registry.set(updateMobilePreferencesAtom, {
2026-10-24T04:18:54.2071927Z  145 โ”‚             transform: (current) => ({
2026-10-24T04:18:54.2072161Z  146 โ”‚               microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T04:18:54.2072224Z  147 โ”‚             }),
2026-10-24T04:18:54.2072284Z  148 โ”‚           });
2026-10-24T04:18:54.2072340Z  149 โ”‚         }
2026-10-24T04:18:54.2072450Z  150 โ”‚         return preferredMicrophoneInput(inputs, order);
2026-10-24T04:18:54.2072506Z  151 โ”‚       },
2026-10-24T04:18:54.2072559Z  152 โ”‚     });
2026-10-24T04:18:54.2072638Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T04:18:54.2072735Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T04:18:54.2072793Z  155 โ”‚       recorder,
2026-10-24T04:18:54.2072889Z  156 โ”‚       getTranscriber: getLocalVoiceTranscriber,
2026-10-24T04:18:54.2072972Z  157 โ”‚       requestPermission: async () => {
2026-10-24T04:18:54.2073097Z  158 โ”‚         const permission = await requestRecordingPermissionsAsync();
2026-10-24T04:18:54.2073248Z  159 โ”‚         return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T04:18:54.2073303Z  160 โ”‚       },
2026-10-24T04:18:54.2073409Z  161 โ”‚       configureRecording: configureVoiceRecordingAudio,
2026-10-24T04:18:54.2073514Z  162 โ”‚       releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T04:18:54.2073615Z  163 โ”‚       deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T04:18:54.2073692Z  164 โ”‚       onStateChange: (nextState) =>
2026-10-24T04:18:54.2073755Z  165 โ”‚         setState({
2026-10-24T04:18:54.2073821Z  166 โ”‚           state: nextState,
2026-10-24T04:18:54.2073924Z  167 โ”‚           ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T04:18:54.2074051Z  168 โ”‚           label: sessionRef.current?.label ?? null,
2026-10-24T04:18:54.2074109Z  169 โ”‚         }),
2026-10-24T04:18:54.2074161Z  170 โ”‚     });
2026-10-24T04:18:54.2074212Z  171 โ”‚   }
2026-10-24T04:18:54.2074263Z  172 โ”‚
2026-10-24T04:18:54.2074346Z  173 โ”‚   const session = sessionRef.current;
2026-10-24T04:18:54.2074430Z  174 โ”‚   const controller = session.controller;
2026-10-24T04:18:54.2074514Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T04:18:54.2074570Z  176 โ”‚
2026-10-24T04:18:54.2074635Z  177 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2074779Z  178 โ”‚     const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-24T04:18:54.2074917Z  179 โ”‚       // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-24T04:18:54.2075050Z  180 โ”‚       // real background state cancels preparation; recorder status handles
2026-10-24T04:18:54.2075150Z  181 โ”‚       // calls and route interruptions during capture.
2026-10-24T04:18:54.2075279Z  182 โ”‚       if (nextState === "background") controller.appMovedToBackground();
2026-10-24T04:18:54.2075332Z  183 โ”‚     });
2026-10-24T04:18:54.2075415Z  184 โ”‚     return () => subscription.remove();
2026-10-24T04:18:54.2075477Z  185 โ”‚   }, [controller]);
2026-10-24T04:18:54.2075527Z  186 โ”‚
2026-10-24T04:18:54.2075585Z  187 โ”‚   useEffect(
2026-10-24T04:18:54.2075696Z  188 โ”‚     () => () => {
2026-10-24T04:18:54.2075825Z  189 โ”‚       controller.dispose();
2026-10-24T04:18:54.2075893Z  190 โ”‚       recorder.release();
2026-10-24T04:18:54.2075946Z  191 โ”‚     },
2026-10-24T04:18:54.2076015Z  192 โ”‚     [controller, recorder],
2026-10-24T04:18:54.2076065Z  193 โ”‚   );
2026-10-24T04:18:54.2076116Z  194 โ”‚
2026-10-24T04:18:54.2076178Z  195 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2076267Z  196 โ”‚     if (state.phase !== "recording") return;
2026-10-24T04:18:54.2076315Z  197 โ”‚
2026-10-24T04:18:54.2076462Z  198 โ”‚     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-24T04:18:54.2076587Z  199 โ”‚     const activation = activateKeepAwakeAsync(tag);
2026-10-24T04:18:54.2076710Z  200 โ”‚     void activation.catch(() => {});
2026-10-24T04:18:54.2076771Z  201 โ”‚     return () => {
2026-10-24T04:18:54.2076922Z  202 โ”‚       // Release after activation settles, even if the recording ends immediately.
2026-10-24T04:18:54.2077059Z  203 โ”‚       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-24T04:18:54.2077112Z  204 โ”‚     };
2026-10-24T04:18:54.2077188Z  205 โ”‚   }, [keepAwakeId, state.phase]);
2026-10-24T04:18:54.2077237Z  206 โ”‚
2026-10-24T04:18:54.2077297Z  207 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2077425Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T04:18:54.2077474Z  209 โ”‚
2026-10-24T04:18:54.2077589Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T04:18:54.2077737Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T04:18:54.2077837Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T04:18:54.2077910Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2078067Z      ยท            โ•ฐโ”€โ”€ `audioLevels` cannot be modified
2026-10-24T04:18:54.2078123Z  213 โ”‚     }
2026-10-24T04:18:54.2078170Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2078428Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T04:18:54.2078726Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.2078728Z
2026-10-24T04:18:54.2078921Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T04:18:54.2079074Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T04:18:54.2079123Z  206 โ”‚
2026-10-24T04:18:54.2079184Z  207 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2079262Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2079476Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-24T04:18:54.2079605Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T04:18:54.2079655Z  209 โ”‚
2026-10-24T04:18:54.2079770Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T04:18:54.2079919Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T04:18:54.2080016Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T04:18:54.2080091Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2080220Z      ยท            โ•ฐโ”€โ”€ This modifies `audioLevels`
2026-10-24T04:18:54.2080275Z  213 โ”‚     }
2026-10-24T04:18:54.2080325Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2080709Z   help: This argument is a function which may reassign or mutate `audioLevels` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T04:18:54.2081069Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.2081072Z
2026-10-24T04:18:54.2081538Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2081754Z      โ•ญโ”€[packages/client-runtime/src/connection/supervisor.test.ts:135:3]
2026-10-24T04:18:54.2081863Z  134 โ”‚       let lastState = yield* SubscriptionRef.get(state);
2026-10-24T04:18:54.2082071Z  135 โ”‚ โ•ญโ”€โ–ถ   for (let iteration = 0; iteration < 100; iteration += 1) {
2026-10-24T04:18:54.2082204Z  136 โ”‚ โ”‚       lastState = yield* SubscriptionRef.get(state);
2026-10-24T04:18:54.2082309Z  137 โ”‚ โ”‚       if (predicate(lastState)) {
2026-10-24T04:18:54.2082399Z  138 โ”‚ โ”‚         return lastState;
2026-10-24T04:18:54.2082471Z  139 โ”‚ โ”‚       }
2026-10-24T04:18:54.2082571Z  140 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T04:18:54.2082691Z  141 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T04:18:54.2082762Z  142 โ”‚       return yield* Effect.die(
2026-10-24T04:18:54.2082812Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2082814Z
2026-10-24T04:18:54.2083021Z   โš  eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used.
2026-10-24T04:18:54.2083165Z      โ•ญโ”€[packages/client-runtime/src/work-log/presentation.ts:234:10]
2026-10-24T04:18:54.2083215Z  233 โ”‚
2026-10-24T04:18:54.2083326Z  234 โ”‚ function nonEmptyString(value: unknown): string | null {
2026-10-24T04:18:54.2083409Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2083549Z      ยท                 โ•ฐโ”€โ”€ 'nonEmptyString' is declared here
2026-10-24T04:18:54.2083686Z  235 โ”‚   return typeof value === "string" && value.trim().length > 0 ? value : null;
2026-10-24T04:18:54.2083735Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2083836Z   help: Consider removing this declaration.
2026-10-24T04:18:54.2083839Z
2026-10-24T04:18:54.2084115Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2084270Z      โ•ญโ”€[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-24T04:18:54.2084322Z  150 โ”‚
2026-10-24T04:18:54.2084385Z  151 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2084454Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2084575Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2084658Z  152 โ”‚     if (!controlledSelectedPath) {
2026-10-24T04:18:54.2084717Z  153 โ”‚       return;
2026-10-24T04:18:54.2084771Z  154 โ”‚     }
2026-10-24T04:18:54.2084851Z  155 โ”‚     setExpandedPaths((current) => {
2026-10-24T04:18:54.2084928Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2085091Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2085210Z  156 โ”‚       const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-24T04:18:54.2085310Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2085951Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2086338Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2086340Z
2026-10-24T04:18:54.2086522Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2086689Z      โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70]
2026-10-24T04:18:54.2086766Z  554 โ”‚           assert.deepStrictEqual(
2026-10-24T04:18:54.2086932Z  555 โ”‚             (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-24T04:18:54.2087052Z      ยท                                                                      โ”ฌ
2026-10-24T04:18:54.2087208Z      ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2087266Z  556 โ”‚             [
2026-10-24T04:18:54.2087315Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2087415Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2087417Z
2026-10-24T04:18:54.2087596Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2087764Z       โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70]
2026-10-24T04:18:54.2087843Z  1154 โ”‚           assert.deepStrictEqual(
2026-10-24T04:18:54.2088007Z  1155 โ”‚             (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-24T04:18:54.2088128Z       ยท                                                                      โ”ฌ
2026-10-24T04:18:54.2088283Z       ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2088343Z  1156 โ”‚             [
2026-10-24T04:18:54.2088394Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2088493Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2088496Z
2026-10-24T04:18:54.2088768Z   โš  eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'.
2026-10-24T04:18:54.2088907Z        โ•ญโ”€[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7]
2026-10-24T04:18:54.2088962Z  12365 โ”‚
2026-10-24T04:18:54.2089105Z  12366 โ”‚ const layerUnavailable: Layer.Layer<OrchestratorV2> = Layer.succeed(
2026-10-24T04:18:54.2089190Z        ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2089330Z        ยท               โ•ฐโ”€โ”€ 'layerUnavailable' is declared here
2026-10-24T04:18:54.2089396Z  12367 โ”‚   OrchestratorV2,
2026-10-24T04:18:54.2089447Z        โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2089550Z   help: Consider removing this declaration.
2026-10-24T04:18:54.2089552Z
2026-10-24T04:18:54.2089745Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.2089885Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-24T04:18:54.2089979Z  256 โ”‚     return () => cancelAnimationFrame(frame);
2026-10-24T04:18:54.2090057Z  257 โ”‚   }, [props.path, targetIndex]);
2026-10-24T04:18:54.2090186Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2090381Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `props.path`
2026-10-24T04:18:54.2090432Z  258 โ”‚
2026-10-24T04:18:54.2090482Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2090765Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.2091120Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2091123Z
2026-10-24T04:18:54.2091329Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T04:18:54.2091473Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-24T04:18:54.2091547Z  292 โ”‚                     <SourceText
2026-10-24T04:18:54.2091643Z  293 โ”‚                       key={`${index}:${tokenIndex}`}
2026-10-24T04:18:54.2091758Z      ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2091828Z  294 โ”‚                       style={{
2026-10-24T04:18:54.2091877Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2092018Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T04:18:54.2092020Z
2026-10-24T04:18:54.2092205Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T04:18:54.2092346Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-24T04:18:54.2092408Z  308 โ”‚             return (
2026-10-24T04:18:54.2092488Z  309 โ”‚               <SourceText key={index}>
2026-10-24T04:18:54.2092591Z      ยท                           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2092656Z  310 โ”‚                 {body}
2026-10-24T04:18:54.2092705Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2092843Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T04:18:54.2092846Z
2026-10-24T04:18:54.2093019Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T04:18:54.2093196Z      โ•ญโ”€[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34]
2026-10-24T04:18:54.2093263Z  115 โ”‚     return [...commands];
2026-10-24T04:18:54.2093389Z  116 โ”‚   }, [activeThreadRef, pathname, registrationVersion, navigation]);
2026-10-24T04:18:54.2093497Z      ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2093728Z      ยท                                           โ•ฐโ”€โ”€ Unnecessary dependency `registrationVersion`
2026-10-24T04:18:54.2093831Z  117 โ”‚
2026-10-24T04:18:54.2093879Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2094223Z   help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-24T04:18:54.2094534Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2094537Z
2026-10-24T04:18:54.2095057Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2095185Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:131:9]
2026-10-24T04:18:54.2095247Z  130 โ”‚           ) {
2026-10-24T04:18:54.2095453Z  131 โ”‚ โ•ญโ”€โ–ถ         for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T04:18:54.2095573Z  132 โ”‚ โ”‚             if (subscriptions.length >= count) {
2026-10-24T04:18:54.2095660Z  133 โ”‚ โ”‚               return;
2026-10-24T04:18:54.2095737Z  134 โ”‚ โ”‚             }
2026-10-24T04:18:54.2095841Z  135 โ”‚ โ”‚             yield* Effect.yieldNow;
2026-10-24T04:18:54.2095969Z  136 โ”‚ โ•ฐโ”€โ–ถ         }
2026-10-24T04:18:54.2096129Z  137 โ”‚             return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`));
2026-10-24T04:18:54.2096178Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2096180Z
2026-10-24T04:18:54.2096778Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2096909Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:252:7]
2026-10-24T04:18:54.2097068Z  251 โ”‚           yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient)));
2026-10-24T04:18:54.2097311Z  252 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) {
2026-10-24T04:18:54.2097411Z  253 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2097538Z  254 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2097656Z  255 โ”‚           yield* SubscriptionRef.set(activeSession, Option.none());
2026-10-24T04:18:54.2097711Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2097716Z
2026-10-24T04:18:54.2098156Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2098284Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:258:7]
2026-10-24T04:18:54.2098337Z  257 โ”‚
2026-10-24T04:18:54.2098576Z  258 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-24T04:18:54.2098678Z  259 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2098802Z  260 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2098967Z  261 โ”‚           yield* Fiber.interrupt(subscriptionFiber);
2026-10-24T04:18:54.2099076Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2099079Z
2026-10-24T04:18:54.2099518Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2099641Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:322:7]
2026-10-24T04:18:54.2099702Z  321 โ”‚           );
2026-10-24T04:18:54.2100019Z  322 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) {
2026-10-24T04:18:54.2100123Z  323 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2100246Z  324 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2100308Z  325 โ”‚
2026-10-24T04:18:54.2100359Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2100362Z
2026-10-24T04:18:54.2100804Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2100928Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:330:7]
2026-10-24T04:18:54.2101084Z  329 โ”‚           yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient)));
2026-10-24T04:18:54.2101325Z  330 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-24T04:18:54.2101424Z  331 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2101553Z  332 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2101654Z  333 โ”‚           yield* Fiber.interrupt(subscriptionFiber);
2026-10-24T04:18:54.2101705Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2101708Z
2026-10-24T04:18:54.2101976Z   โš  eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-24T04:18:54.2102100Z      โ•ญโ”€[packages/provider-cursor/src/server/auth.ts:249:20]
2026-10-24T04:18:54.2102152Z  248 โ”‚     },
2026-10-24T04:18:54.2102232Z  249 โ”‚     (effect, flow, stopSessions) =>
2026-10-24T04:18:54.2102324Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2102468Z      ยท                          โ•ฐโ”€โ”€ 'stopSessions' is declared here
2026-10-24T04:18:54.2102530Z  250 โ”‚       effect.pipe(
2026-10-24T04:18:54.2102580Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2102685Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2102690Z
2026-10-24T04:18:54.2103128Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2103257Z      โ•ญโ”€[packages/client-runtime/src/rpc/session.test.ts:226:3]
2026-10-24T04:18:54.2103310Z  225 โ”‚     ) {
2026-10-24T04:18:54.2103504Z  226 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T04:18:54.2103612Z  227 โ”‚ โ”‚       const socket = sockets[index];
2026-10-24T04:18:54.2103697Z  228 โ”‚ โ”‚       if (socket) {
2026-10-24T04:18:54.2103835Z  229 โ”‚ โ”‚         return socket;
2026-10-24T04:18:54.2103963Z  230 โ”‚ โ”‚       }
2026-10-24T04:18:54.2104076Z  231 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T04:18:54.2104220Z  232 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T04:18:54.2104387Z  233 โ”‚       return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket."));
2026-10-24T04:18:54.2104437Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2104439Z
2026-10-24T04:18:54.2104952Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2105083Z      โ•ญโ”€[packages/client-runtime/src/rpc/session.test.ts:240:3]
2026-10-24T04:18:54.2105135Z  239 โ”‚     ) {
2026-10-24T04:18:54.2105331Z  240 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T04:18:54.2105539Z  241 โ”‚ โ”‚       const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index];
2026-10-24T04:18:54.2105626Z  242 โ”‚ โ”‚       if (request) {
2026-10-24T04:18:54.2105718Z  243 โ”‚ โ”‚         return request;
2026-10-24T04:18:54.2105788Z  244 โ”‚ โ”‚       }
2026-10-24T04:18:54.2105888Z  245 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T04:18:54.2106007Z  246 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T04:18:54.2106168Z  247 โ”‚       return yield* Effect.die(new Error("Expected the RPC protocol to send a request."));
2026-10-24T04:18:54.2106215Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2106218Z
2026-10-24T04:18:54.2106497Z   โš  eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T04:18:54.2106655Z     โ•ญโ”€[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
2026-10-24T04:18:54.2106709Z  14 โ”‚
2026-10-24T04:18:54.2106778Z  15 โ”‚ const legacyCredentials = {
2026-10-24T04:18:54.2106860Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2107004Z     ยท               โ•ฐโ”€โ”€ 'legacyCredentials' is declared here
2026-10-24T04:18:54.2107071Z  16 โ”‚   version: 1 as const,
2026-10-24T04:18:54.2107118Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2107218Z   help: Consider removing this declaration.
2026-10-24T04:18:54.2107220Z
2026-10-24T04:18:54.2107401Z   โš  oxc(no-accumulating-spread): Do not spread accumulators in loops
2026-10-24T04:18:54.2107526Z      โ•ญโ”€[packages/client-runtime/src/state/shell.ts:189:5]
2026-10-24T04:18:54.2107632Z  186 โ”‚     let waiting = yield* Ref.get(awaitingCompletion);
2026-10-24T04:18:54.2107698Z  187 โ”‚     let next = initial;
2026-10-24T04:18:54.2107766Z      ยท         โ”€โ”€โ”ฌโ”€
2026-10-24T04:18:54.2107882Z      ยท           โ•ฐโ”€โ”€ From this accumulator
2026-10-24T04:18:54.2107958Z  188 โ”‚     let receivedSnapshot = false;
2026-10-24T04:18:54.2108031Z  189 โ”‚     for (const item of items) {
2026-10-24T04:18:54.2108097Z      ยท     โ”€โ”ฌโ”€
2026-10-24T04:18:54.2108199Z      ยท      โ•ฐโ”€โ”€ For this loop
2026-10-24T04:18:54.2108283Z  190 โ”‚       if (item.kind === "synchronized") {
2026-10-24T04:18:54.2108348Z  191 โ”‚         waiting = false;
2026-10-24T04:18:54.2108437Z  192 โ”‚         if (Option.isSome(next.snapshot)) {
2026-10-24T04:18:54.2108606Z  193 โ”‚           next = { ...next, status: "live", error: Option.none() };
2026-10-24T04:18:54.2108745Z      ยท                    โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2108872Z      ยท                       โ•ฐโ”€โ”€ From this spread
2026-10-24T04:18:54.2108929Z  194 โ”‚         }
2026-10-24T04:18:54.2108979Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2109128Z   help: Consider using `Object.assign()` to mutate the accumulator instead.
2026-10-24T04:18:54.2109280Z   note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-24T04:18:54.2109283Z
2026-10-24T04:18:54.2109564Z   โš  eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used.
2026-10-24T04:18:54.2109735Z       โ•ญโ”€[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10]
2026-10-24T04:18:54.2109790Z  1397 โ”‚
2026-10-24T04:18:54.2109878Z  1398 โ”‚ function assertUserMessagesExclude(
2026-10-24T04:18:54.2109977Z       ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2110139Z       ยท                      โ•ฐโ”€โ”€ 'assertUserMessagesExclude' is declared here
2026-10-24T04:18:54.2110242Z  1399 โ”‚   projection: OrchestrationV2ThreadProjection,
2026-10-24T04:18:54.2110296Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2110396Z   help: Consider removing this declaration.
2026-10-24T04:18:54.2110398Z
2026-10-24T04:18:54.2110548Z   โš  eslint(no-new): Do not use 'new' for side effects.
2026-10-24T04:18:54.2110669Z      โ•ญโ”€[apps/server/src/mcp/McpToolAccess.test.ts:168:3]
2026-10-24T04:18:54.2110778Z  167 โ”‚   // @ts-expect-error a declaration constructed directly
2026-10-24T04:18:54.2110875Z  168 โ”‚   new McpToolAccess.Declaration(unchecked);
2026-10-24T04:18:54.2110970Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2111091Z  169 โ”‚   // @ts-expect-error a handlers layer built outside McpToolAccess
2026-10-24T04:18:54.2111143Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2111296Z   help: Assign the result of 'new' to a variable or compare it to a reference.
2026-10-24T04:18:54.2111298Z
2026-10-24T04:18:54.2111492Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T04:18:54.2111618Z    โ•ญโ”€[packages/client-runtime/src/state/usageAccess.ts:3:8]
2026-10-24T04:18:54.2111690Z  2 โ”‚   AuthDiagnosticsReadScope,
2026-10-24T04:18:54.2111757Z  3 โ”‚   type AuthSessionState,
2026-10-24T04:18:54.2111837Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2111982Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T04:18:54.2112052Z  4 โ”‚   sessionGrantsScope,
2026-10-24T04:18:54.2112104Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2112199Z   help: Consider removing this import.
2026-10-24T04:18:54.2112202Z
2026-10-24T04:18:54.2112480Z   โš  eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'.
2026-10-24T04:18:54.2112601Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:218:7]
2026-10-24T04:18:54.2112654Z  217 โ”‚
2026-10-24T04:18:54.2112799Z  218 โ”‚ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect<void> =>
2026-10-24T04:18:54.2112883Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2113034Z      ยท                 โ•ฐโ”€โ”€ 'revokeActiveMcpThread' is declared here
2026-10-24T04:18:54.2113263Z  219 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void;
2026-10-24T04:18:54.2113368Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2113469Z   help: Consider removing this declaration.
2026-10-24T04:18:54.2113471Z
2026-10-24T04:18:54.2113769Z   โš  eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T04:18:54.2113889Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:221:7]
2026-10-24T04:18:54.2113939Z  220 โ”‚
2026-10-24T04:18:54.2114246Z  221 โ”‚ const revokeAllActiveMcpCredentials = (): Effect.Effect<void> =>
2026-10-24T04:18:54.2114395Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2114617Z      ยท                     โ•ฐโ”€โ”€ 'revokeAllActiveMcpCredentials' is declared here
2026-10-24T04:18:54.2114821Z  222 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void;
2026-10-24T04:18:54.2114891Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2115017Z   help: Consider removing this declaration.
2026-10-24T04:18:54.2115020Z
2026-10-24T04:18:54.2115269Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T04:18:54.2115426Z    โ•ญโ”€[packages/client-runtime/src/state/filesystem.ts:3:8]
2026-10-24T04:18:54.2115516Z  2 โ”‚   AuthFilesystemReadScope,
2026-10-24T04:18:54.2115598Z  3 โ”‚   type AuthSessionState,
2026-10-24T04:18:54.2115703Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2115878Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T04:18:54.2115970Z  4 โ”‚   type FilesystemBrowseEntry,
2026-10-24T04:18:54.2116028Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2116156Z   help: Consider removing this import.
2026-10-24T04:18:54.2116164Z
2026-10-24T04:18:54.2116388Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2116558Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
2026-10-24T04:18:54.2116753Z  120 โ”‚   const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
2026-10-24T04:18:54.2116864Z  121 โ”‚   const dispatch = vi.fn((_: unknown) =>
2026-10-24T04:18:54.2116965Z      ยท                           โ”ฌ
2026-10-24T04:18:54.2117127Z      ยท                           โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2117249Z  122 โ”‚     (options.dispatchGate ?? Effect.void).pipe(
2026-10-24T04:18:54.2117311Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2117438Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2117441Z
2026-10-24T04:18:54.2117750Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2117954Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
2026-10-24T04:18:54.2118024Z  133 โ”‚   );
2026-10-24T04:18:54.2118154Z  134 โ”‚   const listLocalBranchNames = vi.fn((_: string) =>
2026-10-24T04:18:54.2118271Z      ยท                                       โ”ฌ
2026-10-24T04:18:54.2118438Z      ยท                                       โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2118523Z  135 โ”‚     Effect.succeed(
2026-10-24T04:18:54.2118589Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2118713Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2118715Z
2026-10-24T04:18:54.2118934Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2119102Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
2026-10-24T04:18:54.2119174Z  177 โ”‚   });
2026-10-24T04:18:54.2119294Z  178 โ”‚   const sendToThread = vi.fn((_: unknown) => {
2026-10-24T04:18:54.2119397Z      ยท                               โ”ฌ
2026-10-24T04:18:54.2119560Z      ยท                               โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2119681Z  179 โ”‚     switch (options.continuation ?? "queued") {
2026-10-24T04:18:54.2119744Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2119863Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2119871Z
2026-10-24T04:18:54.2120088Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2120249Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
2026-10-24T04:18:54.2120312Z  202 โ”‚   );
2026-10-24T04:18:54.2120408Z  203 โ”‚   const removeWorktree = vi.fn((_: unknown) =>
2026-10-24T04:18:54.2120492Z      ยท                                 โ”ฌ
2026-10-24T04:18:54.2120620Z      ยท                                 โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2120697Z  204 โ”‚     options.removeWorktreeFails
2026-10-24T04:18:54.2120746Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2120838Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2120841Z
2026-10-24T04:18:54.2121013Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2121139Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
2026-10-24T04:18:54.2121191Z  207 โ”‚   );
2026-10-24T04:18:54.2121286Z  208 โ”‚   const deleteLocalBranch = vi.fn((_: unknown) =>
2026-10-24T04:18:54.2121381Z      ยท                                    โ”ฌ
2026-10-24T04:18:54.2121514Z      ยท                                    โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2121597Z  209 โ”‚     options.deleteLocalBranchFails
2026-10-24T04:18:54.2121645Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2121741Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2121744Z
2026-10-24T04:18:54.2121914Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2122041Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
2026-10-24T04:18:54.2122092Z  212 โ”‚   );
2026-10-24T04:18:54.2122202Z  213 โ”‚   const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
2026-10-24T04:18:54.2122297Z      ยท                                          โ”ฌ
2026-10-24T04:18:54.2122482Z      ยท                                          โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2122602Z  214 โ”‚     options.fetchWorktreeBaseFails
2026-10-24T04:18:54.2122650Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2122746Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2122748Z
2026-10-24T04:18:54.2122920Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2123046Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
2026-10-24T04:18:54.2123097Z  253 โ”‚   );
2026-10-24T04:18:54.2123184Z  254 โ”‚   const localStatus = vi.fn((_: unknown) =>
2026-10-24T04:18:54.2123269Z      ยท                              โ”ฌ
2026-10-24T04:18:54.2123394Z      ยท                              โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2123460Z  255 โ”‚     Effect.succeed({
2026-10-24T04:18:54.2123515Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2123612Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2123614Z
2026-10-24T04:18:54.2123785Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T04:18:54.2123916Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
2026-10-24T04:18:54.2123968Z  263 โ”‚   );
2026-10-24T04:18:54.2124204Z  264 โ”‚   const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
2026-10-24T04:18:54.2124306Z      ยท                                โ”ฌ
2026-10-24T04:18:54.2124437Z      ยท                                โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T04:18:54.2124578Z  265 โ”‚   const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
2026-10-24T04:18:54.2124631Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2124734Z   help: Consider removing this parameter.
2026-10-24T04:18:54.2124741Z
2026-10-24T04:18:54.2124939Z   โš  unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-24T04:18:54.2125101Z     โ•ญโ”€[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13]
2026-10-24T04:18:54.2125172Z  14 โ”‚ } from "@t3tools/contracts";
2026-10-24T04:18:54.2125257Z  15 โ”‚ import type {} from "@t3tools/contracts";
2026-10-24T04:18:54.2125327Z     ยท             โ”€โ”€
2026-10-24T04:18:54.2125502Z  16 โ”‚ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl";
2026-10-24T04:18:54.2125554Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2125630Z   help: Remove empty braces
2026-10-24T04:18:54.2125633Z
2026-10-24T04:18:54.2125886Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2126066Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
2026-10-24T04:18:54.2126117Z  104 โ”‚
2026-10-24T04:18:54.2126179Z  105 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2126247Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2126371Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2126447Z  106 โ”‚     clearReviewCommentTarget();
2026-10-24T04:18:54.2126539Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-24T04:18:54.2126642Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2126811Z      ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2126882Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-24T04:18:54.2126930Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2127589Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2127961Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2127964Z
2026-10-24T04:18:54.2128211Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2128443Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
2026-10-24T04:18:54.2128503Z  109 โ”‚
2026-10-24T04:18:54.2128573Z  110 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2128642Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2128765Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2128848Z  111 โ”‚     if (activeCommentTarget === null) {
2026-10-24T04:18:54.2128946Z  112 โ”‚       setPendingNativeCommentSelection(null);
2026-10-24T04:18:54.2129049Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2129220Z      ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2129271Z  113 โ”‚     }
2026-10-24T04:18:54.2129320Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2129903Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2130216Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2130218Z
2026-10-24T04:18:54.2130411Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.2130586Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
2026-10-24T04:18:54.2130680Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-24T04:18:54.2130750Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-24T04:18:54.2130831Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2130987Z      ยท                โ•ฐโ”€โ”€ Unnecessary dependency `selectedSection?.id`
2026-10-24T04:18:54.2131041Z  109 โ”‚
2026-10-24T04:18:54.2131089Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2131368Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.2131666Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2131669Z
2026-10-24T04:18:54.2131856Z   โš  eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used.
2026-10-24T04:18:54.2131988Z    โ•ญโ”€[packages/client-runtime/src/state/sharedSettings.ts:2:3]
2026-10-24T04:18:54.2132048Z  1 โ”‚ import type {
2026-10-24T04:18:54.2132109Z  2 โ”‚   EnvironmentId,
2026-10-24T04:18:54.2132179Z    ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2132444Z    ยท         โ•ฐโ”€โ”€ 'EnvironmentId' is imported here
2026-10-24T04:18:54.2132572Z  3 โ”‚   ExecutionEnvironmentCapabilities,
2026-10-24T04:18:54.2132621Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2132714Z   help: Consider removing this import.
2026-10-24T04:18:54.2132716Z
2026-10-24T04:18:54.2133207Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2133366Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:169:7]
2026-10-24T04:18:54.2133425Z  168 โ”‚           });
2026-10-24T04:18:54.2133610Z  169 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-24T04:18:54.2133799Z  170 โ”‚ โ”‚           if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break;
2026-10-24T04:18:54.2133904Z  171 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2134065Z  172 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2134117Z  173 โ”‚
2026-10-24T04:18:54.2134167Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2134169Z
2026-10-24T04:18:54.2134613Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2134752Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:178:7]
2026-10-24T04:18:54.2134855Z  177 โ”‚           yield* Deferred.succeed(releaseSave, undefined);
2026-10-24T04:18:54.2135042Z  178 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-24T04:18:54.2135171Z  179 โ”‚ โ”‚           if ((yield* Ref.get(saved)).length > 0) break;
2026-10-24T04:18:54.2135272Z  180 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2135396Z  181 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2135447Z  182 โ”‚
2026-10-24T04:18:54.2135495Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2135498Z
2026-10-24T04:18:54.2135934Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2136079Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:307:7]
2026-10-24T04:18:54.2136201Z  306 โ”‚           yield* Deferred.succeed(releaseUnenrichedSave, undefined);
2026-10-24T04:18:54.2136381Z  307 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-24T04:18:54.2136552Z  308 โ”‚ โ”‚           const values = yield* Ref.get(saved);
2026-10-24T04:18:54.2136745Z  309 โ”‚ โ”‚           if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) {
2026-10-24T04:18:54.2136827Z  310 โ”‚ โ”‚             break;
2026-10-24T04:18:54.2136901Z  311 โ”‚ โ”‚           }
2026-10-24T04:18:54.2137002Z  312 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2137125Z  313 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2137310Z  314 โ”‚
2026-10-24T04:18:54.2137444Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2137446Z
2026-10-24T04:18:54.2137607Z   โš  eslint(no-empty-pattern): Empty array binding pattern
2026-10-24T04:18:54.2139444Z       โ•ญโ”€[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12]
2026-10-24T04:18:54.2139510Z  1525 โ”‚
2026-10-24T04:18:54.2139574Z  1526 โ”‚ for (const [] of [
2026-10-24T04:18:54.2139646Z       ยท            โ”€โ”€
2026-10-24T04:18:54.2139715Z  1527 โ”‚   ["github", "github.com"],
2026-10-24T04:18:54.2139766Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2140036Z   help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.
2026-10-24T04:18:54.2140039Z
2026-10-24T04:18:54.2140299Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2140463Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7]
2026-10-24T04:18:54.2140513Z  100 โ”‚
2026-10-24T04:18:54.2140575Z  101 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2140643Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2140768Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2140866Z  102 โ”‚     if (!target || selectedLines.length === 0) {
2026-10-24T04:18:54.2140945Z  103 โ”‚       setHighlightedLinesById({});
2026-10-24T04:18:54.2141033Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2141199Z      ยท                  โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2141258Z  104 โ”‚       return;
2026-10-24T04:18:54.2141305Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2141890Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2142204Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2142207Z
2026-10-24T04:18:54.2142403Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.2142531Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:454:7]
2026-10-24T04:18:54.2142610Z  453 โ”‚     showAuxiliaryPane("inspector");
2026-10-24T04:18:54.2142791Z  454 โ”‚   }, [environmentId, showAuxiliaryPane, threadId]);
2026-10-24T04:18:54.2143004Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€                     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2143192Z      ยท             โ”‚                               โ•ฐโ”€โ”€ Unnecessary dependency `threadId`
2026-10-24T04:18:54.2143334Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `environmentId`
2026-10-24T04:18:54.2143392Z  455 โ”‚   const {
2026-10-24T04:18:54.2143440Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2143800Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.2144138Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2144142Z
2026-10-24T04:18:54.2144322Z   โš  react(static-components): Cannot create components during render
2026-10-24T04:18:54.2144456Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:725:20]
2026-10-24T04:18:54.2144516Z  492 โ”‚   // same check.
2026-10-24T04:18:54.2144637Z  493 โ”‚   const NativeReviewDiffView = resolveNativeReviewDiffView();
2026-10-24T04:18:54.2144750Z      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2144922Z      ยท                                             โ•ฐโ”€โ”€ The component is created during render here
2026-10-24T04:18:54.2145066Z  494 โ”‚   const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
2026-10-24T04:18:54.2145182Z  495 โ”‚   const showcasedReviewDrawRef = useRef<string | null>(null);
2026-10-24T04:18:54.2145311Z  496 โ”‚   const [isPullRefreshing, setIsPullRefreshing] = useState(false);
2026-10-24T04:18:54.2145402Z  497 โ”‚   const handlePullToRefresh = async () => {
2026-10-24T04:18:54.2145476Z  498 โ”‚     setIsPullRefreshing(true);
2026-10-24T04:18:54.2145555Z  499 โ”‚     await refreshSelectedSection();
2026-10-24T04:18:54.2145627Z  500 โ”‚     setIsPullRefreshing(false);
2026-10-24T04:18:54.2145678Z  501 โ”‚   };
2026-10-24T04:18:54.2145814Z  502 โ”‚   const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
2026-10-24T04:18:54.2145951Z  503 โ”‚   const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
2026-10-24T04:18:54.2146052Z  504 โ”‚   const fileVisibility = useReviewFileVisibility({
2026-10-24T04:18:54.2146133Z  505 โ”‚     threadKey: reviewCache.threadKey,
2026-10-24T04:18:54.2146219Z  506 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-24T04:18:54.2146283Z  507 โ”‚     files: reviewFiles,
2026-10-24T04:18:54.2146381Z  508 โ”‚     cachedExpandedFileIds: selectedSection?.id
2026-10-24T04:18:54.2146511Z  509 โ”‚       ? reviewCache.expandedFileIdsBySection[selectedSection.id]
2026-10-24T04:18:54.2146571Z  510 โ”‚       : undefined,
2026-10-24T04:18:54.2146663Z  511 โ”‚     cachedViewedFileIds: selectedSection?.id
2026-10-24T04:18:54.2146779Z  512 โ”‚       ? reviewCache.viewedFileIdsBySection[selectedSection.id]
2026-10-24T04:18:54.2146838Z  513 โ”‚       : undefined,
2026-10-24T04:18:54.2146890Z  514 โ”‚   });
2026-10-24T04:18:54.2147071Z  515 โ”‚   const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
2026-10-24T04:18:54.2147195Z  516 โ”‚   const commentSelection = useReviewCommentSelectionController({
2026-10-24T04:18:54.2147254Z  517 โ”‚     environmentId,
2026-10-24T04:18:54.2147312Z  518 โ”‚     threadId,
2026-10-24T04:18:54.2147373Z  519 โ”‚     selectedSection,
2026-10-24T04:18:54.2147439Z  520 โ”‚     nativeReviewDiffData,
2026-10-24T04:18:54.2147544Z  521 โ”‚   });
2026-10-24T04:18:54.2147706Z  522 โ”‚   const nativeBridge = useNativeReviewDiffBridge({
2026-10-24T04:18:54.2147788Z  523 โ”‚     threadKey: reviewCache.threadKey,
2026-10-24T04:18:54.2147873Z  524 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-24T04:18:54.2147945Z  525 โ”‚     diff: selectedSection?.diff,
2026-10-24T04:18:54.2148018Z  526 โ”‚     data: nativeReviewDiffData,
2026-10-24T04:18:54.2148081Z  527 โ”‚     collapsedFileIds,
2026-10-24T04:18:54.2148141Z  528 โ”‚     viewedFileIds,
2026-10-24T04:18:54.2148245Z  529 โ”‚     selectedRowIds: commentSelection.selectedRowIds,
2026-10-24T04:18:54.2148344Z  530 โ”‚     canHighlight: parsedDiff.kind === "files",
2026-10-24T04:18:54.2148410Z  531 โ”‚   });
2026-10-24T04:18:54.2148524Z  532 โ”‚   const showcaseReviewKey =
2026-10-24T04:18:54.2148661Z  533 โ”‚     SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
2026-10-24T04:18:54.2148863Z  534 โ”‚       ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
2026-10-24T04:18:54.2148924Z  535 โ”‚       : null;
2026-10-24T04:18:54.2149084Z  536 โ”‚   const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
2026-10-24T04:18:54.2149158Z  537 โ”‚     nativeBridge.onDebug(event);
2026-10-24T04:18:54.2149211Z  538 โ”‚     if (
2026-10-24T04:18:54.2149286Z  539 โ”‚       showcaseReviewKey === null ||
2026-10-24T04:18:54.2149401Z  540 โ”‚       showcasedReviewDrawRef.current === showcaseReviewKey ||
2026-10-24T04:18:54.2149505Z  541 โ”‚       !isNativeReviewDiffDrawEvent(event.nativeEvent)
2026-10-24T04:18:54.2149557Z  542 โ”‚     ) {
2026-10-24T04:18:54.2149613Z  543 โ”‚       return;
2026-10-24T04:18:54.2149664Z  544 โ”‚     }
2026-10-24T04:18:54.2149770Z  545 โ”‚     showcasedReviewDrawRef.current = showcaseReviewKey;
2026-10-24T04:18:54.2149929Z  546 โ”‚     reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
2026-10-24T04:18:54.2149982Z  547 โ”‚   };
2026-10-24T04:18:54.2150031Z  548 โ”‚
2026-10-24T04:18:54.2150142Z  549 โ”‚   const handleSelectFile = async (fileId: string | null) => {
2026-10-24T04:18:54.2150217Z  550 โ”‚     loadVisibleFile(fileId, true);
2026-10-24T04:18:54.2150302Z  551 โ”‚     commentSelection.clearSelection();
2026-10-24T04:18:54.2150418Z  552 โ”‚     if (fileId !== null && collapsedFileIds.includes(fileId)) {
2026-10-24T04:18:54.2150493Z  553 โ”‚       toggleExpandedFile(fileId);
2026-10-24T04:18:54.2150543Z  554 โ”‚     }
2026-10-24T04:18:54.2150649Z  555 โ”‚     const nativeView = nativeReviewDiffViewRef.current;
2026-10-24T04:18:54.2150717Z  556 โ”‚     if (!nativeView) return;
2026-10-24T04:18:54.2150807Z  557 โ”‚     const result = await settlePromise(() =>
2026-10-24T04:18:54.2150977Z  558 โ”‚       fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
2026-10-24T04:18:54.2151033Z  559 โ”‚     );
2026-10-24T04:18:54.2151116Z  560 โ”‚     if (AsyncResult.isFailure(result)) {
2026-10-24T04:18:54.2151288Z  561 โ”‚       console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
2026-10-24T04:18:54.2151338Z  562 โ”‚     }
2026-10-24T04:18:54.2151388Z  563 โ”‚   };
2026-10-24T04:18:54.2151466Z  564 โ”‚   const handleVisibleFileChange = (
2026-10-24T04:18:54.2151591Z  565 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
2026-10-24T04:18:54.2151643Z  566 โ”‚   ) => {
2026-10-24T04:18:54.2151747Z  567 โ”‚     loadVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-24T04:18:54.2151908Z  568 โ”‚     reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-24T04:18:54.2151958Z  569 โ”‚   };
2026-10-24T04:18:54.2152086Z  570 โ”‚   const renderInspector = () => (
2026-10-24T04:18:54.2152209Z  571 โ”‚     <ReviewFileNavigator
2026-10-24T04:18:54.2152286Z  572 โ”‚       ref={reviewFileNavigatorRef}
2026-10-24T04:18:54.2152370Z  573 โ”‚       files={nativeReviewDiffData.files}
2026-10-24T04:18:54.2152441Z  574 โ”‚       headerInset={insets.top}
2026-10-24T04:18:54.2152533Z  575 โ”‚       sectionId={selectedSection?.id ?? null}
2026-10-24T04:18:54.2152645Z  576 โ”‚       onSelectFile={(fileId) => void handleSelectFile(fileId)}
2026-10-24T04:18:54.2152697Z  577 โ”‚     />
2026-10-24T04:18:54.2152745Z  578 โ”‚   );
2026-10-24T04:18:54.2152795Z  579 โ”‚
2026-10-24T04:18:54.2153027Z  580 โ”‚   const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
2026-10-24T04:18:54.2153128Z  581 โ”‚     const { fileId } = event.nativeEvent;
2026-10-24T04:18:54.2153188Z  582 โ”‚     if (fileId) {
2026-10-24T04:18:54.2153271Z  583 โ”‚       loadVisibleFile(fileId, true);
2026-10-24T04:18:54.2153348Z  584 โ”‚       toggleExpandedFile(fileId);
2026-10-24T04:18:54.2153397Z  585 โ”‚     }
2026-10-24T04:18:54.2153449Z  586 โ”‚   };
2026-10-24T04:18:54.2153498Z  587 โ”‚
2026-10-24T04:18:54.2153583Z  588 โ”‚   const handleNativeToggleViewedFile = (
2026-10-24T04:18:54.2153695Z  589 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string }>,
2026-10-24T04:18:54.2153748Z  590 โ”‚   ) => {
2026-10-24T04:18:54.2153829Z  591 โ”‚     const { fileId } = event.nativeEvent;
2026-10-24T04:18:54.2153889Z  592 โ”‚     if (fileId) {
2026-10-24T04:18:54.2153962Z  593 โ”‚       toggleViewedFile(fileId);
2026-10-24T04:18:54.2154012Z  594 โ”‚     }
2026-10-24T04:18:54.2154094Z  595 โ”‚   };
2026-10-24T04:18:54.2154150Z  596 โ”‚
2026-10-24T04:18:54.2154220Z  597 โ”‚   const parsedDiffNotice =
2026-10-24T04:18:54.2154381Z  598 โ”‚     parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
2026-10-24T04:18:54.2154499Z  599 โ”‚   const hasCachedSelectedDiff = selectedSection?.diff != null;
2026-10-24T04:18:54.2154648Z  600 โ”‚   const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
2026-10-24T04:18:54.2154763Z  601 โ”‚   const sectionMenu = buildReviewSectionMenu(reviewSections);
2026-10-24T04:18:54.2154914Z  602 โ”‚   const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
2026-10-24T04:18:54.2155019Z  603 โ”‚     hasEnvironmentPresentation: environment.isReady,
2026-10-24T04:18:54.2155115Z  604 โ”‚     isEnvironmentConnected: isEnvironmentReady,
2026-10-24T04:18:54.2155182Z  605 โ”‚     hasCachedSelectedDiff,
2026-10-24T04:18:54.2155245Z  606 โ”‚     hasAnyCachedDiff,
2026-10-24T04:18:54.2155296Z  607 โ”‚   });
2026-10-24T04:18:54.2155378Z  608 โ”‚   const handleRetryEnvironment = () => {
2026-10-24T04:18:54.2155467Z  609 โ”‚     void retryEnvironment(environmentId);
2026-10-24T04:18:54.2155521Z  610 โ”‚   };
2026-10-24T04:18:54.2155601Z  611 โ”‚   const handleReturnToThread = () => {
2026-10-24T04:18:54.2155675Z  612 โ”‚     if (navigation.canGoBack()) {
2026-10-24T04:18:54.2155741Z  613 โ”‚       navigation.goBack();
2026-10-24T04:18:54.2155799Z  614 โ”‚       return;
2026-10-24T04:18:54.2155851Z  615 โ”‚     }
2026-10-24T04:18:54.2155927Z  616 โ”‚     navigation.navigate("Thread", {
2026-10-24T04:18:54.2156013Z  617 โ”‚       environmentId: String(environmentId),
2026-10-24T04:18:54.2156087Z  618 โ”‚       threadId: String(threadId),
2026-10-24T04:18:54.2156140Z  619 โ”‚     });
2026-10-24T04:18:54.2156190Z  620 โ”‚   };
2026-10-24T04:18:54.2156265Z  621 โ”‚   const androidHeaderSubtitle = [
2026-10-24T04:18:54.2156333Z  622 โ”‚     selectedSection?.title,
2026-10-24T04:18:54.2156408Z  623 โ”‚     headerDiffSummary.additions,
2026-10-24T04:18:54.2156536Z  624 โ”‚     headerDiffSummary.deletions,
2026-10-24T04:18:54.2156647Z  625 โ”‚   ]
2026-10-24T04:18:54.2156749Z  626 โ”‚     .filter((part): part is string => Boolean(part))
2026-10-24T04:18:54.2156808Z  627 โ”‚     .join(" ยท ");
2026-10-24T04:18:54.2156857Z  628 โ”‚
2026-10-24T04:18:54.2156932Z  629 โ”‚   const showChangedFilesPane =
2026-10-24T04:18:54.2157000Z  630 โ”‚     !showConnectionNotice &&
2026-10-24T04:18:54.2157070Z  631 โ”‚     selectedSection !== null &&
2026-10-24T04:18:54.2157147Z  632 โ”‚     parsedDiff.kind === "files" &&
2026-10-24T04:18:54.2157222Z  633 โ”‚     NativeReviewDiffView !== null;
2026-10-24T04:18:54.2157408Z  634 โ”‚   useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
2026-10-24T04:18:54.2157623Z  635 โ”‚   const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
2026-10-24T04:18:54.2157673Z  636 โ”‚
2026-10-24T04:18:54.2157749Z  637 โ”‚   const listHeader = (() => {
2026-10-24T04:18:54.2157834Z  638 โ”‚     const children: ReactElement[] = [];
2026-10-24T04:18:54.2157882Z  639 โ”‚
2026-10-24T04:18:54.2157941Z  640 โ”‚     if (error) {
2026-10-24T04:18:54.2158006Z  641 โ”‚       children.push(
2026-10-24T04:18:54.2158063Z  642 โ”‚         <View
2026-10-24T04:18:54.2158129Z  643 โ”‚           key="review-error"
2026-10-24T04:18:54.2158191Z  644 โ”‚           className={cn(
2026-10-24T04:18:54.2158270Z  645 โ”‚             "bg-card px-4 py-3",
2026-10-24T04:18:54.2158417Z  646 โ”‚             Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
2026-10-24T04:18:54.2158474Z  647 โ”‚           )}
2026-10-24T04:18:54.2158527Z  648 โ”‚         >
2026-10-24T04:18:54.2158684Z  649 โ”‚           <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
2026-10-24T04:18:54.2158840Z  650 โ”‚           <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
2026-10-24T04:18:54.2158901Z  651 โ”‚         </View>,
2026-10-24T04:18:54.2158954Z  652 โ”‚       );
2026-10-24T04:18:54.2159005Z  653 โ”‚     }
2026-10-24T04:18:54.2159053Z  654 โ”‚
2026-10-24T04:18:54.2159122Z  655 โ”‚     if (parsedDiffNotice) {
2026-10-24T04:18:54.2159274Z  656 โ”‚       children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
2026-10-24T04:18:54.2159324Z  657 โ”‚     }
2026-10-24T04:18:54.2159372Z  658 โ”‚
2026-10-24T04:18:54.2159444Z  659 โ”‚     if (children.length === 0) {
2026-10-24T04:18:54.2159505Z  660 โ”‚       return null;
2026-10-24T04:18:54.2159556Z  661 โ”‚     }
2026-10-24T04:18:54.2159604Z  662 โ”‚
2026-10-24T04:18:54.2159670Z  663 โ”‚     return <>{children}</>;
2026-10-24T04:18:54.2159721Z  664 โ”‚   })();
2026-10-24T04:18:54.2159786Z  665 โ”‚   const headerSubtitle = [
2026-10-24T04:18:54.2159867Z  666 โ”‚     headerDiffSummary.additions,
2026-10-24T04:18:54.2159944Z  667 โ”‚     headerDiffSummary.deletions,
2026-10-24T04:18:54.2160021Z  668 โ”‚     pendingReviewCommentCount > 0
2026-10-24T04:18:54.2160184Z  669 โ”‚       ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
2026-10-24T04:18:54.2160241Z  670 โ”‚       : null,
2026-10-24T04:18:54.2160291Z  671 โ”‚   ]
2026-10-24T04:18:54.2160352Z  672 โ”‚     .filter(Boolean)
2026-10-24T04:18:54.2160410Z  673 โ”‚     .join(" ยท ");
2026-10-24T04:18:54.2160538Z  674 โ”‚   const headerTitleText = selectedSection?.title ?? "Review changes";
2026-10-24T04:18:54.2160587Z  675 โ”‚
2026-10-24T04:18:54.2160644Z  676 โ”‚   return (
2026-10-24T04:18:54.2160694Z  677 โ”‚     <>
2026-10-24T04:18:54.2160754Z  678 โ”‚       <ReviewHeader
2026-10-24T04:18:54.2160833Z  679 โ”‚         environmentId={environmentId}
2026-10-24T04:18:54.2160957Z  680 โ”‚         threadId={threadId}
2026-10-24T04:18:54.2161087Z  681 โ”‚         title={headerTitleText}
2026-10-24T04:18:54.2161160Z  682 โ”‚         subtitle={headerSubtitle}
2026-10-24T04:18:54.2161255Z  683 โ”‚         androidSubtitle={androidHeaderSubtitle}
2026-10-24T04:18:54.2161325Z  684 โ”‚         iconColor={headerIcon}
2026-10-24T04:18:54.2161412Z  685 โ”‚         selectedThreadCwd={selectedThreadCwd}
2026-10-24T04:18:54.2161484Z  686 โ”‚         sectionMenu={sectionMenu}
2026-10-24T04:18:54.2161566Z  687 โ”‚         selectedSection={selectedSection}
2026-10-24T04:18:54.2161657Z  688 โ”‚         showSectionToolbar={showSectionToolbar}
2026-10-24T04:18:54.2161815Z  689 โ”‚         showChangedFilesToggle={showChangedFilesToggle}
2026-10-24T04:18:54.2161913Z  690 โ”‚         onRefresh={handlePullToRefresh}
2026-10-24T04:18:54.2161991Z  691 โ”‚         onSelectSection={selectSection}
2026-10-24T04:18:54.2162087Z  692 โ”‚         onReturnToThread={handleReturnToThread}
2026-10-24T04:18:54.2162143Z  693 โ”‚       />
2026-10-24T04:18:54.2162191Z  694 โ”‚
2026-10-24T04:18:54.2162253Z  695 โ”‚       <ScreenContent>
2026-10-24T04:18:54.2162367Z  696 โ”‚         <View className="flex-1 bg-sheet android:bg-sheet-solid">
2026-10-24T04:18:54.2162443Z  697 โ”‚           {showConnectionNotice ? (
2026-10-24T04:18:54.2162582Z  698 โ”‚             <View className="flex-1" style={{ paddingTop: topContentInset }}>
2026-10-24T04:18:54.2162669Z  699 โ”‚               <EnvironmentConnectionNotice
2026-10-24T04:18:54.2162836Z  700 โ”‚                 environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
2026-10-24T04:18:54.2162902Z  701 โ”‚                 connection={
2026-10-24T04:18:54.2163003Z  702 โ”‚                   environment.presentation?.connection ?? {
2026-10-24T04:18:54.2163080Z  703 โ”‚                     phase: "available",
2026-10-24T04:18:54.2163152Z  704 โ”‚                     error: null,
2026-10-24T04:18:54.2163226Z  705 โ”‚                     traceId: null,
2026-10-24T04:18:54.2163285Z  706 โ”‚                   }
2026-10-24T04:18:54.2163342Z  707 โ”‚                 }
2026-10-24T04:18:54.2163418Z  708 โ”‚                 resourceName="review"
2026-10-24T04:18:54.2163510Z  709 โ”‚                 onRetry={handleRetryEnvironment}
2026-10-24T04:18:54.2163567Z  710 โ”‚               />
2026-10-24T04:18:54.2163626Z  711 โ”‚             </View>
2026-10-24T04:18:54.2163776Z  712 โ”‚           ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
2026-10-24T04:18:54.2163834Z  713 โ”‚             <View
2026-10-24T04:18:54.2163904Z  714 โ”‚               className="flex-1"
2026-10-24T04:18:54.2163964Z  715 โ”‚               style={{
2026-10-24T04:18:54.2164093Z  716 โ”‚                 backgroundColor: nativeBridge.theme.background,
2026-10-24T04:18:54.2164184Z  717 โ”‚               }}
2026-10-24T04:18:54.2164243Z  718 โ”‚             >
2026-10-24T04:18:54.2164300Z  719 โ”‚               <View
2026-10-24T04:18:54.2164384Z  720 โ”‚                 className="min-w-0 flex-1"
2026-10-24T04:18:54.2164516Z  721 โ”‚                 style={listHeader ? { paddingTop: topContentInset } : undefined}
2026-10-24T04:18:54.2164572Z  722 โ”‚               >
2026-10-24T04:18:54.2164636Z  723 โ”‚                 {listHeader}
2026-10-24T04:18:54.2164753Z  724 โ”‚                 <View className="min-w-0 flex-1" collapsable={false}>
2026-10-24T04:18:54.2164832Z  725 โ”‚                   <NativeReviewDiffView
2026-10-24T04:18:54.2164933Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2165094Z      ยท                              โ•ฐโ”€โ”€ This component is created during render
2026-10-24T04:18:54.2165223Z  726 โ”‚                     collapsable={false}
2026-10-24T04:18:54.2165333Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2165575Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-24T04:18:54.2165884Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T04:18:54.2165887Z
2026-10-24T04:18:54.2166089Z   โš  eslint(no-unused-vars): Identifier 'Arr' is imported but never used.
2026-10-24T04:18:54.2166271Z    โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:4:13]
2026-10-24T04:18:54.2166383Z  3 โ”‚ import type { EnvironmentThreadShell } from "./models.ts";
2026-10-24T04:18:54.2166460Z  4 โ”‚ import * as Arr from "effect/Array";
2026-10-24T04:18:54.2166527Z    ยท             โ”€โ”ฌโ”€
2026-10-24T04:18:54.2166651Z    ยท              โ•ฐโ”€โ”€ 'Arr' is imported here
2026-10-24T04:18:54.2166732Z  5 โ”‚ import * as Order from "effect/Order";
2026-10-24T04:18:54.2166781Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2166875Z   help: Consider removing this import.
2026-10-24T04:18:54.2166878Z
2026-10-24T04:18:54.2167061Z   โš  eslint(no-unused-vars): Identifier 'Order' is imported but never used.
2026-10-24T04:18:54.2167186Z    โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:5:13]
2026-10-24T04:18:54.2167262Z  4 โ”‚ import * as Arr from "effect/Array";
2026-10-24T04:18:54.2167338Z  5 โ”‚ import * as Order from "effect/Order";
2026-10-24T04:18:54.2167410Z    ยท             โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T04:18:54.2167532Z    ยท               โ•ฐโ”€โ”€ 'Order' is imported here
2026-10-24T04:18:54.2167582Z  6 โ”‚
2026-10-24T04:18:54.2167635Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2167733Z   help: Consider removing this import.
2026-10-24T04:18:54.2167735Z
2026-10-24T04:18:54.2168187Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2168337Z       โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1680:7]
2026-10-24T04:18:54.2168423Z  1679 โ”‚           yield* harness.replaceSession;
2026-10-24T04:18:54.2168625Z  1680 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T04:18:54.2168770Z  1681 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
2026-10-24T04:18:54.2168859Z  1682 โ”‚ โ”‚             break;
2026-10-24T04:18:54.2168936Z  1683 โ”‚ โ”‚           }
2026-10-24T04:18:54.2169037Z  1684 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2169163Z  1685 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2169234Z  1686 โ”‚           yield* Queue.offer(
2026-10-24T04:18:54.2169284Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2169286Z
2026-10-24T04:18:54.2169728Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2169876Z       โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1789:7]
2026-10-24T04:18:54.2169961Z  1788 โ”‚           yield* harness.replaceSession;
2026-10-24T04:18:54.2170206Z  1789 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T04:18:54.2170417Z  1790 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
2026-10-24T04:18:54.2170518Z  1791 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2170644Z  1792 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2170767Z  1793 โ”‚           expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
2026-10-24T04:18:54.2170816Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2170820Z
2026-10-24T04:18:54.2171344Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T04:18:54.2171479Z      โ•ญโ”€[packages/contracts/src/composerContext.test.ts:181:18]
2026-10-24T04:18:54.2171607Z  180 โ”‚   it("sends a message without the records the wire cannot carry", () => {
2026-10-24T04:18:54.2171782Z  181 โ”‚     const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
2026-10-24T04:18:54.2171884Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2171945Z  182 โ”‚       version: 1,
2026-10-24T04:18:54.2171993Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2171996Z
2026-10-24T04:18:54.2172155Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T04:18:54.2172269Z      โ•ญโ”€[apps/server/src/processRunner.test.ts:266:14]
2026-10-24T04:18:54.2172319Z  265 โ”‚
2026-10-24T04:18:54.2172422Z  266 โ”‚   for (const {} of ["timeout", "success"] as const) {
2026-10-24T04:18:54.2172498Z      ยท              โ”€โ”€
2026-10-24T04:18:54.2172551Z  267 โ”‚   }
2026-10-24T04:18:54.2172600Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2172822Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T04:18:54.2172825Z
2026-10-24T04:18:54.2173008Z   โš  eslint(no-unused-vars): Identifier 'Fiber' is imported but never used.
2026-10-24T04:18:54.2173098Z     โ•ญโ”€[apps/server/src/ws.ts:10:13]
2026-10-24T04:18:54.2173182Z   9 โ”‚ import * as Effect from "effect/Effect";
2026-10-24T04:18:54.2173264Z  10 โ”‚ import * as Fiber from "effect/Fiber";
2026-10-24T04:18:54.2173335Z     ยท             โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T04:18:54.2173458Z     ยท               โ•ฐโ”€โ”€ 'Fiber' is imported here
2026-10-24T04:18:54.2173563Z  11 โ”‚ import * as FileSystem from "effect/FileSystem";
2026-10-24T04:18:54.2173615Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2173708Z   help: Consider removing this import.
2026-10-24T04:18:54.2173711Z
2026-10-24T04:18:54.2173899Z   โš  eslint(no-unused-vars): Identifier 'Schedule' is imported but never used.
2026-10-24T04:18:54.2173989Z     โ•ญโ”€[apps/server/src/ws.ts:17:13]
2026-10-24T04:18:54.2174086Z  16 โ”‚ import * as Ref from "effect/Ref";
2026-10-24T04:18:54.2174200Z  17 โ”‚ import * as Schedule from "effect/Schedule";
2026-10-24T04:18:54.2174273Z     ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2174402Z     ยท                 โ•ฐโ”€โ”€ 'Schedule' is imported here
2026-10-24T04:18:54.2174484Z  18 โ”‚ import * as Schema from "effect/Schema";
2026-10-24T04:18:54.2174532Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2174622Z   help: Consider removing this import.
2026-10-24T04:18:54.2174673Z
2026-10-24T04:18:54.2175033Z   โš  eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'.
2026-10-24T04:18:54.2175129Z       โ•ญโ”€[apps/server/src/ws.ts:1285:13]
2026-10-24T04:18:54.2175277Z  1284 โ”‚       const usageLimitSources = yield* UsageLimitSources.UsageLimitSources;
2026-10-24T04:18:54.2175474Z  1285 โ”‚       const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner;
2026-10-24T04:18:54.2175616Z       ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2175806Z       ยท                         โ•ฐโ”€โ”€ 'projectSetupScriptRunner' is declared here
2026-10-24T04:18:54.2175968Z  1286 โ”‚       const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker;
2026-10-24T04:18:54.2176018Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2176122Z   help: Consider removing this declaration.
2026-10-24T04:18:54.2176128Z
2026-10-24T04:18:54.2176781Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T04:18:54.2176976Z     โ•ญโ”€[packages/contracts/src/baseSchemas.test.ts:39:9]
2026-10-24T04:18:54.2177041Z  38 โ”‚       JSON.stringify(
2026-10-24T04:18:54.2177154Z  39 โ”‚         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
2026-10-24T04:18:54.2177246Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2177311Z  40 โ”‚           { name: "a" },
2026-10-24T04:18:54.2177359Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2177361Z
2026-10-24T04:18:54.2177582Z   โš  unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T04:18:54.2177724Z      โ•ญโ”€[packages/client-runtime/src/operations/projects.ts:228:51]
2026-10-24T04:18:54.2177783Z  227 โ”‚ ): string {
2026-10-24T04:18:54.2177933Z  228 โ”‚   const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? "";
2026-10-24T04:18:54.2178039Z      ยท                                                   โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2178166Z  229 โ”‚   return target.owner ? `${target.owner}/${folderName}` : folderName;
2026-10-24T04:18:54.2178215Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2178378Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T04:18:54.2178381Z
2026-10-24T04:18:54.2178566Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T04:18:54.2178780Z     โ•ญโ”€[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-24T04:18:54.2178932Z  35 โ”‚       <T3SourceTextRunNativeComponent
2026-10-24T04:18:54.2178995Z  36 โ”‚         key={index}
2026-10-24T04:18:54.2179069Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2179141Z  37 โ”‚         style={flattenedStyle}
2026-10-24T04:18:54.2179190Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2179330Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T04:18:54.2179332Z
2026-10-24T04:18:54.2179855Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2179997Z      โ•ญโ”€[apps/server/src/background/HostPowerMonitor.test.ts:133:11]
2026-10-24T04:18:54.2180130Z  132 โ”‚               const monitor = yield* HostPowerMonitor.HostPowerMonitor;
2026-10-24T04:18:54.2180270Z  133 โ”‚ โ•ญโ”€โ–ถ           for (
2026-10-24T04:18:54.2180369Z  134 โ”‚ โ”‚               let attempt = 0;
2026-10-24T04:18:54.2180529Z  135 โ”‚ โ”‚               attempt < 100 && (yield* monitor.snapshot).onBattery !== "true";
2026-10-24T04:18:54.2180624Z  136 โ”‚ โ”‚               attempt += 1
2026-10-24T04:18:54.2180702Z  137 โ”‚ โ”‚             ) {
2026-10-24T04:18:54.2180808Z  138 โ”‚ โ”‚               yield* Effect.yieldNow;
2026-10-24T04:18:54.2180938Z  139 โ”‚ โ•ฐโ”€โ–ถ           }
2026-10-24T04:18:54.2181059Z  140 โ”‚               expect((yield* monitor.snapshot).onBattery).toBe("true");
2026-10-24T04:18:54.2181107Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2181116Z
2026-10-24T04:18:54.2181459Z   โš  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.
2026-10-24T04:18:54.2181588Z       โ•ญโ”€[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34]
2026-10-24T04:18:54.2181715Z  1785 โ”‚           const stat = branch.files!.find((file) => file.path === path)!;
2026-10-24T04:18:54.2181857Z  1786 โ”‚           const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({
2026-10-24T04:18:54.2181968Z       ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2182028Z  1787 โ”‚             cwd,
2026-10-24T04:18:54.2182078Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2182080Z
2026-10-24T04:18:54.2182529Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2182683Z     โ•ญโ”€[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3]
2026-10-24T04:18:54.2182737Z  27 โ”‚     ) {
2026-10-24T04:18:54.2182927Z  28 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T04:18:54.2183063Z  29 โ”‚ โ”‚       const available = yield* service.peek(workspaceRoot);
2026-10-24T04:18:54.2183183Z  30 โ”‚ โ”‚       if (predicate(available)) return available;
2026-10-24T04:18:54.2183281Z  31 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T04:18:54.2183396Z  32 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T04:18:54.2183622Z  33 โ”‚       return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`);
2026-10-24T04:18:54.2183721Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2183724Z
2026-10-24T04:18:54.2183884Z   โš  react(purity): Cannot call impure function during render
2026-10-24T04:18:54.2184000Z      โ•ญโ”€[apps/web/src/hooks/useThreadActions.ts:821:56]
2026-10-24T04:18:54.2184138Z  820 โ”‚     const resolved = resolveThreadTarget(target);
2026-10-24T04:18:54.2184292Z  821 โ”‚     if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
2026-10-24T04:18:54.2184457Z      ยท                                                        โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2184641Z      ยท                                                             โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T04:18:54.2184718Z  822 โ”‚       return AsyncResult.failure(
2026-10-24T04:18:54.2184767Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2185043Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T04:18:54.2185330Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T04:18:54.2185333Z
2026-10-24T04:18:54.2185492Z   โš  react(purity): Cannot call impure function during render
2026-10-24T04:18:54.2185608Z      โ•ญโ”€[apps/web/src/hooks/useThreadActions.ts:709:46]
2026-10-24T04:18:54.2185677Z  708 โ”‚     const wokeAt = resolved
2026-10-24T04:18:54.2185806Z  709 โ”‚       ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
2026-10-24T04:18:54.2185913Z      ยท                                              โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2186069Z      ยท                                                   โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T04:18:54.2186130Z  710 โ”‚       : null;
2026-10-24T04:18:54.2186179Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2186441Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T04:18:54.2186723Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T04:18:54.2186725Z
2026-10-24T04:18:54.2186952Z   โš  unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret.
2026-10-24T04:18:54.2187071Z      โ•ญโ”€[apps/server/src/vcs/GitVcsDriverCore.ts:509:11]
2026-10-24T04:18:54.2187172Z  508 โ”‚         GIT_DIAGNOSTIC_LINE_PATTERN.test(line) ||
2026-10-24T04:18:54.2187305Z  509 โ”‚         (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)),
2026-10-24T04:18:54.2187387Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2187441Z  510 โ”‚     )
2026-10-24T04:18:54.2187489Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2187636Z   help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`.
2026-10-24T04:18:54.2187639Z
2026-10-24T04:18:54.2187894Z   โš  eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-24T04:18:54.2188005Z      โ•ญโ”€[apps/server/src/usage/UsageService.ts:169:7]
2026-10-24T04:18:54.2188055Z  168 โ”‚
2026-10-24T04:18:54.2188129Z  169 โ”‚ const layerTest = Layer.succeed(
2026-10-24T04:18:54.2188200Z      ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2188376Z      ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
2026-10-24T04:18:54.2188493Z  170 โ”‚   UsageService,
2026-10-24T04:18:54.2188541Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2188643Z   help: Consider removing this declaration.
2026-10-24T04:18:54.2188646Z
2026-10-24T04:18:54.2189093Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2189289Z     โ•ญโ”€[apps/server/src/project/ProjectService.test.ts:94:3]
2026-10-24T04:18:54.2189343Z  93 โ”‚     ) {
2026-10-24T04:18:54.2189534Z  94 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T04:18:54.2189704Z  95 โ”‚ โ”‚       const project = Option.getOrThrow(yield* service.getById(projectId));
2026-10-24T04:18:54.2189822Z  96 โ”‚ โ”‚       if (predicate(project)) return project;
2026-10-24T04:18:54.2189918Z  97 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T04:18:54.2190034Z  98 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T04:18:54.2190178Z  99 โ”‚       return yield* Effect.die(`Project ${projectId} was not enriched in time.`);
2026-10-24T04:18:54.2190226Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2190228Z
2026-10-24T04:18:54.2190669Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2190790Z       โ•ญโ”€[apps/server/src/usage/UsageService.test.ts:2383:7]
2026-10-24T04:18:54.2190887Z  2382 โ”‚           let orphanedAt: number | undefined;
2026-10-24T04:18:54.2191109Z  2383 โ”‚ โ•ญโ”€โ–ถ       for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
2026-10-24T04:18:54.2191226Z  2384 โ”‚ โ”‚           const tasks: Array<() => void> = [];
2026-10-24T04:18:54.2191370Z  2385 โ”‚ โ”‚           const dispatcher: Scheduler.SchedulerDispatcher = {
2026-10-24T04:18:54.2191494Z  2386 โ”‚ โ”‚             scheduleTask: (task) => tasks.push(task),
2026-10-24T04:18:54.2191589Z  2387 โ”‚ โ”‚             flush: () => {
2026-10-24T04:18:54.2191708Z  2388 โ”‚ โ”‚               let task: (() => void) | undefined;
2026-10-24T04:18:54.2191848Z  2389 โ”‚ โ”‚               while ((task = tasks.shift()) !== undefined) task();
2026-10-24T04:18:54.2191931Z  2390 โ”‚ โ”‚             },
2026-10-24T04:18:54.2192014Z  2391 โ”‚ โ”‚           };
2026-10-24T04:18:54.2192082Z  2392 โ”‚ โ”‚
2026-10-24T04:18:54.2192236Z  2393 โ”‚ โ”‚           let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
2026-10-24T04:18:54.2192335Z  2394 โ”‚ โ”‚           let requestChecks = 0;
2026-10-24T04:18:54.2192459Z  2395 โ”‚ โ”‚           const scheduler: Scheduler.Scheduler = {
2026-10-24T04:18:54.2192565Z  2396 โ”‚ โ”‚             executionMode: "async",
2026-10-24T04:18:54.2192682Z  2397 โ”‚ โ”‚             makeDispatcher: () => dispatcher,
2026-10-24T04:18:54.2192788Z  2398 โ”‚ โ”‚             shouldYield: (fiber) => {
2026-10-24T04:18:54.2192917Z  2399 โ”‚ โ”‚               if (fiber !== requestFiber) return false;
2026-10-24T04:18:54.2193067Z  2400 โ”‚ โ”‚               requestChecks += 1;
2026-10-24T04:18:54.2193264Z  2401 โ”‚ โ”‚               if (requestChecks !== interruptAt) return false;
2026-10-24T04:18:54.2193374Z  2402 โ”‚ โ”‚               fiber.interruptUnsafe();
2026-10-24T04:18:54.2193467Z  2403 โ”‚ โ”‚               return true;
2026-10-24T04:18:54.2193545Z  2404 โ”‚ โ”‚             },
2026-10-24T04:18:54.2193624Z  2405 โ”‚ โ”‚           };
2026-10-24T04:18:54.2193690Z  2406 โ”‚ โ”‚
2026-10-24T04:18:54.2193813Z  2407 โ”‚ โ”‚           const input: UsageSummaryInput = {
2026-10-24T04:18:54.2193916Z  2408 โ”‚ โ”‚             ...WINDOW,
2026-10-24T04:18:54.2194102Z  2409 โ”‚ โ”‚             sinceDay: UsageDay.make("2026-09-01"),
2026-10-24T04:18:54.2194331Z  2410 โ”‚ โ”‚             untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
2026-10-24T04:18:54.2194412Z  2411 โ”‚ โ”‚           };
2026-10-24T04:18:54.2194521Z  2412 โ”‚ โ”‚           const first = yield* service
2026-10-24T04:18:54.2194623Z  2413 โ”‚ โ”‚             .readSummary(input)
2026-10-24T04:18:54.2194706Z  2414 โ”‚ โ”‚             .pipe(
2026-10-24T04:18:54.2194800Z  2415 โ”‚ โ”‚               Effect.exit,
2026-10-24T04:18:54.2194952Z  2416 โ”‚ โ”‚               Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-24T04:18:54.2195052Z  2417 โ”‚ โ”‚               Effect.forkChild,
2026-10-24T04:18:54.2195128Z  2418 โ”‚ โ”‚             );
2026-10-24T04:18:54.2195226Z  2419 โ”‚ โ”‚           requestFiber = first;
2026-10-24T04:18:54.2195331Z  2420 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2195433Z  2421 โ”‚ โ”‚           dispatcher.flush();
2026-10-24T04:18:54.2195499Z  2422 โ”‚ โ”‚
2026-10-24T04:18:54.2195645Z  2423 โ”‚ โ”‚           const second = yield* service.readSummary(input).pipe(
2026-10-24T04:18:54.2195739Z  2424 โ”‚ โ”‚             Effect.match({
2026-10-24T04:18:54.2195857Z  2425 โ”‚ โ”‚               onFailure: (error) => error.reason,
2026-10-24T04:18:54.2195974Z  2426 โ”‚ โ”‚               onSuccess: () => "success" as const,
2026-10-24T04:18:54.2196055Z  2427 โ”‚ โ”‚             }),
2026-10-24T04:18:54.2196203Z  2428 โ”‚ โ”‚             Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-24T04:18:54.2196305Z  2429 โ”‚ โ”‚             Effect.forkChild,
2026-10-24T04:18:54.2196385Z  2430 โ”‚ โ”‚           );
2026-10-24T04:18:54.2196487Z  2431 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T04:18:54.2196584Z  2432 โ”‚ โ”‚           dispatcher.flush();
2026-10-24T04:18:54.2196707Z  2433 โ”‚ โ”‚           const secondExit = second.pollUnsafe();
2026-10-24T04:18:54.2196820Z  2434 โ”‚ โ”‚           if (secondExit === undefined) {
2026-10-24T04:18:54.2196930Z  2435 โ”‚ โ”‚             second.interruptUnsafe();
2026-10-24T04:18:54.2197037Z  2436 โ”‚ โ”‚             orphanedAt = interruptAt;
2026-10-24T04:18:54.2197121Z  2437 โ”‚ โ”‚             break;
2026-10-24T04:18:54.2197197Z  2438 โ”‚ โ”‚           }
2026-10-24T04:18:54.2197360Z  2439 โ”‚ โ”‚           if (Exit.isFailure(secondExit)) {
2026-10-24T04:18:54.2197573Z  2440 โ”‚ โ”‚             assert.fail("the matching request fiber was interrupted");
2026-10-24T04:18:54.2197648Z  2441 โ”‚ โ”‚           }
2026-10-24T04:18:54.2197792Z  2442 โ”‚ โ”‚           assert.strictEqual(secondExit.value, "invalidWindow");
2026-10-24T04:18:54.2197921Z  2443 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T04:18:54.2197974Z  2444 โ”‚
2026-10-24T04:18:54.2198023Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2198026Z
2026-10-24T04:18:54.2198345Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2198511Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5]
2026-10-24T04:18:54.2198561Z  76 โ”‚
2026-10-24T04:18:54.2198628Z  77 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2198701Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2198823Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2198945Z  78 โ”‚     const { host, code } = parsePairingUrl(connectionPairingUrl);
2026-10-24T04:18:54.2199010Z  79 โ”‚     setHostInput(host);
2026-10-24T04:18:54.2199080Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2199239Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2199303Z  80 โ”‚     setCodeInput(code);
2026-10-24T04:18:54.2199351Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2199943Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2200259Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2200261Z
2026-10-24T04:18:54.2200510Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2200674Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5]
2026-10-24T04:18:54.2200723Z  82 โ”‚
2026-10-24T04:18:54.2200784Z  83 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2200850Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2200972Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2201058Z  84 โ”‚     if (routePairingUrl.length === 0) {
2026-10-24T04:18:54.2201163Z  85 โ”‚       return;
2026-10-24T04:18:54.2201268Z  86 โ”‚     }
2026-10-24T04:18:54.2201317Z  87 โ”‚
2026-10-24T04:18:54.2201428Z  88 โ”‚     const { host, code } = parsePairingUrl(routePairingUrl);
2026-10-24T04:18:54.2201490Z  89 โ”‚     setHostInput(host);
2026-10-24T04:18:54.2201562Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2201721Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2201783Z  90 โ”‚     setCodeInput(code);
2026-10-24T04:18:54.2201831Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2202499Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2202819Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2202821Z
2026-10-24T04:18:54.2203071Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2203233Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7]
2026-10-24T04:18:54.2203281Z  92 โ”‚
2026-10-24T04:18:54.2203342Z  93 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2203408Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2203531Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2203609Z  94 โ”‚     if (pairingConnectionError) {
2026-10-24T04:18:54.2203678Z  95 โ”‚       setIsSubmitting(false);
2026-10-24T04:18:54.2203759Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2203924Z     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2203976Z  96 โ”‚     }
2026-10-24T04:18:54.2204041Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2204639Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2204948Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2204951Z
2026-10-24T04:18:54.2205204Z   โš  unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts.
2026-10-24T04:18:54.2205342Z     โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:12:14]
2026-10-24T04:18:54.2205490Z  11 โ”‚       addEventListener(_type: string, listener: (event: { data: string }) => void) {
2026-10-24T04:18:54.2205566Z  12 โ”‚         this.onmessage = listener;
2026-10-24T04:18:54.2205641Z     ยท              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2205694Z  13 โ”‚       }
2026-10-24T04:18:54.2205743Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2206049Z   help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on<event>` replaces any previously registered handler.
2026-10-24T04:18:54.2206051Z
2026-10-24T04:18:54.2206249Z   โš  typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-24T04:18:54.2206430Z     โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:16:9]
2026-10-24T04:18:54.2206609Z  15 โ”‚       constructor() {
2026-10-24T04:18:54.2206672Z  16 โ”‚         source = this;
2026-10-24T04:18:54.2206741Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2206792Z  17 โ”‚       }
2026-10-24T04:18:54.2206840Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2207102Z   help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well.
2026-10-24T04:18:54.2207105Z
2026-10-24T04:18:54.2207268Z   โš  react(immutability): This value cannot be modified
2026-10-24T04:18:54.2207486Z     โ•ญโ”€[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
2026-10-24T04:18:54.2207580Z  53 โ”‚ function usePulseAnimation(pulse: boolean) {
2026-10-24T04:18:54.2207674Z  54 โ”‚   const pulseProgress = useSharedValue(0);
2026-10-24T04:18:54.2207754Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2207887Z     ยท               โ•ฐโ”€โ”€ `pulseProgress` originates here
2026-10-24T04:18:54.2207938Z  55 โ”‚
2026-10-24T04:18:54.2208000Z  56 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2208061Z  57 โ”‚     if (pulse) {
2026-10-24T04:18:54.2208143Z  58 โ”‚       pulseProgress.value = withRepeat(
2026-10-24T04:18:54.2208219Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2208356Z     ยท             โ•ฐโ”€โ”€ `pulseProgress` cannot be modified
2026-10-24T04:18:54.2208419Z  59 โ”‚         withTiming(1, {
2026-10-24T04:18:54.2208467Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2208727Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T04:18:54.2209028Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T04:18:54.2209033Z
2026-10-24T04:18:54.2209467Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T04:18:54.2209589Z       โ•ญโ”€[apps/server/src/serverSettings.test.ts:1741:32]
2026-10-24T04:18:54.2209752Z  1740 โ”‚       const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
2026-10-24T04:18:54.2209929Z  1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-24T04:18:54.2210044Z       ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2210151Z  1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
2026-10-24T04:18:54.2210200Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2210202Z
2026-10-24T04:18:54.2210630Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T04:18:54.2210747Z       โ•ญโ”€[apps/server/src/serverSettings.test.ts:1742:34]
2026-10-24T04:18:54.2210924Z  1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-24T04:18:54.2211027Z  1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
2026-10-24T04:18:54.2211137Z       ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2211306Z  1743 โ”‚         Schema.fromJsonString(Schema.Array(ProjectScript)),
2026-10-24T04:18:54.2211408Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2211411Z
2026-10-24T04:18:54.2211862Z   โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T04:18:54.2212043Z      โ•ญโ”€[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
2026-10-24T04:18:54.2212114Z  520 โ”‚                 })).delivery;
2026-10-24T04:18:54.2212371Z  521 โ”‚ โ•ญโ”€โ–ถ             while (delivery.outcome === "accepted") {
2026-10-24T04:18:54.2212480Z  522 โ”‚ โ”‚                 yield* Effect.yieldNow;
2026-10-24T04:18:54.2212619Z  523 โ”‚ โ”‚                 delivery = (yield* service.getWebhookDelivery({
2026-10-24T04:18:54.2212719Z  524 โ”‚ โ”‚                   id: task.id,
2026-10-24T04:18:54.2212833Z  525 โ”‚ โ”‚                   deliveryId: deliveryId!,
2026-10-24T04:18:54.2212926Z  526 โ”‚ โ”‚                 })).delivery;
2026-10-24T04:18:54.2213058Z  527 โ”‚ โ•ฐโ”€โ–ถ             }
2026-10-24T04:18:54.2213168Z  528 โ”‚                 assert.equal(delivery.outcome, "dispatch_failed");
2026-10-24T04:18:54.2213218Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2213220Z
2026-10-24T04:18:54.2213471Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2213625Z      โ•ญโ”€[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
2026-10-24T04:18:54.2213793Z  112 โ”‚   const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
2026-10-24T04:18:54.2213859Z  113 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2213928Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2214086Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2214241Z  114 โ”‚     if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
2026-10-24T04:18:54.2214300Z  115 โ”‚       return;
2026-10-24T04:18:54.2214353Z  116 โ”‚     }
2026-10-24T04:18:54.2214468Z  117 โ”‚     setEntry({ key: input.targetKey, location: candidate });
2026-10-24T04:18:54.2214535Z      ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T04:18:54.2214697Z      ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2214814Z  118 โ”‚   }, [candidate, entry.key, entry.location, input.targetKey]);
2026-10-24T04:18:54.2214863Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2215444Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2215761Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2215764Z
2026-10-24T04:18:54.2215965Z   โš  eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
2026-10-24T04:18:54.2216084Z     โ•ญโ”€[apps/server/src/scheduledTasks/Schedule.ts:79:10]
2026-10-24T04:18:54.2216134Z  78 โ”‚
2026-10-24T04:18:54.2216311Z  79 โ”‚ function describeSchedule(schedule: ScheduledTaskSchedule): string {
2026-10-24T04:18:54.2216450Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2216752Z     ยท                  โ•ฐโ”€โ”€ 'describeSchedule' is declared here
2026-10-24T04:18:54.2216855Z  80 โ”‚   if (schedule.type === "webhook") return "On webhook";
2026-10-24T04:18:54.2216902Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2217001Z   help: Consider removing this declaration.
2026-10-24T04:18:54.2217004Z
2026-10-24T04:18:54.2217304Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T04:18:54.2217468Z    โ•ญโ”€[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
2026-10-24T04:18:54.2217537Z  3 โ”‚   AuthProvidersManageScope,
2026-10-24T04:18:54.2217604Z  4 โ”‚   type AuthSessionState,
2026-10-24T04:18:54.2217684Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2217830Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T04:18:54.2217897Z  5 โ”‚   type EnvironmentId,
2026-10-24T04:18:54.2217946Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2218041Z   help: Consider removing this import.
2026-10-24T04:18:54.2218043Z
2026-10-24T04:18:54.2218204Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T04:18:54.2218337Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:186:12]
2026-10-24T04:18:54.2218388Z  185 โ”‚
2026-10-24T04:18:54.2218487Z  186 โ”‚ for (const {} of ["darwin", "linux"] as const) {
2026-10-24T04:18:54.2218556Z      ยท            โ”€โ”€
2026-10-24T04:18:54.2218605Z  187 โ”‚ }
2026-10-24T04:18:54.2218654Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2218881Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T04:18:54.2218885Z
2026-10-24T04:18:54.2219044Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T04:18:54.2219175Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:189:12]
2026-10-24T04:18:54.2219225Z  188 โ”‚
2026-10-24T04:18:54.2219287Z  189 โ”‚ for (const {} of [
2026-10-24T04:18:54.2219353Z      ยท            โ”€โ”€
2026-10-24T04:18:54.2219439Z  190 โ”‚   { kind: "browser", folderVerb: "none" },
2026-10-24T04:18:54.2219489Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2219706Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T04:18:54.2219709Z
2026-10-24T04:18:54.2219865Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T04:18:54.2220000Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:311:12]
2026-10-24T04:18:54.2220054Z  310 โ”‚
2026-10-24T04:18:54.2220178Z  311 โ”‚ for (const {} of ["rejected", "spawn-error", "stalled"] as const) {
2026-10-24T04:18:54.2220243Z      ยท            โ”€โ”€
2026-10-24T04:18:54.2220293Z  312 โ”‚ }
2026-10-24T04:18:54.2220341Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2220559Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T04:18:54.2220561Z
2026-10-24T04:18:54.2220718Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T04:18:54.2220847Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:314:12]
2026-10-24T04:18:54.2220897Z  313 โ”‚
2026-10-24T04:18:54.2220958Z  314 โ”‚ for (const {} of [
2026-10-24T04:18:54.2221094Z      ยท            โ”€โ”€
2026-10-24T04:18:54.2221212Z  315 โ”‚   {
2026-10-24T04:18:54.2221261Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2221478Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T04:18:54.2221480Z
2026-10-24T04:18:54.2221753Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T04:18:54.2221907Z      โ•ญโ”€[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
2026-10-24T04:18:54.2221990Z  162 โ”‚   keys,
2026-10-24T04:18:54.2222099Z  163 โ”‚   overridingProjects = [],
2026-10-24T04:18:54.2222179Z      ยท                        โ”€โ”€
2026-10-24T04:18:54.2222242Z  164 โ”‚   onClearOverrides,
2026-10-24T04:18:54.2222290Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2222602Z   help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
2026-10-24T04:18:54.2222607Z
2026-10-24T04:18:54.2222857Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2223011Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
2026-10-24T04:18:54.2223118Z  37 โ”‚   const [initialized, setInitialized] = useState(false);
2026-10-24T04:18:54.2223184Z  38 โ”‚   useLayoutEffect(() => {
2026-10-24T04:18:54.2223259Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2223385Z     ยท          โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2223441Z  39 โ”‚     reset();
2026-10-24T04:18:54.2223506Z  40 โ”‚     setInitialized(true);
2026-10-24T04:18:54.2223586Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2223749Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2223808Z  41 โ”‚   }, [reset]);
2026-10-24T04:18:54.2223856Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2224471Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2224784Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2224787Z
2026-10-24T04:18:54.2225039Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2225194Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
2026-10-24T04:18:54.2225244Z  88 โ”‚
2026-10-24T04:18:54.2225305Z  89 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2225371Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2225494Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2225648Z  90 โ”‚     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
2026-10-24T04:18:54.2225747Z  91 โ”‚     const branchName = initialProjectRef.branch;
2026-10-24T04:18:54.2225810Z  92 โ”‚     let active = true;
2026-10-24T04:18:54.2225903Z  93 โ”‚     setPendingCheckouts((count) => count + 1);
2026-10-24T04:18:54.2225983Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2226204Z     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2226411Z  94 โ”‚     // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
2026-10-24T04:18:54.2226460Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2227052Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2227422Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2227425Z
2026-10-24T04:18:54.2227675Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2227825Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
2026-10-24T04:18:54.2227876Z  55 โ”‚
2026-10-24T04:18:54.2227936Z  56 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2228004Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2228125Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2228191Z  57 โ”‚     setDecodedSize(null);
2026-10-24T04:18:54.2228264Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2228424Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2228489Z  58 โ”‚   }, [props.sourceKey]);
2026-10-24T04:18:54.2228538Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2229121Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2229434Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2229436Z
2026-10-24T04:18:54.2229684Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T04:18:54.2229829Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
2026-10-24T04:18:54.2229879Z  59 โ”‚
2026-10-24T04:18:54.2229940Z  60 โ”‚   useEffect(() => {
2026-10-24T04:18:54.2230006Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2230179Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T04:18:54.2230299Z  61 โ”‚     setFailedUri(null);
2026-10-24T04:18:54.2230372Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2230531Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T04:18:54.2230592Z  62 โ”‚   }, [props.uri]);
2026-10-24T04:18:54.2230640Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2231292Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T04:18:54.2231607Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T04:18:54.2231612Z
2026-10-24T04:18:54.2231818Z   โš  eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-24T04:18:54.2231961Z    โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
2026-10-24T04:18:54.2232081Z  6 โ”‚ import { parse, SvgAst, type JsxAST } from "react-native-svg";
2026-10-24T04:18:54.2232253Z  7 โ”‚ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
2026-10-24T04:18:54.2232338Z    ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2232479Z    ยท                  โ•ฐโ”€โ”€ 'ActivityIndicator' is imported here
2026-10-24T04:18:54.2232530Z  8 โ”‚
2026-10-24T04:18:54.2232579Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2232674Z   help: Consider removing this import.
2026-10-24T04:18:54.2232676Z
2026-10-24T04:18:54.2232873Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.2233022Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
2026-10-24T04:18:54.2233088Z  57 โ”‚     setDecodedSize(null);
2026-10-24T04:18:54.2233154Z  58 โ”‚   }, [props.sourceKey]);
2026-10-24T04:18:54.2233230Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2233378Z     ยท              โ•ฐโ”€โ”€ Unnecessary dependency `props.sourceKey`
2026-10-24T04:18:54.2233427Z  59 โ”‚
2026-10-24T04:18:54.2233475Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2233758Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.2234080Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2234085Z
2026-10-24T04:18:54.2234310Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T04:18:54.2234455Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
2026-10-24T04:18:54.2234520Z  61 โ”‚     setFailedUri(null);
2026-10-24T04:18:54.2234580Z  62 โ”‚   }, [props.uri]);
2026-10-24T04:18:54.2234650Z     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2234785Z     ยท           โ•ฐโ”€โ”€ Unnecessary dependency `props.uri`
2026-10-24T04:18:54.2234834Z  63 โ”‚
2026-10-24T04:18:54.2234881Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T04:18:54.2235162Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T04:18:54.2235509Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T04:18:54.2235551Z
2026-10-24T04:18:54.2235651Z Found 0 errors and 362 warnings in 5408 files (4.9s, 8 threads)
2026-10-24T04:18:54.2676882Z Post job cleanup.
2026-10-24T04:18:54.3291584Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-24T04:18:54.3353354Z Post job cleanup.
2026-10-24T04:18:54.3374245Z ##[start-action display=Cache full pnpm store;id=__00596d12-3713-4e5a-9881-655c91b4006e.__actions_cache]
2026-10-24T04:18:54.3665325Z Post job cleanup.
2026-10-24T04:18:54.4282748Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache.
2026-10-24T04:18:54.4310548Z ##[end-action id=__00596d12-3713-4e5a-9881-655c91b4006e.__actions_cache;outcome=success;conclusion=success;duration_ms=93]
2026-10-24T04:18:54.4312195Z ##[start-action display=Cache Vite+;id=__00596d12-3713-4e5a-9881-655c91b4006e.vp_cache]
2026-10-24T04:18:54.4331280Z Post job cleanup.
2026-10-24T04:18:54.4889178Z Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache.
2026-10-24T04:18:54.4918058Z ##[end-action id=__00596d12-3713-4e5a-9881-655c91b4006e.vp_cache;outcome=success;conclusion=success;duration_ms=60]
2026-10-24T04:18:54.4952969Z Post job cleanup.
2026-10-24T04:18:54.5320019Z [command]/usr/local/bin/git version
2026-10-24T04:18:54.5346912Z git version 2.55.0
2026-10-24T04:18:54.5362381Z Temporarily overriding HOME='/home/runner/_work/_temp/3bb558c1-f77e-40c2-9d0d-70fd4e244d3f' before making global git config changes
2026-10-24T04:18:54.5362727Z Adding repository directory to the temporary git global config as a safe directory
2026-10-24T04:18:54.5365108Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-24T04:18:54.5385185Z Removing SSH command configuration
2026-10-24T04:18:54.5387886Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-24T04:18:54.5408493Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-10-24T04:18:54.5519326Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-24T04:18:54.5539131Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-24T04:18:54.5569662Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-24T04:18:54.5585577Z ##[group]Run '/job_completed.sh'
2026-10-24T04:18:54.5592403Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-24T04:18:54.5592596Z env:
2026-10-24T04:18:54.5592710Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156
2026-10-24T04:18:54.5592871Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 354
2026-10-24T04:18:54.5593010Z   BLACKSMITH_CHECK_RUN_ID: 120776724055
2026-10-24T04:18:54.5593144Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-24T04:18:54.5593280Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-24T04:18:54.5593406Z ##[endgroup]
2026-10-24T04:18:54.5663111Z Docker container cache not activated, skipping hash computation.
2026-10-24T04:18:54.5901570Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-24T04:18:54.5940310Z Cleaning up orphan processes