GitHub check

256 KB of 604 KB loaded Download the full log (604 KB)
348 KB of earlier output not loaded
 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:1246:23]
 1245 โ”‚                     <Text
 1246 โ”‚                       key={`${index}:${line}`}
      ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1247 โ”‚                       selectable
      โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  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(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7]
 248 โ”‚       mountedRef.current = false;
 249 โ”‚       flow.setBranchQuery("");
     ยท       โ”€โ”€โ”ฌโ”€
     ยท         โ•ฐโ”€โ”€ Missing dependency `flow`
 250 โ”‚     };
 251 โ”‚   }, [flow.setBranchQuery]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ Overly precise dependency `flow.setBranchQuery`, use `flow` instead
 252 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  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(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5]
 434 โ”‚       : null;
 435 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 436 โ”‚     if (
 437 โ”‚       props.active === false ||
 438 โ”‚       activeDraftKey !== null ||
 439 โ”‚       editingPendingTask !== null ||
 440 โ”‚       selectedProject === null
 441 โ”‚     ) {
 442 โ”‚       return;
 443 โ”‚     }
 444 โ”‚     setActiveDraftKey(
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 445 โ”‚       createNewTaskDraft({
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
      โ•ญโ”€[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36]
 1243 โ”‚     <ActiveNewTaskContext value={activeNewTask}>
 1244 โ”‚       <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
      ยท                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1245 โ”‚     </ActiveNewTaskContext>
      โ•ฐโ”€โ”€โ”€โ”€
  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
        Alternatively, move the value outside the render function if it doesn't depend on props or state.

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

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

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

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

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

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
 765 โ”‚     flow.draftKey,
 766 โ”‚     hasImportedIncomingShare,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Unnecessary dependency `hasImportedIncomingShare`
 767 โ”‚     incomingShare,
 768 โ”‚     isIncomingShareInboxLoading,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `isIncomingShareInboxLoading`
 769 โ”‚     isIncomingShareUnavailable,
 770 โ”‚     props.incomingShareId,
 771 โ”‚     props.initialProjectRef?.environmentId,
 772 โ”‚     props.initialProjectRef?.projectId,
 773 โ”‚     releaseShareReservation,
 774 โ”‚     reserveShare,
 775 โ”‚     selectedEnvironmentServerConfig,
 776 โ”‚     selectedProject,
 777 โ”‚     shareImportAttempt,
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ Unnecessary dependency `shareImportAttempt`
 778 โ”‚   ]);
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

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

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

  โš  eslint(no-unused-vars): Identifier 'Duration' is imported but never used.
    โ•ญโ”€[packages/provider-pi/src/server/adapter.test.ts:24:13]
 23 โ”‚ import * as Deferred from "effect/Deferred";
 24 โ”‚ import * as Duration from "effect/Duration";
    ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท                 โ•ฐโ”€โ”€ 'Duration' is imported here
 25 โ”‚ import * as Effect from "effect/Effect";
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
    โ•ญโ”€[apps/web/src/lib/composerContextReferences.ts:90:40]
 89 โ”‚   let cursor = prompt.length;
 90 โ”‚   for (const occurrence of occurrences.reverse()) {
    ยท                                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 91 โ”‚     let { start, end } = occurrence;
    โ•ฐโ”€โ”€โ”€โ”€
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

  โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
 772 โ”‚     if (settingsSheetPresentation.isActive) {
 773 โ”‚       settingsRoutePresentation.present(settingsRouteSession);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                   โ•ฐโ”€โ”€ Missing dependency `settingsRoutePresentation`
 774 โ”‚     }
 775 โ”‚   }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                       โ•ฐโ”€โ”€ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
 776 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  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:391:5]
 387 โ”‚     typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
 388 โ”‚   const animatedBorderRadius = useSharedValue(targetBorderRadius);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                   โ•ฐโ”€โ”€ `animatedBorderRadius` originates here
 389 โ”‚   const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
 390 โ”‚   useLayoutEffect(() => {
 391 โ”‚     animatedBorderRadius.value = shouldAnimate
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ `animatedBorderRadius` cannot be modified
 392 โ”‚       ? 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(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/components/ProjectFavicon.tsx:172:5]
 167 โ”‚   const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
 168 โ”‚   useLayoutEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท          โ•ฐโ”€โ”€ This is the containing effect
 169 โ”‚     if (faviconRequest === null) return;
 170 โ”‚
 171 โ”‚     const endRequest = beginProjectFaviconRequest(faviconRequest);
 172 โ”‚     setActiveFaviconRequest(faviconRequest);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 173 โ”‚     return endRequest;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
     โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17]
 817 โ”‚               <div
 818 โ”‚                 key={`${index}:${check.name}:${check.url ?? ""}`}
     ยท                 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 819 โ”‚                 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

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

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

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

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/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 'layer' is declared but never used. Unused variables should start with a '_'.
      โ•ญโ”€[packages/provider-pi/src/server/adapter.ts:3405:7]
 3404 โ”‚
 3405 โ”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
      ยท       โ”€โ”€โ”ฌโ”€โ”€
      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
 3406 โ”‚   Layer.effect(
      โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  react(purity): Cannot call impure function during render
     โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:698:76]
 697 โ”‚   const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() }));
 698 โ”‚   if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() });
     ยท                                                                            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                                                                 โ•ฐโ”€โ”€ Cannot call impure function
 699 โ”‚   const snoozeGateNow = new Date(snoozeGateClock.now).toISOString();
     โ•ฐโ”€โ”€โ”€โ”€
  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(purity): Cannot call impure function during render
     โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:71]
 718 โ”‚   const snoozePresets = useMemo(
 719 โ”‚     () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
     ยท                                                                       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                                                            โ•ฐโ”€โ”€ Cannot call impure function
 720 โ”‚     [props.snoozePresetMinute, swipeActions.secondary],
     โ•ฐโ”€โ”€โ”€โ”€
  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(memo-dependencies): Found extra memoization dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:6]
 719 โ”‚     () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
 720 โ”‚     [props.snoozePresetMinute, swipeActions.secondary],
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `props.snoozePresetMinute`
 721 โ”‚   );
     โ•ฐโ”€โ”€โ”€โ”€
  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/threads/thread-list-v2-items.tsx:766:7]
 765 โ”‚       thread.pinnedAt,
 766 โ”‚       variant,
     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `variant`
 767 โ”‚     ],
     โ•ฐโ”€โ”€โ”€โ”€
  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(no-array-index-key): Usage of Array index in keys is not allowed
      โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21]
 1215 โ”‚             {providerDrivers.slice(0, -1).map((driver, index) => (
 1216 โ”‚               <View key={`${driver}:${index}`} className="-mr-1 opacity-30">
      ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1217 โ”‚                 <ProviderIcon provider={driver} size={12} />
      โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

  โš  unicorn(require-module-specifiers): Empty import specifier is not allowed
     โ•ญโ”€[packages/contracts/src/rpc.ts:297:8]
 296 โ”‚ } from "./device.ts";
 297 โ”‚ import {} from "./previewAutomation.ts";
     ยท        โ”€โ”€
 298 โ”‚ import {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Remove empty braces

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

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

  โš  eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used.
    โ•ญโ”€[apps/web/src/lib/terminalContext.ts:56:10]
 55 โ”‚
 56 โ”‚ function normalizeTerminalContextSelection(
    ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท                          โ•ฐโ”€โ”€ 'normalizeTerminalContextSelection' is declared here
 57 โ”‚   selection: TerminalContextSelection,
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

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

  โš  t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
    โ•ญโ”€[packages/contracts/src/baseSchemas.test.ts:39:9]
 38 โ”‚       JSON.stringify(
 39 โ”‚         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
    ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 40 โ”‚           { name: "a" },
    โ•ฐโ”€โ”€โ”€โ”€

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

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

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

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

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

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

  โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
    โ•ญโ”€[apps/web/src/lib/announce.browser.test.ts:41:46]
 40 โ”‚
 41 โ”‚     expect(regionTexts()).toEqual([...first].reverse());
    ยท                                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 42 โ”‚     expect(regionTexts()).toContain("Claude");
    โ•ฐโ”€โ”€โ”€โ”€
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

  โš  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/orchestration-v2/FoundationPersistence.test.ts:566:7]
 565 โ”‚           let afterSequence = created[0]!.sequence;
 566 โ”‚ โ•ญโ”€โ–ถ       for (let index = 1; index <= 32; index += 1) {
 567 โ”‚ โ”‚           const nextEvent = {
 568 โ”‚ โ”‚             id: EventId.make(`event:foundation-stream-race:${index}`),
 569 โ”‚ โ”‚             type: "thread.metadata-updated" as const,
 570 โ”‚ โ”‚             threadId,
 571 โ”‚ โ”‚             providerInstanceId,
 572 โ”‚ โ”‚             occurredAt: now,
 573 โ”‚ โ”‚             payload: { ...thread, title: `Race update ${index}` },
 574 โ”‚ โ”‚           } satisfies OrchestrationV2DomainEvent;
 575 โ”‚ โ”‚           const reader = yield* eventSink
 576 โ”‚ โ”‚             .stream({ threadId, afterSequence })
 577 โ”‚ โ”‚             .pipe(Stream.runHead, Effect.forkChild);
 578 โ”‚ โ”‚           yield* Effect.yieldNow;
 579 โ”‚ โ”‚           const written = yield* eventSink.write({ events: [nextEvent] });
 580 โ”‚ โ”‚           const received = yield* Fiber.join(reader);
 581 โ”‚ โ”‚           if (Option.isNone(received)) {
 582 โ”‚ โ”‚             return yield* Effect.die("The event stream ended before delivering the live event.");
 583 โ”‚ โ”‚           }
 584 โ”‚ โ”‚           assert.equal(received.value.sequence, written[0]?.sequence);
 585 โ”‚ โ”‚           assert.equal(received.value.event.id, nextEvent.id);
 586 โ”‚ โ”‚           afterSequence = received.value.sequence;
 587 โ”‚ โ•ฐโ”€โ–ถ       }
 588 โ”‚         }),
     โ•ฐโ”€โ”€โ”€โ”€

  โš  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/orchestration-v2/FoundationPersistence.test.ts:2327:9]
 2326 โ”‚             let settled = false;
 2327 โ”‚ โ•ญโ”€โ–ถ         while (!settled) {
 2328 โ”‚ โ”‚             settled = (yield* outbox.listByCommandId(commandId)).every(
 2329 โ”‚ โ”‚               (effect) => effect.status === "succeeded",
 2330 โ”‚ โ”‚             );
 2331 โ”‚ โ”‚             if (!settled) yield* Effect.yieldNow;
 2332 โ”‚ โ•ฐโ”€โ–ถ         }
 2333 โ”‚           }).pipe(Effect.provide(layerWorker), Effect.scoped);
      โ•ฐโ”€โ”€โ”€โ”€

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

  โš  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.
    โ•ญโ”€[packages/contracts/src/auth.test.ts:17:12]
 16 โ”‚   it("decodes legacy review credentials without offering them in new grants", () => {
 17 โ”‚     expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
    ยท            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 18 โ”‚       "review:write",
    โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
    โ•ญโ”€[packages/contracts/src/auth.test.ts:20:18]
 19 โ”‚     ]);
 20 โ”‚     expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
    ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 21 โ”‚     expect(AuthStandardClientScopes).not.toContain("review:write");
    โ•ฐโ”€โ”€โ”€โ”€

  โš  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.
    โ•ญโ”€[packages/contracts/src/auth.test.ts:58:21]
 57 โ”‚   it("ignores unknown response permissions without falling back to broader scopes", () => {
 58 โ”‚     const session = Schema.decodeUnknownSync(AuthSessionState)({
    ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 59 โ”‚       authenticated: true,
    โ•ฐโ”€โ”€โ”€โ”€

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

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

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

  โš  react(purity): Cannot call impure function during render
      โ•ญโ”€[apps/web/src/components/Sidebar.tsx:1136:11]
 1135 โ”‚           foldSearchQuery(threadSearchQuery),
 1136 โ”‚           Date.now(),
      ยท           โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
      ยท                โ•ฐโ”€โ”€ Cannot call impure function
 1137 โ”‚           // A list filter, as on mobile: a pick would move rows unexplained.
      โ•ฐโ”€โ”€โ”€โ”€
  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

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

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

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

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

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

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7]
 118 โ”‚
 119 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 120 โ”‚     if (orientationSettled) return;
 121 โ”‚     const orientation = getNativeShowcaseOrientation();
 122 โ”‚     if (orientation === null) {
 123 โ”‚       setOrientationSettled(true);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 124 โ”‚       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:304:7]
 292 โ”‚
 293 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 294 โ”‚     if (
 295 โ”‚       scene === null ||
 296 โ”‚       requestedScene === null ||
 297 โ”‚       scene !== requestedScene ||
 298 โ”‚       !hasFixture ||
 299 โ”‚       !orientationSettled ||
 300 โ”‚       !themeApplied ||
 301 โ”‚       (scene === "agent-activity" && !agentActivityStaged) ||
 302 โ”‚       !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
 303 โ”‚     ) {
 304 โ”‚       setReadyScene(null);
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 305 โ”‚       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:128:9]
 127 โ”‚     let cancelled = false;
 128 โ”‚     let lastOutcome: string | null = null;
     ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ 'lastOutcome' is declared here
 129 โ”‚     void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
   โ•ญโ”€[packages/client-runtime/src/state/filesystem.ts:3:8]
 2 โ”‚   AuthFilesystemReadScope,
 3 โ”‚   type AuthSessionState,
   ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
   ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
 4 โ”‚   type FilesystemBrowseEntry,
   โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used.
   โ•ญโ”€[packages/client-runtime/src/state/sharedSettings.ts:2:3]
 1 โ”‚ import type {
 2 โ”‚   EnvironmentId,
   ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
   ยท         โ•ฐโ”€โ”€ 'EnvironmentId' is imported here
 3 โ”‚   ExecutionEnvironmentCapabilities,
   โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

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

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

  โš  oxc(no-accumulating-spread): Do not spread accumulators in loops
     โ•ญโ”€[packages/client-runtime/src/state/shell.ts:189:5]
 186 โ”‚     let waiting = yield* Ref.get(awaitingCompletion);
 187 โ”‚     let next = initial;
     ยท         โ”€โ”€โ”ฌโ”€
     ยท           โ•ฐโ”€โ”€ From this accumulator
 188 โ”‚     let receivedSnapshot = false;
 189 โ”‚     for (const item of items) {
     ยท     โ”€โ”ฌโ”€
     ยท      โ•ฐโ”€โ”€ For this loop
 190 โ”‚       if (item.kind === "synchronized") {
 191 โ”‚         waiting = false;
 192 โ”‚         if (Option.isSome(next.snapshot)) {
 193 โ”‚           next = { ...next, status: "live", error: Option.none() };
     ยท                    โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท                       โ•ฐโ”€โ”€ From this spread
 194 โ”‚         }
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider using `Object.assign()` to mutate the accumulator instead.
  note: Using spreads within accumulators leads to `O(n^2)` time complexity.

  โš  unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
     โ•ญโ”€[packages/client-runtime/src/operations/projects.ts:238:51]
 237 โ”‚ ): string {
 238 โ”‚   const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? "";
     ยท                                                   โ”€โ”€โ”€โ”€โ”€โ”€
 239 โ”‚   return target.owner ? `${target.owner}/${folderName}` : folderName;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.

  โš  eslint(no-unused-vars): Identifier 'Arr' is imported but never used.
   โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:4:13]
 3 โ”‚ import type { EnvironmentThreadShell } from "./models.ts";
 4 โ”‚ import * as Arr from "effect/Array";
   ยท             โ”€โ”ฌโ”€
   ยท              โ•ฐโ”€โ”€ 'Arr' is imported here
 5 โ”‚ import * as Order from "effect/Order";
   โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'Order' is imported but never used.
   โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:5:13]
 4 โ”‚ import * as Arr from "effect/Array";
 5 โ”‚ import * as Order from "effect/Order";
   ยท             โ”€โ”€โ”ฌโ”€โ”€
   ยท               โ•ฐโ”€โ”€ 'Order' is imported here
 6 โ”‚
   โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

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

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
      โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1680:7]
 1679 โ”‚           yield* harness.replaceSession;
 1680 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
 1681 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
 1682 โ”‚ โ”‚             break;
 1683 โ”‚ โ”‚           }
 1684 โ”‚ โ”‚           yield* Effect.yieldNow;
 1685 โ”‚ โ•ฐโ”€โ–ถ       }
 1686 โ”‚           yield* Queue.offer(
      โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
      โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1789:7]
 1788 โ”‚           yield* harness.replaceSession;
 1789 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
 1790 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
 1791 โ”‚ โ”‚           yield* Effect.yieldNow;
 1792 โ”‚ โ•ฐโ”€โ–ถ       }
 1793 โ”‚           expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
      โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:169:7]
 168 โ”‚           });
 169 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
 170 โ”‚ โ”‚           if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break;
 171 โ”‚ โ”‚           yield* Effect.yieldNow;
 172 โ”‚ โ•ฐโ”€โ–ถ       }
 173 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:178:7]
 177 โ”‚           yield* Deferred.succeed(releaseSave, undefined);
 178 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
 179 โ”‚ โ”‚           if ((yield* Ref.get(saved)).length > 0) break;
 180 โ”‚ โ”‚           yield* Effect.yieldNow;
 181 โ”‚ โ•ฐโ”€โ–ถ       }
 182 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:307:7]
 306 โ”‚           yield* Deferred.succeed(releaseUnenrichedSave, undefined);
 307 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
 308 โ”‚ โ”‚           const values = yield* Ref.get(saved);
 309 โ”‚ โ”‚           if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) {
 310 โ”‚ โ”‚             break;
 311 โ”‚ โ”‚           }
 312 โ”‚ โ”‚           yield* Effect.yieldNow;
 313 โ”‚ โ•ฐโ”€โ–ถ       }
 314 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€

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

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/rpc/session.test.ts:226:3]
 225 โ”‚     ) {
 226 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
 227 โ”‚ โ”‚       const socket = sockets[index];
 228 โ”‚ โ”‚       if (socket) {
 229 โ”‚ โ”‚         return socket;
 230 โ”‚ โ”‚       }
 231 โ”‚ โ”‚       yield* Effect.yieldNow;
 232 โ”‚ โ•ฐโ”€โ–ถ   }
 233 โ”‚       return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket."));
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/rpc/session.test.ts:240:3]
 239 โ”‚     ) {
 240 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
 241 โ”‚ โ”‚       const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index];
 242 โ”‚ โ”‚       if (request) {
 243 โ”‚ โ”‚         return request;
 244 โ”‚ โ”‚       }
 245 โ”‚ โ”‚       yield* Effect.yieldNow;
 246 โ”‚ โ•ฐโ”€โ–ถ   }
 247 โ”‚       return yield* Effect.die(new Error("Expected the RPC protocol to send a request."));
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:131:9]
 130 โ”‚           ) {
 131 โ”‚ โ•ญโ”€โ–ถ         for (let attempt = 0; attempt < 100; attempt += 1) {
 132 โ”‚ โ”‚             if (subscriptions.length >= count) {
 133 โ”‚ โ”‚               return;
 134 โ”‚ โ”‚             }
 135 โ”‚ โ”‚             yield* Effect.yieldNow;
 136 โ”‚ โ•ฐโ”€โ–ถ         }
 137 โ”‚             return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`));
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:252:7]
 251 โ”‚           yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient)));
 252 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) {
 253 โ”‚ โ”‚           yield* Effect.yieldNow;
 254 โ”‚ โ•ฐโ”€โ–ถ       }
 255 โ”‚           yield* SubscriptionRef.set(activeSession, Option.none());
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:258:7]
 257 โ”‚
 258 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
 259 โ”‚ โ”‚           yield* Effect.yieldNow;
 260 โ”‚ โ•ฐโ”€โ–ถ       }
 261 โ”‚           yield* Fiber.interrupt(subscriptionFiber);
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:322:7]
 321 โ”‚           );
 322 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) {
 323 โ”‚ โ”‚           yield* Effect.yieldNow;
 324 โ”‚ โ•ฐโ”€โ–ถ       }
 325 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:330:7]
 329 โ”‚           yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient)));
 330 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
 331 โ”‚ โ”‚           yield* Effect.yieldNow;
 332 โ”‚ โ•ฐโ”€โ–ถ       }
 333 โ”‚           yield* Fiber.interrupt(subscriptionFiber);
     โ•ฐโ”€โ”€โ”€โ”€

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

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

  โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
   โ•ญโ”€[packages/client-runtime/src/state/usageAccess.ts:3:8]
 2 โ”‚   AuthDiagnosticsReadScope,
 3 โ”‚   type AuthSessionState,
   ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
   ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
 4 โ”‚   sessionGrantsScope,
   โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

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

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

  โš  react(purity): Cannot call impure function during render
     โ•ญโ”€[apps/web/src/components/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

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

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[packages/client-runtime/src/connection/supervisor.test.ts:135:3]
 134 โ”‚       let lastState = yield* SubscriptionRef.get(state);
 135 โ”‚ โ•ญโ”€โ–ถ   for (let iteration = 0; iteration < 100; iteration += 1) {
 136 โ”‚ โ”‚       lastState = yield* SubscriptionRef.get(state);
 137 โ”‚ โ”‚       if (predicate(lastState)) {
 138 โ”‚ โ”‚         return lastState;
 139 โ”‚ โ”‚       }
 140 โ”‚ โ”‚       yield* Effect.yieldNow;
 141 โ”‚ โ•ฐโ”€โ–ถ   }
 142 โ”‚       return yield* Effect.die(
     โ•ฐโ”€โ”€โ”€โ”€

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

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

  โš  react(no-unstable-nested-components): Do not define components during render.
      โ•ญโ”€[apps/mobile/src/Stack.tsx:1079:21]
 1078 โ”‚     <Navigator
 1079 โ”‚       screenLayout={(props) => <GuardedScreenLayout {...props} />}
      ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 1080 โ”‚       screenOptions={({ route }) =>
      โ•ฐโ”€โ”€โ”€โ”€
  help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true.

  โš  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(exhaustive-effect-dependencies): Found extra effect dependencies
      โ•ญโ”€[apps/mobile/src/state/use-thread-outbox-drain.ts:1321:5]
 1320 โ”‚     queuedMessagesByThreadKey,
 1321 โ”‚     retryTick,
      ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
      ยท         โ•ฐโ”€โ”€ Unnecessary dependency `retryTick`
 1322 โ”‚     restoreQueuedMessage,
      โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

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

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

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

  โš  unicorn(no-new-array): Do not use `new Array(singleArgument)`.
     โ•ญโ”€[apps/web/src/terminal/ghostty/core.ts:194:19]
 193 โ”‚     const count = Math.min(CHUNK_SIZE, graphemeLength - start);
 194 โ”‚     const codes = new Array<number>(count);
     ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 195 โ”‚     for (let index = 0; index < count; index += 1) {
     โ•ฐโ”€โ”€โ”€โ”€
  help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`.

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

  โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
     โ•ญโ”€[packages/shared/src/serverSettings.ts:346:9]
 345 โ”‚       const entry: ProjectSettingsOverrides = {
 346 โ”‚         ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}),
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 347 โ”‚       };
     โ•ฐโ”€โ”€โ”€โ”€
  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:448:24]
 447 โ”‚   const favorites =
 448 โ”‚     setModelFavorites?.reduce((current, change) => {
     ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
     ยท                           โ•ฐโ”€โ”€ For this reduce
 449 โ”‚       const exists = current.some(
 450 โ”‚         (favorite) => favorite.provider === change.provider && favorite.model === change.model,
 451 โ”‚       );
 452 โ”‚       return change.favorite
 453 โ”‚         ? exists
 454 โ”‚           ? current
 455 โ”‚           : [...current, { provider: change.provider, model: change.model }]
     ยท              โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                   โ•ฐโ”€โ”€ From this spread
 456 โ”‚         : 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:466:3]
 464 โ”‚     null;
 465 โ”‚   let nextModelPreferences = initialModelPreferences;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ From this accumulator
 466 โ”‚   for (const change of setModelsHidden ?? []) {
     ยท   โ”€โ”ฌโ”€
     ยท    โ•ฐโ”€โ”€ For this loop
 467 โ”‚     const preferences = nextModelPreferences?.[change.provider] ?? {
 468 โ”‚       hiddenModels: [],
 469 โ”‚       modelOrder: [],
 470 โ”‚     };
 471 โ”‚     const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model);
 472 โ”‚     if (change.hidden) hiddenModels.push(change.model);
 473 โ”‚     nextModelPreferences = {
 474 โ”‚       ...nextModelPreferences,
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ From this spread
 475 โ”‚       [change.provider]: { ...preferences, hiddenModels },
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider using `Object.assign()` to mutate the accumulator instead.
  note: Using spreads within accumulators leads to `O(n^2)` time complexity.

  โš  eslint(no-unused-vars): 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): 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.

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

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

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

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

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

  โš  unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
     โ•ญโ”€[apps/web/src/components/pullRequest/pullRequestList.logic.ts:262:9]
 261 โ”‚ ): boolean {
 262 โ”‚   const labels = entry.labels.map((label) => label.name.trim().toLowerCase());
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 263 โ”‚   const holds = (label: string) => labels.includes(label.trim().toLowerCase());
     โ•ฐโ”€โ”€โ”€โ”€
  help: Switch to `Set`

  โš  react(no-array-index-key): Usage of Array index in keys is not allowed
    โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15]
 87 โ”‚             <li
 88 โ”‚               key={`${index}:${check.name}`}
    ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 89 โ”‚               className="col-span-full grid grid-cols-subgrid items-center text-xs"
    โ•ฐโ”€โ”€โ”€โ”€
  help: Use a unique data-dependent key to avoid unnecessary rerenders

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

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

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

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

  โš  eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'.
    โ•ญโ”€[packages/shared/src/model.test.ts:36:7]
 35 โ”‚
 36 โ”‚ const claudeCaps: ModelCapabilities = createModelCapabilities({
    ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท            โ•ฐโ”€โ”€ 'claudeCaps' is declared here
 37 โ”‚   optionDescriptors: [
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

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

  โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
     โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:290:28]
 289 โ”‚   visit(parser.parse(markdown));
 290 โ”‚   for (const edit of edits.reverse())
     ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 291 โ”‚     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
     โ•ฐโ”€โ”€โ”€โ”€
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

  โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
     โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:344:38]
 343 โ”‚   visit(parser.parse(markdown));
 344 โ”‚   for (const lineStart of lineStarts.reverse()) {
     ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 345 โ”‚     // 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.

  โš  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:229:6]
 225 โ”‚     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
 226 โ”‚       nativeEventSnapshotsRef.current,
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
 227 โ”‚       mostRecentEventCount,
 228 โ”‚     );
 229 โ”‚   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 230 โ”‚   const assumedValue = props.value;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause an effect to fire less often than it should
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7]
 236 โ”‚     nativeEventSnapshotsRef.current = assumeComposerControlledState(
 237 โ”‚       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
 238 โ”‚       controlledEventCount,
 239 โ”‚       assumedValue,
 240 โ”‚     );
 241 โ”‚   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
     ยท                                                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                                                    โ•ฐโ”€โ”€ Unnecessary dependency `controlledDocumentJson`
 242 โ”‚   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:162:29]
 161 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
 162 โ”‚       preserveTrailingFrom: confirmedTokensRef.current,
     ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                          โ•ฐโ”€โ”€ Cannot access ref value during render
 163 โ”‚     });
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

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

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

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

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

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

  โš  react(memo-dependencies): Found missing memoization dependencies
     โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5]
 251 โ”‚       mostRecentEventCountRef.current = acknowledgedEventCount;
 252 โ”‚       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
 253 โ”‚         eventCount: acknowledgedEventCount,
 254 โ”‚         value,
 255 โ”‚         selection: nextSelection,
 256 โ”‚       });
 257 โ”‚       return acknowledgedEventCount;
 258 โ”‚     },
 259 โ”‚     [],
     ยท     โ”€โ”ฌ
     ยท      โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 260 โ”‚   );
     โ•ฐโ”€โ”€โ”€โ”€
  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

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

  โš  react(exhaustive-effect-dependencies): Found missing effect dependencies
     โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6]
 227 โ”‚     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
 228 โ”‚       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
 229 โ”‚       mostRecentEventCount,
 230 โ”‚     );
 231 โ”‚   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 232 โ”‚   const assumedValue = props.value;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause an effect to fire less often than it should
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
     โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7]
 238 โ”‚     nativeEventSnapshotsRef.current = assumeComposerControlledState(
 239 โ”‚       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
 240 โ”‚       controlledEventCount,
 241 โ”‚       assumedValue,
 242 โ”‚     );
 243 โ”‚   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
     ยท                                                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                                                    โ•ฐโ”€โ”€ Unnecessary dependency `controlledDocumentJson`
 244 โ”‚   const acceptNativeEvent = useCallback(
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

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

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

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

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

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

  โš  react(memo-dependencies): Found missing memoization dependencies
     โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6]
 163 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
 164 โ”‚       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
 165 โ”‚     });
 166 โ”‚     confirmedTokensRef.current = tokens;
 167 โ”‚     return JSON.stringify(
 168 โ”‚       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
 169 โ”‚         const record =
 170 โ”‚           token.type === "context"
 171 โ”‚             ? props.context?.records.find((record) => record.contextId === token.contextId)
 172 โ”‚             : undefined;
 173 โ”‚         const presentation = contextChipPresentation(
 174 โ”‚           token.type === "context" ? token.kind : token.type,
 175 โ”‚           record,
 176 โ”‚         );
 177 โ”‚         const icon = contextChipIcon(
 178 โ”‚           presentation,
 179 โ”‚           token.type === "mention" ? token.value : contextRecordFileName(record),
 180 โ”‚         );
 181 โ”‚         return {
 182 โ”‚           type: token.type,
 183 โ”‚           source: token.source,
 184 โ”‚           start: token.start,
 185 โ”‚           end: token.end,
 186 โ”‚           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
 187 โ”‚           label:
 188 โ”‚             token.type === "skill"
 189 โ”‚               ? (skillLabels.get(token.value) ?? token.value)
 190 โ”‚               : token.type === "context"
 191 โ”‚                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " ยท unavailable"}`
 192 โ”‚                 : basename(token.value),
 193 โ”‚           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
 194 โ”‚           iconUri: contextChipIconUri(icon),
 195 โ”‚           tintsIcon: icon.kind === "chip",
 196 โ”‚         };
 197 โ”‚       }),
 198 โ”‚     );
 199 โ”‚   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                     โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 200 โ”‚   // Every render resolves against the snapshot history, so a render whose
     โ•ฐโ”€โ”€โ”€โ”€
  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

  โš  react(memo-dependencies): Found missing memoization dependencies
     โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5]
 253 โ”‚       mostRecentEventCountRef.current = acknowledgedEventCount;
 254 โ”‚       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
 255 โ”‚         eventCount: acknowledgedEventCount,
 256 โ”‚         value,
 257 โ”‚         selection: nextSelection,
 258 โ”‚       });
 259 โ”‚       return acknowledgedEventCount;
 260 โ”‚     },
 261 โ”‚     [],
     ยท     โ”€โ”ฌ
     ยท      โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
 262 โ”‚   );
     โ•ฐโ”€โ”€โ”€โ”€
  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

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

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/native/StackHeader.tsx:185:9]
 184 โ”‚         "options",
 185 โ”‚         latestOptionFunctionsRef.current,
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                         โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
 186 โ”‚         optionFunctionWrappersRef.current,
     โ•ฐโ”€โ”€โ”€โ”€
  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/StackHeader.tsx:186:9]
 185 โ”‚         latestOptionFunctionsRef.current,
 186 โ”‚         optionFunctionWrappersRef.current,
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                         โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
 187 โ”‚       ) as NativeStackNavigationOptions)
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
     โ•ญโ”€[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);
     โ•ฐโ”€โ”€โ”€โ”€

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

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

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

Found 0 errors and 367 warnings in 5480 files (5.2s, 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=__9d21ae10-8771-49db-80b7-9443abd82dfb.__actions_cache]
Post job cleanup.
[command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /home/runner/_work/t3code/t3code --files-from manifest.txt --use-compress-program zstdmt
Failed to save: Unable to reserve cache with key pnpm-full-v1-Linux-X64-00603bf3edbe5c5c110144002d8c9a314f8b592aed66db22932aa917c61d6447, another job may be creating this cache.
##[end-action id=__9d21ae10-8771-49db-80b7-9443abd82dfb.__actions_cache;outcome=success;conclusion=success;duration_ms=3590]
##[start-action display=Cache Vite+;id=__9d21ae10-8771-49db-80b7-9443abd82dfb.vp_cache]
Post job cleanup.
Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache.
##[end-action id=__9d21ae10-8771-49db-80b7-9443abd82dfb.vp_cache;outcome=success;conclusion=success;duration_ms=63]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/b5a0aba0-d7c0-45b6-a960-299c6825cb9d' 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: 187
  BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352
  BLACKSMITH_CHECK_RUN_ID: 121013057479
  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