GitHub check

256 KB of 595 KB loaded Download the full log (595 KB)
339 KB of earlier output not loaded
/react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  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/features/threads/NewTaskDraftRouteScreen.tsx:84:5]
 79 โ”‚
 80 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 81 โ”‚     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
 82 โ”‚     const branchName = initialProjectRef.branch;
 83 โ”‚     let active = true;
 84 โ”‚     setPendingCheckouts((count) => count + 1);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 85 โ”‚     // 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(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/components/ProjectFavicon.tsx:158:5]
 153 โ”‚   const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
 154 โ”‚   useLayoutEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท          โ•ฐโ”€โ”€ This is the containing effect
 155 โ”‚     if (faviconRequest === null) return;
 156 โ”‚
 157 โ”‚     const endRequest = beginProjectFaviconRequest(faviconRequest);
 158 โ”‚     setActiveFaviconRequest(faviconRequest);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 159 โ”‚     return endRequest;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(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

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

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

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

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

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

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:553:7]
 547 โ”‚   }, [cancelledIncomingShareId, navigation, props.incomingShareId]);
 548 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 549 โ”‚     if (!isReturningToProjectPicker) {
 550 โ”‚       return;
 551 โ”‚     }
 552 โ”‚     if (requestedInitialProjectAvailable) {
 553 โ”‚       setIsReturningToProjectPicker(false);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 554 โ”‚       return;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:701:9]
 644 โ”‚
 645 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 646 โ”‚     if (props.pendingTaskId || props.draftId) {
 647 โ”‚       return;
 648 โ”‚     }
 649 โ”‚     if (lastInitialProjectRefRef.current !== props.initialProjectRef) {
 650 โ”‚       lastInitialProjectRefRef.current = props.initialProjectRef;
 651 โ”‚       appliedInitialProjectKeyRef.current = null;
 652 โ”‚     }
 653 โ”‚     const initialEnvironmentId = props.initialProjectRef?.environmentId;
 654 โ”‚     const initialProjectId = props.initialProjectRef?.projectId;
 655 โ”‚     if (initialEnvironmentId && initialProjectId) {
 656 โ”‚       const directProject =
 657 โ”‚         projects.find(
 658 โ”‚           (project) =>
 659 โ”‚             project.environmentId === initialEnvironmentId && project.id === initialProjectId,
 660 โ”‚         ) ?? null;
 661 โ”‚
 662 โ”‚       if (directProject) {
 663 โ”‚         // Apply the route's project once. Re-applying on every change would
 664 โ”‚         // instantly revert environment/project switches made in the picker.
 665 โ”‚         const directProjectKey = `${directProject.environmentId}:${directProject.id}`;
 666 โ”‚         if (appliedInitialProjectKeyRef.current === directProjectKey) {
 667 โ”‚           return;
 668 โ”‚         }
 669 โ”‚         if (props.initialProjectRef?.branch) {
 670 โ”‚           if (
 671 โ”‚             selectedProject?.environmentId !== directProject.environmentId ||
 672 โ”‚             selectedProject.id !== directProject.id
 673 โ”‚           ) {
 674 โ”‚             setProject(directProject);
 675 โ”‚             return;
 676 โ”‚           }
 677 โ”‚           if (!flow.draftKey) return;
 678 โ”‚           // The route completes checkout before mounting this composer. Local
 679 โ”‚           // mode reuses an existing worktree; worktree mode would create another.
 680 โ”‚           updateComposerDraftSettings(flow.draftKey, {
 681 โ”‚             workspaceSelection: {
 682 โ”‚               mode: "local",
 683 โ”‚               branch: props.initialProjectRef.branch,
 684 โ”‚               worktreePath: props.initialProjectRef.worktreePath ?? null,
 685 โ”‚               startFromOrigin: false,
 686 โ”‚             },
 687 โ”‚           });
 688 โ”‚         }
 689 โ”‚         appliedInitialProjectKeyRef.current = directProjectKey;
 690 โ”‚         if (
 691 โ”‚           selectedProject?.environmentId === directProject.environmentId &&
 692 โ”‚           selectedProject.id === directProject.id
 693 โ”‚         ) {
 694 โ”‚           return;
 695 โ”‚         }
 696 โ”‚         setProject(directProject);
 697 โ”‚         return;
 698 โ”‚       }
 699 โ”‚
 700 โ”‚       if (projects.length > 0) {
 701 โ”‚         setIsReturningToProjectPicker(true);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 702 โ”‚       }
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:801:5]
 742 โ”‚
 743 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 744 โ”‚     const shareId = props.incomingShareId;
 745 โ”‚     const draftKey = flow.draftKey;
 746 โ”‚     const destinationProject = selectedProject;
 747 โ”‚     const initialEnvironmentId = props.initialProjectRef?.environmentId;
 748 โ”‚     const initialProjectId = props.initialProjectRef?.projectId;
 749 โ”‚     const selectedProjectMatchesRoute =
 750 โ”‚       !initialEnvironmentId ||
 751 โ”‚       !initialProjectId ||
 752 โ”‚       (destinationProject?.environmentId === initialEnvironmentId &&
 753 โ”‚         destinationProject.id === initialProjectId);
 754 โ”‚     if (
 755 โ”‚       !shareId ||
 756 โ”‚       !draftKey ||
 757 โ”‚       !destinationProject ||
 758 โ”‚       !selectedProjectMatchesRoute ||
 759 โ”‚       cancelledIncomingShareId === shareId
 760 โ”‚     ) {
 761 โ”‚       return;
 762 โ”‚     }
 763 โ”‚     const importKey = `${shareId}:${draftKey}`;
 764 โ”‚     if (
 765 โ”‚       startedShareImportKeyRef.current === importKey ||
 766 โ”‚       cancellingShareImportKeyRef.current === importKey
 767 โ”‚     ) {
 768 โ”‚       return;
 769 โ”‚     }
 770 โ”‚
 771 โ”‚     if (!incomingShare) {
 772 โ”‚       if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
 773 โ”‚         alertedUnavailableIncomingShareIdRef.current = shareId;
 774 โ”‚         Dialog.alert(
 775 โ”‚           "Shared content unavailable",
 776 โ”‚           "The shared content is no longer in the inbox. You can continue editing this task draft.",
 777 โ”‚         );
 778 โ”‚       }
 779 โ”‚       return;
 780 โ”‚     }
 781 โ”‚
 782 โ”‚     if (
 783 โ”‚       incomingShare.attachments.some((attachment) => attachment.type === "file") &&
 784 โ”‚       selectedEnvironmentServerConfig === null
 785 โ”‚     ) {
 786 โ”‚       return;
 787 โ”‚     }
 788 โ”‚
 789 โ”‚     if (alertedUnavailableIncomingShareIdRef.current === shareId) {
 790 โ”‚       alertedUnavailableIncomingShareIdRef.current = null;
 791 โ”‚     }
 792 โ”‚     startedShareImportKeyRef.current = importKey;
 793 โ”‚     const draftBackup =
 794 โ”‚       shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
 795 โ”‚     shareImportDraftBackupRef.current.set(importKey, draftBackup);
 796 โ”‚     const importToken = Symbol(importKey);
 797 โ”‚     let didReserveShare = false;
 798 โ”‚     let didConsumeShare = false;
 799 โ”‚     let needsDraftRestore = false;
 800 โ”‚     activeShareImportTokenRef.current = importToken;
 801 โ”‚     setImportingShareKey(importKey);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 802 โ”‚     void (async () => {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:721:5]
 720 โ”‚     props.initialProjectRef,
 721 โ”‚     props.incomingShareId,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Unnecessary dependency `props.incomingShareId`
 722 โ”‚     props.pendingTaskId,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:740:5]
 739 โ”‚     loadedBranchesProjectKeyRef.current = projectKey;
 740 โ”‚     flow.loadBranches();
     ยท     โ”€โ”€โ”ฌโ”€
     ยท       โ•ฐโ”€โ”€ Missing dependency `flow`
 741 โ”‚   }, [flow.loadBranches, selectedProject]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Overly precise dependency `flow.loadBranches`, use `flow` instead
 742 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:963:5]
 962 โ”‚     flow.draftKey,
 963 โ”‚     hasImportedIncomingShare,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Unnecessary dependency `hasImportedIncomingShare`
 964 โ”‚     incomingShare,
 965 โ”‚     isIncomingShareInboxLoading,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `isIncomingShareInboxLoading`
 966 โ”‚     isIncomingShareUnavailable,
 967 โ”‚     props.incomingShareId,
 968 โ”‚     props.initialProjectRef?.environmentId,
 969 โ”‚     props.initialProjectRef?.projectId,
 970 โ”‚     releaseShareReservation,
 971 โ”‚     reserveShare,
 972 โ”‚     selectedEnvironmentServerConfig,
 973 โ”‚     selectedProject,
 974 โ”‚     shareImportAttempt,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ Unnecessary dependency `shareImportAttempt`
 975 โ”‚   ]);
     โ•ฐโ”€โ”€โ”€โ”€
  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(immutability): This value cannot be modified
    โ•ญโ”€[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
 53 โ”‚ function usePulseAnimation(pulse: boolean) {
 54 โ”‚   const pulseProgress = useSharedValue(0);
    ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท               โ•ฐโ”€โ”€ `pulseProgress` originates here
 55 โ”‚
 56 โ”‚   useEffect(() => {
 57 โ”‚     if (pulse) {
 58 โ”‚       pulseProgress.value = withRepeat(
    ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท             โ•ฐโ”€โ”€ `pulseProgress` cannot be modified
 59 โ”‚         withTiming(1, {
    โ•ฐโ”€โ”€โ”€โ”€
  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(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:707:7]
 706 โ”‚     if (settingsSheetPresentation.isActive) {
 707 โ”‚       settingsRoutePresentation.present(settingsRouteSession);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                   โ•ฐโ”€โ”€ Missing dependency `settingsRoutePresentation`
 708 โ”‚     }
 709 โ”‚   }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                       โ•ฐโ”€โ”€ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
 710 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:302:5]
 298 โ”‚     typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
 299 โ”‚   const animatedBorderRadius = useSharedValue(targetBorderRadius);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                   โ•ฐโ”€โ”€ `animatedBorderRadius` originates here
 300 โ”‚   const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
 301 โ”‚   useLayoutEffect(() => {
 302 โ”‚     animatedBorderRadius.value = shouldAnimate
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ `animatedBorderRadius` cannot be modified
 303 โ”‚       ? withTiming(targetBorderRadius, {
     โ•ฐโ”€โ”€โ”€โ”€
  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(purity): Cannot call impure function during render
     โ•ญโ”€[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
 371 โ”‚   const { open, onOpenChange, onSnooze, timestampFormat } = props;
 372 โ”‚   const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
     ยท                                               โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                                    โ•ฐโ”€โ”€ Cannot call impure function
 373 โ”‚   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:853:39]
 852 โ”‚   if (snoozeGateClock.thread !== thread) {
 853 โ”‚     setSnoozeGateClock({ thread, now: new Date().toISOString() });
     ยท                                       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                            โ•ฐโ”€โ”€ Cannot call impure function
 854 โ”‚   }
     โ•ฐโ”€โ”€โ”€โ”€
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5]
 58 โ”‚
 59 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 60 โ”‚     setMountedModes((current) => {
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 61 โ”‚       if (current.has(props.mode)) {
    โ•ฐโ”€โ”€โ”€โ”€
  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/connection/ConnectionsNewRouteScreen.tsx:79:5]
 76 โ”‚
 77 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 78 โ”‚     const { host, code } = parsePairingUrl(connectionPairingUrl);
 79 โ”‚     setHostInput(host);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
    ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 80 โ”‚     setCodeInput(code);
    โ•ฐโ”€โ”€โ”€โ”€
  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/connection/ConnectionsNewRouteScreen.tsx:89:5]
 82 โ”‚
 83 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 84 โ”‚     if (routePairingUrl.length === 0) {
 85 โ”‚       return;
 86 โ”‚     }
 87 โ”‚
 88 โ”‚     const { host, code } = parsePairingUrl(routePairingUrl);
 89 โ”‚     setHostInput(host);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
    ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 90 โ”‚     setCodeInput(code);
    โ•ฐโ”€โ”€โ”€โ”€
  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/connection/ConnectionsNewRouteScreen.tsx:95:7]
 92 โ”‚
 93 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 94 โ”‚     if (pairingConnectionError) {
 95 โ”‚       setIsSubmitting(false);
    ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 96 โ”‚     }
    โ•ฐโ”€โ”€โ”€โ”€
  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/ThreadRouteScreen.tsx:388:5]
 386 โ”‚
 387 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 388 โ”‚     setInspectorSelection((current) => {
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 389 โ”‚       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:516:24]
 515 โ”‚       const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
 516 โ”‚ โ•ญโ”€โ–ถ   const GitInspector = () => (
 517 โ”‚ โ”‚       <GitOverviewSheet
 518 โ”‚ โ”‚         headerInset={inspectorHeaderInset}
 519 โ”‚ โ”‚         presentation="inspector"
 520 โ”‚ โ”‚         route={{ params: props.route.params }}
 521 โ”‚ โ”‚       />
 522 โ”‚ โ•ฐโ”€โ–ถ   );
 523 โ”‚       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:523:26]
 522 โ”‚       );
 523 โ”‚ โ•ญโ”€โ–ถ   const FilesInspector = () =>
 524 โ”‚ โ”‚       selectedThread !== null && selectedThreadCwd !== null ? (
 525 โ”‚ โ”‚         <ThreadFileNavigatorPane
 526 โ”‚ โ”‚           cwd={selectedThreadCwd}
 527 โ”‚ โ”‚           environmentId={selectedThread.environmentId}
 528 โ”‚ โ”‚           headerInset={inspectorHeaderInset}
 529 โ”‚ โ”‚           projectName={selectedThreadProject?.title ?? "Files"}
 530 โ”‚ โ”‚           selectedPath={null}
 531 โ”‚ โ”‚           onSelectFile={handleSelectInspectorFile}
 532 โ”‚ โ”‚         />
 533 โ”‚ โ•ฐโ”€โ–ถ     ) : null;
 534 โ”‚       const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
     โ•ฐโ”€โ”€โ”€โ”€
  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.

  โš  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/pullRequest/PullRequestListFilters.tsx:387:19]
 386 โ”‚   onFilters,
 387 โ”‚   authorOptions = [],
     ยท                   โ”€โ”€
 388 โ”‚   labelOptions = [],
     โ•ฐโ”€โ”€โ”€โ”€
  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.

  โš  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/pullRequest/PullRequestListFilters.tsx:388:18]
 387 โ”‚   authorOptions = [],
 388 โ”‚   labelOptions = [],
     ยท                  โ”€โ”€
 389 โ”‚   host,
     โ•ฐโ”€โ”€โ”€โ”€
  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.

  โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
 289 โ”‚   return (
 290 โ”‚     <ExistingThreadSettingsRouteContext.Provider value={value}>
     ยท                                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 291 โ”‚       {props.children}
     โ•ฐโ”€โ”€โ”€โ”€
  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(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
 653 โ”‚   return (
 654 โ”‚     <ThreadSettingsSessionContext.Provider value={value}>
     ยท                                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 655 โ”‚       {props.children}
     โ•ฐโ”€โ”€โ”€โ”€
  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(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
 1461 โ”‚   return (
 1462 โ”‚     <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
      ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1463 โ”‚       <ThreadSettingsPickerStack.Navigator
      โ•ฐโ”€โ”€โ”€โ”€
  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(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:282:5]
 280 โ”‚   const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
 281 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 282 โ”‚     setNow(new Date().toISOString());
     ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
     ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 283 โ”‚     const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:362:25]
 361 โ”‚     // range) the boundary string is identical and the chain would die.
 362 โ”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
     ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
 363 โ”‚   const listItems = ((): readonly SidebarListItem[] => {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(purity): Cannot call impure function during render
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:353:53]
 352 โ”‚     if (Number.isNaN(wakeAtMs)) return;
 353 โ”‚     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
     ยท                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                                          โ•ฐโ”€โ”€ Cannot call impure function
 354 โ”‚     const id = setTimeout(() => {
     โ•ฐโ”€โ”€โ”€โ”€
  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(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
 28 โ”‚   const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
 29 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 30 โ”‚     if (snapshot && snapshot !== live) setHeld({ key, snapshot });
    ยท                                        โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท                                           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 31 โ”‚   }, [key, live, snapshot]);
    โ•ฐโ”€โ”€โ”€โ”€
  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-empty-pattern): Empty object binding pattern
     โ•ญโ”€[apps/server/src/provider/Drivers/CodexDriver.test.ts:418:14]
 417 โ”‚
 418 โ”‚   for (const {} of ["direct", "wrapper"] as const) {
     ยท              โ”€โ”€
 419 โ”‚   }
     โ•ฐโ”€โ”€โ”€โ”€
  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
      โ•ญโ”€[apps/mobile/src/state/use-composer-drafts.ts:1022:15]
 1021 โ”‚             instanceId,
 1022 โ”‚             { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models },
      ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1023 โ”‚           ]),
      โ•ฐโ”€โ”€โ”€โ”€
  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.

  โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:282:7]
 281 โ”‚       mountedRef.current = false;
 282 โ”‚       flow.setBranchQuery("");
     ยท       โ”€โ”€โ”ฌโ”€
     ยท         โ•ฐโ”€โ”€ Missing dependency `flow`
 283 โ”‚     };
 284 โ”‚   }, [flow.setBranchQuery]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ Overly precise dependency `flow.setBranchQuery`, use `flow` instead
 285 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
    โ•ญโ”€[packages/shared/src/composerContextLegacySend.ts:19:45]
 18 โ”‚   const occurrences = collectComposerContextReferences(text);
 19 โ”‚   for (const occurrence of [...occurrences].reverse()) {
    ยท                                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 20 โ”‚     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.

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:496:5]
 494 โ”‚   }, []);
 495 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 496 โ”‚     setKeyboardStateSuspect(false);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 497 โ”‚   }, [isKeyboardVisible, liveKeyboardHeight]);
     โ•ฐโ”€โ”€โ”€โ”€
  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/ThreadDetailScreen.tsx:850:7]
 847 โ”‚   const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
 848 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 849 โ”‚     if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
 850 โ”‚       setLastKnownKeyboardHeight(liveKeyboardHeight);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                    โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 851 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  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/ThreadDetailScreen.tsx:1095:5]
 1093 โ”‚
 1094 โ”‚   useEffect(() => {
      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
      ยท       โ•ฐโ”€โ”€ This is the containing effect
 1095 โ”‚     setAnchorMessageId(null);
      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 1096 โ”‚     setSubmittedMessageId(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/features/threads/ThreadDetailScreen.tsx:497:7]
 496 โ”‚     setKeyboardStateSuspect(false);
 497 โ”‚   }, [isKeyboardVisible, liveKeyboardHeight]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `liveKeyboardHeight`
     ยท               โ•ฐโ”€โ”€ Unnecessary dependency `isKeyboardVisible`
 498 โ”‚   const handleOwnedInputFocusChange = (focused: boolean) => {
     โ•ฐโ”€โ”€โ”€โ”€
  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/ThreadDetailScreen.tsx:1043:7]
 1042 โ”‚     userInputInsetProgress.set(1);
 1043 โ”‚   }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                   โ•ฐโ”€โ”€ Unnecessary dependency `activeUserInputRequestId`
 1044 โ”‚   const showContent = props.showContent ?? true;
      โ•ฐโ”€โ”€โ”€โ”€
  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/ThreadDetailScreen.tsx:1101:15]
 1100 โ”‚     freeze.set(false);
 1101 โ”‚   }, [freeze, selectedThreadKey]);
      ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                       โ•ฐโ”€โ”€ Unnecessary dependency `selectedThreadKey`
 1102 โ”‚
      โ•ฐโ”€โ”€โ”€โ”€
  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(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:931:5]
 926 โ”‚   const composerPopoverHeight = useSharedValue(0);
 927 โ”‚   const floatingControlCoverage = useSharedValue(
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                    โ•ฐโ”€โ”€ `floatingControlCoverage` originates here
 928 โ”‚     showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
 929 โ”‚   );
 930 โ”‚   useEffect(() => {
 931 โ”‚     floatingControlCoverage.value = withTiming(
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ `floatingControlCoverage` cannot be modified
 932 โ”‚       showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:949:7]
 939 โ”‚   const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
 940 โ”‚   const combinedContentInsetEndAdjustment = useSharedValue(
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                         โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` originates here
 941 โ”‚     Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
 942 โ”‚   );
 943 โ”‚   useAnimatedReaction(
 944 โ”‚     () =>
 945 โ”‚       contentInsetEndAdjustment.value +
 946 โ”‚       floatingControlCoverage.value +
 947 โ”‚       (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
 948 โ”‚     (value) => {
 949 โ”‚       combinedContentInsetEndAdjustment.value = value;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                       โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` cannot be modified
 950 โ”‚     },
     โ•ฐโ”€โ”€โ”€โ”€
  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

  โš  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:139:5]
 138 โ”‚       Effect.gen(function* () {
 139 โ”‚ โ•ญโ”€โ–ถ     while (fiber.pollUnsafe() === undefined) {
 140 โ”‚ โ”‚         yield* TestClock.adjust("100 millis");
 141 โ”‚ โ”‚         // 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
 142 โ”‚ โ”‚         yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve)));
 143 โ”‚ โ•ฐโ”€โ–ถ     }
 144 โ”‚         return yield* Fiber.join(fiber);
     โ•ฐโ”€โ”€โ”€โ”€

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

  โš  t3code(no-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:223:5]
 222 โ”‚         let idlePasses = 0;
 223 โ”‚ โ•ญโ”€โ–ถ     for (;;) {
 224 โ”‚ โ”‚         yield* Effect.promise(() => Promise.resolve());
 225 โ”‚ โ”‚         const pending = backgroundRuntime.pending.shift();
 226 โ”‚ โ”‚         if (!pending) {
 227 โ”‚ โ”‚           idlePasses++;
 228 โ”‚ โ”‚           if (idlePasses >= 3) {
 229 โ”‚ โ”‚             return;
 230 โ”‚ โ”‚           }
 231 โ”‚ โ”‚           continue;
 232 โ”‚ โ”‚         }
 233 โ”‚ โ”‚         idlePasses = 0;
 234 โ”‚ โ”‚         const exit = yield* Effect.exit(
 235 โ”‚ โ”‚           pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
 236 โ”‚ โ”‚         );
 237 โ”‚ โ”‚         yield* Effect.sync(() => {
 238 โ”‚ โ”‚           pending.resolve(exit);
 239 โ”‚ โ”‚         });
 240 โ”‚ โ•ฐโ”€โ–ถ     }
 241 โ”‚       },
     โ•ฐโ”€โ”€โ”€โ”€

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
     โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17]
 813 โ”‚               <div
 814 โ”‚                 key={`${index}:${check.name}:${check.url ?? ""}`}
     ยท                 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 815 โ”‚                 className="group flex items-center gap-2 rounded-md pr-1 hover:bg-accent/60"
     โ•ฐโ”€โ”€โ”€โ”€
  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): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
     โ•ญโ”€[apps/server/src/provider/AntigravityAuth.ts:285:20]
 284 โ”‚     },
 285 โ”‚     (effect, flow, stopSessions) =>
     ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท                          โ•ฐโ”€โ”€ 'stopSessions' is declared here
 286 โ”‚       effect.pipe(
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this parameter.

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
      โ•ญโ”€[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5]
 1314 โ”‚     queuedMessagesByThreadKey,
 1315 โ”‚     retryTick,
      ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
      ยท         โ•ฐโ”€โ”€ Unnecessary dependency `retryTick`
 1316 โ”‚     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-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

  โš  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:1043:32]
 1042 โ”‚         expect(error._tag).toBe("AssetGitHubMediaUrlValidationError");
 1043 โ”‚         const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error);
      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1044 โ”‚         expect(encoded).not.toContain(url);
      โ•ฐโ”€โ”€โ”€โ”€

  โš  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.

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:7]
 330 โ”‚   };
 331 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 332 โ”‚     if (!guidesEnabled && section === "guide") {
 333 โ”‚       requestedSection.current = "overview";
 334 โ”‚       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
 335 โ”‚       setSection("overview");
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 336 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  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:337:6]
 332 โ”‚     if (!guidesEnabled && section === "guide") {
 333 โ”‚       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
 334 โ”‚       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
 335 โ”‚       setSection("overview");
 336 โ”‚     }
 337 โ”‚   }, [guidesEnabled, section, insets.top]);
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                        โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 338 โ”‚   const tabContent = activityContent;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause an effect to fire less often than it should
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

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

  โš  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

  โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
     โ•ญโ”€[packages/shared/src/serverSettings.ts:343:9]
 342 โ”‚       const entry: ProjectSettingsOverrides = {
 343 โ”‚         ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}),
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 344 โ”‚       };
     โ•ฐโ”€โ”€โ”€โ”€
  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:429:24]
 428 โ”‚   const favorites =
 429 โ”‚     setModelFavorites?.reduce((current, change) => {
     ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
     ยท                           โ•ฐโ”€โ”€ For this reduce
 430 โ”‚       const exists = current.some(
 431 โ”‚         (favorite) => favorite.provider === change.provider && favorite.model === change.model,
 432 โ”‚       );
 433 โ”‚       return change.favorite
 434 โ”‚         ? exists
 435 โ”‚           ? current
 436 โ”‚           : [...current, { provider: change.provider, model: change.model }]
     ยท              โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                   โ•ฐโ”€โ”€ From this spread
 437 โ”‚         : 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:447:3]
 445 โ”‚     null;
 446 โ”‚   let nextModelPreferences = initialModelPreferences;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ From this accumulator
 447 โ”‚   for (const change of setModelsHidden ?? []) {
     ยท   โ”€โ”ฌโ”€
     ยท    โ•ฐโ”€โ”€ For this loop
 448 โ”‚     const preferences = nextModelPreferences?.[change.provider] ?? {
 449 โ”‚       hiddenModels: [],
 450 โ”‚       modelOrder: [],
 451 โ”‚     };
 452 โ”‚     const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model);
 453 โ”‚     if (change.hidden) hiddenModels.push(change.model);
 454 โ”‚     nextModelPreferences = {
 455 โ”‚       ...nextModelPreferences,
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ From this spread
 456 โ”‚       [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.

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

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

  โš  eslint(no-unused-vars): Identifier 'Image' is imported but never used.
    โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10]
 16 โ”‚ import type { NativeSyntheticEvent, ViewProps } from "react-native";
 17 โ”‚ import { Image, Platform, StyleSheet } from "react-native";
    ยท          โ”€โ”€โ”ฌโ”€โ”€
    ยท            โ•ฐโ”€โ”€ 'Image' is imported here
 18 โ”‚
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  react(exhaustive-effect-dependencies): Found missing effect dependencies
     โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:227:6]
 223 โ”‚     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
 224 โ”‚       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
 225 โ”‚       mostRecentEventCount,
 226 โ”‚     );
 227 โ”‚   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 228 โ”‚   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.native.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.native.tsx:160:29]
 159 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
 160 โ”‚       preserveTrailingFrom: confirmedTokensRef.current,
     ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                          โ•ฐโ”€โ”€ Cannot access ref value during render
 161 โ”‚     });
     โ•ฐโ”€โ”€โ”€โ”€
  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.native.tsx:160:29]
 159 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
 160 โ”‚       preserveTrailingFrom: confirmedTokensRef.current,
     ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                          โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
 161 โ”‚     });
     โ•ฐโ”€โ”€โ”€โ”€
  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.native.tsx:162:23]
 161 โ”‚     });
 162 โ”‚     confirmedTokensRef.current = tokens;
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท              โ”‚            โ•ฐโ”€โ”€ Cannot update ref value during render
     ยท              โ•ฐโ”€โ”€ This value is a ref
 163 โ”‚     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.native.tsx:204:5]
 203 โ”‚     mostRecentEventCount,
 204 โ”‚     nativeEventSnapshotsRef.current,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                    โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
 205 โ”‚   );
     โ•ฐโ”€โ”€โ”€โ”€
  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.native.tsx:210:5]
 209 โ”‚     mostRecentEventCount,
 210 โ”‚     nativeEventSnapshotsRef.current,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                    โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
 211 โ”‚   );
     โ•ฐโ”€โ”€โ”€โ”€
  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.native.tsx:195:6]
 159 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
 160 โ”‚       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
 161 โ”‚     });
 162 โ”‚     confirmedTokensRef.current = tokens;
 163 โ”‚     return JSON.stringify(
 164 โ”‚       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
 165 โ”‚         const record =
 166 โ”‚           token.type === "context"
 167 โ”‚             ? props.context?.records.find((record) => record.contextId === token.contextId)
 168 โ”‚             : undefined;
 169 โ”‚         const presentation = contextChipPresentation(
 170 โ”‚           token.type === "context" ? token.kind : token.type,
 171 โ”‚           record,
 172 โ”‚         );
 173 โ”‚         const icon = contextChipIcon(
 174 โ”‚           presentation,
 175 โ”‚           token.type === "mention" ? token.value : contextRecordFileName(record),
 176 โ”‚         );
 177 โ”‚         return {
 178 โ”‚           type: token.type,
 179 โ”‚           source: token.source,
 180 โ”‚           start: token.start,
 181 โ”‚           end: token.end,
 182 โ”‚           accent: presentation.accent,
 183 โ”‚           label:
 184 โ”‚             token.type === "skill"
 185 โ”‚               ? (skillLabels.get(token.value) ?? token.value)
 186 โ”‚               : token.type === "context"
 187 โ”‚                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " ยท unavailable"}`
 188 โ”‚                 : basename(token.value),
 189 โ”‚           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
 190 โ”‚           iconUri: contextChipIconUri(icon),
 191 โ”‚           tintsIcon: icon.kind === "chip",
 192 โ”‚         };
 193 โ”‚       }),
 194 โ”‚     );
 195 โ”‚   }, [props.value, props.context, skillLabels]);
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                          โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 196 โ”‚   // 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.native.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-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.

  โš  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): 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.

  โš  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.

  โš  react(memo-dependencies): Found extra memoization dependencies
     โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85]
  99 โ”‚   const startEditor = startScheduledTaskEditor;
 100 โ”‚   const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
     ยท                                                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท                                                                                          โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
 101 โ”‚   const readEditor = useCallback(
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(memo-dependencies): Found extra memoization dependencies
     โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7]
 120 โ”‚       setEditor,
 121 โ”‚       startEditor,
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
 122 โ”‚       hasChanges,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  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:263:20]
 262 โ”‚       ...(update._meta !== undefined
 263 โ”‚         ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null }
     ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 264 โ”‚         : {}),
     โ•ฐโ”€โ”€โ”€โ”€

  โš  react(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
  86 โ”‚
  87 โ”‚   const cardCoverage = props.cardCoverage;
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ `cardCoverage` originates here
  88 โ”‚   const barHeightRef = useRef(0);
  89 โ”‚   const cardHeightRef = useRef(0);
  90 โ”‚   const cardHeight = useSharedValue(0);
  91 โ”‚   const notifyCoverage = useCallback(() => {
  92 โ”‚     if (!cardCoverage) {
  93 โ”‚       return;
  94 โ”‚     }
  95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
  96 โ”‚     if (coverage === cardCoverage.value) {
  97 โ”‚       return;
  98 โ”‚     }
  99 โ”‚     if (cardCoverage.value === 0) {
 100 โ”‚       cardCoverage.value = coverage;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ `cardCoverage` cannot be modified
 101 โ”‚       return;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state
  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/PendingUserInputCard.tsx:118:7]
  89 โ”‚   const cardHeightRef = useRef(0);
  90 โ”‚   const cardHeight = useSharedValue(0);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ `cardHeight` originates here
  91 โ”‚   const notifyCoverage = useCallback(() => {
  92 โ”‚     if (!cardCoverage) {
  93 โ”‚       return;
  94 โ”‚     }
  95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
  96 โ”‚     if (coverage === cardCoverage.value) {
  97 โ”‚       return;
  98 โ”‚     }
  99 โ”‚     if (cardCoverage.value === 0) {
 100 โ”‚       cardCoverage.value = coverage;
 101 โ”‚       return;
 102 โ”‚     }
 103 โ”‚     cardCoverage.value = withTiming(coverage, {
 104 โ”‚       duration: USER_INPUT_TOGGLE_DURATION_MS,
 105 โ”‚       easing: Easing.out(Easing.cubic),
 106 โ”‚     });
 107 โ”‚   }, [cardCoverage]);
 108 โ”‚   const handleBarLayout = useCallback(
 109 โ”‚     (event: LayoutChangeEvent) => {
 110 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
 111 โ”‚       notifyCoverage();
 112 โ”‚     },
 113 โ”‚     [notifyCoverage],
 114 โ”‚   );
 115 โ”‚   const handleCardLayout = useCallback(
 116 โ”‚     (event: LayoutChangeEvent) => {
 117 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
 118 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ `cardHeight` cannot be modified
 119 โ”‚       notifyCoverage();
     โ•ฐโ”€โ”€โ”€โ”€
  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/PendingUserInputCard.tsx:100:7]
  90 โ”‚   const cardHeight = useSharedValue(0);
  91 โ”‚   const notifyCoverage = useCallback(() => {
     ยท                                      โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท                                         โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
  92 โ”‚     if (!cardCoverage) {
  93 โ”‚       return;
  94 โ”‚     }
  95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
  96 โ”‚     if (coverage === cardCoverage.value) {
  97 โ”‚       return;
  98 โ”‚     }
  99 โ”‚     if (cardCoverage.value === 0) {
 100 โ”‚       cardCoverage.value = coverage;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ This modifies `cardCoverage`
 101 โ”‚       return;
     โ•ฐโ”€โ”€โ”€โ”€
  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
  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/PendingUserInputCard.tsx:100:7]
  99 โ”‚     if (cardCoverage.value === 0) {
 100 โ”‚       cardCoverage.value = coverage;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ This modifies `cardCoverage`
 101 โ”‚       return;
 102 โ”‚     }
 103 โ”‚     cardCoverage.value = withTiming(coverage, {
 104 โ”‚       duration: USER_INPUT_TOGGLE_DURATION_MS,
 105 โ”‚       easing: Easing.out(Easing.cubic),
 106 โ”‚     });
 107 โ”‚   }, [cardCoverage]);
 108 โ”‚   const handleBarLayout = useCallback(
 109 โ”‚     (event: LayoutChangeEvent) => {
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
 110 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
     โ•ฐโ”€โ”€โ”€โ”€
  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
  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/PendingUserInputCard.tsx:118:7]
 115 โ”‚   const handleCardLayout = useCallback(
 116 โ”‚     (event: LayoutChangeEvent) => {
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardHeight` after render
 117 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
 118 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ This modifies `cardHeight`
 119 โ”‚       notifyCoverage();
     โ•ฐโ”€โ”€โ”€โ”€
  help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

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

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

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

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

  โš  react(capitalized-calls): Capitalized function called without JSX
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27]
 601 โ”‚   const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
 602 โ”‚   const gesture = Gesture.Pan()
     ยท                           โ”€โ”ฌโ”€
     ยท                            โ•ฐโ”€โ”€ `Pan` may be a component
 603 โ”‚     .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

  โš  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(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
     โ•ญโ”€[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
 162 โ”‚   keys,
 163 โ”‚   overridingProjects = [],
     ยท                        โ”€โ”€
 164 โ”‚   onClearOverrides,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.

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

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

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
 112 โ”‚   const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
 113 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 114 โ”‚     if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
 115 โ”‚       return;
 116 โ”‚     }
 117 โ”‚     setEntry({ key: input.targetKey, location: candidate });
     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 118 โ”‚   }, [candidate, entry.key, entry.location, input.targetKey]);
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  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:2374:7]
 2373 โ”‚           let orphanedAt: number | undefined;
 2374 โ”‚ โ•ญโ”€โ–ถ       for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
 2375 โ”‚ โ”‚           const tasks: Array<() => void> = [];
 2376 โ”‚ โ”‚           const dispatcher: Scheduler.SchedulerDispatcher = {
 2377 โ”‚ โ”‚             scheduleTask: (task) => tasks.push(task),
 2378 โ”‚ โ”‚             flush: () => {
 2379 โ”‚ โ”‚               let task: (() => void) | undefined;
 2380 โ”‚ โ”‚               while ((task = tasks.shift()) !== undefined) task();
 2381 โ”‚ โ”‚             },
 2382 โ”‚ โ”‚           };
 2383 โ”‚ โ”‚
 2384 โ”‚ โ”‚           let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
 2385 โ”‚ โ”‚           let requestChecks = 0;
 2386 โ”‚ โ”‚           const scheduler: Scheduler.Scheduler = {
 2387 โ”‚ โ”‚             executionMode: "async",
 2388 โ”‚ โ”‚             makeDispatcher: () => dispatcher,
 2389 โ”‚ โ”‚             shouldYield: (fiber) => {
 2390 โ”‚ โ”‚               if (fiber !== requestFiber) return false;
 2391 โ”‚ โ”‚               requestChecks += 1;
 2392 โ”‚ โ”‚               if (requestChecks !== interruptAt) return false;
 2393 โ”‚ โ”‚               fiber.interruptUnsafe();
 2394 โ”‚ โ”‚               return true;
 2395 โ”‚ โ”‚             },
 2396 โ”‚ โ”‚           };
 2397 โ”‚ โ”‚
 2398 โ”‚ โ”‚           const input: UsageSummaryInput = {
 2399 โ”‚ โ”‚             ...WINDOW,
 2400 โ”‚ โ”‚             sinceDay: UsageDay.make("2026-09-01"),
 2401 โ”‚ โ”‚             untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
 2402 โ”‚ โ”‚           };
 2403 โ”‚ โ”‚           const first = yield* service
 2404 โ”‚ โ”‚             .readSummary(input)
 2405 โ”‚ โ”‚             .pipe(
 2406 โ”‚ โ”‚               Effect.exit,
 2407 โ”‚ โ”‚               Effect.provideService(Scheduler.Scheduler, scheduler),
 2408 โ”‚ โ”‚               Effect.forkChild,
 2409 โ”‚ โ”‚             );
 2410 โ”‚ โ”‚           requestFiber = first;
 2411 โ”‚ โ”‚           yield* Effect.yieldNow;
 2412 โ”‚ โ”‚           dispatcher.flush();
 2413 โ”‚ โ”‚
 2414 โ”‚ โ”‚           const second = yield* service.readSummary(input).pipe(
 2415 โ”‚ โ”‚             Effect.match({
 2416 โ”‚ โ”‚               onFailure: (error) => error.reason,
 2417 โ”‚ โ”‚               onSuccess: () => "success" as const,
 2418 โ”‚ โ”‚             }),
 2419 โ”‚ โ”‚             Effect.provideService(Scheduler.Scheduler, scheduler),
 2420 โ”‚ โ”‚             Effect.forkChild,
 2421 โ”‚ โ”‚           );
 2422 โ”‚ โ”‚           yield* Effect.yieldNow;
 2423 โ”‚ โ”‚           dispatcher.flush();
 2424 โ”‚ โ”‚           const secondExit = second.pollUnsafe();
 2425 โ”‚ โ”‚           if (secondExit === undefined) {
 2426 โ”‚ โ”‚             second.interruptUnsafe();
 2427 โ”‚ โ”‚             orphanedAt = interruptAt;
 2428 โ”‚ โ”‚             break;
 2429 โ”‚ โ”‚           }
 2430 โ”‚ โ”‚           if (Exit.isFailure(secondExit)) {
 2431 โ”‚ โ”‚             assert.fail("the matching request fiber was interrupted");
 2432 โ”‚ โ”‚           }
 2433 โ”‚ โ”‚           assert.strictEqual(secondExit.value, "invalidWindow");
 2434 โ”‚ โ•ฐโ”€โ–ถ       }
 2435 โ”‚
      โ•ฐโ”€โ”€โ”€โ”€

  โš  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");
     โ•ฐโ”€โ”€โ”€โ”€

  โš  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:1718:32]
 1717 โ”‚       const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
 1718 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1719 โ”‚       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:1719:34]
 1718 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
 1719 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
      ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1720 โ”‚         Schema.fromJsonString(Schema.Array(ProjectScript)),
      โ•ฐโ”€โ”€โ”€โ”€

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
 638 โ”‚
 639 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 640 โ”‚     if (pendingLaunchEntry.key === launchTargetKey) {
 641 โ”‚       return;
 642 โ”‚     }
 643 โ”‚     setPendingLaunchEntry({
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 644 โ”‚       key: launchTargetKey,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
 648 โ”‚
 649 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 650 โ”‚     if (initialAttachGridEntry.key === launchTargetKey) {
 651 โ”‚       return;
 652 โ”‚     }
 653 โ”‚     setInitialAttachGridEntry({
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 654 โ”‚       key: launchTargetKey,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
 743 โ”‚
 744 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 745 โ”‚     if (!routeEnvironmentId || !routeThreadId) {
 746 โ”‚       setLastGridSize({
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 747 โ”‚         cols: DEFAULT_TERMINAL_COLS,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
 537 โ”‚     });
 538 โ”‚   }, [terminal.buffer, terminal.buffer.length, terminalKey]);
     ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                   โ•ฐโ”€โ”€ Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
 539 โ”‚   const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
 708 โ”‚     sentInitialInputKeyRef.current = null;
 709 โ”‚   }, [terminalKey]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
 710 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
 799 โ”‚     };
 800 โ”‚   }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
     ยท                                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท                                                                โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
     ยท                                                                โ•ฐโ”€โ”€ Unnecessary dependency `terminal.lifecycleVersion`
 801 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
 792 โ”‚   }
 793 โ”‚   const pasteSession = pasteSessionRef.current;
     ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                   โ•ฐโ”€โ”€ Cannot access ref value during render
 794 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:408:7]
 407 โ”‚
 408 โ”‚ const layer = Layer.effect(ThreadPullRequestServiceV2, make);
     ยท       โ”€โ”€โ”ฌโ”€โ”€
     ยท         โ•ฐโ”€โ”€ 'layer' is declared here
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  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.

  โš  react(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/threads/thread-work-log.tsx:174:5]
 170 โ”‚   const expandedAngle = props.collapsedDirection === "right" ? 90 : 180;
 171 โ”‚   const rotation = useSharedValue(props.expanded ? expandedAngle : 0);
     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ `rotation` originates here
 172 โ”‚
 173 โ”‚   useLayoutEffect(() => {
 174 โ”‚     rotation.value = withTiming(props.expanded ? expandedAngle : 0, {
     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท         โ•ฐโ”€โ”€ `rotation` cannot be modified
 175 โ”‚       duration: THREAD_DISCLOSURE_TRANSITION_MS,
     โ•ฐโ”€โ”€โ”€โ”€
  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(no-array-index-key): Usage of Array index in keys is not allowed
      โ•ญโ”€[apps/mobile/src/features/threads/thread-work-log.tsx:1252:23]
 1251 โ”‚                     <Text
 1252 โ”‚                       key={`${index}:${line}`}
      ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1253 โ”‚                       selectable
      โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:118:7]
 113 โ”‚
 114 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 115 โ”‚     if (orientationSettled) return;
 116 โ”‚     const orientation = getNativeShowcaseOrientation();
 117 โ”‚     if (orientation === null) {
 118 โ”‚       setOrientationSettled(true);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 119 โ”‚       return;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:317:7]
 305 โ”‚
 306 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 307 โ”‚     if (
 308 โ”‚       scene === null ||
 309 โ”‚       requestedScene === null ||
 310 โ”‚       scene !== requestedScene ||
 311 โ”‚       !hasFixture ||
 312 โ”‚       !orientationSettled ||
 313 โ”‚       !themeApplied ||
 314 โ”‚       (scene === "agent-activity" && !agentActivityStaged) ||
 315 โ”‚       !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
 316 โ”‚     ) {
 317 โ”‚       setReadyScene(null);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 318 โ”‚       return;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:9]
 122 โ”‚     let cancelled = false;
 123 โ”‚     let lastOutcome: string | null = null;
     ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ 'lastOutcome' is declared here
 124 โ”‚     void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

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

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

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

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

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

  โš  eslint(no-unused-vars): Identifier 'Fiber' is imported but never used.
    โ•ญโ”€[apps/server/src/ws.ts:9:13]
  8 โ”‚ import * as Effect from "effect/Effect";
  9 โ”‚ import * as Fiber from "effect/Fiber";
    ยท             โ”€โ”€โ”ฌโ”€โ”€
    ยท               โ•ฐโ”€โ”€ 'Fiber' is imported here
 10 โ”‚ 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:16:13]
 15 โ”‚ import * as Ref from "effect/Ref";
 16 โ”‚ import * as Schedule from "effect/Schedule";
    ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท                 โ•ฐโ”€โ”€ 'Schedule' is imported here
 17 โ”‚ 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:1251:13]
 1250 โ”‚       const usageLimitSources = yield* UsageLimitSources.UsageLimitSources;
 1251 โ”‚       const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner;
      ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                         โ•ฐโ”€โ”€ 'projectSetupScriptRunner' is declared here
 1252 โ”‚       const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker;
      โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

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

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/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(memo-dependencies): Found extra memoization dependencies
     โ•ญโ”€[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34]
 115 โ”‚     return [...commands];
 116 โ”‚   }, [activeThreadRef, pathname, registrationVersion, navigation]);
     ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                           โ•ฐโ”€โ”€ Unnecessary dependency `registrationVersion`
 117 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/server/src/telemetry/AnalyticsService.ts:340:7]
 339 โ”‚
 340 โ”‚ const layerTest = AnalyticsService.layerTest;
     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

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

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

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

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

  โš  react(purity): Cannot call impure function during render
      โ•ญโ”€[apps/web/src/components/CommandPalette.tsx:1996:20]
 1995 โ”‚         title: inferProjectTitleFromPath(destinationPath),
 1996 โ”‚         createdAt: new Date().toISOString(),
      ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
      ยท                         โ•ฐโ”€โ”€ Cannot call impure function
 1997 โ”‚         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

  โš  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.

  โš  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-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.

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

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

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

  โš  eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/server/src/orchestration-v2/EffectWorker.ts:911:7]
 910 โ”‚
 911 โ”‚ const layerDaemon: Layer.Layer<never, never, OrchestrationEffectWorkerV2> = Layer.effectDiscard(
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ 'layerDaemon' is declared here
 912 โ”‚   runDaemon.pipe(Effect.forkScoped),
     โ•ฐโ”€โ”€โ”€โ”€
  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-codex-app-server/src/schema.test.ts:50:18]
 49 โ”‚   for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) {
 50 โ”‚     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
    ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 51 โ”‚     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
    โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
    โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:51:18]
 50 โ”‚     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
 51 โ”‚     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
    ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 52 โ”‚   }
    โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
    โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:55:5]
 54 โ”‚   assert.equal(
 55 โ”‚     Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"),
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 56 โ”‚     true,
    โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
    โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:59:5]
 58 โ”‚   assert.equal(
 59 โ”‚     Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"),
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 60 โ”‚     true,
    โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:103:16]
 102 โ”‚
 103 โ”‚   assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true);
     ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 104 โ”‚ });
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
      โ•ญโ”€[packages/effect-acp/src/client.ts:1269:11]
 1268 โ”‚         extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
 1269 โ”‚           Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1270 โ”‚             Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
      โ•ฐโ”€โ”€โ”€โ”€

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39]
 276 โ”‚
 277 โ”‚ โ•ญโ”€โ–ถ   return createElement(RawNativeView, {
 278 โ”‚ โ”‚       ...nativeProps,
 279 โ”‚ โ”‚       refreshEnabled: props.onPullToRefresh !== undefined,
 280 โ”‚ โ”‚       ref: nativeRef,
 281 โ”‚ โ”œโ”€โ–ถ   });
     ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
 282 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

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

  โš  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({
     โ•ฐโ”€โ”€โ”€โ”€

  โš  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 โ”‚ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl";
    โ•ฐโ”€โ”€โ”€โ”€
  help: Remove empty braces

  โš  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),
     โ•ฐโ”€โ”€โ”€โ”€

  โš  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);
    โ•ฐโ”€โ”€โ”€โ”€

  โš  eslint(no-empty-pattern): Empty array binding pattern
      โ•ญโ”€[apps/server/src/pullRequest/PullRequestService.test.ts:1429:12]
 1428 โ”‚
 1429 โ”‚ for (const [] of [
      ยท            โ”€โ”€
 1430 โ”‚   ["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): 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): 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.

  โš  unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
     โ•ญโ”€[apps/web/src/components/chat/useComposerSend.ts:978:13]
 977 โ”‚           const changedBeforeDecline = draftChangedSinceSend();
 978 โ”‚ โ•ญโ”€โ–ถ       const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
 979 โ”‚ โ”‚           (approval) => approval.requestId,
 980 โ”‚ โ•ฐโ”€โ–ถ       );
 981 โ”‚           const approvalResponding = approvalsToDecline.some((approval) =>
     โ•ฐโ”€โ”€โ”€โ”€
  help: Switch to `Set`

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

  โš  react(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

  โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
     โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:138:28]
 137 โ”‚   visit(parser.parse(markdown));
 138 โ”‚   for (const edit of edits.reverse())
     ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 139 โ”‚     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:169:28]
 168 โ”‚   visit(parser.parse(markdown));
 169 โ”‚   for (const edit of edits.reverse())
     ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 170 โ”‚     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:223:38]
 222 โ”‚   visit(parser.parse(markdown));
 223 โ”‚   for (const lineStart of lineStarts.reverse()) {
     ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 224 โ”‚     // The header row may be a lazy line without its container markers (`>` or list indent),
     โ•ฐโ”€โ”€โ”€โ”€
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

Found 0 errors and 357 warnings in 5384 files (9.7s, 8 threads)
Post job cleanup.
Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
Post job cleanup.
##[start-action display=Cache full pnpm store;id=__76a3e230-a8ea-4336-a735-8e15fcf83273.__actions_cache_2]
Post job cleanup.
Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-d651407d7d0c7ecacd035718e6d120760bb0bb1ea0b966bcda4a8197c80ebc8f, not saving cache.
##[end-action id=__76a3e230-a8ea-4336-a735-8e15fcf83273.__actions_cache_2;outcome=success;conclusion=success;duration_ms=149]
##[start-action display=Setup Vite+;id=__76a3e230-a8ea-4336-a735-8e15fcf83273.__voidzero-dev_setup-vp]
Post job cleanup.
##[end-action id=__76a3e230-a8ea-4336-a735-8e15fcf83273.__voidzero-dev_setup-vp;outcome=success;conclusion=success;duration_ms=93]
##[start-action display=Cache Vite+;id=__76a3e230-a8ea-4336-a735-8e15fcf83273.__actions_cache]
Post job cleanup.
Cache hit occurred on the primary key vite-plus-home-v1-Linux-X64-1.3.0, not saving cache.
##[end-action id=__76a3e230-a8ea-4336-a735-8e15fcf83273.__actions_cache;outcome=success;conclusion=success;duration_ms=112]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/0a767e33-5eba-4b00-8263-6ba6a28d3968' 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: 200
  BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 456
  BLACKSMITH_CHECK_RUN_ID: 119748187318
  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