GitHub check

256 KB of 613 KB loaded Download the full log (613 KB)
357 KB of earlier output not loaded
5Z  131 β”‚     measuredWidthRef.current = width;
 132 β”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
     Β·     ──────┬─────
     Β·           ╰── `capsuleWidth` cannot be modified
 133 β”‚   };
     ╰────
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  ⚠ react(immutability): This value cannot be modified
     ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:139:7]
 122 β”‚   // Animate an in-flow sizer for native glass layout. Measure labels at fixed width to avoid repeated animation retargeting.
 123 β”‚   const capsuleWidth = useSharedValue<number | null>(null);
     Β·         ──────┬─────
     Β·               ╰── `capsuleWidth` originates here
 124 β”‚   const measuredWidthRef = useRef<number | null>(null);
 125 β”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
 126 β”‚     const width = event.nativeEvent.layout.width;
 127 β”‚     if (width === measuredWidthRef.current) {
 128 β”‚       return;
 129 β”‚     }
 130 β”‚     const first = measuredWidthRef.current === null;
 131 β”‚     measuredWidthRef.current = width;
 132 β”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
 133 β”‚   };
 134 β”‚   const hasStatus = props.status !== null;
 135 β”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
 136 β”‚   useEffect(() => {
 137 β”‚     if (!hasStatus) {
 138 β”‚       measuredWidthRef.current = null;
 139 β”‚       capsuleWidth.value = null;
     Β·       ──────┬─────
     Β·             ╰── `capsuleWidth` cannot be modified
 140 β”‚     }
     ╰────
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  ⚠ react(immutability): Cannot modify local variables after render completes
     ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:139:7]
 135 β”‚   const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
 136 β”‚   useEffect(() => {
     Β·             ───┬───
     Β·                ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render
 137 β”‚     if (!hasStatus) {
 138 β”‚       measuredWidthRef.current = null;
 139 β”‚       capsuleWidth.value = null;
     Β·       ──────┬─────
     Β·             ╰── This modifies `capsuleWidth`
 140 β”‚     }
     ╰────
  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  ⚠ react(immutability): Cannot modify local variables after render completes
     ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:132:5]
 124 β”‚   const measuredWidthRef = useRef<number | null>(null);
 125 β”‚   const handleLabelLayout = (event: LayoutChangeEvent) => {
     Β·                             ───────────────┬───────────────
     Β·                                            ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render
 126 β”‚     const width = event.nativeEvent.layout.width;
 127 β”‚     if (width === measuredWidthRef.current) {
 128 β”‚       return;
 129 β”‚     }
 130 β”‚     const first = measuredWidthRef.current === null;
 131 β”‚     measuredWidthRef.current = width;
 132 β”‚     capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
     Β·     ──────┬─────
     Β·           ╰── This modifies `capsuleWidth`
 133 β”‚   };
     ╰────
  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  ⚠ react(capitalized-calls): Capitalized function called without JSX
     ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:606:27]
 605 β”‚   const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
 606 β”‚   const gesture = Gesture.Pan()
     Β·                           ─┬─
     Β·                            ╰── `Pan` may be a component
 607 β”‚     .enabled(!props.disabled)
     ╰────
  help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
  note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
      ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1362:5]
 1361 β”‚     queuedMessagesByThreadKey,
 1362 β”‚     retryTick,
      Β·     ────┬────
      Β·         ╰── Unnecessary dependency `retryTick`
 1363 β”‚     restoreQueuedMessage,
      ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
     ╭─[packages/provider-grok/src/server/adapter.ts:411:7]
 410 β”‚
 411 β”‚ const layer: Layer.Layer<
     Β·       ──┬──
     Β·         ╰── 'layer' is declared here
 412 β”‚   ProviderAdapter.ProviderAdapterV2,
     ╰────
  help: Consider removing this declaration.

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:433:5]
 423 β”‚       : null;
 424 β”‚   useEffect(() => {
     Β·   ────┬────
     Β·       ╰── This is the containing effect
 425 β”‚     if (
 426 β”‚       props.active === false ||
 427 β”‚       activeDraftKey !== null ||
 428 β”‚       editingPendingTask !== null ||
 429 β”‚       selectedProject === null
 430 β”‚     ) {
 431 β”‚       return;
 432 β”‚     }
 433 β”‚     setActiveDraftKey(
     Β·     ────────┬────────
     Β·             ╰── Avoid calling setState() directly within an effect
 434 β”‚       createNewTaskDraft({
     ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
      ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1214:36]
 1213 β”‚     <ActiveNewTaskContext value={activeNewTask}>
 1214 β”‚       <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
      Β·                                    ─────────────
 1215 β”‚     </ActiveNewTaskContext>
      ╰────
  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
        Alternatively, move the value outside the render function if it doesn't depend on props or state.

  ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
    ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:84:15]
 83 β”‚             <li
 84 β”‚               key={`${index}:${check.name}`}
    Β·               ──────────────────────────────
 85 β”‚               className="col-span-full grid grid-cols-subgrid items-center text-xs"
    ╰────
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
   ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8]
 2 β”‚   AuthDiagnosticsReadScope,
 3 β”‚   type AuthSessionState,
   Β·        ────────┬───────
   Β·                ╰── 'AuthSessionState' is imported here
 4 β”‚   sessionGrantsScope,
   ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used.
      ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1558:10]
 1557 β”‚
 1558 β”‚ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean {
      Β·          ──────────────────┬──────────────────
      Β·                            ╰── 'promptResponseHasMissingXAiStopReason' is declared here
 1559 β”‚   const meta = response._meta;
      ╰────
  help: Consider removing this declaration.

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:410:5]
 408 β”‚
 409 β”‚   useEffect(() => {
     Β·   ────┬────
     Β·       ╰── This is the containing effect
 410 β”‚     setInspectorSelection((current) => {
     Β·     ──────────┬──────────
     Β·               ╰── Avoid calling setState() directly within an effect
 411 β”‚       if (props.renderInspector === undefined) {
     ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(no-unstable-nested-components): Do not define components during render.
     ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:538:24]
 537 β”‚       const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
 538 β”‚ ╭─▢   const GitInspector = () => (
 539 β”‚ β”‚       <GitOverviewSheet
 540 β”‚ β”‚         headerInset={inspectorHeaderInset}
 541 β”‚ β”‚         presentation="inspector"
 542 β”‚ β”‚         route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
 543 β”‚ β”‚       />
 544 β”‚ ╰─▢   );
 545 β”‚       const FilesInspector = () =>
     ╰────
  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.

  ⚠ react(no-unstable-nested-components): Do not define components during render.
     ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:545:26]
 544 β”‚       );
 545 β”‚ ╭─▢   const FilesInspector = () =>
 546 β”‚ β”‚       selectedThread !== null && selectedThreadCwd !== null ? (
 547 β”‚ β”‚         <ThreadFileNavigatorPane
 548 β”‚ β”‚           cwd={selectedThreadCwd}
 549 β”‚ β”‚           environmentId={selectedThread.environmentId}
 550 β”‚ β”‚           headerInset={inspectorHeaderInset}
 551 β”‚ β”‚           projectName={selectedThreadProject?.title ?? "Files"}
 552 β”‚ β”‚           selectedPath={null}
 553 β”‚ β”‚           onSelectFile={handleSelectInspectorFile}
 554 β”‚ β”‚         />
 555 β”‚ ╰─▢     ) : null;
 556 β”‚       const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
     ╰────
  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.

  ⚠ 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.
      ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1742:7]
 1741 β”‚           yield* harness.replaceSession;
 1742 β”‚ ╭─▢       for (let attempt = 0; attempt < 100; attempt += 1) {
 1743 β”‚ β”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
 1744 β”‚ β”‚             break;
 1745 β”‚ β”‚           }
 1746 β”‚ β”‚           yield* Effect.yieldNow;
 1747 β”‚ ╰─▢       }
 1748 β”‚           yield* Queue.offer(
      ╰────

  ⚠ 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.
      ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1851:7]
 1850 β”‚           yield* harness.replaceSession;
 1851 β”‚ ╭─▢       for (let attempt = 0; attempt < 100; attempt += 1) {
 1852 β”‚ β”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
 1853 β”‚ β”‚           yield* Effect.yieldNow;
 1854 β”‚ ╰─▢       }
 1855 β”‚           expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
      ╰────

  ⚠ eslint(no-unused-vars): Type 'ScheduledTaskDraft' is imported but never used.
    ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:10:8]
  9 β”‚   hasScheduledTaskDraftChanges,
 10 β”‚   type ScheduledTaskDraft,
    Β·        ─────────┬────────
    Β·                 ╰── 'ScheduledTaskDraft' is imported here
 11 β”‚ } from "./scheduledTaskDraft";
    ╰────
  help: Consider removing this import.

  ⚠ react(memo-dependencies): Found extra memoization dependencies
    ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:81:85]
 80 β”‚   const startEditor = startScheduledTaskEditor;
 81 β”‚   const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
    Β·                                                                                     ─────┬─────
    Β·                                                                                          ╰── Unnecessary dependency `startEditor`
 82 β”‚   const readEditor = useCallback(
    ╰────
  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(memo-dependencies): Found extra memoization dependencies
     ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:102:7]
 101 β”‚       setEditor,
 102 β”‚       startEditor,
     Β·       ─────┬─────
     Β·            ╰── Unnecessary dependency `startEditor`
 103 β”‚       hasChanges,
     ╰────
  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    ╭─[apps/mobile/src/state/use-vcs-action-state.ts:85:5]
 82 β”‚   const [nowMs, setNowMs] = useState(() => Date.now());
 83 β”‚   useEffect(() => {
    Β·   ────┬────
    Β·       ╰── This is the containing effect
 84 β”‚     if (!actionState.isRunning) return;
 85 β”‚     setNowMs(Date.now());
    Β·     ────┬───
    Β·         ╰── Avoid calling setState() directly within an effect
 86 β”‚     const interval = setInterval(() => setNowMs(Date.now()), 1000);
    ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
    ╭─[apps/mobile/src/state/thread-order.ts:28:7]
 27 β”‚     getPendingThreadOrder();
 28 β”‚   }, [nowMinute, snoozeWakeTick]);
    Β·       ────┬────  ───────┬──────
    Β·           β”‚             ╰── Unnecessary dependency `snoozeWakeTick`
    Β·           ╰── Unnecessary dependency `nowMinute`
 29 β”‚   return pending;
    ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2221:5]
 2219 β”‚   );
 2220 β”‚   useEffect(() => {
      Β·   ────┬────
      Β·       ╰── This is the containing effect
 2221 β”‚     setExpandedVideo(null);
      Β·     ────────┬───────
      Β·             ╰── Avoid calling setState() directly within an effect
 2222 β”‚     setExpandedFile(null);
      ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2714:9]
 2705 β”‚   const stopFollowingEnd = useEffectEvent(() => setEndFollow(false));
 2706 β”‚   useEffect(() => {
      Β·   ────┬────
      Β·       ╰── This is the containing effect
 2707 β”‚     if (!jumpToMessageId || loadedListKey !== listMountKey) return;
 2708 β”‚     const index = presentedFeed.findIndex(
 2709 β”‚       (entry) => entry.type === "message" && entry.id === jumpToMessageId,
 2710 β”‚     );
 2711 β”‚     if (index === -1) {
 2712 β”‚       const runId = messageFoldRunId(props.feed, jumpToMessageId);
 2713 β”‚       if (runId && !expandedTurnIds.has(runId)) {
 2714 β”‚         setInteractionState((current) => ({
      Β·         ─────────┬─────────
      Β·                  ╰── Avoid calling setState() directly within an effect
 2715 β”‚           ...current,
      ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
    ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:72:10]
 71 β”‚ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
 72 β”‚ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
    Β·          ───────────┬───────────
    Β·                     ╰── 'isMarkdownFileLinkLabel' is imported here
 73 β”‚ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
    ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
    ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:98:3]
 97 β”‚ import {
 98 β”‚   createContext,
    Β·   ──────┬──────
    Β·         ╰── 'createContext' is imported here
 99 β”‚   memo,
    ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:114:3]
 113 β”‚ import {
 114 β”‚   ActivityIndicator,
     Β·   ────────┬────────
     Β·           ╰── 'ActivityIndicator' is imported here
 115 β”‚   Image,
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:121:3]
 120 β”‚   Pressable,
 121 β”‚   ScrollView,
     Β·   ─────┬────
     Β·        ╰── 'ScrollView' is imported here
 122 β”‚   StyleSheet,
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:123:11]
 122 β”‚   StyleSheet,
 123 β”‚   Text as NativeText,
     Β·           ─────┬────
     Β·                ╰── 'NativeText' is imported here
 124 β”‚   type ColorValue,
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:146:10]
 145 β”‚ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
 146 β”‚ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
     Β·          ─────────┬────────
     Β·                   ╰── 'tryOpenExternalUrl' is imported here
 147 β”‚ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:149:10]
 148 β”‚ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
 149 β”‚ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
     Β·          ─────────┬─────────
     Β·                   ╰── 'faviconUrlForOrigin' is imported here
 150 β”‚ import {
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:10]
 162 β”‚ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
 163 β”‚ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
     Β·          ────────┬───────
     Β·                  ╰── 'MediaVideoPlayer' is imported here
 164 β”‚ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:167:3]
 166 β”‚   attachmentVideoPreviewSource,
 167 β”‚   mediaVideoPreviewUri,
     Β·   ──────────┬─────────
     Β·             ╰── 'mediaVideoPreviewUri' is imported here
 168 β”‚   mediaVideoThumbnailKey,
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:168:3]
 167 β”‚   mediaVideoPreviewUri,
 168 β”‚   mediaVideoThumbnailKey,
     Β·   ───────────┬──────────
     Β·              ╰── 'mediaVideoThumbnailKey' is imported here
 169 β”‚   type MediaVideoPreviewSource,
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:169:8]
 168 β”‚   mediaVideoThumbnailKey,
 169 β”‚   type MediaVideoPreviewSource,
     Β·        ───────────┬───────────
     Β·                   ╰── 'MediaVideoPreviewSource' is imported here
 170 β”‚ } from "../../lib/videoPreviewSource";
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:3]
 190 β”‚ import {
 191 β”‚   resolveMarkdownFontSizes,
     Β·   ────────────┬───────────
     Β·               ╰── 'resolveMarkdownFontSizes' is imported here
 192 β”‚   resolveNativeMarkdownTypography,
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:198:3]
 197 β”‚   normalizeNativeMarkdownUrl,
 198 β”‚   resolveMarkdownInlineCodePresentation,
     Β·   ──────────────────┬──────────────────
     Β·                     ╰── 'resolveMarkdownInlineCodePresentation' is imported here
 199 β”‚   resolveMarkdownLinkPresentation,
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Type 'PendingThreadFeedEntry' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:237:8]
 236 β”‚   isCompactionCommandFeedEntry,
 237 β”‚   type PendingThreadFeedEntry,
     Β·        ───────────┬──────────
     Β·                   ╰── 'PendingThreadFeedEntry' is imported here
 238 β”‚   type ThreadFeedRow,
     ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:248:3]
 247 β”‚   useAssetUrl,
 248 β”‚   useAssetUrlState,
     Β·   ────────┬───────
     Β·           ╰── 'useAssetUrlState' is imported here
 249 β”‚   useRefreshAssetUrl,
     ╰────
  help: Consider removing this import.

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2223:7]
 2222 β”‚     setExpandedFile(null);
 2223 β”‚   }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
      Β·       ─────────┬─────────  ───────┬──────  ───────────────┬──────────────
      Β·                β”‚                  β”‚                       ╰── Unnecessary dependency `props.contentPresentation.kind`
      Β·                β”‚                  ╰── Unnecessary dependency `props.threadId`
      Β·                ╰── Unnecessary dependency `props.environmentId`
 2224 β”‚   const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
      ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2683:7]
 2682 β”‚     reportHeaderMaterialVisibility(false);
 2683 β”‚   }, [feedThreadKey, reportHeaderMaterialVisibility]);
      Β·       ──────┬──────
      Β·             ╰── Unnecessary dependency `feedThreadKey`
 2684 β”‚
      ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2699:7]
 2698 β”‚     }
 2699 β”‚   }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
      Β·       ──────┬─────
      Β·             ╰── Unnecessary dependency `listMountKey`
 2700 β”‚   // Opening at a message: its run unfolds, the list stops following the end
      ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2893:7]
 2892 β”‚     }
 2893 β”‚   }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
      Β·       ───────┬───────  ─────────┬────────  ────────┬───────
      Β·              β”‚                  β”‚                  ╰── Unnecessary dependency `expandedWorkRows`
      Β·              β”‚                  ╰── Unnecessary dependency `expandedWorkGroups`
      Β·              ╰── Unnecessary dependency `expandedTurnIds`
 2894 β”‚
      ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(memo-dependencies): Found extra memoization dependencies
     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:626:9]
 625 β”‚       };
 626 β”‚     }, [props.environmentId, attachment.id, httpBaseUrl]),
     Β·         ─────────┬─────────  ──────┬──────  ─────┬─────
     Β·                  β”‚                 β”‚             ╰── Unnecessary dependency `httpBaseUrl`
     Β·                  β”‚                 ╰── Unnecessary dependency `attachment.id`
     Β·                  ╰── Unnecessary dependency `props.environmentId`
 627 β”‚   );
     ╰────
  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
   ╭─[packages/client-runtime/src/state/filesystem.ts:3:8]
 2 β”‚   AuthFilesystemReadScope,
 3 β”‚   type AuthSessionState,
   Β·        ────────┬───────
   Β·                ╰── 'AuthSessionState' is imported here
 4 β”‚   type FilesystemBrowseEntry,
   ╰────
  help: Consider removing this import.

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

  ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used.
   ╭─[packages/client-runtime/src/state/threadSort.ts:4:13]
 3 β”‚ import type { EnvironmentThreadShell } from "./models.ts";
 4 β”‚ import * as Arr from "effect/Array";
   Β·             ─┬─
   Β·              ╰── 'Arr' is imported here
 5 β”‚ import * as Order from "effect/Order";
   ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used.
   ╭─[packages/client-runtime/src/state/threadSort.ts:5:13]
 4 β”‚ import * as Arr from "effect/Array";
 5 β”‚ import * as Order from "effect/Order";
   Β·             ──┬──
   Β·               ╰── 'Order' is imported here
 6 β”‚
   ╰────
  help: Consider removing this import.

  ⚠ 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.
    ╭─[packages/contracts/src/baseSchemas.test.ts:39:9]
 38 β”‚       JSON.stringify(
 39 β”‚         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
    Β·         ────────────────────────
 40 β”‚           { name: "a" },
    ╰────

  ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7]
 248 β”‚       mountedRef.current = false;
 249 β”‚       flow.setBranchQuery("");
     Β·       ──┬─
     Β·         ╰── Missing dependency `flow`
 250 β”‚     };
 251 β”‚   }, [flow.setBranchQuery]);
     Β·       ─────────┬─────────
     Β·                ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead
 252 β”‚
     ╰────
  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed
     ╭─[packages/contracts/src/rpc.ts:302:8]
 301 β”‚ } from "./device.ts";
 302 β”‚ import {} from "./previewAutomation.ts";
     Β·        ──
 303 β”‚ import {
     ╰────
  help: Remove empty braces

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

  Γ— t3code(no-low-value-comments): Cut this to 4 lines or fewer: keep the constraint, drop the background.
     ╭─[packages/contracts/src/orchestrationV2.ts:746:1]
 745 β”‚
 746 β”‚ ╭─▢ /**
 747 β”‚ β”‚    * Wire-only. Set for clients that opted in with `acceptDedupedBodies` or `dedupeBodies=1` when the
 748 β”‚ β”‚    * marked field was blanked because the client already holds the same value: in the record it
 749 β”‚ β”‚    * received earlier on the same response or stream. Restore with
 750 β”‚ β”‚    * `@t3tools/shared/orchestrationV2DedupedBodies` before use; never store or forward a marked
 751 β”‚ β”‚    * value. Clients that opted in restore only these fields, so blanking another field needs a new
 752 β”‚ β”‚    * opt-in.
 753 β”‚ ╰─▢  */
 754 β”‚     const DedupedBodyMarker = Schema.optionalKey(Schema.Literal(true));
     ╰────

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
 37 β”‚   const [initialized, setInitialized] = useState(false);
 38 β”‚   useLayoutEffect(() => {
    Β·   ───────┬───────
    Β·          ╰── This is the containing effect
 39 β”‚     reset();
 40 β”‚     setInitialized(true);
    Β·     ───────┬──────
    Β·            ╰── Avoid calling setState() directly within an effect
 41 β”‚   }, [reset]);
    ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
 88 β”‚
 89 β”‚   useEffect(() => {
    Β·   ────┬────
    Β·       ╰── This is the containing effect
 90 β”‚     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
 91 β”‚     const branchName = initialProjectRef.branch;
 92 β”‚     let active = true;
 93 β”‚     setPendingCheckouts((count) => count + 1);
    Β·     ─────────┬─────────
    Β·              ╰── Avoid calling setState() directly within an effect
 94 β”‚     // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
    ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(refs): Cannot access refs during render
     ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:472:27]
 471 β”‚         >
 472 β”‚           {props.children(close)}
     Β·                           ──┬──
     Β·                             ╰── Cannot access ref value during render
 473 β”‚         </ReanimatedSwipeable>
     ╰────
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:222:5]
 221 β”‚         let idlePasses = 0;
 222 β”‚ ╭─▢     for (;;) {
 223 β”‚ β”‚         yield* Effect.promise(() => Promise.resolve());
 224 β”‚ β”‚         const pending = backgroundRuntime.pending.shift();
 225 β”‚ β”‚         if (!pending) {
 226 β”‚ β”‚           idlePasses++;
 227 β”‚ β”‚           if (idlePasses >= 3) {
 228 β”‚ β”‚             return;
 229 β”‚ β”‚           }
 230 β”‚ β”‚           continue;
 231 β”‚ β”‚         }
 232 β”‚ β”‚         idlePasses = 0;
 233 β”‚ β”‚         const exit = yield* Effect.exit(
 234 β”‚ β”‚           pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
 235 β”‚ β”‚         );
 236 β”‚ β”‚         yield* Effect.sync(() => {
 237 β”‚ β”‚           pending.resolve(exit);
 238 β”‚ β”‚         });
 239 β”‚ ╰─▢     }
 240 β”‚       },
     ╰────

  ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used.
    ╭─[apps/mobile/src/features/home/HomeScreen.tsx:14:8]
 13 β”‚   threadSearchMatchKey,
 14 β”‚   type EnvironmentThreadSearchMatch,
    Β·        ──────────────┬─────────────
    Β·                      ╰── 'EnvironmentThreadSearchMatch' is imported here
 15 β”‚ } from "@t3tools/client-runtime/state/thread-search";
    ╰────
  help: Consider removing this import.

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
     ╭─[apps/mobile/src/features/home/HomeScreen.tsx:484:25]
 483 β”‚     // snoozeWakeTick re-arms clamped timers even when the wake date exceeds 32-bit setTimeout and stays unchanged.
 484 β”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
     Β·                         ───────┬──────
     Β·                                ╰── Unnecessary dependency `snoozeWakeTick`
 485 β”‚   // Called as `props.onSelectThread(...)`, the compiler would cache this handler on the whole
     ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(no-unstable-nested-components): Do not define components during render.
      ╭─[apps/mobile/src/Stack.tsx:1062:21]
 1061 β”‚     <Navigator
 1062 β”‚       screenLayout={(props) => <GuardedScreenLayout {...props} />}
      Β·                     ─────────────────────────────────────────────
 1063 β”‚       screenOptions={({ route }) =>
      ╰────
  help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true.

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
 150 β”‚
 151 β”‚   useEffect(() => {
     Β·   ────┬────
     Β·       ╰── This is the containing effect
 152 β”‚     if (!controlledSelectedPath) {
 153 β”‚       return;
 154 β”‚     }
 155 β”‚     setExpandedPaths((current) => {
     Β·     ────────┬───────
     Β·             ╰── Avoid calling setState() directly within an effect
 156 β”‚       const ancestors = ancestorPaths(controlledSelectedPath);
     ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:388:7]
 383 β”‚   };
 384 β”‚   useEffect(() => {
     Β·   ────┬────
     Β·       ╰── This is the containing effect
 385 β”‚     if (!guidesEnabled && section === "guide") {
 386 β”‚       requestedSection.current = "overview";
 387 β”‚       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
 388 β”‚       setSection("overview");
     Β·       ─────┬────
     Β·            ╰── Avoid calling setState() directly within an effect
 389 β”‚     }
     ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
     ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:390:6]
 385 β”‚     if (!guidesEnabled && section === "guide") {
 386 β”‚       requestedSection.current = "overview";
     Β·       ────────┬───────
     Β·               ╰── Missing dependency `requestedSection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 387 β”‚       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
     Β·       ─────────┬─────────           ──────┬──────
     Β·                β”‚                          ╰── Missing dependency `scrollOffsets`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
     Β·                ╰── Missing dependency `currentScrollOffset`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 388 β”‚       setSection("overview");
 389 β”‚     }
 390 β”‚   }, [guidesEnabled, section, insets.top]);
     Β·      ──────────────────┬─────────────────
     Β·                        ╰── This dependency list is missing values used by the callback
 391 β”‚   const tabContent = activityContent;
     ╰────
  help: Missing dependencies can cause an effect to fire less often than it should
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor.
     ╭─[apps/desktop/src/preview/Manager.test.ts:150:18]
 149 β”‚       BrowserWindow: browserWindowConstructor,
 150 β”‚ ╭─▢   ClipboardItem: class {
 151 β”‚ β”‚       constructor(data: Record<string, unknown>) {
 152 β”‚ β”‚         clipboardItemConstructor(data);
 153 β”‚ β”‚       }
 154 β”‚ ╰─▢   },
 155 β”‚       clipboard: {
     ╰────
  help: Try replacing this class with a standalone function or deleting it entirely

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
     ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
 256 β”‚     return () => cancelAnimationFrame(frame);
 257 β”‚   }, [props.path, targetIndex]);
     Β·       ─────┬────
     Β·            ╰── Unnecessary dependency `props.path`
 258 β”‚
     ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
     ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:289:23]
 288 β”‚                     <SourceText
 289 β”‚                       key={`${index}:${tokenIndex}`}
     Β·                       ──────────────────────────────
 290 β”‚                       style={{
     ╰────
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
     ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:305:27]
 304 β”‚             return (
 305 β”‚               <SourceText key={index}>
     Β·                           ───────────
 306 β”‚                 {body}
     ╰────
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
     ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:266:35]
 265 β”‚     };
 266 β”‚   }, [method, nativeRef, payload, resetKey, onFailure, onDelivered]);
     Β·                                   ────┬───
     Β·                                       ╰── Unnecessary dependency `resetKey`
 267 β”‚ }
     ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(refs): Cannot access refs during render
     ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:390:39]
 389 β”‚
 390 β”‚ ╭─▢   return createElement(RawNativeView, {
 391 β”‚ β”‚       ...nativeProps,
 392 β”‚ β”‚       refreshEnabled: props.onPullToRefresh !== undefined,
 393 β”‚ β”‚       onDebug: (event) => {
 394 β”‚ β”‚         if (event.nativeEvent.message === "rows-decode-failed") {
 395 β”‚ β”‚           console.error("[native-review-diff] rows decode failed", event.nativeEvent.error);
 396 β”‚ β”‚           onRowsFailure();
 397 β”‚ β”‚         }
 398 β”‚ β”‚         onDebug?.(event);
 399 β”‚ β”‚       },
 400 β”‚ β”‚       ref: nativeRef,
 401 β”‚ β”œβ”€β–Ά   });
     Β· ╰──── Passing a ref to a function may read its value during render
 402 β”‚     }
     ╰────
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
     ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28]
 258 β”‚   visit(parser.parse(markdown), false, false);
 259 β”‚   for (const edit of edits.reverse())
     Β·                            ───────
 260 β”‚     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
     ╰────
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

  ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
     ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28]
 289 β”‚   visit(parser.parse(markdown));
 290 β”‚   for (const edit of edits.reverse())
     Β·                            ───────
 291 β”‚     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
     ╰────
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

  ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
     ╭─[apps/mobile/src/lib/markdownDocument.ts:339:38]
 338 β”‚   visit(parser.parse(markdown));
 339 β”‚   for (const lineStart of lineStarts.reverse()) {
     Β·                                      ───────
 340 β”‚     // Lazy headers can lack container markers; copy the delimiter's markers to the header and blank line.
     ╰────
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

  ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used.
    ╭─[apps/web/src/types.ts:22:3]
 21 β”‚   EnvironmentThreadShell,
 22 β”‚   ThreadRunSummary,
    Β·   ────────┬───────
    Β·           ╰── 'ThreadRunSummary' is imported here
 23 β”‚   ThreadRuntimeSummary,
    ╰────
  help: Consider removing this import.

  ⚠ react(capitalized-calls): Capitalized function called without JSX
   ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15]
 7 β”‚     () =>
 8 β”‚       Gesture.Hover()
   Β·               ──┬──
   Β·                 ╰── `Hover` may be a component
 9 β”‚         .manualActivation(true)
   ╰────
  help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
  note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components

  ⚠ eslint(no-unused-vars): Identifier 'serverEnvironment' is imported but never used.
    ╭─[apps/web/src/components/chat/ChatHeader.tsx:27:10]
 26 β”‚ import { threadEnvironment } from "../../state/threads";
 27 β”‚ import { serverEnvironment } from "../../state/server";
    Β·          ────────┬────────
    Β·                  ╰── 'serverEnvironment' is imported here
 28 β”‚ import { canShareWithGuestAtom } from "./guestShareAvailability";
    ╰────
  help: Consider removing this import.

  Γ— t3code(no-low-value-comments): Cut this to 4 lines or fewer: keep the constraint, drop the background.
    ╭─[packages/shared/src/orchestrationV2DedupedBodies.ts:13:1]
 12 β”‚
 13 β”‚ ╭─▢ /**
 14 β”‚ β”‚    * A turn item repeats a body its record already carries: message text, checkpoint files, a
 15 β”‚ β”‚    * subagent's prompt and result. For clients that opt in, the server blanks the repeat and marks
 16 β”‚ β”‚    * the field (`textOmitted`, `filesOmitted`, `promptOmitted`, `resultOmitted`), and the client
 17 β”‚ β”‚    * copies the value back from the record it already holds. Only a body equal to the record's is
 18 β”‚ β”‚    * blanked, so the restore is exact.
 19 β”‚ ╰─▢  */
 20 β”‚     export interface DedupedBodySource {
    ╰────

  ⚠ eslint(no-unused-vars): Identifier 'serverEnvironment' is imported but never used.
     ╭─[apps/web/src/components/Sidebar.tsx:129:40]
 128 β”‚ import { environmentPresentations } from "../state/presentation";
 129 β”‚ import { primaryServerKeybindingsAtom, serverEnvironment } from "../state/server";
     Β·                                        ────────┬────────
     Β·                                                ╰── 'serverEnvironment' is imported here
 130 β”‚ import { environmentProjects } from "../state/projects";
     ╰────
  help: Consider removing this import.

  ⚠ react(purity): Cannot call impure function during render
      ╭─[apps/web/src/components/Sidebar.tsx:1117:11]
 1116 β”‚           foldSearchQuery(threadSearchQuery),
 1117 β”‚           Date.now(),
      Β·           ─────┬────
      Β·                ╰── Cannot call impure function
 1118 β”‚           // A list filter, as on mobile: a pick would move rows unexplained.
      ╰────
  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression
    ╭─[packages/shared/src/serverSettings.test.ts:35:7]
 34 β”‚     const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) =>
 35 β”‚       instanceId === configured ? true : false,
    Β·       ────────────────────────────────────────
 36 β”‚     );
    ╰────
  help: Remove this ternary operator

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

  ⚠ eslint(no-empty-pattern): Empty array binding pattern
      ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1436:12]
 1435 β”‚
 1436 β”‚ for (const [] of [
      Β·            ──
 1437 β”‚   ["github", "github.com"],
      ╰────
  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.

  ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used.
    ╭─[infra/relay/src/http/Api.ts:69:13]
 68 β”‚ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts";
 69 β”‚ import * as HookForwarder from "../hooks/HookForwarder.ts";
    Β·             ──────┬──────
    Β·                   ╰── 'HookForwarder' is imported here
 70 β”‚ import * as HeldHooks from "../hooks/HeldHooks.ts";
    ╰────
  help: Consider removing this import.

  ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
      ╭─[apps/server/src/usage/UsageService.test.ts:2613:7]
 2612 β”‚           let orphanedAt: number | undefined;
 2613 β”‚ ╭─▢       for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
 2614 β”‚ β”‚           const tasks: Array<() => void> = [];
 2615 β”‚ β”‚           const dispatcher: Scheduler.SchedulerDispatcher = {
 2616 β”‚ β”‚             scheduleTask: (task) => tasks.push(task),
 2617 β”‚ β”‚             flush: () => {
 2618 β”‚ β”‚               let task: (() => void) | undefined;
 2619 β”‚ β”‚               while ((task = tasks.shift()) !== undefined) task();
 2620 β”‚ β”‚             },
 2621 β”‚ β”‚           };
 2622 β”‚ β”‚
 2623 β”‚ β”‚           let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
 2624 β”‚ β”‚           let requestChecks = 0;
 2625 β”‚ β”‚           const scheduler: Scheduler.Scheduler = {
 2626 β”‚ β”‚             executionMode: "async",
 2627 β”‚ β”‚             makeDispatcher: () => dispatcher,
 2628 β”‚ β”‚             shouldYield: (fiber) => {
 2629 β”‚ β”‚               if (fiber !== requestFiber) return false;
 2630 β”‚ β”‚               requestChecks += 1;
 2631 β”‚ β”‚               if (requestChecks !== interruptAt) return false;
 2632 β”‚ β”‚               fiber.interruptUnsafe();
 2633 β”‚ β”‚               return true;
 2634 β”‚ β”‚             },
 2635 β”‚ β”‚           };
 2636 β”‚ β”‚
 2637 β”‚ β”‚           const input: UsageSummaryInput = {
 2638 β”‚ β”‚             ...WINDOW,
 2639 β”‚ β”‚             sinceDay: UsageDay.make("2026-09-01"),
 2640 β”‚ β”‚             untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
 2641 β”‚ β”‚           };
 2642 β”‚ β”‚           const first = yield* service
 2643 β”‚ β”‚             .readSummary(input)
 2644 β”‚ β”‚             .pipe(
 2645 β”‚ β”‚               Effect.exit,
 2646 β”‚ β”‚               Effect.provideService(Scheduler.Scheduler, scheduler),
 2647 β”‚ β”‚               Effect.forkChild,
 2648 β”‚ β”‚             );
 2649 β”‚ β”‚           requestFiber = first;
 2650 β”‚ β”‚           yield* Effect.yieldNow;
 2651 β”‚ β”‚           dispatcher.flush();
 2652 β”‚ β”‚
 2653 β”‚ β”‚           const second = yield* service.readSummary(input).pipe(
 2654 β”‚ β”‚             Effect.match({
 2655 β”‚ β”‚               onFailure: (error) => error.reason,
 2656 β”‚ β”‚               onSuccess: () => "success" as const,
 2657 β”‚ β”‚             }),
 2658 β”‚ β”‚             Effect.provideService(Scheduler.Scheduler, scheduler),
 2659 β”‚ β”‚             Effect.forkChild,
 2660 β”‚ β”‚           );
 2661 β”‚ β”‚           yield* Effect.yieldNow;
 2662 β”‚ β”‚           dispatcher.flush();
 2663 β”‚ β”‚           const secondExit = second.pollUnsafe();
 2664 β”‚ β”‚           if (secondExit === undefined) {
 2665 β”‚ β”‚             second.interruptUnsafe();
 2666 β”‚ β”‚             orphanedAt = interruptAt;
 2667 β”‚ β”‚             break;
 2668 β”‚ β”‚           }
 2669 β”‚ β”‚           if (Exit.isFailure(secondExit)) {
 2670 β”‚ β”‚             assert.fail("the matching request fiber was interrupted");
 2671 β”‚ β”‚           }
 2672 β”‚ β”‚           assert.strictEqual(secondExit.value, "invalidWindow");
 2673 β”‚ ╰─▢       }
 2674 β”‚
      ╰────

  ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
     ╭─[apps/server/src/usage/UsageService.ts:162:7]
 161 β”‚
 162 β”‚ const layerTest = Layer.succeed(
     Β·       ────┬────
     Β·           ╰── 'layerTest' is declared here
 163 β”‚   UsageService,
     ╰────
  help: Consider removing this declaration.

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
    ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6]
 81 β”‚     },
 82 β”‚     [draftKey],
    Β·      ────┬───
    Β·          ╰── Unnecessary dependency `draftKey`
 83 β”‚   );
    ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:59:5]
 56 β”‚
 57 β”‚   useEffect(() => {
    Β·   ────┬────
    Β·       ╰── This is the containing effect
 58 β”‚     const controller = new AbortController();
 59 β”‚     setLoadState("pending");
    Β·     ──────┬─────
    Β·           ╰── Avoid calling setState() directly within an effect
 60 β”‚     // A renewed signature is used on Retry, not as a reason to reset the native player.
    ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
    ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:70:7]
 69 β”‚     return () => controller.abort();
 70 β”‚   }, [player, props.playRequested, attempt]);
    Β·       ───┬──  ─────────┬─────────  ───┬───
    Β·          β”‚             β”‚              ╰── Unnecessary dependency `attempt`
    Β·          β”‚             ╰── Unnecessary dependency `props.playRequested`
    Β·          ╰── Unnecessary dependency `player_0`
 71 β”‚
    ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:67:5]
 65 β”‚   const { id: attachmentId, fileUri } = attachment;
 66 β”‚   useEffect(() => {
    Β·   ────┬────
    Β·       ╰── This is the containing effect
 67 β”‚     setUri(null);
    Β·     ───┬──
    Β·        ╰── Avoid calling setState() directly within an effect
 68 β”‚     setError(null);
    ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
    ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:90:7]
 89 β”‚     };
 90 β”‚   }, [attachmentId, fileUri]);
    Β·       ──────┬─────  ───┬───
    Β·             β”‚          ╰── Unnecessary dependency `fileUri`
    Β·             ╰── Unnecessary dependency `attachmentId`
 91 β”‚   const mimeType = videoMimeType(attachment) ?? attachment.mimeType;
    ╰────
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:212:34]
 211 β”‚   useEffect(() => {
 212 β”‚     if (!isFocused && hasSource) props.onRequestClose();
     Β·                                  ──┬──
     Β·                                    ╰── Missing dependency `props`
 213 β”‚   }, [isFocused, hasSource, props.onRequestClose]);
     Β·                             ──────────┬─────────
     Β·                                       ╰── Overly precise dependency `props.onRequestClose`, use `props` instead
 214 β”‚   const { source } = props;
     ╰────
  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used.
    ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18]
 14 β”‚ import * as Layer from "effect/Layer";
 15 β”‚ import type * as Scope from "effect/Scope";
    Β·                  ──┬──
    Β·                    ╰── 'Scope' is imported here
 16 β”‚ import * as Stream from "effect/Stream";
    ╰────
  help: Consider removing this import.

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     ╭─[apps/mobile/src/components/ProjectFavicon.tsx:171:5]
 166 β”‚   const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
 167 β”‚   useLayoutEffect(() => {
     Β·   ───────┬───────
     Β·          ╰── This is the containing effect
 168 β”‚     if (faviconRequest === null) return;
 169 β”‚
 170 β”‚     const endRequest = beginProjectFaviconRequest(faviconRequest);
 171 β”‚     setActiveFaviconRequest(faviconRequest);
     Β·     ───────────┬───────────
     Β·                ╰── Avoid calling setState() directly within an effect
 172 β”‚     return endRequest;
     ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
     ╭─[apps/server/src/provider/AntigravityAuth.ts:303:20]
 302 β”‚     },
 303 β”‚     (effect, flow, stopSessions) =>
     Β·                    ──────┬─────
     Β·                          ╰── 'stopSessions' is declared here
 304 β”‚       effect.pipe(
     ╰────
  help: Consider removing this parameter.

  ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     ╭─[packages/shared/src/atomicWrite.test.ts:137:5]
 136 β”‚       Effect.gen(function* () {
 137 β”‚ ╭─▢     while (fiber.pollUnsafe() === undefined) {
 138 β”‚ β”‚         yield* TestClock.adjust("100 millis");
 139 β”‚ β”‚         // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock
 140 β”‚ β”‚         yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve)));
 141 β”‚ ╰─▢     }
 142 β”‚         return yield* Fiber.join(fiber);
     ╰────

  ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'.
    ╭─[packages/shared/src/model.test.ts:36:7]
 35 β”‚
 36 β”‚ const claudeCaps: ModelCapabilities = createModelCapabilities({
    Β·       ─────┬────
    Β·            ╰── 'claudeCaps' is declared here
 37 β”‚   optionDescriptors: [
    ╰────
  help: Consider removing this declaration.

  ⚠ react(refs): Cannot access refs during render
     ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:148:27]
 147 β”‚         <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
 148 β”‚           {props.children(open)}
     Β·                           ──┬─
     Β·                             ╰── Cannot access ref value during render
 149 β”‚         </View>
     ╰────
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  ⚠ react(memo-dependencies): Found missing/extra memoization dependencies
     ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:136:9]
 135 β”‚       if (action.id !== undefined) {
 136 β”‚         props.onPressAction?.({
     Β·         ──┬──
     Β·           ╰── Missing dependency `props`
 137 β”‚           nativeEvent: { event: action.id },
 138 β”‚         } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
 139 β”‚       }
 140 β”‚     },
 141 β”‚     [close, props.onPressAction],
     Β·             ─────────┬─────────
     Β·                      ╰── Overly precise dependency `props.onPressAction`, use `props` instead
 142 β”‚   );
     ╰────
  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
     ╭─[apps/web/src/components/settings/SettingInheritance.tsx:160:24]
 159 β”‚   keys,
 160 β”‚   overridingProjects = [],
     Β·                        ──
 161 β”‚   onClearOverrides,
     ╰────
  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownOption(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
     ╭─[packages/shared/src/otelEnvironment.ts:146:14]
 145 β”‚     name,
 146 β”‚     (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()),
     Β·              ──────────────────────────
 147 β”‚     `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`,
     ╰────

  ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
    ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3]
 27 β”‚     ) {
 28 β”‚ ╭─▢   for (let attempt = 0; attempt < 100; attempt += 1) {
 29 β”‚ β”‚       const available = yield* service.peek(workspaceRoot);
 30 β”‚ β”‚       if (predicate(available)) return available;
 31 β”‚ β”‚       yield* Effect.yieldNow;
 32 β”‚ ╰─▢   }
 33 β”‚       return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`);
    ╰────

  ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
    ╭─[apps/server/src/project/ProjectService.test.ts:94:3]
 93 β”‚     ) {
 94 β”‚ ╭─▢   for (let attempt = 0; attempt < 100; attempt += 1) {
 95 β”‚ β”‚       const project = Option.getOrThrow(yield* service.getById(projectId));
 96 β”‚ β”‚       if (predicate(project)) return project;
 97 β”‚ β”‚       yield* Effect.yieldNow;
 98 β”‚ ╰─▢   }
 99 β”‚       return yield* Effect.die(`Project ${projectId} was not enriched in time.`);
    ╰────

  ⚠ eslint(no-empty-pattern): Empty object binding pattern
     ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:460:14]
 459 β”‚
 460 β”‚   for (const {} of ["direct", "wrapper"] as const) {
     Β·              ──
 461 β”‚   }
     ╰────
  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.

  ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
    ╭─[packages/shared/src/composerContextLegacySend.ts:15:45]
 14 β”‚   const occurrences = collectComposerContextReferences(text);
 15 β”‚   for (const occurrence of [...occurrences].reverse()) {
    Β·                                             ───────
 16 β”‚     const record = recordsById.get(occurrence.contextId);
    ╰────
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

  ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used.
    ╭─[apps/server/src/ws.ts:10:13]
  9 β”‚ import * as Effect from "effect/Effect";
 10 β”‚ import * as Fiber from "effect/Fiber";
    Β·             ──┬──
    Β·               ╰── 'Fiber' is imported here
 11 β”‚ import * as FileSystem from "effect/FileSystem";
    ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used.
    ╭─[apps/server/src/ws.ts:17:13]
 16 β”‚ import * as Ref from "effect/Ref";
 17 β”‚ import * as Schedule from "effect/Schedule";
    Β·             ────┬───
    Β·                 ╰── 'Schedule' is imported here
 18 β”‚ import * as Schema from "effect/Schema";
    ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'.
      ╭─[apps/server/src/ws.ts:1296:13]
 1295 β”‚       const usageLimitSources = yield* UsageLimitSources.UsageLimitSources;
 1296 β”‚       const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner;
      Β·             ────────────┬───────────
      Β·                         ╰── 'projectSetupScriptRunner' is declared here
 1297 β”‚       const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker;
      ╰────
  help: Consider removing this declaration.

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
     ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:260:20]
 259 β”‚       ...(update._meta !== undefined
 260 β”‚         ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null }
     Β·                    ─────────
 261 β”‚         : {}),
     ╰────

  ⚠ eslint(no-unused-vars): Identifier 'Option' is imported but never used.
    ╭─[apps/server/src/guest/GuestShareService.test.ts:24:13]
 23 β”‚ import * as Ref from "effect/Ref";
 24 β”‚ import * as Option from "effect/Option";
    Β·             ───┬──
    Β·                ╰── 'Option' is imported here
 25 β”‚ import * as Stream from "effect/Stream";
    ╰────
  help: Consider removing this import.

  ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
     ╭─[apps/server/src/guest/GuestShareService.test.ts:733:50]
 732 β”‚       yield* guestShares.submit(session, { shareId, text: `note ${index}` }, []);
 733 β”‚       const [waiting] = (yield* waitingMessages).filter((next) => next.status === "pending");
     Β·                                                  ──────
 734 β”‚       yield* orchestrator.dispatch({
     ╰────
  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.

  ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
    ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
 35 β”‚       <T3SourceTextRunNativeComponent
 36 β”‚         key={index}
    Β·         ───────────
 37 β”‚         style={flattenedStyle}
    ╰────
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used.
    ╭─[apps/server/src/checkpointing/Utils.ts:12:10]
 11 β”‚
 12 β”‚ function resolveThreadWorkspaceCwd(input: {
    Β·          ────────────┬────────────
    Β·                      ╰── 'resolveThreadWorkspaceCwd' is declared here
 13 β”‚   readonly thread: {
    ╰────
  help: Consider removing this declaration.

  ⚠ eslint(no-unused-vars): Variable 'I' is declared but never used. Unused variables should start with a '_'.
    ╭─[apps/server/src/guest/http.ts:88:33]
 87 β”‚ /** Server-sent events with a heartbeat, never cached or buffered on the way. */
 88 β”‚ const eventStreamResponse = <A, I>(
    Β·                                 ┬
    Β·                                 ╰── 'I' is declared here
 89 β”‚   events: Stream.Stream<A>,
    ╰────
  help: Consider removing this declaration.

  ⚠ react(refs): Cannot access refs during render
    ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36]
 53 β”‚         const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
 54 β”‚ ╭─▢     children = cloneElement(child, {
 55 β”‚ β”‚         onTouchStart: (event) => {
 56 β”‚ β”‚           // onPressIn can repeat within one gesture when a finger leaves and re-enters the row.
 57 β”‚ β”‚           menuPress.current.isPreparing = false;
 58 β”‚ β”‚           menuPress.current.suppressPress = menuPress.current.isOpen;
 59 β”‚ β”‚           pendingPress.current = null;
 60 β”‚ β”‚           child.props.onTouchStart?.(event);
 61 β”‚ β”‚         },
 62 β”‚ β”‚         onPress: (event) => {
 63 β”‚ β”‚           // Accessibility clicks lack touch identifiers and must ignore previous touch cancellation.
 64 β”‚ β”‚           const isTouch = typeof event.nativeEvent.identifier === "number";
 65 β”‚ β”‚           if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
 66 β”‚ β”‚             return;
 67 β”‚ β”‚           }
 68 β”‚ β”‚           if (isTouch && menuPress.current.isPreparing) {
 69 β”‚ β”‚             // A release can precede native display; let UIKit's display/cancel callback decide its outcome.
 70 β”‚ β”‚             event.persist();
 71 β”‚ β”‚             pendingPress.current = () => child.props.onPress?.(event);
 72 β”‚ β”‚             return;
 73 β”‚ β”‚           }
 74 β”‚ β”‚           child.props.onPress?.(event);
 75 β”‚ β”‚         },
 76 β”‚ β”œβ”€β–Ά     });
    Β· ╰──── Passing a ref to a function may read its value during render
 77 β”‚         menuProps.onMenuInteractionStart = () => {
    ╰────
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  ⚠ unicorn(no-useless-spread): Using a spread operator here creates a new array unnecessarily.
    ╭─[apps/mobile/src/native/native-layout-metrics.tsx:43:27]
 42 β”‚     latestMetrics = next;
 43 β”‚     for (const settle of [...metricsWaiters]) settle(next);
    Β·                           ───
 44 β”‚     setMetrics(next);
    ╰────
  help: `for…of` can iterate over iterable, it's unnecessary to convert to an array.

  ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
    ╭─[apps/server/src/scheduledTasks/Schedule.ts:75:10]
 74 β”‚
 75 β”‚ function describeSchedule(schedule: ScheduledTaskSchedule): string {
    Β·          ────────┬───────
    Β·                  ╰── 'describeSchedule' is declared here
 76 β”‚   if (schedule.type === "webhook") return "On webhook";
    ╰────
  help: Consider removing this declaration.

  ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`.
     ╭─[apps/web/src/terminal/ghostty/core.ts:186:19]
 185 β”‚     const count = Math.min(CHUNK_SIZE, graphemeLength - start);
 186 β”‚     const codes = new Array<number>(count);
     Β·                   ────────────────────────
 187 β”‚     for (let index = 0; index < count; index += 1) {
     ╰────
  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]`.

  ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:520:13]
 519 β”‚                 })).delivery;
 520 β”‚ ╭─▢             while (delivery.outcome === "accepted") {
 521 β”‚ β”‚                 yield* Effect.yieldNow;
 522 β”‚ β”‚                 delivery = (yield* service.getWebhookDelivery({
 523 β”‚ β”‚                   id: task.id,
 524 β”‚ β”‚                   deliveryId: deliveryId!,
 525 β”‚ β”‚                 })).delivery;
 526 β”‚ ╰─▢             }
 527 β”‚                 assert.equal(delivery.outcome, "dispatch_failed");
     ╰────

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
     ╭─[apps/server/src/assets/AssetAccess.test.ts:975:35]
 974 β”‚       // Every client and server release spells the resource this way on the wire.
 975 β”‚       const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({
     Β·                                   ──────────────────────────
 976 β”‚         resource: { _tag: "github-media", cwd: "/repo", url },
     ╰────

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

  ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
     ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
 120 β”‚   const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
 121 β”‚   const dispatch = vi.fn((_: unknown) =>
     Β·                           ┬
     Β·                           ╰── '_' is declared here
 122 β”‚     (options.dispatchGate ?? Effect.void).pipe(
     ╰────
  help: Consider removing this parameter.

  ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
     ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
 133 β”‚   );
 134 β”‚   const listLocalBranchNames = vi.fn((_: string) =>
     Β·                                       ┬
     Β·                                       ╰── '_' is declared here
 135 β”‚     Effect.succeed(
     ╰────
  help: Consider removing this parameter.

  ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
     ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
 177 β”‚   });
 178 β”‚   const sendToThread = vi.fn((_: unknown) => {
     Β·                               ┬
     Β·                               ╰── '_' is declared here
 179 β”‚     switch (options.continuation ?? "queued") {
     ╰────
  help: Consider removing this parameter.

  ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
     ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
 202 β”‚   );
 203 β”‚   const removeWorktree = vi.fn((_: unknown) =>
     Β·                                 ┬
     Β·                                 ╰── '_' is declared here
 204 β”‚     options.removeWorktreeFails
     ╰────
  help: Consider removing this parameter.

  ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
     ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
 207 β”‚   );
 208 β”‚   const deleteLocalBranch = vi.fn((_: unknown) =>
     Β·                                    ┬
     Β·                                    ╰── '_' is declared here
 209 β”‚     options.deleteLocalBranchFails
     ╰────
  help: Consider removing this parameter.

  ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
     ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
 212 β”‚   );
 213 β”‚   const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
     Β·                                          ┬
     Β·                                          ╰── '_' is declared here
 214 β”‚     options.fetchWorktreeBaseFails
     ╰────
  help: Consider removing this parameter.

  ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
     ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
 253 β”‚   );
 254 β”‚   const localStatus = vi.fn((_: unknown) =>
     Β·                              ┬
     Β·                              ╰── '_' is declared here
 255 β”‚     Effect.succeed({
     ╰────
  help: Consider removing this parameter.

  ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
     ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
 263 β”‚   );
 264 β”‚   const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
     Β·                                ┬
     Β·                                ╰── '_' is declared here
 265 β”‚   const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
     ╰────
  help: Consider removing this parameter.

  ⚠ eslint(no-empty-pattern): Empty object binding pattern
     ╭─[apps/server/src/processRunner.test.ts:264:14]
 263 β”‚
 264 β”‚   for (const {} of ["timeout", "success"] as const) {
     Β·              ──
 265 β”‚   }
     ╰────
  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.

  ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
     ╭─[apps/server/src/telemetry/AnalyticsService.ts:327:7]
 326 β”‚
 327 β”‚ const layerTest = AnalyticsService.layerTest;
     Β·       ────┬────
     Β·           ╰── 'layerTest' is declared here
     ╰────
  help: Consider removing this declaration.

  ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed
    ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13]
 14 β”‚ } from "@t3tools/contracts";
 15 β”‚ import type {} from "@t3tools/contracts";
    Β·             ──
 16 β”‚
    ╰────
  help: Remove empty braces

  ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
     ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:229:6]
 225 β”‚     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
 226 β”‚       nativeEventSnapshotsRef.current,
     Β·       ───────────┬───────────
     Β·                  ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 227 β”‚       mostRecentEventCount,
 228 β”‚     );
 229 β”‚   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
     Β·      ──────────────────────────┬──────────────────────────
     Β·                                ╰── This dependency list is missing values used by the callback
 230 β”‚   const assumedValue = props.value;
     ╰────
  help: Missing dependencies can cause an effect to fire less often than it should
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:235:7]
 234 β”‚     nativeEventSnapshotsRef.current = assumeComposerControlledState(
 235 β”‚       nativeEventSnapshotsRef.current,
     Β·       ───────────┬───────────
     Β·                  ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 236 β”‚       controlledEventCount,
 237 β”‚       assumedValue,
 238 β”‚     );
 239 β”‚   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
     Β·                                                         ───────────┬──────────
     Β·                                                                    ╰── Unnecessary dependency `controlledDocumentJson`
 240 β”‚   const acceptNativeEvent = useCallback(
     ╰────
  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(refs): Cannot access refs during render
     ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29]
 161 β”‚     const tokens = collectComposerInlineTokens(props.value, {
 162 β”‚       preserveTrailingFrom: confirmedTokensRef.current,
     Β·                             ─────────────┬────────────
     Β·                                          ╰── Cannot access ref value during render
 163 β”‚     });
     ╰────
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  ⚠ react(refs): Cannot access refs during render
     ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29]
 161 β”‚     const tokens = collectComposerInlineTokens(props.value, {
 162 β”‚       preserveTrailingFrom: confirmedTokensRef.current,
     Β·                             ─────────────┬────────────
     Β·                                          ╰── Passing a ref to a function may read its value during render
 163 β”‚     });
     ╰────
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  ⚠ react(refs): Cannot access refs during render
     ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:23]
 163 β”‚     });
 164 β”‚     confirmedTokensRef.current = tokens;
     Β·     ─────────┬────────────┬───
     Β·              β”‚            ╰── Cannot update ref value during render
     Β·              ╰── This value is a ref
 165 β”‚     return JSON.stringify(
     ╰────
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  ⚠ react(refs): Cannot access refs during render
     ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:206:5]
 205 β”‚     mostRecentEventCount,
 206 β”‚     nativeEventSnapshotsRef.current,
     Β·     ───────────────┬───────────────
     Β·                    ╰── Passing a ref to a function may read its value during render
 207 β”‚   );
     ╰────
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  ⚠ react(refs): Cannot access refs during render
     ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:212:5]
 211 β”‚     mostRecentEventCount,
 212 β”‚     nativeEventSnapshotsRef.current,
     Β·     ───────────────┬───────────────
     Β·                    ╰── Passing a ref to a function may read its value during render
 213 β”‚   );
     ╰────
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  ⚠ react(memo-dependencies): Found missing memoization dependencies
     ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:197:6]
 161 β”‚     const tokens = collectComposerInlineTokens(props.value, {
 162 β”‚       preserveTrailingFrom: confirmedTokensRef.current,
     Β·                             ─────────┬────────
     Β·                                      ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 163 β”‚     });
 164 β”‚     confirmedTokensRef.current = tokens;
 165 β”‚     return JSON.stringify(
 166 β”‚       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
 167 β”‚         const record =
 168 β”‚           token.type === "context"
 169 β”‚             ? props.context?.records.find((record) => record.contextId === token.contextId)
 170 β”‚             : undefined;
 171 β”‚         const presentation = contextChipPresentation(
 172 β”‚           token.type === "context" ? token.kind : token.type,
 173 β”‚           record,
 174 β”‚         );
 175 β”‚         const icon = contextChipIcon(
 176 β”‚           presentation,
 177 β”‚           token.type === "mention" ? token.value : contextRecordFileName(record),
 178 β”‚         );
 179 β”‚         return {
 180 β”‚           type: token.type,
 181 β”‚           source: token.source,
 182 β”‚           start: token.start,
 183 β”‚           end: token.end,
 184 β”‚           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
 185 β”‚           label:
 186 β”‚             token.type === "skill"
 187 β”‚               ? (skillLabels.get(token.value) ?? token.value)
 188 β”‚               : token.type === "context"
 189 β”‚                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " Β· unavailable"}`
 190 β”‚                 : basename(token.value),
 191 β”‚           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
 192 β”‚           iconUri: contextChipIconUri(icon),
 193 β”‚           tintsIcon: icon.kind === "chip",
 194 β”‚         };
 195 β”‚       }),
 196 β”‚     );
 197 β”‚   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
     Β·      ───────────────────────────────┬───────────────────────────────
     Β·                                     ╰── This dependency list is missing values used by the callback
 198 β”‚   // Every render resolves against the snapshot history, so a render whose
     ╰────
  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ react(memo-dependencies): Found missing memoization dependencies
     ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:257:5]
 249 β”‚       mostRecentEventCountRef.current = acknowledgedEventCount;
 250 β”‚       nativeEventSnapshotsRef.current.push({
     Β·       ───────────┬───────────
     Β·                  ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 251 β”‚         eventCount: acknowledgedEventCount,
 252 β”‚         value,
 253 β”‚         selection: nextSelection,
 254 β”‚       });
 255 β”‚       return acknowledgedEventCount;
 256 β”‚     },
 257 β”‚     [],
     Β·     ─┬
     Β·      ╰── This dependency list is missing values used by the callback
 258 β”‚   );
     ╰────
  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  ⚠ eslint(no-new): Do not use 'new' for side effects.
     ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3]
 167 β”‚   // @ts-expect-error a declaration constructed directly
 168 β”‚   new McpToolAccess.Declaration(unchecked);
     Β·   ─────────────────────────────
 169 β”‚   // @ts-expect-error a handlers layer built outside McpToolAccess
     ╰────
  help: Assign the result of 'new' to a variable or compare it to a reference.

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
      ╭─[apps/server/src/serverSettings.test.ts:1740:32]
 1739 β”‚       const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
 1740 β”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
      Β·                                ───────────────────
 1741 β”‚       const scriptsJson = yield* Schema.encodeEffect(
      ╰────

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
      ╭─[apps/server/src/serverSettings.test.ts:1741:34]
 1740 β”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
 1741 β”‚       const scriptsJson = yield* Schema.encodeEffect(
      Β·                                  ───────────────────
 1742 β”‚         Schema.fromJsonString(Schema.Array(ProjectScript)),
      ╰────

  ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used.
    ╭─[apps/server/src/auth/http.ts:28:10]
 27 β”‚ import * as Schema from "effect/Schema";
 28 β”‚ import { identity } from "effect/Function";
    Β·          ────┬───
    Β·              ╰── 'identity' is imported here
 29 β”‚ import * as Layer from "effect/Layer";
    ╰────
  help: Consider removing this import.

  ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11]
 132 β”‚               const monitor = yield* HostPowerMonitor.HostPowerMonitor;
 133 β”‚ ╭─▢           for (
 134 β”‚ β”‚               let attempt = 0;
 135 β”‚ β”‚               attempt < 100 && (yield* monitor.snapshot).onBattery !== "true";
 136 β”‚ β”‚               attempt += 1
 137 β”‚ β”‚             ) {
 138 β”‚ β”‚               yield* Effect.yieldNow;
 139 β”‚ ╰─▢           }
 140 β”‚               expect((yield* monitor.snapshot).onBattery).toBe("true");
     ╰────

  ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'.
       ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12551:7]
 12550 β”‚
 12551 β”‚ const layerUnavailable: Layer.Layer<OrchestratorV2> = Layer.succeed(
       Β·       ────────┬───────
       Β·               ╰── 'layerUnavailable' is declared here
 12552 β”‚   OrchestratorV2,
       ╰────
  help: Consider removing this declaration.

  ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
     ╭─[scripts/lib/cli-external-packages.test.ts:104:11]
 103 β”‚         const declared = {
 104 β”‚           ...(manifest.dependencies ?? {}),
     Β·           ────────────────────────────────
 105 β”‚           ...(manifest.optionalDependencies ?? {}),
     ╰────
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
     ╭─[scripts/lib/cli-external-packages.test.ts:105:11]
 104 β”‚           ...(manifest.dependencies ?? {}),
 105 β”‚           ...(manifest.optionalDependencies ?? {}),
     Β·           ────────────────────────────────────────
 106 β”‚           ...(manifest.peerDependencies ?? {}),
     ╰────
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
     ╭─[scripts/lib/cli-external-packages.test.ts:106:11]
 105 β”‚           ...(manifest.optionalDependencies ?? {}),
 106 β”‚           ...(manifest.peerDependencies ?? {}),
     Β·           ────────────────────────────────────
 107 β”‚         };
     ╰────
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used.
    ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13]
 24 β”‚ import * as Schema from "effect/Schema";
 25 β”‚ import * as HostProcess from "@t3tools/shared/HostProcess";
    Β·             ─────┬─────
    Β·                  ╰── 'HostProcess' is imported here
 26 β”‚
    ╰────
  help: Consider removing this import.

  ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'.
     ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11]
 123 β”‚     const path = yield* Path.Path;
 124 β”‚     const serverConfig = yield* ServerConfig.ServerConfig;
     Β·           ──────┬─────
     Β·                 ╰── 'serverConfig' is declared here
 125 β”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
     ╰────
  help: Consider removing this declaration.

  ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'.
     ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11]
 124 β”‚     const serverConfig = yield* ServerConfig.ServerConfig;
 125 β”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
     Β·           ───────┬──────
     Β·                  ╰── 'serverSettings' is declared here
 126 β”‚     const gitWorkflow = yield* GitWorkflowService.GitWorkflowService;
     ╰────
  help: Consider removing this declaration.

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

  ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'.
     ╭─[apps/server/src/mcp/McpSessionRegistry.ts:214:7]
 213 β”‚
 214 β”‚ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect<void> =>
     Β·       ──────────┬──────────
     Β·                 ╰── 'revokeActiveMcpThread' is declared here
 215 β”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void;
     ╰────
  help: Consider removing this declaration.

  ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'.
     ╭─[apps/server/src/mcp/McpSessionRegistry.ts:217:7]
 216 β”‚
 217 β”‚ const revokeAllActiveMcpCredentials = (): Effect.Effect<void> =>
     Β·       ──────────────┬──────────────
     Β·                     ╰── 'revokeAllActiveMcpCredentials' is declared here
 218 β”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void;
     ╰────
  help: Consider removing this declaration.

  ⚠ eslint(no-empty-pattern): Empty object binding pattern
    ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
 52 β”‚
 53 β”‚   for (const {} of [
    Β·              ──
 54 β”‚     { healthy: true },
    ╰────
  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.

  ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
     ╭─[packages/shared/src/serverSettings.ts:333:9]
 332 β”‚       const entry: ProjectSettingsOverrides = {
 333 β”‚         ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}),
     Β·         ──────────────────────────────────────────────────────────────
 334 β”‚       };
     ╰────
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce()
     ╭─[packages/shared/src/serverSettings.ts:435:24]
 434 β”‚   const favorites =
 435 β”‚     setModelFavorites?.reduce((current, change) => {
     Β·                        ───┬──
     Β·                           ╰── For this reduce
 436 β”‚       const exists = current.some(
 437 β”‚         (favorite) => favorite.provider === change.provider && favorite.model === change.model,
 438 β”‚       );
 439 β”‚       return change.favorite
 440 β”‚         ? exists
 441 β”‚           ? current
 442 β”‚           : [...current, { provider: change.provider, model: change.model }]
     Β·              ─────┬────
     Β·                   ╰── From this spread
 443 β”‚         : current.filter(
     ╰────
  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead.
  note: Using spreads within accumulators leads to `O(n^2)` time complexity.

  ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops
     ╭─[packages/shared/src/serverSettings.ts:453:3]
 451 β”‚     null;
 452 β”‚   let nextModelPreferences = initialModelPreferences;
     Β·       ──────────┬─────────
     Β·                 ╰── From this accumulator
 453 β”‚   for (const change of setModelsHidden ?? []) {
     Β·   ─┬─
     Β·    ╰── For this loop
 454 β”‚     const preferences = nextModelPreferences?.[change.provider] ?? {
 455 β”‚       hiddenModels: [],
 456 β”‚       modelOrder: [],
 457 β”‚     };
 458 β”‚     const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model);
 459 β”‚     if (change.hidden) hiddenModels.push(change.model);
 460 β”‚     nextModelPreferences = {
 461 β”‚       ...nextModelPreferences,
     Β·       ───────────┬───────────
     Β·                  ╰── From this spread
 462 β”‚       [change.provider]: { ...preferences, hiddenModels },
     ╰────
  help: Consider using `Object.assign()` to mutate the accumulator instead.
  note: Using spreads within accumulators leads to `O(n^2)` time complexity.

  ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
     ╭─[apps/server/src/serverRuntimeStartup.ts:720:7]
 719 β”‚
 720 β”‚ const layer = layerWithOptions();
     Β·       ──┬──
     Β·         ╰── 'layer' is declared here
     ╰────
  help: Consider removing this declaration.

  ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
    ╭─[apps/web/src/lib/composerContextReferences.ts:90:40]
 89 β”‚   let cursor = prompt.length;
 90 β”‚   for (const occurrence of occurrences.reverse()) {
    Β·                                        ───────
 91 β”‚     let { start, end } = occurrence;
    ╰────
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

  ⚠ eslint(require-yield): This generator function does not have `yield`
     ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78]
  80 β”‚
  81 β”‚ ╭─▢ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* (
  82 β”‚ β”‚     options: AcpMcpOverAcpBridgeOptions,
  83 β”‚ β”‚   ): Effect.fn.Return<AcpMcpOverAcpBridge> {
  84 β”‚ β”‚     const fetchImplementation = options.fetchImplementation ?? fetch;
  85 β”‚ β”‚     const connections = new Map<string, Connection>();
  86 β”‚ β”‚
  87 β”‚ β”‚     const connectionFor = (connectionId: string): Effect.Effect<Connection, AcpMcpOverAcpError> =>
  88 β”‚ β”‚       Effect.suspend(() => {
  89 β”‚ β”‚         const connection = connections.get(connectionId);
  90 β”‚ β”‚         return connection === undefined
  91 β”‚ β”‚           ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`))
  92 β”‚ β”‚           : Effect.succeed(connection);
  93 β”‚ β”‚       });
  94 β”‚ β”‚
  95 β”‚ β”‚     const send = (
  96 β”‚ β”‚       connection: Connection,
  97 β”‚ β”‚       message: unknown,
  98 β”‚ β”‚     ): Effect.Effect<ReadonlyArray<unknown>, AcpMcpOverAcpError> =>
  99 β”‚ β”‚       connection.mutex.withPermits(1)(
 100 β”‚ β”‚         Effect.gen(function* () {
 101 β”‚ β”‚           const body = JSON.stringify(message);
 102 β”‚ β”‚           if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) {
 103 β”‚ β”‚             return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB."));
 104 β”‚ β”‚           }
 105 β”‚ β”‚           const response = yield* Effect.tryPromise({
 106 β”‚ β”‚             try: (signal) =>
 107 β”‚ β”‚               fetchImplementation(options.endpoint, {
 108 β”‚ β”‚                 method: "POST",
 109 β”‚ β”‚                 signal,
 110 β”‚ β”‚                 headers: {
 111 β”‚ β”‚                   "content-type": "application/json",
 112 β”‚ β”‚                   accept: "application/json, text/event-stream",
 113 β”‚ β”‚                   authorization: options.authorization,
 114 β”‚ β”‚                   ...(connection.sessionId === null
 115 β”‚ β”‚                     ? {}
 116 β”‚ β”‚                     : { "mcp-session-id": connection.sessionId }),
 117 β”‚ β”‚                   ...(connection.protocolVersion === null
 118 β”‚ β”‚                     ? {}
 119 β”‚ β”‚                     : { "mcp-protocol-version": connection.protocolVersion }),
 120 β”‚ β”‚                 },
 121 β”‚ β”‚                 body,
 122 β”‚ β”‚               }),
 123 β”‚ β”‚             catch: bridgeError,
 124 β”‚ β”‚           });
 125 β”‚ β”‚           connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId;
 126 β”‚ β”‚           if (!response.ok) {
 127 β”‚ β”‚             yield* Effect.promise(
 128 β”‚ β”‚               () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
 129 β”‚ β”‚             );
 130 β”‚ β”‚             return yield* Effect.fail(
 131 β”‚ β”‚               new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`),
 132 β”‚ β”‚             );
 133 β”‚ β”‚           }
 134 β”‚ β”‚           const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))];
 135 β”‚ β”‚           for (const payload of payloads) {
 136 β”‚ β”‚             connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion;
 137 β”‚ β”‚           }
 138 β”‚ β”‚           return payloads;
 139 β”‚ β”‚         }).pipe(Effect.mapError(bridgeError)),
 140 β”‚ β”‚       );
 141 β”‚ β”‚
 142 β”‚ β”‚     const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* (
 143 β”‚ β”‚       request: AcpSchema.DisconnectMcpRequest,
 144 β”‚ β”‚     ): Effect.fn.Return<AcpSchema.DisconnectMcpResponse, AcpMcpOverAcpError> {
 145 β”‚ β”‚       const connection = yield* connectionFor(request.connectionId);
 146 β”‚ β”‚       connections.delete(request.connectionId);
 147 β”‚ β”‚       const sessionId = connection.sessionId;
 148 β”‚ β”‚       if (sessionId !== null) {
 149 β”‚ β”‚         const response = yield* Effect.tryPromise({
 150 β”‚ β”‚           try: (signal) =>
 151 β”‚ β”‚             fetchImplementation(options.endpoint, {
 152 β”‚ β”‚               method: "DELETE",
 153 β”‚ β”‚               signal,
 154 β”‚ β”‚               headers: {
 155 β”‚ β”‚                 authorization: options.authorization,
 156 β”‚ β”‚                 "mcp-session-id": sessionId,
 157 β”‚ β”‚                 ...(connection.protocolVersion === null
 158 β”‚ β”‚                   ? {}
 159 β”‚ β”‚                   : { "mcp-protocol-version": connection.protocolVersion }),
 160 β”‚ β”‚               },
 161 β”‚ β”‚             }),
 162 β”‚ β”‚           catch: bridgeError,
 163 β”‚ β”‚         });
 164 β”‚ β”‚         if (!response.ok && response.status !== 404) {
 165 β”‚ β”‚           return yield* Effect.fail(
 166 β”‚ β”‚             new AcpMcpOverAcpError(
 167 β”‚ β”‚               `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`,
 168 β”‚ β”‚             ),
 169 β”‚ β”‚           );
 170 β”‚ β”‚         }
 171 β”‚ β”‚         yield* Effect.promise(
 172 β”‚ β”‚           () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
 173 β”‚ β”‚         );
 174 β”‚ β”‚       }
 175 β”‚ β”‚       return {};
 176 β”‚ β”‚     });
 177 β”‚ β”‚
 178 β”‚ β”‚     return {
 179 β”‚ β”‚       connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) {
 180 β”‚ β”‚         if (request.serverId !== "t3-code") {
 181 β”‚ β”‚           return yield* Effect.fail(
 182 β”‚ β”‚             new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`),
 183 β”‚ β”‚           );
 184 β”‚ β”‚         }
 185 β”‚ β”‚         if (connections.size >= MAX_CONNECTIONS) {
 186 β”‚ β”‚           return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections."));
 187 β”‚ β”‚         }
 188 β”‚ β”‚         const connectionId = yield* options.allocateConnectionId;
 189 β”‚ β”‚         connections.set(connectionId, {
 190 β”‚ β”‚           mutex: yield* Semaphore.make(1),
 191 β”‚ β”‚           sessionId: null,
 192 β”‚ β”‚           protocolVersion: null,
 193 β”‚ β”‚           nextRequestId: 0,
 194 β”‚ β”‚         });
 195 β”‚ β”‚         return { connectionId };
 196 β”‚ β”‚       }),
 197 β”‚ β”‚       message: Effect.fn("mcpOverAcpBridge.message")(function* (request) {
 198 β”‚ β”‚         const connection = yield* connectionFor(request.connectionId);
 199 β”‚ β”‚         const id = ++connection.nextRequestId;
 200 β”‚ β”‚         const payloads = yield* send(connection, {
 201 β”‚ β”‚           jsonrpc: "2.0",
 202 β”‚ β”‚           id,
 203 β”‚ β”‚           method: request.method,
 204 β”‚ β”‚           ...(request.params == null ? {} : { params: request.params }),
 205 β”‚ β”‚         });
 206 β”‚ β”‚         const response = payloads.find((payload) => asEnvelope(payload)?.id === id);
 207 β”‚ β”‚         const envelope = asEnvelope(response);
 208 β”‚ β”‚         if (envelope === null) {
 209 β”‚ β”‚           return yield* Effect.fail(
 210 β”‚ β”‚             new AcpMcpOverAcpError("MCP server did not return a matching response."),
 211 β”‚ β”‚           );
 212 β”‚ β”‚         }
 213 β”‚ β”‚         if (envelope.error !== undefined) {
 214 β”‚ β”‚           return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error)));
 215 β”‚ β”‚         }
 216 β”‚ β”‚         return (envelope.result ?? null) as AcpSchema.MessageMcpResponse;
 217 β”‚ β”‚       }),
 218 β”‚ β”‚       notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) {
 219 β”‚ β”‚         const connection = yield* connectionFor(request.connectionId);
 220 β”‚ β”‚         yield* send(connection, {
 221 β”‚ β”‚           jsonrpc: "2.0",
 222 β”‚ β”‚           method: request.method,
 223 β”‚ β”‚           ...(request.params == null ? {} : { params: request.params }),
 224 β”‚ β”‚         });
 225 β”‚ β”‚       }),
 226 β”‚ β”‚       disconnect,
 227 β”‚ β”‚       dispose: Effect.suspend(() =>
 228 β”‚ β”‚         Effect.forEach(
 229 β”‚ β”‚           [...connections.keys()],
 230 β”‚ β”‚           (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore),
 231 β”‚ β”‚           { discard: true },
 232 β”‚ β”‚         ),
 233 β”‚ β”‚       ),
 234 β”‚ β”‚     };
 235 β”‚ ╰─▢ });
     ╰────
  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed.

  ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used.
    ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10]
 21 β”‚
 22 β”‚ function summarizePayload(payload: unknown): Readonly<Record<string, unknown>> {
    Β·          ────────┬───────
    Β·                  ╰── 'summarizePayload' is declared here
 23 β”‚   if (payload === null) return { valueType: "null" };
    ╰────
  help: Consider removing this declaration.

  ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
     ╭─[packages/provider-cursor/src/server/auth.ts:249:20]
 248 β”‚     },
 249 β”‚     (effect, flow, stopSessions) =>
     Β·                    ──────┬─────
     Β·                          ╰── 'stopSessions' is declared here
 250 β”‚       effect.pipe(
     ╰────
  help: Consider removing this parameter.

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
     ╭─[packages/effect-acp/src/errors.test.ts:129:28]
 128 β”‚       const secret = "acp-summary-secret";
 129 β”‚       const cause = yield* Schema.decodeUnknownEffect(
     Β·                            ──────────────────────────
 130 β”‚         Schema.Struct({
     ╰────

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
      ╭─[packages/effect-acp/src/client.ts:1270:11]
 1269 β”‚         extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
 1270 β”‚           Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
      Β·           ──────────────────────────
 1271 β”‚             Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
      ╰────

  ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
    ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
 14 β”‚
 15 β”‚ const legacyCredentials = {
    Β·       ────────┬────────
    Β·               ╰── 'legacyCredentials' is declared here
 16 β”‚   version: 1 as const,
    ╰────
  help: Consider removing this declaration.

  ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used.
    ╭─[apps/web/src/lib/terminalContext.ts:56:10]
 55 β”‚
 56 β”‚ function normalizeTerminalContextSelection(
    Β·          ────────────────┬────────────────
    Β·                          ╰── 'normalizeTerminalContextSelection' is declared here
 57 β”‚   selection: TerminalContextSelection,
    ╰────
  help: Consider removing this declaration.

  ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
     ╭─[packages/shared/src/qrCode.ts:458:44]
 457 β”‚   ): Array<byte> {
 458 β”‚     let result: Array<byte> = divisor.map((_) => 0);
     Β·                                            ┬
     Β·                                            ╰── '_' is declared here
 459 β”‚     for (const b of data) {
     ╰────
  help: Consider removing this parameter.

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
     ╭─[packages/effect-acp/src/protocol.test.ts:500:31]
 499 β”‚
 500 β”‚       const response = yield* Schema.decodeUnknownEffect(
     Β·                               ──────────────────────────
 501 β”‚         Schema.fromJsonString(JsonRpcErrorResponse),
     ╰────

  ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
      ╭─[packages/provider-opencode/src/server/adapter.ts:3719:7]
 3718 β”‚
 3719 β”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, OpenCodeAdapterV2DriverEnv> =
      Β·       ──┬──
      Β·         ╰── 'layer' is declared here
 3720 β”‚   Layer.effect(
      ╰────
  help: Consider removing this declaration.

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
    ╭─[packages/effect-acp/src/schema.test.ts:18:12]
 17 β”‚     const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
 18 β”‚     expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
    Β·            ─────────
 19 β”‚     expect(
    ╰────

  ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
    ╭─[packages/effect-acp/src/schema.test.ts:20:7]
 19 β”‚     expect(
 20 β”‚       Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
    Β·       ─────────
 21 β”‚     ).toBe(true);
    ╰────

  ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
    ╭─[apps/web/src/lib/announce.browser.test.ts:41:46]
 40 β”‚
 41 β”‚     expect(regionTexts()).toEqual([...first].reverse());
    Β·                                              ───────
 42 β”‚     expect(regionTexts()).toContain("Claude");
    ╰────
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

  ⚠ react(purity): Cannot call impure function during render
     ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:373:47]
 372 β”‚   const { open, onOpenChange, onSnooze, timestampFormat } = props;
 373 β”‚   const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
     Β·                                               ─────┬────
     Β·                                                    ╰── Cannot call impure function
 374 β”‚   return (
     ╰────
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  ⚠ react(purity): Cannot call impure function during render
     ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:860:39]
 859 β”‚   if (snoozeGateClock.thread !== thread) {
 860 β”‚     setSnoozeGateClock({ thread, now: new Date().toISOString() });
     Β·                                       ─────┬────
     Β·                                            ╰── Cannot call impure function
 861 β”‚   }
     ╰────
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  ⚠ react(purity): Cannot call impure function during render
      ╭─[apps/web/src/components/CommandPalette.tsx:2048:20]
 2047 β”‚         title: inferProjectTitleFromPath(destinationPath),
 2048 β”‚         createdAt: new Date().toISOString(),
      Β·                    ─────┬────
      Β·                         ╰── Cannot call impure function
 2049 β”‚         remoteUrl: addProjectCloneFlow.remoteUrl,
      ╰────
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
    ╭─[apps/web/src/contextMenuFallback.test.ts:38:9]
 37 β”‚   get isConnected() {
 38 β”‚     let current: FakeElement | null = this;
    Β·         ───────
 39 β”‚     while (current?.parent) {
    ╰────
  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.

  ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
    ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:57:9]
 56 β”‚ ) {
 57 β”‚   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
    Β·         ──────┬──────
    Β·               ╰── 'useDragRegion' is declared here
 58 β”‚   const isInline = props.mode === "inline";
    ╰────
  help: Consider removing this declaration.

  ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55]
 61 β”‚   }, []);
 62 β”‚   useEffect(() => {
    Β·   ────┬────
    Β·       ╰── This is the containing effect
 63 β”‚     if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl);
    Β·                                                       ───────┬──────
    Β·                                                              ╰── Avoid calling setState() directly within an effect
 64 β”‚   }, [playbackUrl, resolvedUrl]);
    ╰────
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  ⚠ react(purity): Cannot call impure function during render
     ╭─[apps/web/src/components/CommandPaletteThreadItems.tsx:152:58]
 151 β”‚       if (threadSearchQuery.trim().length > 0 && !threadSearchQuery.startsWith(">") && !isOpen) {
 152 β”‚         claimThreadOpen(thread.environmentId, thread.id, Date.now());
     Β·                                                          ─────┬────
     Β·                                                               ╰── Cannot call impure function
 153 β”‚       }
     ╰────
  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

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

  ⚠ eslint(no-unused-vars): Identifier 'serverEnvironment' is imported but never used.
     ╭─[apps/web/src/components/LegacySidebar.tsx:210:40]
 209 β”‚ import { useClientSettings, updateClientSettings } from "~/hooks/useSettings";
 210 β”‚ import { primaryServerKeybindingsAtom, serverEnvironment } from "../state/server";
     Β·                                        ────────┬────────
     Β·                                                ╰── 'serverEnvironment' is imported here
 211 β”‚ import { appAtomRegistry } from "../rpc/atomRegistry";
     ╰────
  help: Consider removing this import.

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

  ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
   ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
 3 β”‚   AuthProvidersManageScope,
 4 β”‚   type AuthSessionState,
   Β·        ────────┬───────
   Β·                ╰── 'AuthSessionState' is imported here
 5 β”‚   type EnvironmentId,
   ╰────
  help: Consider removing this import.

Found 3 errors and 377 warnings in 5539 files (5.4s, 8 threads)
Error: Process completed with exit code 1.
Post job cleanup.
##[start-action display=Cache full pnpm store;id=__cc2f6527-8fdf-416f-a6c6-f2370a42c233.__actions_cache]
##[end-action id=__cc2f6527-8fdf-416f-a6c6-f2370a42c233.__actions_cache;outcome=skipped;conclusion=skipped;duration_ms=0]
##[start-action display=Cache Vite+;id=__cc2f6527-8fdf-416f-a6c6-f2370a42c233.vp_cache]
##[end-action id=__cc2f6527-8fdf-416f-a6c6-f2370a42c233.vp_cache;outcome=skipped;conclusion=skipped;duration_ms=0]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/4a4fb22b-5691-4369-917f-2641980c9532' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
Removing SSH command configuration
[command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
Warning: The process '/usr/local/bin/git' failed with exit code 128
A job completed hook has been configured by the self-hosted runner administrator
β–Έ Run '/job_completed.sh'
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
env:
  BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 149
  BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 376
  BLACKSMITH_CHECK_RUN_ID: 121051323923
  BLACKSMITH_JOB_DISPLAY_NAME: Lint
  GITHUB_ACTIONS_CACHE_MODE: write
Docker container cache not activated, skipping hash computation.
No active SSH sessions detected. Proceeding with shutdown immediately.
Cleaning up orphan processes