GitHub check

256 KB of 603 KB loaded Download the full log (603 KB)
347 KB of earlier output not loaded
8;2;244;191;117;1meslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
     โ•ญโ”€[apps/server/src/serverRuntimeStartup.ts:728:7]
 727 โ”‚
 728 โ”‚ const layer = layerWithOptions();
     ยท       โ”€โ”€โ”ฌโ”€โ”€
     ยท         โ•ฐโ”€โ”€ 'layer' is declared here
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

  โš  t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
     โ•ญโ”€[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20]
 262 โ”‚       ...(update._meta !== undefined
 263 โ”‚         ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null }
     ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 264 โ”‚         : {}),
     โ•ฐโ”€โ”€โ”€โ”€

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

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

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

  โš  eslint(no-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.

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

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

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

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

  โš  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/composerContext.test.ts:181:18]
 180 โ”‚   it("sends a message without the records the wire cannot carry", () => {
 181 โ”‚     const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 182 โ”‚       version: 1,
     โ•ฐโ”€โ”€โ”€โ”€

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

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

  โš  eslint(no-unused-vars): Identifier 'identity' is imported but never used.
    โ•ญโ”€[apps/server/src/auth/http.ts:28:10]
 27 โ”‚ import * as Schema from "effect/Schema";
 28 โ”‚ import { identity } from "effect/Function";
    ยท          โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท              โ•ฐโ”€โ”€ 'identity' is imported here
 29 โ”‚ import * as Layer from "effect/Layer";
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

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

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

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

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

  โš  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(purity): Cannot call impure function during render
     โ•ญโ”€[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
 371 โ”‚   const { open, onOpenChange, onSnooze, timestampFormat } = props;
 372 โ”‚   const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
     ยท                                               โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                                                    โ•ฐโ”€โ”€ Cannot call impure function
 373 โ”‚   return (
     โ•ฐโ”€โ”€โ”€โ”€
  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity

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

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

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

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

  โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
    โ•ญโ”€[packages/shared/src/composerContextLegacySend.ts:19:45]
 18 โ”‚   const occurrences = collectComposerContextReferences(text);
 19 โ”‚   for (const occurrence of [...occurrences].reverse()) {
    ยท                                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 20 โ”‚     const record = recordsById.get(occurrence.contextId);
    โ•ฐโ”€โ”€โ”€โ”€
  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.

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

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

  โš  eslint(no-unused-vars): Identifier 'Fiber' is imported but never used.
    โ•ญโ”€[apps/server/src/ws.ts:10:13]
  9 โ”‚ import * as Effect from "effect/Effect";
 10 โ”‚ import * as Fiber from "effect/Fiber";
    ยท             โ”€โ”€โ”ฌโ”€โ”€
    ยท               โ•ฐโ”€โ”€ 'Fiber' is imported here
 11 โ”‚ import * as FileSystem from "effect/FileSystem";
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'Schedule' is imported but never used.
    โ•ญโ”€[apps/server/src/ws.ts:17:13]
 16 โ”‚ import * as Ref from "effect/Ref";
 17 โ”‚ import * as Schedule from "effect/Schedule";
    ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท                 โ•ฐโ”€โ”€ 'Schedule' is imported here
 18 โ”‚ import * as Schema from "effect/Schema";
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'.
      โ•ญโ”€[apps/server/src/ws.ts:1286:13]
 1285 โ”‚       const usageLimitSources = yield* UsageLimitSources.UsageLimitSources;
 1286 โ”‚       const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner;
      ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                         โ•ฐโ”€โ”€ 'projectSetupScriptRunner' is declared here
 1287 โ”‚       const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker;
      โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this declaration.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  โš  eslint(no-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.

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

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

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

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

  โš  react(immutability): This value cannot be modified
    โ•ญโ”€[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
 65 โ”‚   const [expanded, setExpanded] = useState(false);
 66 โ”‚   const progress = useSharedValue(0);
    ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท             โ•ฐโ”€โ”€ `progress` originates here
 67 โ”‚   useEffect(() => {
 68 โ”‚     progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
    ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท         โ•ฐโ”€โ”€ `progress` cannot be modified
 69 โ”‚   }, [expanded, progress]);
    โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
 121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
 122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
     ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                                 โ•ฐโ”€โ”€ Cannot access ref value during render
 123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
 125 โ”‚
 126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
     ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Cannot access ref value during render
 127 โ”‚     const recorder = createLazyVoiceRecorder({
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
 125 โ”‚
 126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
 127 โ”‚     const recorder = createLazyVoiceRecorder({
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
 125 โ”‚
 126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
     ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
 127 โ”‚     const recorder = createLazyVoiceRecorder({
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
 125 โ”‚
 126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
     ยท                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
 127 โ”‚     const recorder = createLazyVoiceRecorder({
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
 126 โ”‚       if (!sessionRef.current || !recorderRef.current) {
 127 โ”‚ โ•ญโ”€โ–ถ     const recorder = createLazyVoiceRecorder({
 128 โ”‚ โ”‚         create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
 129 โ”‚ โ”‚         onStatus: (status: RecordingStatus) => {
 130 โ”‚ โ”‚           sessionRef.current?.controller.handleRecorderStatus({
 131 โ”‚ โ”‚             isFinished: status.isFinished,
 132 โ”‚ โ”‚             hasError: status.hasError || status.mediaServicesDidReset === true,
 133 โ”‚ โ”‚             error: status.error,
 134 โ”‚ โ”‚             url: status.url,
 135 โ”‚ โ”‚           });
 136 โ”‚ โ”‚         },
 137 โ”‚ โ”‚         // Read when recording starts so preference changes do not re-render every composer.
 138 โ”‚ โ”‚         selectInput: (inputs) => {
 139 โ”‚ โ”‚           const preferences = registry.get(mobilePreferencesAtom);
 140 โ”‚ โ”‚           if (!AsyncResult.isSuccess(preferences)) return null;
 141 โ”‚ โ”‚           const known = microphoneOrder(preferences.value.microphones);
 142 โ”‚ โ”‚           const order = rememberMicrophones(known, inputs);
 143 โ”‚ โ”‚           if (order !== known) {
 144 โ”‚ โ”‚             registry.set(updateMobilePreferencesAtom, {
 145 โ”‚ โ”‚               transform: (current) => ({
 146 โ”‚ โ”‚                 microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
 147 โ”‚ โ”‚               }),
 148 โ”‚ โ”‚             });
 149 โ”‚ โ”‚           }
 150 โ”‚ โ”‚           return preferredMicrophoneInput(inputs, order);
 151 โ”‚ โ”‚         },
 152 โ”‚ โ”œโ”€โ–ถ     });
     ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
 153 โ”‚         recorderRef.current = recorder;
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
 152 โ”‚     });
 153 โ”‚     recorderRef.current = recorder;
     ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท          โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
     ยท          โ•ฐโ”€โ”€ This value is a ref
 154 โ”‚     sessionRef.current = new VoiceInputSession({
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
 153 โ”‚         recorderRef.current = recorder;
 154 โ”‚ โ•ญโ”€โ–ถ     sessionRef.current = new VoiceInputSession({
 155 โ”‚ โ”‚         recorder,
 156 โ”‚ โ”‚         getTranscriber: getLocalVoiceTranscriber,
 157 โ”‚ โ”‚         requestPermission: async () => {
 158 โ”‚ โ”‚           const permission = await requestRecordingPermissionsAsync();
 159 โ”‚ โ”‚           return { granted: permission.granted, canAskAgain: permission.canAskAgain };
 160 โ”‚ โ”‚         },
 161 โ”‚ โ”‚         configureRecording: configureVoiceRecordingAudio,
 162 โ”‚ โ”‚         releaseRecording: releaseVoiceRecordingAudio,
 163 โ”‚ โ”‚         deleteRecording: (uri) => new File(uri).delete(),
 164 โ”‚ โ”‚         onStateChange: (nextState) =>
 165 โ”‚ โ”‚           setState({
 166 โ”‚ โ”‚             state: nextState,
 167 โ”‚ โ”‚             ownerKey: sessionRef.current?.ownerKey ?? null,
 168 โ”‚ โ”‚             label: sessionRef.current?.label ?? null,
 169 โ”‚ โ”‚           }),
 170 โ”‚ โ”œโ”€โ–ถ     });
     ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
 171 โ”‚       }
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
 153 โ”‚     recorderRef.current = recorder;
 154 โ”‚     sessionRef.current = new VoiceInputSession({
     ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท          โ”‚        โ•ฐโ”€โ”€ Cannot update ref value during render
     ยท          โ•ฐโ”€โ”€ This value is a ref
 155 โ”‚       recorder,
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

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

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

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

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

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

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
 245 โ”‚     return () => clearInterval(intervalId);
 246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
     ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                         โ•ฐโ”€โ”€ Cannot access ref value during render
 247 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
 245 โ”‚     return () => clearInterval(intervalId);
 246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
     ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                              โ•ฐโ”€โ”€ Cannot access ref value during render
 247 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
 260 โ”‚     setOwnerFocused,
 261 โ”‚     session,
     ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท        โ•ฐโ”€โ”€ Cannot access ref value during render
 262 โ”‚     stop,
     โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(refs): Cannot access refs during render
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
 250 โ”‚
 251 โ”‚ โ•ญโ”€โ–ถ   return {
 252 โ”‚ โ”‚       isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
 253 โ”‚ โ”‚       state,
 254 โ”‚ โ”‚       audioLevels,
 255 โ”‚ โ”‚       elapsedSeconds,
 256 โ”‚ โ”‚       isBusy: voiceInputBlocksSubmission(state),
 257 โ”‚ โ”‚       ownerKey,
 258 โ”‚ โ”‚       label,
 259 โ”‚ โ”‚       focusedOwners,
 260 โ”‚ โ”‚       setOwnerFocused,
 261 โ”‚ โ”‚       session,
 262 โ”‚ โ”‚       stop,
 263 โ”‚ โ”‚       cancel,
 264 โ”‚ โ”œโ”€โ–ถ   };
     ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
 265 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  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(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
 121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
 122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ `audioLevels` originates here
 123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
 124 โ”‚   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
 125 โ”‚
 126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
 127 โ”‚     const recorder = createLazyVoiceRecorder({
 128 โ”‚       create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
 129 โ”‚       onStatus: (status: RecordingStatus) => {
 130 โ”‚         sessionRef.current?.controller.handleRecorderStatus({
 131 โ”‚           isFinished: status.isFinished,
 132 โ”‚           hasError: status.hasError || status.mediaServicesDidReset === true,
 133 โ”‚           error: status.error,
 134 โ”‚           url: status.url,
 135 โ”‚         });
 136 โ”‚       },
 137 โ”‚       // Read when recording starts so preference changes do not re-render every composer.
 138 โ”‚       selectInput: (inputs) => {
 139 โ”‚         const preferences = registry.get(mobilePreferencesAtom);
 140 โ”‚         if (!AsyncResult.isSuccess(preferences)) return null;
 141 โ”‚         const known = microphoneOrder(preferences.value.microphones);
 142 โ”‚         const order = rememberMicrophones(known, inputs);
 143 โ”‚         if (order !== known) {
 144 โ”‚           registry.set(updateMobilePreferencesAtom, {
 145 โ”‚             transform: (current) => ({
 146 โ”‚               microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
 147 โ”‚             }),
 148 โ”‚           });
 149 โ”‚         }
 150 โ”‚         return preferredMicrophoneInput(inputs, order);
 151 โ”‚       },
 152 โ”‚     });
 153 โ”‚     recorderRef.current = recorder;
 154 โ”‚     sessionRef.current = new VoiceInputSession({
 155 โ”‚       recorder,
 156 โ”‚       getTranscriber: getLocalVoiceTranscriber,
 157 โ”‚       requestPermission: async () => {
 158 โ”‚         const permission = await requestRecordingPermissionsAsync();
 159 โ”‚         return { granted: permission.granted, canAskAgain: permission.canAskAgain };
 160 โ”‚       },
 161 โ”‚       configureRecording: configureVoiceRecordingAudio,
 162 โ”‚       releaseRecording: releaseVoiceRecordingAudio,
 163 โ”‚       deleteRecording: (uri) => new File(uri).delete(),
 164 โ”‚       onStateChange: (nextState) =>
 165 โ”‚         setState({
 166 โ”‚           state: nextState,
 167 โ”‚           ownerKey: sessionRef.current?.ownerKey ?? null,
 168 โ”‚           label: sessionRef.current?.label ?? null,
 169 โ”‚         }),
 170 โ”‚     });
 171 โ”‚   }
 172 โ”‚
 173 โ”‚   const session = sessionRef.current;
 174 โ”‚   const controller = session.controller;
 175 โ”‚   const recorder = recorderRef.current;
 176 โ”‚
 177 โ”‚   useEffect(() => {
 178 โ”‚     const subscription = AppState.addEventListener("change", (nextState) => {
 179 โ”‚       // iOS reports `inactive` while its permission dialog is open. Only the
 180 โ”‚       // real background state cancels preparation; recorder status handles
 181 โ”‚       // calls and route interruptions during capture.
 182 โ”‚       if (nextState === "background") controller.appMovedToBackground();
 183 โ”‚     });
 184 โ”‚     return () => subscription.remove();
 185 โ”‚   }, [controller]);
 186 โ”‚
 187 โ”‚   useEffect(
 188 โ”‚     () => () => {
 189 โ”‚       controller.dispose();
 190 โ”‚       recorder.release();
 191 โ”‚     },
 192 โ”‚     [controller, recorder],
 193 โ”‚   );
 194 โ”‚
 195 โ”‚   useEffect(() => {
 196 โ”‚     if (state.phase !== "recording") return;
 197 โ”‚
 198 โ”‚     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
 199 โ”‚     const activation = activateKeepAwakeAsync(tag);
 200 โ”‚     void activation.catch(() => {});
 201 โ”‚     return () => {
 202 โ”‚       // Release after activation settles, even if the recording ends immediately.
 203 โ”‚       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
 204 โ”‚     };
 205 โ”‚   }, [keepAwakeId, state.phase]);
 206 โ”‚
 207 โ”‚   useEffect(() => {
 208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
 209 โ”‚
 210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
 211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
 212 โ”‚       audioLevels.value = audioLevelsRef.current;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ `audioLevels` cannot be modified
 213 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): Cannot modify local variables after render completes
     โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
 206 โ”‚
 207 โ”‚   useEffect(() => {
     ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `audioLevels` after render
 208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
 209 โ”‚
 210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
 211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
 212 โ”‚       audioLevels.value = audioLevelsRef.current;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ This modifies `audioLevels`
 213 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  help: This argument is a function which may reassign or mutate `audioLevels` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
  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/voice-input/ComposerDictationControl.tsx:93:5]
 90 โ”‚ }) {
 91 โ”‚   const rotation = useSharedValue(props.hidden ? 1 : 0);
    ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท             โ•ฐโ”€โ”€ `rotation` originates here
 92 โ”‚   useLayoutEffect(() => {
 93 โ”‚     rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
    ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท         โ•ฐโ”€โ”€ `rotation` cannot be modified
 94 โ”‚   }, [props.hidden, rotation]);
    โ•ฐโ”€โ”€โ”€โ”€
  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/voice-input/ComposerDictationControl.tsx:269:5]
 266 โ”‚   const variant = props.variant ?? "plain";
 267 โ”‚   const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ `loadingVisibility` originates here
 268 โ”‚   useLayoutEffect(() => {
 269 โ”‚     loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ `loadingVisibility` cannot be modified
 270 โ”‚   }, [loadingVisibility, props.loading]);
     โ•ฐโ”€โ”€โ”€โ”€
  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/voice-input/ComposerDictationControl.tsx:328:5]
 325 โ”‚ }) {
 326 โ”‚   const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ `recordingVisibility` originates here
 327 โ”‚   useLayoutEffect(() => {
 328 โ”‚     recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ `recordingVisibility` cannot be modified
 329 โ”‚   }, [props.phase, recordingVisibility]);
     โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(refs): Cannot access refs during render
    โ•ญโ”€[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
 26 โ”‚   const latestInput = useRef(input);
 27 โ”‚   latestInput.current = input;
    ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท        โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
    ยท        โ•ฐโ”€โ”€ This value is a ref
 28 โ”‚   const mounted = useRef(true);
    โ•ฐโ”€โ”€โ”€โ”€
  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/features/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

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

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

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

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

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

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

  โš  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(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(immutability): This value cannot be modified
    โ•ญโ”€[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
 53 โ”‚ function usePulseAnimation(pulse: boolean) {
 54 โ”‚   const pulseProgress = useSharedValue(0);
    ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท               โ•ฐโ”€โ”€ `pulseProgress` originates here
 55 โ”‚
 56 โ”‚   useEffect(() => {
 57 โ”‚     if (pulse) {
 58 โ”‚       pulseProgress.value = withRepeat(
    ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท             โ•ฐโ”€โ”€ `pulseProgress` cannot be modified
 59 โ”‚         withTiming(1, {
    โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

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

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
     โ•ญโ”€[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33]
 113 โ”‚     return () => cancelAnimationFrame(frame);
 114 โ”‚   }, [restoreSearch, tabActive, bottomSearch]);
     ยท                                 โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท                                       โ•ฐโ”€โ”€ Unnecessary dependency `bottomSearch`
 115 โ”‚   const composeButton = nativeToolbarCompose ? (
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

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

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

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

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

  โš  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(memo-dependencies): Found extra memoization dependencies
     โ•ญโ”€[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34]
 115 โ”‚     return [...commands];
 116 โ”‚   }, [activeThreadRef, pathname, registrationVersion, navigation]);
     ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                                           โ•ฐโ”€โ”€ Unnecessary dependency `registrationVersion`
 117 โ”‚
     โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

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

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

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

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

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

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

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

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

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

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

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
    โ•ญโ”€[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
 28 โ”‚   const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
 29 โ”‚   useEffect(() => {
    ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
    ยท       โ•ฐโ”€โ”€ This is the containing effect
 30 โ”‚     if (snapshot && snapshot !== live) setHeld({ key, snapshot });
    ยท                                        โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท                                           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 31 โ”‚   }, [key, live, snapshot]);
    โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  eslint(no-unused-vars): Type 'Scope' is imported but never used.
    โ•ญโ”€[apps/server/src/provider/ProviderAuthService.ts:15:18]
 14 โ”‚ import * as Layer from "effect/Layer";
 15 โ”‚ import type * as Scope from "effect/Scope";
    ยท                  โ”€โ”€โ”ฌโ”€โ”€
    ยท                    โ•ฐโ”€โ”€ 'Scope' is imported here
 16 โ”‚ import * as Stream from "effect/Stream";
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  react(immutability): This value cannot be modified
    โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5]
 83 โ”‚
 84 โ”‚   const cardCoverage = props.cardCoverage;
    ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
    ยท               โ•ฐโ”€โ”€ `cardCoverage` originates here
 85 โ”‚   const barHeightRef = useRef(0);
 86 โ”‚   const cardHeightRef = useRef(0);
 87 โ”‚   const cardHeight = useSharedValue(0);
 88 โ”‚   const notifyCoverage = useCallback(() => {
 89 โ”‚     if (!cardCoverage) {
 90 โ”‚       return;
 91 โ”‚     }
 92 โ”‚     // The card resizes with the keyboard every frame, so easing each sample would leave the
 93 โ”‚     // feed inset and floating controls trailing it.
 94 โ”‚     cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
    ยท           โ•ฐโ”€โ”€ `cardCoverage` cannot be modified
 95 โ”‚   }, [cardCoverage]);
    โ•ฐโ”€โ”€โ”€โ”€
  help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): This value cannot be modified
     โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7]
  86 โ”‚   const cardHeightRef = useRef(0);
  87 โ”‚   const cardHeight = useSharedValue(0);
     ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ `cardHeight` originates here
  88 โ”‚   const notifyCoverage = useCallback(() => {
  89 โ”‚     if (!cardCoverage) {
  90 โ”‚       return;
  91 โ”‚     }
  92 โ”‚     // The card resizes with the keyboard every frame, so easing each sample would leave the
  93 โ”‚     // feed inset and floating controls trailing it.
  94 โ”‚     cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
  95 โ”‚   }, [cardCoverage]);
  96 โ”‚   const handleBarLayout = useCallback(
  97 โ”‚     (event: LayoutChangeEvent) => {
  98 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
  99 โ”‚       notifyCoverage();
 100 โ”‚     },
 101 โ”‚     [notifyCoverage],
 102 โ”‚   );
 103 โ”‚   const handleCardLayout = useCallback(
 104 โ”‚     (event: LayoutChangeEvent) => {
 105 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
 106 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ `cardHeight` cannot be modified
 107 โ”‚       notifyCoverage();
     โ•ฐโ”€โ”€โ”€โ”€
  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): Cannot modify local variables after render completes
    โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5]
 87 โ”‚   const cardHeight = useSharedValue(0);
 88 โ”‚   const notifyCoverage = useCallback(() => {
    ยท                                      โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
    ยท                                         โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
 89 โ”‚     if (!cardCoverage) {
 90 โ”‚       return;
 91 โ”‚     }
 92 โ”‚     // The card resizes with the keyboard every frame, so easing each sample would leave the
 93 โ”‚     // feed inset and floating controls trailing it.
 94 โ”‚     cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
    ยท           โ•ฐโ”€โ”€ This modifies `cardCoverage`
 95 โ”‚   }, [cardCoverage]);
    โ•ฐโ”€โ”€โ”€โ”€
  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): Cannot modify local variables after render completes
    โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5]
 93 โ”‚     // feed inset and floating controls trailing it.
 94 โ”‚     cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
    ยท           โ•ฐโ”€โ”€ This modifies `cardCoverage`
 95 โ”‚   }, [cardCoverage]);
 96 โ”‚   const handleBarLayout = useCallback(
 97 โ”‚     (event: LayoutChangeEvent) => {
    ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
 98 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
    โ•ฐโ”€โ”€โ”€โ”€
  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(immutability): Cannot modify local variables after render completes
     โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7]
 103 โ”‚   const handleCardLayout = useCallback(
 104 โ”‚     (event: LayoutChangeEvent) => {
     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardHeight` after render
 105 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
 106 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ This modifies `cardHeight`
 107 โ”‚       notifyCoverage();
     โ•ฐโ”€โ”€โ”€โ”€
  help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:333:7]
 328 โ”‚   };
 329 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 330 โ”‚     if (!guidesEnabled && section === "guide") {
 331 โ”‚       requestedSection.current = "overview";
 332 โ”‚       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
 333 โ”‚       setSection("overview");
     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 334 โ”‚     }
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

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

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

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

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
     โ•ญโ”€[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7]
 125 โ”‚
 126 โ”‚   useEffect(() => {
     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท       โ•ฐโ”€โ”€ This is the containing effect
 127 โ”‚     if (!isLoaded) {
 128 โ”‚       setLiveActivityStatus("checking");
     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 129 โ”‚       return;
     โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

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

  โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2647:9]
 2638 โ”‚   const stopFollowingEnd = useEffectEvent(() => setEndFollow(false));
 2639 โ”‚   useEffect(() => {
      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
      ยท       โ•ฐโ”€โ”€ This is the containing effect
 2640 โ”‚     if (!jumpToMessageId || loadedListKey !== listMountKey) return;
 2641 โ”‚     const index = presentedFeed.findIndex(
 2642 โ”‚       (entry) => entry.type === "message" && entry.id === jumpToMessageId,
 2643 โ”‚     );
 2644 โ”‚     if (index === -1) {
 2645 โ”‚       const runId = messageFoldRunId(props.feed, jumpToMessageId);
 2646 โ”‚       if (runId && !expandedTurnIds.has(runId)) {
 2647 โ”‚         setInteractionState((current) => ({
      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                  โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
 2648 โ”‚           ...current,
      โ•ฐโ”€โ”€โ”€โ”€
  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect

  โš  eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
    โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10]
 65 โ”‚ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
 66 โ”‚ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
    ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ยท                     โ•ฐโ”€โ”€ 'isMarkdownFileLinkLabel' is imported here
 67 โ”‚ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
    โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3]
 91 โ”‚ import {
 92 โ”‚   createContext,
    ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
    ยท         โ•ฐโ”€โ”€ 'createContext' is imported here
 93 โ”‚   memo,
    โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3]
 107 โ”‚ import {
 108 โ”‚   ActivityIndicator,
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท           โ•ฐโ”€โ”€ 'ActivityIndicator' is imported here
 109 โ”‚   Image,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3]
 114 โ”‚   Pressable,
 115 โ”‚   ScrollView,
     ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท        โ•ฐโ”€โ”€ 'ScrollView' is imported here
 116 โ”‚   StyleSheet,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11]
 116 โ”‚   StyleSheet,
 117 โ”‚   Text as NativeText,
     ยท           โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
     ยท                โ•ฐโ”€โ”€ 'NativeText' is imported here
 118 โ”‚   type ColorValue,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10]
 139 โ”‚ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
 140 โ”‚ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                   โ•ฐโ”€โ”€ 'tryOpenExternalUrl' is imported here
 141 โ”‚ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10]
 142 โ”‚ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
 143 โ”‚ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                   โ•ฐโ”€โ”€ 'faviconUrlForOrigin' is imported here
 144 โ”‚ import {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10]
 156 โ”‚ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
 157 โ”‚ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                  โ•ฐโ”€โ”€ 'MediaVideoPlayer' is imported here
 158 โ”‚ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3]
 160 โ”‚   attachmentVideoPreviewSource,
 161 โ”‚   mediaVideoPreviewUri,
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท             โ•ฐโ”€โ”€ 'mediaVideoPreviewUri' is imported here
 162 โ”‚   mediaVideoThumbnailKey,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3]
 161 โ”‚   mediaVideoPreviewUri,
 162 โ”‚   mediaVideoThumbnailKey,
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท              โ•ฐโ”€โ”€ 'mediaVideoThumbnailKey' is imported here
 163 โ”‚   type MediaVideoPreviewSource,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8]
 162 โ”‚   mediaVideoThumbnailKey,
 163 โ”‚   type MediaVideoPreviewSource,
     ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                   โ•ฐโ”€โ”€ 'MediaVideoPreviewSource' is imported here
 164 โ”‚ } from "../../lib/videoPreviewSource";
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15]
 170 โ”‚ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection";
 171 โ”‚ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter";
     ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                      โ•ฐโ”€โ”€ 'ReviewDiffTheme' is imported here
 172 โ”‚ import {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3]
 185 โ”‚ import {
 186 โ”‚   resolveMarkdownFontSizes,
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท               โ•ฐโ”€โ”€ 'resolveMarkdownFontSizes' is imported here
 187 โ”‚   resolveNativeMarkdownTypography,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:193:3]
 192 โ”‚   normalizeNativeMarkdownUrl,
 193 โ”‚   resolveMarkdownInlineCodePresentation,
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                     โ•ฐโ”€โ”€ 'resolveMarkdownInlineCodePresentation' is imported here
 194 โ”‚   resolveMarkdownLinkPresentation,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:233:10]
 232 โ”‚ import { ThreadMcpApp } from "./McpAppWebView";
 233 โ”‚ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState";
     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท                      โ•ฐโ”€โ”€ 'useMarkdownCodeHighlight' is imported here
 234 โ”‚ import {
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:237:3]
 236 โ”‚   useAssetUrl,
 237 โ”‚   useAssetUrlState,
     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
     ยท           โ•ฐโ”€โ”€ 'useAssetUrlState' is imported here
 238 โ”‚   useRefreshAssetUrl,
     โ•ฐโ”€โ”€โ”€โ”€
  help: Consider removing this import.

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2148:7]
 2147 โ”‚     setExpandedFile(null);
 2148 โ”‚   }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                โ”‚                  โ”‚                       โ•ฐโ”€โ”€ Unnecessary dependency `props.contentPresentation.kind`
      ยท                โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `props.threadId`
      ยท                โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
 2149 โ”‚   const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
      โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

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

  โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2632:7]
 2631 โ”‚     }
 2632 โ”‚   }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `listMountKey`
 2633 โ”‚   // Opening at a message: its run unfolds, the list stops following the end
      โ•ฐโ”€โ”€โ”€โ”€
  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps

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

  โš  react(memo-dependencies): Found extra memoization dependencies
     โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:618:9]
 617 โ”‚       };
 618 โ”‚     }, [props.environmentId, attachment.id, httpBaseUrl]),
     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
     ยท                  โ”‚                 โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `httpBaseUrl`
     ยท                  โ”‚                 โ•ฐโ”€โ”€ Unnecessary dependency `attachment.id`
     ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
 619 โ”‚   );
     โ•ฐโ”€โ”€โ”€โ”€
  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): Function 'assertUserMessagesExclude' is declared but never used.
      โ•ญโ”€[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10]
 1397 โ”‚
 1398 โ”‚ function assertUserMessagesExclude(
      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
      ยท                      โ•ฐโ”€โ”€ 'assertUserMessagesExclude' is declared here
 1399 โ”‚   projection: OrchestrationV2ThreadProjection,
      โ•ฐโ”€โ”€โ”€โ”€
  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

Found 0 errors and 367 warnings in 5477 files (5.0s, 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=__95cf10e4-39ab-4fe5-879b-449d9f9adc97.__actions_cache]
Post job cleanup.
Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074, not saving cache.
##[end-action id=__95cf10e4-39ab-4fe5-879b-449d9f9adc97.__actions_cache;outcome=success;conclusion=success;duration_ms=96]
##[start-action display=Cache Vite+;id=__95cf10e4-39ab-4fe5-879b-449d9f9adc97.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=__95cf10e4-39ab-4fe5-879b-449d9f9adc97.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/af4dff6e-4b4c-4730-901a-6c539eae489f' 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: 166
  BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 371
  BLACKSMITH_CHECK_RUN_ID: 120956923557
  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