GitHub check

256 KB of 604 KB loaded Download the full log (604 KB)
348 KB of earlier output not loaded
2026-10-24T14:29:51.9751537Z  189 │       controller.dispose();
2026-10-24T14:29:51.9751638Z  190 │       recorder.release();
2026-10-24T14:29:51.9751737Z  191 │     },
2026-10-24T14:29:51.9751880Z  192 │     [controller, recorder],
2026-10-24T14:29:51.9751983Z  193 │   );
2026-10-24T14:29:51.9752060Z  194 │
2026-10-24T14:29:51.9752232Z  195 │   useEffect(() => {
2026-10-24T14:29:51.9752387Z  196 │     if (state.phase !== "recording") return;
2026-10-24T14:29:51.9752492Z  197 │
2026-10-24T14:29:51.9752701Z  198 │     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-24T14:29:51.9752864Z  199 │     const activation = activateKeepAwakeAsync(tag);
2026-10-24T14:29:51.9752993Z  200 │     void activation.catch(() => {});
2026-10-24T14:29:51.9753202Z  201 │     return () => {
2026-10-24T14:29:51.9753403Z  202 │       // Release after activation settles, even if the recording ends immediately.
2026-10-24T14:29:51.9753611Z  203 │       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-24T14:29:51.9753713Z  204 │     };
2026-10-24T14:29:51.9753858Z  205 │   }, [keepAwakeId, state.phase]);
2026-10-24T14:29:51.9753947Z  206 │
2026-10-24T14:29:51.9754041Z  207 │   useEffect(() => {
2026-10-24T14:29:51.9754206Z  208 │     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T14:29:51.9754269Z  209 │
2026-10-24T14:29:51.9754432Z  210 │     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T14:29:51.9754626Z  211 │       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T14:29:51.9754761Z  212 │       audioLevels.value = audioLevelsRef.current;
2026-10-24T14:29:51.9754880Z      ·       ─────┬─────
2026-10-24T14:29:51.9755051Z      ·            ╰── `audioLevels` cannot be modified
2026-10-24T14:29:51.9755160Z  213 │     }
2026-10-24T14:29:51.9755243Z      ╰────
2026-10-24T14:29:51.9755552Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T14:29:51.9755886Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T14:29:51.9755892Z
2026-10-24T14:29:51.9756260Z   ⚠ react(immutability): Cannot modify local variables after render completes
2026-10-24T14:29:51.9756536Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T14:29:51.9756619Z  206 │
2026-10-24T14:29:51.9756699Z  207 │   useEffect(() => {
2026-10-24T14:29:51.9756802Z      ·             ───┬───
2026-10-24T14:29:51.9757084Z      ·                ╰── This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-24T14:29:51.9757254Z  208 │     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T14:29:51.9757321Z  209 │
2026-10-24T14:29:51.9757473Z  210 │     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T14:29:51.9757659Z  211 │       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T14:29:51.9757811Z  212 │       audioLevels.value = audioLevelsRef.current;
2026-10-24T14:29:51.9757920Z      ·       ─────┬─────
2026-10-24T14:29:51.9758069Z      ·            ╰── This modifies `audioLevels`
2026-10-24T14:29:51.9758147Z  213 │     }
2026-10-24T14:29:51.9758251Z      ╰────
2026-10-24T14:29:51.9758615Z   help: This argument is a function which may reassign or mutate `audioLevels` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T14:29:51.9758937Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T14:29:51.9758941Z
2026-10-24T14:29:51.9759195Z   ⚠ react(immutability): This value cannot be modified
2026-10-24T14:29:51.9759403Z     ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
2026-10-24T14:29:51.9759544Z  65 │   const [expanded, setExpanded] = useState(false);
2026-10-24T14:29:51.9759641Z  66 │   const progress = useSharedValue(0);
2026-10-24T14:29:51.9759744Z     ·         ────┬───
2026-10-24T14:29:51.9759905Z     ·             ╰── `progress` originates here
2026-10-24T14:29:51.9760020Z  67 │   useEffect(() => {
2026-10-24T14:29:51.9760157Z  68 │     progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
2026-10-24T14:29:51.9760259Z     ·     ────┬───
2026-10-24T14:29:51.9760429Z     ·         ╰── `progress` cannot be modified
2026-10-24T14:29:51.9760535Z  69 │   }, [expanded, progress]);
2026-10-24T14:29:51.9760623Z     ╰────
2026-10-24T14:29:51.9760906Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T14:29:51.9761242Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T14:29:51.9761245Z
2026-10-24T14:29:51.9761529Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9761738Z      ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
2026-10-24T14:29:51.9761920Z  112 │   const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
2026-10-24T14:29:51.9762109Z  113 │   useEffect(() => {
2026-10-24T14:29:51.9762219Z      ·   ────┬────
2026-10-24T14:29:51.9762444Z      ·       ╰── This is the containing effect
2026-10-24T14:29:51.9762722Z  114 │     if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
2026-10-24T14:29:51.9762803Z  115 │       return;
2026-10-24T14:29:51.9762886Z  116 │     }
2026-10-24T14:29:51.9763025Z  117 │     setEntry({ key: input.targetKey, location: candidate });
2026-10-24T14:29:51.9763146Z      ·     ────┬───
2026-10-24T14:29:51.9763332Z      ·         ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9763481Z  118 │   }, [candidate, entry.key, entry.location, input.targetKey]);
2026-10-24T14:29:51.9763562Z      ╰────
2026-10-24T14:29:51.9764193Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9764535Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9764559Z
2026-10-24T14:29:51.9764795Z   ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T14:29:51.9764996Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15]
2026-10-24T14:29:51.9765085Z  1997 │       assert.equal(
2026-10-24T14:29:51.9765293Z  1998 │         items.filter((item) => item.type === "assistant_message").at(-1)?.text,
2026-10-24T14:29:51.9765443Z       ·               ──────
2026-10-24T14:29:51.9765548Z  1999 │         "authoritative answer",
2026-10-24T14:29:51.9765634Z       ╰────
2026-10-24T14:29:51.9765838Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T14:29:51.9765841Z
2026-10-24T14:29:51.9766328Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:51.9766527Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7]
2026-10-24T14:29:51.9766735Z  3950 │           const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped);
2026-10-24T14:29:51.9766960Z  3951 │ ╭─▶       while (!responseLifecycle.includes("failed")) {
2026-10-24T14:29:51.9767124Z  3952 │ │           yield* Effect.yieldNow;
2026-10-24T14:29:51.9767271Z  3953 │ ╰─▶       }
2026-10-24T14:29:51.9767423Z  3954 │           const responseExit = yield* Fiber.join(responseFiber);
2026-10-24T14:29:51.9767503Z       ╰────
2026-10-24T14:29:51.9767507Z
2026-10-24T14:29:51.9767993Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:51.9768198Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9]
2026-10-24T14:29:51.9768300Z  6061 │               .pipe(Effect.forkScoped);
2026-10-24T14:29:51.9768512Z  6062 │ ╭─▶         while (promptGates.length < 1) {
2026-10-24T14:29:51.9768707Z  6063 │ │             yield* Effect.yieldNow;
2026-10-24T14:29:51.9769010Z  6064 │ ╰─▶         }
2026-10-24T14:29:51.9769190Z  6065 │             assert.isDefined(sessionUpdateHandler, "session update handler must be wired");
2026-10-24T14:29:51.9769269Z       ╰────
2026-10-24T14:29:51.9769272Z
2026-10-24T14:29:51.9769755Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:51.9769952Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9]
2026-10-24T14:29:51.9770076Z  6196 │               .pipe(Effect.forkScoped);
2026-10-24T14:29:51.9770274Z  6197 │ ╭─▶         while (promptGates.length < 2) {
2026-10-24T14:29:51.9770421Z  6198 │ │             yield* Effect.yieldNow;
2026-10-24T14:29:51.9770576Z  6199 │ ╰─▶         }
2026-10-24T14:29:51.9770784Z  6200 │             if (sessionUpdateHandler === undefined || capturedMutation.current === null) {
2026-10-24T14:29:51.9770850Z       ╰────
2026-10-24T14:29:51.9770852Z
2026-10-24T14:29:51.9771143Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:51.9771337Z        ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7]
2026-10-24T14:29:51.9771424Z  10577 │
2026-10-24T14:29:51.9771518Z  10578 │ const layer: Layer.Layer<
2026-10-24T14:29:51.9771632Z        ·       ──┬──
2026-10-24T14:29:51.9771790Z        ·         ╰── 'layer' is declared here
2026-10-24T14:29:51.9771956Z  10579 │   ProviderAdapter.ProviderAdapterV2,
2026-10-24T14:29:51.9772032Z        ╰────
2026-10-24T14:29:51.9772225Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9772228Z
2026-10-24T14:29:51.9772511Z   ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used.
2026-10-24T14:29:51.9772719Z      ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10]
2026-10-24T14:29:51.9772808Z  959 │
2026-10-24T14:29:51.9772938Z  960 │ function layerClaudeAgentSdkReplayQueryRunner(
2026-10-24T14:29:51.9773089Z      ·          ──────────────────┬─────────────────
2026-10-24T14:29:51.9773370Z      ·                            ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here
2026-10-24T14:29:51.9773571Z  961 │   transcript: ClaudeAgentSdkReplayTranscript,
2026-10-24T14:29:51.9773653Z      ╰────
2026-10-24T14:29:51.9773792Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9773795Z
2026-10-24T14:29:51.9774146Z   ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:51.9774335Z       ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7]
2026-10-24T14:29:51.9774394Z  1443 │
2026-10-24T14:29:51.9774564Z  1444 │ const layerCodexAppServerClientFactoryCommand = (
2026-10-24T14:29:51.9774708Z       ·       ───────────────────┬───────────────────
2026-10-24T14:29:51.9775003Z       ·                          ╰── 'layerCodexAppServerClientFactoryCommand' is declared here
2026-10-24T14:29:51.9775153Z  1445 │   options: CodexClient.CodexAppServerClientOptions & {
2026-10-24T14:29:51.9775227Z       ╰────
2026-10-24T14:29:51.9775362Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9775365Z
2026-10-24T14:29:51.9775645Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:51.9775837Z       ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7]
2026-10-24T14:29:51.9775895Z  1679 │
2026-10-24T14:29:51.9776015Z  1680 │ const layer: Layer.Layer<
2026-10-24T14:29:51.9776114Z       ·       ──┬──
2026-10-24T14:29:51.9776268Z       ·         ╰── 'layer' is declared here
2026-10-24T14:29:51.9776384Z  1681 │   ProviderAdapter.ProviderAdapterV2,
2026-10-24T14:29:51.9776472Z       ╰────
2026-10-24T14:29:51.9776608Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9776610Z
2026-10-24T14:29:51.9776838Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9777000Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-24T14:29:51.9777118Z  256 │     return () => cancelAnimationFrame(frame);
2026-10-24T14:29:51.9777253Z  257 │   }, [props.path, targetIndex]);
2026-10-24T14:29:51.9777357Z      ·       ─────┬────
2026-10-24T14:29:51.9777569Z      ·            ╰── Unnecessary dependency `props.path`
2026-10-24T14:29:51.9777655Z  258 │
2026-10-24T14:29:51.9777745Z      ╰────
2026-10-24T14:29:51.9778077Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9778423Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9778426Z
2026-10-24T14:29:51.9778631Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T14:29:51.9778801Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-24T14:29:51.9778921Z  292 │                     <SourceText
2026-10-24T14:29:51.9779050Z  293 │                       key={`${index}:${tokenIndex}`}
2026-10-24T14:29:51.9779186Z      ·                       ──────────────────────────────
2026-10-24T14:29:51.9779348Z  294 │                       style={{
2026-10-24T14:29:51.9783230Z      ╰────
2026-10-24T14:29:51.9783403Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T14:29:51.9783406Z
2026-10-24T14:29:51.9783606Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T14:29:51.9783754Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-24T14:29:51.9783819Z  308 │             return (
2026-10-24T14:29:51.9783903Z  309 │               <SourceText key={index}>
2026-10-24T14:29:51.9784005Z      ·                           ───────────
2026-10-24T14:29:51.9784071Z  310 │                 {body}
2026-10-24T14:29:51.9784121Z      ╰────
2026-10-24T14:29:51.9784268Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T14:29:51.9784271Z
2026-10-24T14:29:51.9784509Z   ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression
2026-10-24T14:29:51.9784640Z     ╭─[packages/shared/src/serverSettings.test.ts:35:7]
2026-10-24T14:29:51.9784819Z  34 │     const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) =>
2026-10-24T14:29:51.9784915Z  35 │       instanceId === configured ? true : false,
2026-10-24T14:29:51.9785033Z     ·       ────────────────────────────────────────
2026-10-24T14:29:51.9785088Z  36 │     );
2026-10-24T14:29:51.9785137Z     ╰────
2026-10-24T14:29:51.9785234Z   help: Remove this ternary operator
2026-10-24T14:29:51.9785236Z
2026-10-24T14:29:51.9785427Z   ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used.
2026-10-24T14:29:51.9785573Z     ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10]
2026-10-24T14:29:51.9785712Z  16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native";
2026-10-24T14:29:51.9785824Z  17 │ import { Image, Platform, StyleSheet } from "react-native";
2026-10-24T14:29:51.9785898Z     ·          ──┬──
2026-10-24T14:29:51.9786026Z     ·            ╰── 'Image' is imported here
2026-10-24T14:29:51.9786078Z  18 │
2026-10-24T14:29:51.9786127Z     ╰────
2026-10-24T14:29:51.9786241Z   help: Consider removing this import.
2026-10-24T14:29:51.9786244Z
2026-10-24T14:29:51.9786526Z   ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T14:29:51.9786667Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6]
2026-10-24T14:29:51.9786834Z  225 │     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-24T14:29:51.9786927Z  226 │       nativeEventSnapshotsRef.current,
2026-10-24T14:29:51.9787019Z      ·       ───────────┬───────────
2026-10-24T14:29:51.9787475Z      ·                  ╰── 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
2026-10-24T14:29:51.9787546Z  227 │       mostRecentEventCount,
2026-10-24T14:29:51.9787602Z  228 │     );
2026-10-24T14:29:51.9787726Z  229 │   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-24T14:29:51.9787864Z      ·      ──────────────────────────┬──────────────────────────
2026-10-24T14:29:51.9788060Z      ·                                ╰── This dependency list is missing values used by the callback
2026-10-24T14:29:51.9788253Z  230 │   const assumedValue = props.value;
2026-10-24T14:29:51.9788388Z      ╰────
2026-10-24T14:29:51.9788606Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T14:29:51.9788918Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9788924Z
2026-10-24T14:29:51.9789135Z   ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T14:29:51.9789277Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7]
2026-10-24T14:29:51.9789420Z  236 │     nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-24T14:29:51.9789509Z  237 │       nativeEventSnapshotsRef.current,
2026-10-24T14:29:51.9789603Z      ·       ───────────┬───────────
2026-10-24T14:29:51.9790056Z      ·                  ╰── 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
2026-10-24T14:29:51.9790130Z  238 │       controlledEventCount,
2026-10-24T14:29:51.9790196Z  239 │       assumedValue,
2026-10-24T14:29:51.9790249Z  240 │     );
2026-10-24T14:29:51.9790406Z  241 │   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-24T14:29:51.9790542Z      ·                                                         ───────────┬──────────
2026-10-24T14:29:51.9790749Z      ·                                                                    ╰── Unnecessary dependency `controlledDocumentJson`
2026-10-24T14:29:51.9790843Z  242 │   const acceptNativeEvent = useCallback(
2026-10-24T14:29:51.9790898Z      ╰────
2026-10-24T14:29:51.9791318Z   help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9791624Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9791627Z
2026-10-24T14:29:51.9791772Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9791913Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
2026-10-24T14:29:51.9792039Z  161 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T14:29:51.9792255Z  162 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T14:29:51.9792433Z      ·                             ─────────────┬────────────
2026-10-24T14:29:51.9792596Z      ·                                          ╰── Cannot access ref value during render
2026-10-24T14:29:51.9792653Z  163 │     });
2026-10-24T14:29:51.9792705Z      ╰────
2026-10-24T14:29:51.9793167Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9793453Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9793455Z
2026-10-24T14:29:51.9793601Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9793746Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
2026-10-24T14:29:51.9793867Z  161 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T14:29:51.9793977Z  162 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T14:29:51.9794091Z      ·                             ─────────────┬────────────
2026-10-24T14:29:51.9794294Z      ·                                          ╰── Passing a ref to a function may read its value during render
2026-10-24T14:29:51.9794351Z  163 │     });
2026-10-24T14:29:51.9794404Z      ╰────
2026-10-24T14:29:51.9794863Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9795149Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9795152Z
2026-10-24T14:29:51.9795296Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9795438Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23]
2026-10-24T14:29:51.9795495Z  163 │     });
2026-10-24T14:29:51.9795583Z  164 │     confirmedTokensRef.current = tokens;
2026-10-24T14:29:51.9795708Z      ·     ─────────┬────────────┬───
2026-10-24T14:29:51.9795897Z      ·              │            ╰── Cannot update ref value during render
2026-10-24T14:29:51.9796020Z      ·              ╰── This value is a ref
2026-10-24T14:29:51.9796093Z  165 │     return JSON.stringify(
2026-10-24T14:29:51.9796147Z      ╰────
2026-10-24T14:29:51.9796604Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9796888Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9796891Z
2026-10-24T14:29:51.9797033Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9797171Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5]
2026-10-24T14:29:51.9797293Z  205 │     mostRecentEventCount,
2026-10-24T14:29:51.9797447Z  206 │     nativeEventSnapshotsRef.current,
2026-10-24T14:29:51.9797554Z      ·     ───────────────┬───────────────
2026-10-24T14:29:51.9797738Z      ·                    ╰── Passing a ref to a function may read its value during render
2026-10-24T14:29:51.9797796Z  207 │   );
2026-10-24T14:29:51.9797849Z      ╰────
2026-10-24T14:29:51.9798303Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9798585Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9798587Z
2026-10-24T14:29:51.9798735Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9798878Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5]
2026-10-24T14:29:51.9798951Z  211 │     mostRecentEventCount,
2026-10-24T14:29:51.9799037Z  212 │     nativeEventSnapshotsRef.current,
2026-10-24T14:29:51.9799140Z      ·     ───────────────┬───────────────
2026-10-24T14:29:51.9799326Z      ·                    ╰── Passing a ref to a function may read its value during render
2026-10-24T14:29:51.9799380Z  213 │   );
2026-10-24T14:29:51.9799429Z      ╰────
2026-10-24T14:29:51.9799888Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9800177Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9800180Z
2026-10-24T14:29:51.9800365Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-24T14:29:51.9800503Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6]
2026-10-24T14:29:51.9800624Z  161 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T14:29:51.9800736Z  162 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T14:29:51.9800846Z      ·                             ─────────┬────────
2026-10-24T14:29:51.9801309Z      ·                                      ╰── 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
2026-10-24T14:29:51.9801368Z  163 │     });
2026-10-24T14:29:51.9801456Z  164 │     confirmedTokensRef.current = tokens;
2026-10-24T14:29:51.9801527Z  165 │     return JSON.stringify(
2026-10-24T14:29:51.9801692Z  166 │       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-24T14:29:51.9801757Z  167 │         const record =
2026-10-24T14:29:51.9801837Z  168 │           token.type === "context"
2026-10-24T14:29:51.9802001Z  169 │             ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-24T14:29:51.9802103Z  170 │             : undefined;
2026-10-24T14:29:51.9802211Z  171 │         const presentation = contextChipPresentation(
2026-10-24T14:29:51.9802371Z  172 │           token.type === "context" ? token.kind : token.type,
2026-10-24T14:29:51.9802493Z  173 │           record,
2026-10-24T14:29:51.9802553Z  174 │         );
2026-10-24T14:29:51.9802638Z  175 │         const icon = contextChipIcon(
2026-10-24T14:29:51.9802707Z  176 │           presentation,
2026-10-24T14:29:51.9802849Z  177 │           token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-24T14:29:51.9802910Z  178 │         );
2026-10-24T14:29:51.9802971Z  179 │         return {
2026-10-24T14:29:51.9803042Z  180 │           type: token.type,
2026-10-24T14:29:51.9803117Z  181 │           source: token.source,
2026-10-24T14:29:51.9803190Z  182 │           start: token.start,
2026-10-24T14:29:51.9803255Z  183 │           end: token.end,
2026-10-24T14:29:51.9803405Z  184 │           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-24T14:29:51.9803469Z  185 │           label:
2026-10-24T14:29:51.9803553Z  186 │             token.type === "skill"
2026-10-24T14:29:51.9803661Z  187 │               ? (skillLabels.get(token.value) ?? token.value)
2026-10-24T14:29:51.9803746Z  188 │               : token.type === "context"
2026-10-24T14:29:51.9803981Z  189 │                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}`
2026-10-24T14:29:51.9804064Z  190 │                 : basename(token.value),
2026-10-24T14:29:51.9804204Z  191 │           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-24T14:29:51.9804297Z  192 │           iconUri: contextChipIconUri(icon),
2026-10-24T14:29:51.9804387Z  193 │           tintsIcon: icon.kind === "chip",
2026-10-24T14:29:51.9804446Z  194 │         };
2026-10-24T14:29:51.9804502Z  195 │       }),
2026-10-24T14:29:51.9804558Z  196 │     );
2026-10-24T14:29:51.9804696Z  197 │   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-24T14:29:51.9804855Z      ·      ───────────────────────────────┬───────────────────────────────
2026-10-24T14:29:51.9805055Z      ·                                     ╰── This dependency list is missing values used by the callback
2026-10-24T14:29:51.9805196Z  198 │   // Every render resolves against the snapshot history, so a render whose
2026-10-24T14:29:51.9805247Z      ╰────
2026-10-24T14:29:51.9805453Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T14:29:51.9805760Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9805762Z
2026-10-24T14:29:51.9805954Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-24T14:29:51.9806098Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5]
2026-10-24T14:29:51.9806229Z  251 │       mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-24T14:29:51.9806331Z  252 │       nativeEventSnapshotsRef.current.push({
2026-10-24T14:29:51.9806421Z      ·       ───────────┬───────────
2026-10-24T14:29:51.9806874Z      ·                  ╰── 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
2026-10-24T14:29:51.9806966Z  253 │         eventCount: acknowledgedEventCount,
2026-10-24T14:29:51.9807027Z  254 │         value,
2026-10-24T14:29:51.9807104Z  255 │         selection: nextSelection,
2026-10-24T14:29:51.9807216Z  256 │       });
2026-10-24T14:29:51.9807369Z  257 │       return acknowledgedEventCount;
2026-10-24T14:29:51.9807426Z  258 │     },
2026-10-24T14:29:51.9807481Z  259 │     [],
2026-10-24T14:29:51.9807549Z      ·     ─┬
2026-10-24T14:29:51.9807729Z      ·      ╰── This dependency list is missing values used by the callback
2026-10-24T14:29:51.9807783Z  260 │   );
2026-10-24T14:29:51.9807833Z      ╰────
2026-10-24T14:29:51.9808037Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T14:29:51.9808343Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9808346Z
2026-10-24T14:29:51.9808596Z   ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used.
2026-10-24T14:29:51.9808709Z     ╭─[apps/web/src/lib/terminalContext.ts:56:10]
2026-10-24T14:29:51.9808762Z  55 │
2026-10-24T14:29:51.9808863Z  56 │ function normalizeTerminalContextSelection(
2026-10-24T14:29:51.9808973Z     ·          ────────────────┬────────────────
2026-10-24T14:29:51.9809160Z     ·                          ╰── 'normalizeTerminalContextSelection' is declared here
2026-10-24T14:29:51.9809248Z  57 │   selection: TerminalContextSelection,
2026-10-24T14:29:51.9809300Z     ╰────
2026-10-24T14:29:51.9809406Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9809409Z
2026-10-24T14:29:51.9809607Z   ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T14:29:51.9809751Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6]
2026-10-24T14:29:51.9809917Z  227 │     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-24T14:29:51.9810007Z  228 │       nativeEventSnapshotsRef.current,
2026-10-24T14:29:51.9810096Z      ·       ───────────┬───────────
2026-10-24T14:29:51.9810548Z      ·                  ╰── 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
2026-10-24T14:29:51.9810622Z  229 │       mostRecentEventCount,
2026-10-24T14:29:51.9810678Z  230 │     );
2026-10-24T14:29:51.9810800Z  231 │   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-24T14:29:51.9811060Z      ·      ──────────────────────────┬──────────────────────────
2026-10-24T14:29:51.9811385Z      ·                                ╰── This dependency list is missing values used by the callback
2026-10-24T14:29:51.9811471Z  232 │   const assumedValue = props.value;
2026-10-24T14:29:51.9811523Z      ╰────
2026-10-24T14:29:51.9811688Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T14:29:51.9811995Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9811998Z
2026-10-24T14:29:51.9812250Z   ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T14:29:51.9812386Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7]
2026-10-24T14:29:51.9812533Z  238 │     nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-24T14:29:51.9812626Z  239 │       nativeEventSnapshotsRef.current,
2026-10-24T14:29:51.9812718Z      ·       ───────────┬───────────
2026-10-24T14:29:51.9813165Z      ·                  ╰── 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
2026-10-24T14:29:51.9813240Z  240 │       controlledEventCount,
2026-10-24T14:29:51.9813304Z  241 │       assumedValue,
2026-10-24T14:29:51.9813360Z  242 │     );
2026-10-24T14:29:51.9813514Z  243 │   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-24T14:29:51.9813648Z      ·                                                         ───────────┬──────────
2026-10-24T14:29:51.9813860Z      ·                                                                    ╰── Unnecessary dependency `controlledDocumentJson`
2026-10-24T14:29:51.9813954Z  244 │   const acceptNativeEvent = useCallback(
2026-10-24T14:29:51.9814006Z      ╰────
2026-10-24T14:29:51.9814424Z   help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9814728Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9814730Z
2026-10-24T14:29:51.9814875Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9815015Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
2026-10-24T14:29:51.9815143Z  163 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T14:29:51.9815251Z  164 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T14:29:51.9815368Z      ·                             ─────────────┬────────────
2026-10-24T14:29:51.9815534Z      ·                                          ╰── Cannot access ref value during render
2026-10-24T14:29:51.9815591Z  165 │     });
2026-10-24T14:29:51.9815640Z      ╰────
2026-10-24T14:29:51.9816098Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9816437Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9816473Z
2026-10-24T14:29:51.9816646Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9816781Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
2026-10-24T14:29:51.9816899Z  163 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T14:29:51.9817011Z  164 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T14:29:51.9817131Z      ·                             ─────────────┬────────────
2026-10-24T14:29:51.9817336Z      ·                                          ╰── Passing a ref to a function may read its value during render
2026-10-24T14:29:51.9817391Z  165 │     });
2026-10-24T14:29:51.9817444Z      ╰────
2026-10-24T14:29:51.9817908Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9818198Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9818200Z
2026-10-24T14:29:51.9818344Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9818478Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23]
2026-10-24T14:29:51.9818534Z  165 │     });
2026-10-24T14:29:51.9818624Z  166 │     confirmedTokensRef.current = tokens;
2026-10-24T14:29:51.9818750Z      ·     ─────────┬────────────┬───
2026-10-24T14:29:51.9818939Z      ·              │            ╰── Cannot update ref value during render
2026-10-24T14:29:51.9819058Z      ·              ╰── This value is a ref
2026-10-24T14:29:51.9819133Z  167 │     return JSON.stringify(
2026-10-24T14:29:51.9819183Z      ╰────
2026-10-24T14:29:51.9819637Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9819923Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9819925Z
2026-10-24T14:29:51.9820074Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9820211Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5]
2026-10-24T14:29:51.9820283Z  207 │     mostRecentEventCount,
2026-10-24T14:29:51.9820369Z  208 │     nativeEventSnapshotsRef.current,
2026-10-24T14:29:51.9820476Z      ·     ───────────────┬───────────────
2026-10-24T14:29:51.9820662Z      ·                    ╰── Passing a ref to a function may read its value during render
2026-10-24T14:29:51.9820717Z  209 │   );
2026-10-24T14:29:51.9820766Z      ╰────
2026-10-24T14:29:51.9821229Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9821566Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9821600Z
2026-10-24T14:29:51.9821775Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9821909Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5]
2026-10-24T14:29:51.9821979Z  213 │     mostRecentEventCount,
2026-10-24T14:29:51.9822065Z  214 │     nativeEventSnapshotsRef.current,
2026-10-24T14:29:51.9822212Z      ·     ───────────────┬───────────────
2026-10-24T14:29:51.9822398Z      ·                    ╰── Passing a ref to a function may read its value during render
2026-10-24T14:29:51.9822452Z  215 │   );
2026-10-24T14:29:51.9822503Z      ╰────
2026-10-24T14:29:51.9822963Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9823254Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9823256Z
2026-10-24T14:29:51.9823439Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-24T14:29:51.9823574Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6]
2026-10-24T14:29:51.9823695Z  163 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T14:29:51.9823806Z  164 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T14:29:51.9823916Z      ·                             ─────────┬────────
2026-10-24T14:29:51.9824374Z      ·                                      ╰── 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
2026-10-24T14:29:51.9824435Z  165 │     });
2026-10-24T14:29:51.9824526Z  166 │     confirmedTokensRef.current = tokens;
2026-10-24T14:29:51.9824597Z  167 │     return JSON.stringify(
2026-10-24T14:29:51.9824757Z  168 │       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-24T14:29:51.9824827Z  169 │         const record =
2026-10-24T14:29:51.9824905Z  170 │           token.type === "context"
2026-10-24T14:29:51.9825069Z  171 │             ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-24T14:29:51.9825134Z  172 │             : undefined;
2026-10-24T14:29:51.9825246Z  173 │         const presentation = contextChipPresentation(
2026-10-24T14:29:51.9825357Z  174 │           token.type === "context" ? token.kind : token.type,
2026-10-24T14:29:51.9825423Z  175 │           record,
2026-10-24T14:29:51.9825480Z  176 │         );
2026-10-24T14:29:51.9825569Z  177 │         const icon = contextChipIcon(
2026-10-24T14:29:51.9825638Z  178 │           presentation,
2026-10-24T14:29:51.9825780Z  179 │           token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-24T14:29:51.9825837Z  180 │         );
2026-10-24T14:29:51.9825900Z  181 │         return {
2026-10-24T14:29:51.9825972Z  182 │           type: token.type,
2026-10-24T14:29:51.9826045Z  183 │           source: token.source,
2026-10-24T14:29:51.9826117Z  184 │           start: token.start,
2026-10-24T14:29:51.9826182Z  185 │           end: token.end,
2026-10-24T14:29:51.9826505Z  186 │           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-24T14:29:51.9826650Z  187 │           label:
2026-10-24T14:29:51.9826750Z  188 │             token.type === "skill"
2026-10-24T14:29:51.9826857Z  189 │               ? (skillLabels.get(token.value) ?? token.value)
2026-10-24T14:29:51.9826939Z  190 │               : token.type === "context"
2026-10-24T14:29:51.9827167Z  191 │                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}`
2026-10-24T14:29:51.9827249Z  192 │                 : basename(token.value),
2026-10-24T14:29:51.9827394Z  193 │           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-24T14:29:51.9827486Z  194 │           iconUri: contextChipIconUri(icon),
2026-10-24T14:29:51.9827570Z  195 │           tintsIcon: icon.kind === "chip",
2026-10-24T14:29:51.9827631Z  196 │         };
2026-10-24T14:29:51.9827689Z  197 │       }),
2026-10-24T14:29:51.9827742Z  198 │     );
2026-10-24T14:29:51.9827870Z  199 │   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-24T14:29:51.9828023Z      ·      ───────────────────────────────┬───────────────────────────────
2026-10-24T14:29:51.9828224Z      ·                                     ╰── This dependency list is missing values used by the callback
2026-10-24T14:29:51.9828365Z  200 │   // Every render resolves against the snapshot history, so a render whose
2026-10-24T14:29:51.9828415Z      ╰────
2026-10-24T14:29:51.9828620Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T14:29:51.9828936Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9828941Z
2026-10-24T14:29:51.9829126Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-24T14:29:51.9829262Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5]
2026-10-24T14:29:51.9829389Z  253 │       mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-24T14:29:51.9829489Z  254 │       nativeEventSnapshotsRef.current.push({
2026-10-24T14:29:51.9829579Z      ·       ───────────┬───────────
2026-10-24T14:29:51.9830028Z      ·                  ╰── 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
2026-10-24T14:29:51.9830121Z  255 │         eventCount: acknowledgedEventCount,
2026-10-24T14:29:51.9830186Z  256 │         value,
2026-10-24T14:29:51.9830264Z  257 │         selection: nextSelection,
2026-10-24T14:29:51.9830319Z  258 │       });
2026-10-24T14:29:51.9830400Z  259 │       return acknowledgedEventCount;
2026-10-24T14:29:51.9830453Z  260 │     },
2026-10-24T14:29:51.9830507Z  261 │     [],
2026-10-24T14:29:51.9830575Z      ·     ─┬
2026-10-24T14:29:51.9830752Z      ·      ╰── This dependency list is missing values used by the callback
2026-10-24T14:29:51.9830806Z  262 │   );
2026-10-24T14:29:51.9830856Z      ╰────
2026-10-24T14:29:51.9831058Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T14:29:51.9831415Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9831453Z
2026-10-24T14:29:51.9831744Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9831886Z      ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-24T14:29:51.9831938Z  150 │
2026-10-24T14:29:51.9832000Z  151 │   useEffect(() => {
2026-10-24T14:29:51.9832101Z      ·   ────┬────
2026-10-24T14:29:51.9832243Z      ·       ╰── This is the containing effect
2026-10-24T14:29:51.9832326Z  152 │     if (!controlledSelectedPath) {
2026-10-24T14:29:51.9832385Z  153 │       return;
2026-10-24T14:29:51.9832440Z  154 │     }
2026-10-24T14:29:51.9832521Z  155 │     setExpandedPaths((current) => {
2026-10-24T14:29:51.9832609Z      ·     ────────┬───────
2026-10-24T14:29:51.9832780Z      ·             ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9832905Z  156 │       const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-24T14:29:51.9832956Z      ╰────
2026-10-24T14:29:51.9833553Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9833872Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9833875Z
2026-10-24T14:29:51.9834134Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9834287Z      ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7]
2026-10-24T14:29:51.9834426Z  355 │   }, [cancelledIncomingShareId, navigation, props.incomingShareId]);
2026-10-24T14:29:51.9834491Z  356 │   useEffect(() => {
2026-10-24T14:29:51.9834560Z      ·   ────┬────
2026-10-24T14:29:51.9834689Z      ·       ╰── This is the containing effect
2026-10-24T14:29:51.9834777Z  357 │     if (!isReturningToProjectPicker) {
2026-10-24T14:29:51.9834836Z  358 │       return;
2026-10-24T14:29:51.9834888Z  359 │     }
2026-10-24T14:29:51.9835007Z  360 │     if (requestedInitialProjectAvailable) {
2026-10-24T14:29:51.9835098Z  361 │       setIsReturningToProjectPicker(false);
2026-10-24T14:29:51.9835253Z      ·       ──────────────┬──────────────
2026-10-24T14:29:51.9835488Z      ·                     ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9835546Z  362 │       return;
2026-10-24T14:29:51.9835596Z      ╰────
2026-10-24T14:29:51.9836183Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9836500Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9836502Z
2026-10-24T14:29:51.9836758Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9836913Z      ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9]
2026-10-24T14:29:51.9836965Z  447 │
2026-10-24T14:29:51.9837030Z  448 │   useEffect(() => {
2026-10-24T14:29:51.9837099Z      ·   ────┬────
2026-10-24T14:29:51.9837227Z      ·       ╰── This is the containing effect
2026-10-24T14:29:51.9837328Z  449 │     if (props.pendingTaskId || props.draftId) {
2026-10-24T14:29:51.9837387Z  450 │       return;
2026-10-24T14:29:51.9837439Z  451 │     }
2026-10-24T14:29:51.9837580Z  452 │     if (lastInitialProjectRefRef.current !== props.initialProjectRef) {
2026-10-24T14:29:51.9837711Z  453 │       lastInitialProjectRefRef.current = props.initialProjectRef;
2026-10-24T14:29:51.9837824Z  454 │       appliedInitialProjectKeyRef.current = null;
2026-10-24T14:29:51.9837880Z  455 │     }
2026-10-24T14:29:51.9838022Z  456 │     const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-24T14:29:51.9838150Z  457 │     const initialProjectId = props.initialProjectRef?.projectId;
2026-10-24T14:29:51.9838254Z  458 │     if (initialEnvironmentId && initialProjectId) {
2026-10-24T14:29:51.9838325Z  459 │       const directProject =
2026-10-24T14:29:51.9838392Z  460 │         projects.find(
2026-10-24T14:29:51.9838456Z  461 │           (project) =>
2026-10-24T14:29:51.9838629Z  462 │             project.environmentId === initialEnvironmentId && project.id === initialProjectId,
2026-10-24T14:29:51.9838690Z  463 │         ) ?? null;
2026-10-24T14:29:51.9838741Z  464 │
2026-10-24T14:29:51.9838810Z  465 │       if (directProject) {
2026-10-24T14:29:51.9838947Z  466 │         // Apply the route's project once. Re-applying on every change would
2026-10-24T14:29:51.9839091Z  467 │         // instantly revert environment/project switches made in the picker.
2026-10-24T14:29:51.9839255Z  468 │         const directProjectKey = `${directProject.environmentId}:${directProject.id}`;
2026-10-24T14:29:51.9839388Z  469 │         if (appliedInitialProjectKeyRef.current === directProjectKey) {
2026-10-24T14:29:51.9839450Z  470 │           return;
2026-10-24T14:29:51.9839506Z  471 │         }
2026-10-24T14:29:51.9839601Z  472 │         if (props.initialProjectRef?.branch) {
2026-10-24T14:29:51.9839662Z  473 │           if (
2026-10-24T14:29:51.9839803Z  474 │             selectedProject?.environmentId !== directProject.environmentId ||
2026-10-24T14:29:51.9839901Z  475 │             selectedProject.id !== directProject.id
2026-10-24T14:29:51.9839959Z  476 │           ) {
2026-10-24T14:29:51.9840045Z  477 │             setProject(directProject);
2026-10-24T14:29:51.9840159Z  478 │             return;
2026-10-24T14:29:51.9840288Z  479 │           }
2026-10-24T14:29:51.9840372Z  480 │           if (!flow.draftKey) return;
2026-10-24T14:29:51.9840510Z  481 │           // The route completes checkout before mounting this composer. Local
2026-10-24T14:29:51.9840651Z  482 │           // mode reuses an existing worktree; worktree mode would create another.
2026-10-24T14:29:51.9840764Z  483 │           updateComposerDraftSettings(flow.draftKey, {
2026-10-24T14:29:51.9840842Z  484 │             workspaceSelection: {
2026-10-24T14:29:51.9840912Z  485 │               mode: "local",
2026-10-24T14:29:51.9841014Z  486 │               branch: props.initialProjectRef.branch,
2026-10-24T14:29:51.9841152Z  487 │               worktreePath: props.initialProjectRef.worktreePath ?? null,
2026-10-24T14:29:51.9841234Z  488 │               startFromOrigin: false,
2026-10-24T14:29:51.9841300Z  489 │             },
2026-10-24T14:29:51.9841360Z  490 │           });
2026-10-24T14:29:51.9841417Z  491 │         }
2026-10-24T14:29:51.9841544Z  492 │         appliedInitialProjectKeyRef.current = directProjectKey;
2026-10-24T14:29:51.9841602Z  493 │         if (
2026-10-24T14:29:51.9841741Z  494 │           selectedProject?.environmentId === directProject.environmentId &&
2026-10-24T14:29:51.9841837Z  495 │           selectedProject.id === directProject.id
2026-10-24T14:29:51.9841894Z  496 │         ) {
2026-10-24T14:29:51.9841956Z  497 │           return;
2026-10-24T14:29:51.9842010Z  498 │         }
2026-10-24T14:29:51.9842121Z  499 │         setProject(directProject);
2026-10-24T14:29:51.9842184Z  500 │         return;
2026-10-24T14:29:51.9842236Z  501 │       }
2026-10-24T14:29:51.9842288Z  502 │
2026-10-24T14:29:51.9842367Z  503 │       if (projects.length > 0) {
2026-10-24T14:29:51.9842469Z  504 │         setIsReturningToProjectPicker(true);
2026-10-24T14:29:51.9842578Z      ·         ──────────────┬──────────────
2026-10-24T14:29:51.9842761Z      ·                       ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9842815Z  505 │       }
2026-10-24T14:29:51.9842866Z      ╰────
2026-10-24T14:29:51.9843460Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9843783Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9843786Z
2026-10-24T14:29:51.9844048Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9844205Z      ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5]
2026-10-24T14:29:51.9844258Z  545 │
2026-10-24T14:29:51.9844321Z  546 │   useEffect(() => {
2026-10-24T14:29:51.9844393Z      ·   ────┬────
2026-10-24T14:29:51.9844525Z      ·       ╰── This is the containing effect
2026-10-24T14:29:51.9844620Z  547 │     const shareId = props.incomingShareId;
2026-10-24T14:29:51.9844701Z  548 │     const draftKey = flow.draftKey;
2026-10-24T14:29:51.9844802Z  549 │     const destinationProject = selectedProject;
2026-10-24T14:29:51.9844944Z  550 │     const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-24T14:29:51.9845127Z  551 │     const initialProjectId = props.initialProjectRef?.projectId;
2026-10-24T14:29:51.9845283Z  552 │     const selectedProjectMatchesRoute =
2026-10-24T14:29:51.9845361Z  553 │       !initialEnvironmentId ||
2026-10-24T14:29:51.9845432Z  554 │       !initialProjectId ||
2026-10-24T14:29:51.9845565Z  555 │       (destinationProject?.environmentId === initialEnvironmentId &&
2026-10-24T14:29:51.9845669Z  556 │         destinationProject.id === initialProjectId);
2026-10-24T14:29:51.9845728Z  557 │     if (
2026-10-24T14:29:51.9845792Z  558 │       !shareId ||
2026-10-24T14:29:51.9845855Z  559 │       !draftKey ||
2026-10-24T14:29:51.9845928Z  560 │       !destinationProject ||
2026-10-24T14:29:51.9846014Z  561 │       !selectedProjectMatchesRoute ||
2026-10-24T14:29:51.9846105Z  562 │       cancelledIncomingShareId === shareId
2026-10-24T14:29:51.9846159Z  563 │     ) {
2026-10-24T14:29:51.9846224Z  564 │       return;
2026-10-24T14:29:51.9846280Z  565 │     }
2026-10-24T14:29:51.9846377Z  566 │     const importKey = `${shareId}:${draftKey}`;
2026-10-24T14:29:51.9846431Z  567 │     if (
2026-10-24T14:29:51.9846544Z  568 │       startedShareImportKeyRef.current === importKey ||
2026-10-24T14:29:51.9846654Z  569 │       cancellingShareImportKeyRef.current === importKey
2026-10-24T14:29:51.9846711Z  570 │     ) {
2026-10-24T14:29:51.9846768Z  571 │       return;
2026-10-24T14:29:51.9846823Z  572 │     }
2026-10-24T14:29:51.9846876Z  573 │
2026-10-24T14:29:51.9846944Z  574 │     if (!incomingShare) {
2026-10-24T14:29:51.9847139Z  575 │       if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
2026-10-24T14:29:51.9847270Z  576 │         alertedUnavailableIncomingShareIdRef.current = shareId;
2026-10-24T14:29:51.9847337Z  577 │         Dialog.alert(
2026-10-24T14:29:51.9847427Z  578 │           "Shared content unavailable",
2026-10-24T14:29:51.9847604Z  579 │           "The shared content is no longer in the inbox. You can continue editing this task draft.",
2026-10-24T14:29:51.9847664Z  580 │         );
2026-10-24T14:29:51.9847721Z  581 │       }
2026-10-24T14:29:51.9847779Z  582 │       return;
2026-10-24T14:29:51.9847832Z  583 │     }
2026-10-24T14:29:51.9847884Z  584 │
2026-10-24T14:29:51.9847940Z  585 │     if (
2026-10-24T14:29:51.9848100Z  586 │       incomingShare.attachments.some((attachment) => attachment.type === "file") &&
2026-10-24T14:29:51.9848201Z  587 │       selectedEnvironmentServerConfig === null
2026-10-24T14:29:51.9848255Z  588 │     ) {
2026-10-24T14:29:51.9848315Z  589 │       return;
2026-10-24T14:29:51.9848366Z  590 │     }
2026-10-24T14:29:51.9848418Z  591 │
2026-10-24T14:29:51.9848564Z  592 │     if (alertedUnavailableIncomingShareIdRef.current === shareId) {
2026-10-24T14:29:51.9848687Z  593 │       alertedUnavailableIncomingShareIdRef.current = null;
2026-10-24T14:29:51.9848739Z  594 │     }
2026-10-24T14:29:51.9848881Z  595 │     startedShareImportKeyRef.current = importKey;
2026-10-24T14:29:51.9848987Z  596 │     const draftBackup =
2026-10-24T14:29:51.9849175Z  597 │       shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
2026-10-24T14:29:51.9849311Z  598 │     shareImportDraftBackupRef.current.set(importKey, draftBackup);
2026-10-24T14:29:51.9849402Z  599 │     const importToken = Symbol(importKey);
2026-10-24T14:29:51.9849481Z  600 │     let didReserveShare = false;
2026-10-24T14:29:51.9849558Z  601 │     let didConsumeShare = false;
2026-10-24T14:29:51.9849635Z  602 │     let needsDraftRestore = false;
2026-10-24T14:29:51.9849748Z  603 │     activeShareImportTokenRef.current = importToken;
2026-10-24T14:29:51.9849889Z  604 │     setImportingShareKey(importKey);
2026-10-24T14:29:51.9850061Z      ·     ──────────┬─────────
2026-10-24T14:29:51.9850259Z      ·               ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9850327Z  605 │     void (async () => {
2026-10-24T14:29:51.9850380Z      ╰────
2026-10-24T14:29:51.9850975Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9851299Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9851307Z
2026-10-24T14:29:51.9851512Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9851665Z      ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5]
2026-10-24T14:29:51.9851740Z  523 │     props.initialProjectRef,
2026-10-24T14:29:51.9851812Z  524 │     props.incomingShareId,
2026-10-24T14:29:51.9851899Z      ·     ──────────┬──────────
2026-10-24T14:29:51.9852102Z      ·               ╰── Unnecessary dependency `props.incomingShareId`
2026-10-24T14:29:51.9852173Z  525 │     props.pendingTaskId,
2026-10-24T14:29:51.9852224Z      ╰────
2026-10-24T14:29:51.9852519Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9852838Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9852845Z
2026-10-24T14:29:51.9853061Z   ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T14:29:51.9853215Z      ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5]
2026-10-24T14:29:51.9853331Z  542 │     loadedBranchesProjectKeyRef.current = projectKey;
2026-10-24T14:29:51.9853399Z  543 │     flow.loadBranches();
2026-10-24T14:29:51.9853469Z      ·     ──┬─
2026-10-24T14:29:51.9853597Z      ·       ╰── Missing dependency `flow`
2026-10-24T14:29:51.9853691Z  544 │   }, [flow.loadBranches, selectedProject]);
2026-10-24T14:29:51.9853783Z      ·       ────────┬────────
2026-10-24T14:29:51.9853989Z      ·               ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead
2026-10-24T14:29:51.9854042Z  545 │
2026-10-24T14:29:51.9854092Z      ╰────
2026-10-24T14:29:51.9854517Z   help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9854829Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9854832Z
2026-10-24T14:29:51.9855032Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9855235Z      ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
2026-10-24T14:29:51.9855360Z  765 │     flow.draftKey,
2026-10-24T14:29:51.9855438Z  766 │     hasImportedIncomingShare,
2026-10-24T14:29:51.9855531Z      ·     ────────────┬───────────
2026-10-24T14:29:51.9855708Z      ·                 ╰── Unnecessary dependency `hasImportedIncomingShare`
2026-10-24T14:29:51.9855772Z  767 │     incomingShare,
2026-10-24T14:29:51.9855853Z  768 │     isIncomingShareInboxLoading,
2026-10-24T14:29:51.9855950Z      ·     ─────────────┬─────────────
2026-10-24T14:29:51.9856136Z      ·                  ╰── Unnecessary dependency `isIncomingShareInboxLoading`
2026-10-24T14:29:51.9856215Z  769 │     isIncomingShareUnavailable,
2026-10-24T14:29:51.9856288Z  770 │     props.incomingShareId,
2026-10-24T14:29:51.9856391Z  771 │     props.initialProjectRef?.environmentId,
2026-10-24T14:29:51.9856483Z  772 │     props.initialProjectRef?.projectId,
2026-10-24T14:29:51.9856557Z  773 │     releaseShareReservation,
2026-10-24T14:29:51.9856621Z  774 │     reserveShare,
2026-10-24T14:29:51.9856707Z  775 │     selectedEnvironmentServerConfig,
2026-10-24T14:29:51.9856775Z  776 │     selectedProject,
2026-10-24T14:29:51.9856843Z  777 │     shareImportAttempt,
2026-10-24T14:29:51.9856929Z      ·     ─────────┬────────
2026-10-24T14:29:51.9857096Z      ·              ╰── Unnecessary dependency `shareImportAttempt`
2026-10-24T14:29:51.9857152Z  778 │   ]);
2026-10-24T14:29:51.9857201Z      ╰────
2026-10-24T14:29:51.9857496Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9857813Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9857819Z
2026-10-24T14:29:51.9858104Z   ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:51.9858253Z        ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12380:7]
2026-10-24T14:29:51.9858308Z  12379 │
2026-10-24T14:29:51.9858453Z  12380 │ const layerUnavailable: Layer.Layer<OrchestratorV2> = Layer.succeed(
2026-10-24T14:29:51.9858540Z        ·       ────────┬───────
2026-10-24T14:29:51.9858693Z        ·               ╰── 'layerUnavailable' is declared here
2026-10-24T14:29:51.9858760Z  12381 │   OrchestratorV2,
2026-10-24T14:29:51.9858813Z        ╰────
2026-10-24T14:29:51.9858975Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9859015Z
2026-10-24T14:29:51.9859234Z   ⚠ react(capitalized-calls): Capitalized function called without JSX
2026-10-24T14:29:51.9859351Z    ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15]
2026-10-24T14:29:51.9859409Z  7 │     () =>
2026-10-24T14:29:51.9859474Z  8 │       Gesture.Hover()
2026-10-24T14:29:51.9859553Z    ·               ──┬──
2026-10-24T14:29:51.9859687Z    ·                 ╰── `Hover` may be a component
2026-10-24T14:29:51.9859762Z  9 │         .manualActivation(true)
2026-10-24T14:29:51.9859814Z    ╰────
2026-10-24T14:29:51.9860096Z   help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
2026-10-24T14:29:51.9860554Z   note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T14:29:51.9860559Z
2026-10-24T14:29:51.9861035Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:51.9861212Z      ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7]
2026-10-24T14:29:51.9861316Z  565 │           let afterSequence = created[0]!.sequence;
2026-10-24T14:29:51.9861517Z  566 │ ╭─▶       for (let index = 1; index <= 32; index += 1) {
2026-10-24T14:29:51.9861623Z  567 │ │           const nextEvent = {
2026-10-24T14:29:51.9861786Z  568 │ │             id: EventId.make(`event:foundation-stream-race:${index}`),
2026-10-24T14:29:51.9861920Z  569 │ │             type: "thread.metadata-updated" as const,
2026-10-24T14:29:51.9862013Z  570 │ │             threadId,
2026-10-24T14:29:51.9862151Z  571 │ │             providerInstanceId,
2026-10-24T14:29:51.9862253Z  572 │ │             occurredAt: now,
2026-10-24T14:29:51.9862405Z  573 │ │             payload: { ...thread, title: `Race update ${index}` },
2026-10-24T14:29:51.9862535Z  574 │ │           } satisfies OrchestrationV2DomainEvent;
2026-10-24T14:29:51.9862650Z  575 │ │           const reader = yield* eventSink
2026-10-24T14:29:51.9862778Z  576 │ │             .stream({ threadId, afterSequence })
2026-10-24T14:29:51.9862916Z  577 │ │             .pipe(Stream.runHead, Effect.forkChild);
2026-10-24T14:29:51.9863023Z  578 │ │           yield* Effect.yieldNow;
2026-10-24T14:29:51.9863188Z  579 │ │           const written = yield* eventSink.write({ events: [nextEvent] });
2026-10-24T14:29:51.9863320Z  580 │ │           const received = yield* Fiber.join(reader);
2026-10-24T14:29:51.9863437Z  581 │ │           if (Option.isNone(received)) {
2026-10-24T14:29:51.9863644Z  582 │ │             return yield* Effect.die("The event stream ended before delivering the live event.");
2026-10-24T14:29:51.9863723Z  583 │ │           }
2026-10-24T14:29:51.9863945Z  584 │ │           assert.equal(received.value.sequence, written[0]?.sequence);
2026-10-24T14:29:51.9864158Z  585 │ │           assert.equal(received.value.event.id, nextEvent.id);
2026-10-24T14:29:51.9864291Z  586 │ │           afterSequence = received.value.sequence;
2026-10-24T14:29:51.9864426Z  587 │ ╰─▶       }
2026-10-24T14:29:51.9864485Z  588 │         }),
2026-10-24T14:29:51.9864538Z      ╰────
2026-10-24T14:29:51.9864541Z
2026-10-24T14:29:51.9865013Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:51.9865189Z       ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9]
2026-10-24T14:29:51.9865273Z  2326 │             let settled = false;
2026-10-24T14:29:51.9865440Z  2327 │ ╭─▶         while (!settled) {
2026-10-24T14:29:51.9865602Z  2328 │ │             settled = (yield* outbox.listByCommandId(commandId)).every(
2026-10-24T14:29:51.9865737Z  2329 │ │               (effect) => effect.status === "succeeded",
2026-10-24T14:29:51.9865821Z  2330 │ │             );
2026-10-24T14:29:51.9865951Z  2331 │ │             if (!settled) yield* Effect.yieldNow;
2026-10-24T14:29:51.9866089Z  2332 │ ╰─▶         }
2026-10-24T14:29:51.9866208Z  2333 │           }).pipe(Effect.provide(layerWorker), Effect.scoped);
2026-10-24T14:29:51.9866299Z       ╰────
2026-10-24T14:29:51.9866303Z
2026-10-24T14:29:51.9866641Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9866799Z     ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
2026-10-24T14:29:51.9866851Z  55 │
2026-10-24T14:29:51.9866915Z  56 │   useEffect(() => {
2026-10-24T14:29:51.9866989Z     ·   ────┬────
2026-10-24T14:29:51.9867119Z     ·       ╰── This is the containing effect
2026-10-24T14:29:51.9867190Z  57 │     setDecodedSize(null);
2026-10-24T14:29:51.9867268Z     ·     ───────┬──────
2026-10-24T14:29:51.9867445Z     ·            ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9867515Z  58 │   }, [props.sourceKey]);
2026-10-24T14:29:51.9867567Z     ╰────
2026-10-24T14:29:51.9868178Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9868509Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9868511Z
2026-10-24T14:29:51.9868772Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9868926Z     ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
2026-10-24T14:29:51.9868978Z  59 │
2026-10-24T14:29:51.9869043Z  60 │   useEffect(() => {
2026-10-24T14:29:51.9869179Z     ·   ────┬────
2026-10-24T14:29:51.9869398Z     ·       ╰── This is the containing effect
2026-10-24T14:29:51.9869474Z  61 │     setFailedUri(null);
2026-10-24T14:29:51.9869574Z     ·     ──────┬─────
2026-10-24T14:29:51.9869840Z     ·           ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9869947Z  62 │   }, [props.uri]);
2026-10-24T14:29:51.9870030Z     ╰────
2026-10-24T14:29:51.9870646Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9870979Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9870985Z
2026-10-24T14:29:51.9871203Z   ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-24T14:29:51.9871356Z    ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
2026-10-24T14:29:51.9871483Z  6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg";
2026-10-24T14:29:51.9871662Z  7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
2026-10-24T14:29:51.9871753Z    ·          ────────┬────────
2026-10-24T14:29:51.9871904Z    ·                  ╰── 'ActivityIndicator' is imported here
2026-10-24T14:29:51.9871957Z  8 │
2026-10-24T14:29:51.9872008Z    ╰────
2026-10-24T14:29:51.9872150Z   help: Consider removing this import.
2026-10-24T14:29:51.9872155Z
2026-10-24T14:29:51.9872359Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9872511Z     ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
2026-10-24T14:29:51.9872578Z  57 │     setDecodedSize(null);
2026-10-24T14:29:51.9872648Z  58 │   }, [props.sourceKey]);
2026-10-24T14:29:51.9872731Z     ·       ───────┬───────
2026-10-24T14:29:51.9872887Z     ·              ╰── Unnecessary dependency `props.sourceKey`
2026-10-24T14:29:51.9872937Z  59 │
2026-10-24T14:29:51.9872988Z     ╰────
2026-10-24T14:29:51.9873287Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9873608Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9873614Z
2026-10-24T14:29:51.9873818Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9873966Z     ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
2026-10-24T14:29:51.9874035Z  61 │     setFailedUri(null);
2026-10-24T14:29:51.9874100Z  62 │   }, [props.uri]);
2026-10-24T14:29:51.9874174Z     ·       ────┬────
2026-10-24T14:29:51.9874315Z     ·           ╰── Unnecessary dependency `props.uri`
2026-10-24T14:29:51.9874368Z  63 │
2026-10-24T14:29:51.9874418Z     ╰────
2026-10-24T14:29:51.9874772Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9875153Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9875155Z
2026-10-24T14:29:51.9875364Z   ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used.
2026-10-24T14:29:51.9875527Z     ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13]
2026-10-24T14:29:51.9875616Z  24 │ import * as Schema from "effect/Schema";
2026-10-24T14:29:51.9875734Z  25 │ import * as HostProcess from "@t3tools/shared/HostProcess";
2026-10-24T14:29:51.9875818Z     ·             ─────┬─────
2026-10-24T14:29:51.9875960Z     ·                  ╰── 'HostProcess' is imported here
2026-10-24T14:29:51.9876019Z  26 │
2026-10-24T14:29:51.9876070Z     ╰────
2026-10-24T14:29:51.9876168Z   help: Consider removing this import.
2026-10-24T14:29:51.9876171Z
2026-10-24T14:29:51.9876446Z   ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:51.9876613Z      ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11]
2026-10-24T14:29:51.9876696Z  123 │     const path = yield* Path.Path;
2026-10-24T14:29:51.9876813Z  124 │     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-24T14:29:51.9876896Z      ·           ──────┬─────
2026-10-24T14:29:51.9877038Z      ·                 ╰── 'serverConfig' is declared here
2026-10-24T14:29:51.9877187Z  125 │     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-24T14:29:51.9877240Z      ╰────
2026-10-24T14:29:51.9877344Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9877347Z
2026-10-24T14:29:51.9877624Z   ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:51.9877790Z      ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11]
2026-10-24T14:29:51.9877904Z  124 │     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-24T14:29:51.9878046Z  125 │     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-24T14:29:51.9878131Z      ·           ───────┬──────
2026-10-24T14:29:51.9878278Z      ·                  ╰── 'serverSettings' is declared here
2026-10-24T14:29:51.9878420Z  126 │     const gitWorkflow = yield* GitWorkflowService.GitWorkflowService;
2026-10-24T14:29:51.9878475Z      ╰────
2026-10-24T14:29:51.9878577Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9878580Z
2026-10-24T14:29:51.9878767Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9878873Z      ╭─[packages/shared/src/qrCode.ts:458:44]
2026-10-24T14:29:51.9878939Z  457 │   ): Array<byte> {
2026-10-24T14:29:51.9879045Z  458 │     let result: Array<byte> = divisor.map((_) => 0);
2026-10-24T14:29:51.9879146Z      ·                                            ┬
2026-10-24T14:29:51.9879291Z      ·                                            ╰── '_' is declared here
2026-10-24T14:29:51.9879363Z  459 │     for (const b of data) {
2026-10-24T14:29:51.9879414Z      ╰────
2026-10-24T14:29:51.9879573Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9879608Z
2026-10-24T14:29:51.9879789Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9879911Z      ╭─[apps/mobile/src/native/StackHeader.tsx:185:9]
2026-10-24T14:29:51.9879976Z  184 │         "options",
2026-10-24T14:29:51.9880072Z  185 │         latestOptionFunctionsRef.current,
2026-10-24T14:29:51.9880182Z      ·         ────────────────┬───────────────
2026-10-24T14:29:51.9880377Z      ·                         ╰── Passing a ref to a function may read its value during render
2026-10-24T14:29:51.9880476Z  186 │         optionFunctionWrappersRef.current,
2026-10-24T14:29:51.9880527Z      ╰────
2026-10-24T14:29:51.9881005Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9881300Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9881303Z
2026-10-24T14:29:51.9881449Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9881570Z      ╭─[apps/mobile/src/native/StackHeader.tsx:186:9]
2026-10-24T14:29:51.9881664Z  185 │         latestOptionFunctionsRef.current,
2026-10-24T14:29:51.9881758Z  186 │         optionFunctionWrappersRef.current,
2026-10-24T14:29:51.9881871Z      ·         ────────────────┬────────────────
2026-10-24T14:29:51.9882083Z      ·                         ╰── Passing a ref to a function may read its value during render
2026-10-24T14:29:51.9882213Z  187 │       ) as NativeStackNavigationOptions)
2026-10-24T14:29:51.9882265Z      ╰────
2026-10-24T14:29:51.9882735Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9883027Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9883030Z
2026-10-24T14:29:51.9883175Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T14:29:51.9883329Z      ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27]
2026-10-24T14:29:51.9883388Z  493 │         >
2026-10-24T14:29:51.9883472Z  494 │           {props.children(close)}
2026-10-24T14:29:51.9883566Z      ·                           ──┬──
2026-10-24T14:29:51.9883725Z      ·                             ╰── Cannot access ref value during render
2026-10-24T14:29:51.9883802Z  495 │         </ReanimatedSwipeable>
2026-10-24T14:29:51.9883853Z      ╰────
2026-10-24T14:29:51.9884317Z   help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
2026-10-24T14:29:51.9884609Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T14:29:51.9884611Z
2026-10-24T14:29:51.9884926Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:51.9885124Z      ╭─[packages/provider-grok/src/server/adapter.ts:408:7]
2026-10-24T14:29:51.9885178Z  407 │
2026-10-24T14:29:51.9885249Z  408 │ const layer: Layer.Layer<
2026-10-24T14:29:51.9885320Z      ·       ──┬──
2026-10-24T14:29:51.9885443Z      ·         ╰── 'layer' is declared here
2026-10-24T14:29:51.9885533Z  409 │   ProviderAdapter.ProviderAdapterV2,
2026-10-24T14:29:51.9885585Z      ╰────
2026-10-24T14:29:51.9885690Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9885692Z
2026-10-24T14:29:51.9885949Z   ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used.
2026-10-24T14:29:51.9886111Z       ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10]
2026-10-24T14:29:51.9886169Z  1619 │
2026-10-24T14:29:51.9886385Z  1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean {
2026-10-24T14:29:51.9886503Z       ·          ──────────────────┬──────────────────
2026-10-24T14:29:51.9886706Z       ·                            ╰── 'promptResponseHasMissingXAiStopReason' is declared here
2026-10-24T14:29:51.9886784Z  1621 │   const meta = response._meta;
2026-10-24T14:29:51.9886837Z       ╰────
2026-10-24T14:29:51.9886939Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9886941Z
2026-10-24T14:29:51.9887200Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9887344Z       ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2146:5]
2026-10-24T14:29:51.9887403Z  2144 │   );
2026-10-24T14:29:51.9887470Z  2145 │   useEffect(() => {
2026-10-24T14:29:51.9887543Z       ·   ────┬────
2026-10-24T14:29:51.9887675Z       ·       ╰── This is the containing effect
2026-10-24T14:29:51.9887750Z  2146 │     setExpandedVideo(null);
2026-10-24T14:29:51.9887832Z       ·     ────────┬───────
2026-10-24T14:29:51.9888004Z       ·             ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9888077Z  2147 │     setExpandedFile(null);
2026-10-24T14:29:51.9888128Z       ╰────
2026-10-24T14:29:51.9888838Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9889234Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9889237Z
2026-10-24T14:29:51.9889495Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9889632Z       ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2647:9]
2026-10-24T14:29:51.9889771Z  2638 │   const stopFollowingEnd = useEffectEvent(() => setEndFollow(false));
2026-10-24T14:29:51.9889836Z  2639 │   useEffect(() => {
2026-10-24T14:29:51.9889909Z       ·   ────┬────
2026-10-24T14:29:51.9890046Z       ·       ╰── This is the containing effect
2026-10-24T14:29:51.9890177Z  2640 │     if (!jumpToMessageId || loadedListKey !== listMountKey) return;
2026-10-24T14:29:51.9890273Z  2641 │     const index = presentedFeed.findIndex(
2026-10-24T14:29:51.9890412Z  2642 │       (entry) => entry.type === "message" && entry.id === jumpToMessageId,
2026-10-24T14:29:51.9890470Z  2643 │     );
2026-10-24T14:29:51.9890543Z  2644 │     if (index === -1) {
2026-10-24T14:29:51.9890672Z  2645 │       const runId = messageFoldRunId(props.feed, jumpToMessageId);
2026-10-24T14:29:51.9890776Z  2646 │       if (runId && !expandedTurnIds.has(runId)) {
2026-10-24T14:29:51.9890870Z  2647 │         setInteractionState((current) => ({
2026-10-24T14:29:51.9890962Z       ·         ─────────┬─────────
2026-10-24T14:29:51.9891145Z       ·                  ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9891213Z  2648 │           ...current,
2026-10-24T14:29:51.9891266Z       ╰────
2026-10-24T14:29:51.9891866Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9892234Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9892237Z
2026-10-24T14:29:51.9892466Z   ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
2026-10-24T14:29:51.9892604Z     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10]
2026-10-24T14:29:51.9892747Z  65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
2026-10-24T14:29:51.9892887Z  66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
2026-10-24T14:29:51.9892986Z     ·          ───────────┬───────────
2026-10-24T14:29:51.9893153Z     ·                     ╰── 'isMarkdownFileLinkLabel' is imported here
2026-10-24T14:29:51.9893310Z  67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
2026-10-24T14:29:51.9893363Z     ╰────
2026-10-24T14:29:51.9893460Z   help: Consider removing this import.
2026-10-24T14:29:51.9893463Z
2026-10-24T14:29:51.9893672Z   ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
2026-10-24T14:29:51.9893857Z     ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3]
2026-10-24T14:29:51.9893975Z  91 │ import {
2026-10-24T14:29:51.9894039Z  92 │   createContext,
2026-10-24T14:29:51.9894115Z     ·   ──────┬──────
2026-10-24T14:29:51.9894252Z     ·         ╰── 'createContext' is imported here
2026-10-24T14:29:51.9894309Z  93 │   memo,
2026-10-24T14:29:51.9894360Z     ╰────
2026-10-24T14:29:51.9894459Z   help: Consider removing this import.
2026-10-24T14:29:51.9894461Z
2026-10-24T14:29:51.9894674Z   ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-24T14:29:51.9894809Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3]
2026-10-24T14:29:51.9894867Z  107 │ import {
2026-10-24T14:29:51.9894935Z  108 │   ActivityIndicator,
2026-10-24T14:29:51.9895017Z      ·   ────────┬────────
2026-10-24T14:29:51.9895170Z      ·           ╰── 'ActivityIndicator' is imported here
2026-10-24T14:29:51.9895230Z  109 │   Image,
2026-10-24T14:29:51.9895281Z      ╰────
2026-10-24T14:29:51.9895376Z   help: Consider removing this import.
2026-10-24T14:29:51.9895378Z
2026-10-24T14:29:51.9895580Z   ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
2026-10-24T14:29:51.9895712Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3]
2026-10-24T14:29:51.9895775Z  114 │   Pressable,
2026-10-24T14:29:51.9895837Z  115 │   ScrollView,
2026-10-24T14:29:51.9895910Z      ·   ─────┬────
2026-10-24T14:29:51.9896042Z      ·        ╰── 'ScrollView' is imported here
2026-10-24T14:29:51.9896105Z  116 │   StyleSheet,
2026-10-24T14:29:51.9896162Z      ╰────
2026-10-24T14:29:51.9896264Z   help: Consider removing this import.
2026-10-24T14:29:51.9896266Z
2026-10-24T14:29:51.9896466Z   ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
2026-10-24T14:29:51.9896601Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11]
2026-10-24T14:29:51.9896662Z  116 │   StyleSheet,
2026-10-24T14:29:51.9896730Z  117 │   Text as NativeText,
2026-10-24T14:29:51.9896810Z      ·           ─────┬────
2026-10-24T14:29:51.9896950Z      ·                ╰── 'NativeText' is imported here
2026-10-24T14:29:51.9897017Z  118 │   type ColorValue,
2026-10-24T14:29:51.9897068Z      ╰────
2026-10-24T14:29:51.9897163Z   help: Consider removing this import.
2026-10-24T14:29:51.9897166Z
2026-10-24T14:29:51.9897386Z   ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
2026-10-24T14:29:51.9897522Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10]
2026-10-24T14:29:51.9897661Z  139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
2026-10-24T14:29:51.9897789Z  140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
2026-10-24T14:29:51.9897879Z      ·          ─────────┬────────
2026-10-24T14:29:51.9898034Z      ·                   ╰── 'tryOpenExternalUrl' is imported here
2026-10-24T14:29:51.9898185Z  141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
2026-10-24T14:29:51.9898238Z      ╰────
2026-10-24T14:29:51.9898332Z   help: Consider removing this import.
2026-10-24T14:29:51.9898334Z
2026-10-24T14:29:51.9898609Z   ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
2026-10-24T14:29:51.9898816Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10]
2026-10-24T14:29:51.9898951Z  142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
2026-10-24T14:29:51.9899076Z  143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
2026-10-24T14:29:51.9899166Z      ·          ─────────┬─────────
2026-10-24T14:29:51.9899321Z      ·                   ╰── 'faviconUrlForOrigin' is imported here
2026-10-24T14:29:51.9899380Z  144 │ import {
2026-10-24T14:29:51.9899429Z      ╰────
2026-10-24T14:29:51.9899527Z   help: Consider removing this import.
2026-10-24T14:29:51.9899529Z
2026-10-24T14:29:51.9899750Z   ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
2026-10-24T14:29:51.9899885Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10]
2026-10-24T14:29:51.9900033Z  156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
2026-10-24T14:29:51.9900170Z  157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
2026-10-24T14:29:51.9900258Z      ·          ────────┬───────
2026-10-24T14:29:51.9900408Z      ·                  ╰── 'MediaVideoPlayer' is imported here
2026-10-24T14:29:51.9900547Z  158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
2026-10-24T14:29:51.9900598Z      ╰────
2026-10-24T14:29:51.9900693Z   help: Consider removing this import.
2026-10-24T14:29:51.9900696Z
2026-10-24T14:29:51.9900917Z   ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
2026-10-24T14:29:51.9901053Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3]
2026-10-24T14:29:51.9901139Z  160 │   attachmentVideoPreviewSource,
2026-10-24T14:29:51.9901210Z  161 │   mediaVideoPreviewUri,
2026-10-24T14:29:51.9901295Z      ·   ──────────┬─────────
2026-10-24T14:29:51.9901448Z      ·             ╰── 'mediaVideoPreviewUri' is imported here
2026-10-24T14:29:51.9901520Z  162 │   mediaVideoThumbnailKey,
2026-10-24T14:29:51.9901570Z      ╰────
2026-10-24T14:29:51.9901666Z   help: Consider removing this import.
2026-10-24T14:29:51.9901668Z
2026-10-24T14:29:51.9901893Z   ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
2026-10-24T14:29:51.9902027Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3]
2026-10-24T14:29:51.9902134Z  161 │   mediaVideoPreviewUri,
2026-10-24T14:29:51.9902215Z  162 │   mediaVideoThumbnailKey,
2026-10-24T14:29:51.9902302Z      ·   ───────────┬──────────
2026-10-24T14:29:51.9902462Z      ·              ╰── 'mediaVideoThumbnailKey' is imported here
2026-10-24T14:29:51.9902542Z  163 │   type MediaVideoPreviewSource,
2026-10-24T14:29:51.9902594Z      ╰────
2026-10-24T14:29:51.9902688Z   help: Consider removing this import.
2026-10-24T14:29:51.9902691Z
2026-10-24T14:29:51.9902907Z   ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
2026-10-24T14:29:51.9903041Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8]
2026-10-24T14:29:51.9903111Z  162 │   mediaVideoThumbnailKey,
2026-10-24T14:29:51.9903191Z  163 │   type MediaVideoPreviewSource,
2026-10-24T14:29:51.9903338Z      ·        ───────────┬───────────
2026-10-24T14:29:51.9903561Z      ·                   ╰── 'MediaVideoPreviewSource' is imported here
2026-10-24T14:29:51.9903650Z  164 │ } from "../../lib/videoPreviewSource";
2026-10-24T14:29:51.9903701Z      ╰────
2026-10-24T14:29:51.9903796Z   help: Consider removing this import.
2026-10-24T14:29:51.9903799Z
2026-10-24T14:29:51.9903999Z   ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used.
2026-10-24T14:29:51.9904131Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15]
2026-10-24T14:29:51.9904309Z  170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection";
2026-10-24T14:29:51.9904449Z  171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter";
2026-10-24T14:29:51.9904548Z      ·               ───────┬───────
2026-10-24T14:29:51.9904702Z      ·                      ╰── 'ReviewDiffTheme' is imported here
2026-10-24T14:29:51.9904762Z  172 │ import {
2026-10-24T14:29:51.9904812Z      ╰────
2026-10-24T14:29:51.9904908Z   help: Consider removing this import.
2026-10-24T14:29:51.9904910Z
2026-10-24T14:29:51.9905144Z   ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
2026-10-24T14:29:51.9905276Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3]
2026-10-24T14:29:51.9905333Z  185 │ import {
2026-10-24T14:29:51.9905410Z  186 │   resolveMarkdownFontSizes,
2026-10-24T14:29:51.9905502Z      ·   ────────────┬───────────
2026-10-24T14:29:51.9905669Z      ·               ╰── 'resolveMarkdownFontSizes' is imported here
2026-10-24T14:29:51.9905758Z  187 │   resolveNativeMarkdownTypography,
2026-10-24T14:29:51.9905809Z      ╰────
2026-10-24T14:29:51.9905905Z   help: Consider removing this import.
2026-10-24T14:29:51.9905907Z
2026-10-24T14:29:51.9906170Z   ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
2026-10-24T14:29:51.9906378Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:193:3]
2026-10-24T14:29:51.9906458Z  192 │   normalizeNativeMarkdownUrl,
2026-10-24T14:29:51.9906554Z  193 │   resolveMarkdownInlineCodePresentation,
2026-10-24T14:29:51.9906668Z      ·   ──────────────────┬──────────────────
2026-10-24T14:29:51.9906862Z      ·                     ╰── 'resolveMarkdownInlineCodePresentation' is imported here
2026-10-24T14:29:51.9907018Z  194 │   resolveMarkdownLinkPresentation,
2026-10-24T14:29:51.9907149Z      ╰────
2026-10-24T14:29:51.9907283Z   help: Consider removing this import.
2026-10-24T14:29:51.9907286Z
2026-10-24T14:29:51.9907514Z   ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used.
2026-10-24T14:29:51.9907648Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:233:10]
2026-10-24T14:29:51.9907752Z  232 │ import { ThreadMcpApp } from "./McpAppWebView";
2026-10-24T14:29:51.9907899Z  233 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState";
2026-10-24T14:29:51.9907999Z      ·          ────────────┬───────────
2026-10-24T14:29:51.9908168Z      ·                      ╰── 'useMarkdownCodeHighlight' is imported here
2026-10-24T14:29:51.9908227Z  234 │ import {
2026-10-24T14:29:51.9908279Z      ╰────
2026-10-24T14:29:51.9908380Z   help: Consider removing this import.
2026-10-24T14:29:51.9908387Z
2026-10-24T14:29:51.9908598Z   ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
2026-10-24T14:29:51.9908729Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:237:3]
2026-10-24T14:29:51.9908794Z  236 │   useAssetUrl,
2026-10-24T14:29:51.9908863Z  237 │   useAssetUrlState,
2026-10-24T14:29:51.9908943Z      ·   ────────┬───────
2026-10-24T14:29:51.9909088Z      ·           ╰── 'useAssetUrlState' is imported here
2026-10-24T14:29:51.9909157Z  238 │   useRefreshAssetUrl,
2026-10-24T14:29:51.9909207Z      ╰────
2026-10-24T14:29:51.9909304Z   help: Consider removing this import.
2026-10-24T14:29:51.9909306Z
2026-10-24T14:29:51.9909513Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9909652Z       ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2148:7]
2026-10-24T14:29:51.9909727Z  2147 │     setExpandedFile(null);
2026-10-24T14:29:51.9909886Z  2148 │   }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
2026-10-24T14:29:51.9910115Z       ·       ─────────┬─────────  ───────┬──────  ───────────────┬──────────────
2026-10-24T14:29:51.9910412Z       ·                │                  │                       ╰── Unnecessary dependency `props.contentPresentation.kind`
2026-10-24T14:29:51.9910613Z       ·                │                  ╰── Unnecessary dependency `props.threadId`
2026-10-24T14:29:51.9910785Z       ·                ╰── Unnecessary dependency `props.environmentId`
2026-10-24T14:29:51.9910932Z  2149 │   const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
2026-10-24T14:29:51.9910985Z       ╰────
2026-10-24T14:29:51.9911283Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9911605Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9911609Z
2026-10-24T14:29:51.9911811Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9911947Z       ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2616:7]
2026-10-24T14:29:51.9912122Z  2615 │     reportHeaderMaterialVisibility(false);
2026-10-24T14:29:51.9912304Z  2616 │   }, [feedThreadKey, reportHeaderMaterialVisibility]);
2026-10-24T14:29:51.9912387Z       ·       ──────┬──────
2026-10-24T14:29:51.9912540Z       ·             ╰── Unnecessary dependency `feedThreadKey`
2026-10-24T14:29:51.9912596Z  2617 │
2026-10-24T14:29:51.9912648Z       ╰────
2026-10-24T14:29:51.9912940Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9913254Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9913257Z
2026-10-24T14:29:51.9913463Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9913602Z       ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2632:7]
2026-10-24T14:29:51.9913659Z  2631 │     }
2026-10-24T14:29:51.9913791Z  2632 │   }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
2026-10-24T14:29:51.9913871Z       ·       ──────┬─────
2026-10-24T14:29:51.9914022Z       ·             ╰── Unnecessary dependency `listMountKey`
2026-10-24T14:29:51.9914168Z  2633 │   // Opening at a message: its run unfolds, the list stops following the end
2026-10-24T14:29:51.9914220Z       ╰────
2026-10-24T14:29:51.9914515Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9914835Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9914841Z
2026-10-24T14:29:51.9915045Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9915180Z       ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2828:7]
2026-10-24T14:29:51.9915238Z  2827 │     }
2026-10-24T14:29:51.9915422Z  2828 │   }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
2026-10-24T14:29:51.9915640Z       ·       ───────┬───────  ─────────┬────────  ────────┬───────
2026-10-24T14:29:51.9915894Z       ·              │                  │                  ╰── Unnecessary dependency `expandedWorkRows`
2026-10-24T14:29:51.9916107Z       ·              │                  ╰── Unnecessary dependency `expandedWorkGroups`
2026-10-24T14:29:51.9916265Z       ·              ╰── Unnecessary dependency `expandedTurnIds`
2026-10-24T14:29:51.9916319Z  2829 │
2026-10-24T14:29:51.9916373Z       ╰────
2026-10-24T14:29:51.9916666Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9916980Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9916983Z
2026-10-24T14:29:51.9917168Z   ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-24T14:29:51.9917367Z      ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:618:9]
2026-10-24T14:29:51.9917504Z  617 │       };
2026-10-24T14:29:51.9917656Z  618 │     }, [props.environmentId, attachment.id, httpBaseUrl]),
2026-10-24T14:29:51.9917850Z      ·         ─────────┬─────────  ──────┬──────  ─────┬─────
2026-10-24T14:29:51.9918093Z      ·                  │                 │             ╰── Unnecessary dependency `httpBaseUrl`
2026-10-24T14:29:51.9918292Z      ·                  │                 ╰── Unnecessary dependency `attachment.id`
2026-10-24T14:29:51.9918457Z      ·                  ╰── Unnecessary dependency `props.environmentId`
2026-10-24T14:29:51.9918515Z  619 │   );
2026-10-24T14:29:51.9918566Z      ╰────
2026-10-24T14:29:51.9918892Z   help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-24T14:29:51.9919210Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9919212Z
2026-10-24T14:29:51.9919426Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T14:29:51.9919562Z     ╭─[apps/web/src/lib/composerContextReferences.ts:90:40]
2026-10-24T14:29:51.9919638Z  89 │   let cursor = prompt.length;
2026-10-24T14:29:51.9919746Z  90 │   for (const occurrence of occurrences.reverse()) {
2026-10-24T14:29:51.9919852Z     ·                                        ───────
2026-10-24T14:29:51.9919940Z  91 │     let { start, end } = occurrence;
2026-10-24T14:29:51.9919998Z     ╰────
2026-10-24T14:29:51.9920258Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T14:29:51.9920262Z
2026-10-24T14:29:51.9920523Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9920686Z     ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
2026-10-24T14:29:51.9920800Z  37 │   const [initialized, setInitialized] = useState(false);
2026-10-24T14:29:51.9920871Z  38 │   useLayoutEffect(() => {
2026-10-24T14:29:51.9920951Z     ·   ───────┬───────
2026-10-24T14:29:51.9921086Z     ·          ╰── This is the containing effect
2026-10-24T14:29:51.9921202Z  39 │     reset();
2026-10-24T14:29:51.9921303Z  40 │     setInitialized(true);
2026-10-24T14:29:51.9921379Z     ·     ───────┬──────
2026-10-24T14:29:51.9921551Z     ·            ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9921614Z  41 │   }, [reset]);
2026-10-24T14:29:51.9921666Z     ╰────
2026-10-24T14:29:51.9922299Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9922629Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9922634Z
2026-10-24T14:29:51.9922894Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9923056Z     ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
2026-10-24T14:29:51.9923108Z  88 │
2026-10-24T14:29:51.9923172Z  89 │   useEffect(() => {
2026-10-24T14:29:51.9923244Z     ·   ────┬────
2026-10-24T14:29:51.9923374Z     ·       ╰── This is the containing effect
2026-10-24T14:29:51.9923536Z  90 │     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
2026-10-24T14:29:51.9923640Z  91 │     const branchName = initialProjectRef.branch;
2026-10-24T14:29:51.9923707Z  92 │     let active = true;
2026-10-24T14:29:51.9923804Z  93 │     setPendingCheckouts((count) => count + 1);
2026-10-24T14:29:51.9923897Z     ·     ─────────┬─────────
2026-10-24T14:29:51.9924072Z     ·              ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9924229Z  94 │     // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
2026-10-24T14:29:51.9924282Z     ╰────
2026-10-24T14:29:51.9924881Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9925205Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9925213Z
2026-10-24T14:29:51.9925445Z   ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used.
2026-10-24T14:29:51.9925575Z     ╭─[apps/mobile/src/features/home/HomeScreen.tsx:15:8]
2026-10-24T14:29:51.9925646Z  14 │   threadSearchMatchKey,
2026-10-24T14:29:51.9925732Z  15 │   type EnvironmentThreadSearchMatch,
2026-10-24T14:29:51.9925836Z     ·        ──────────────┬─────────────
2026-10-24T14:29:51.9926014Z     ·                      ╰── 'EnvironmentThreadSearchMatch' is imported here
2026-10-24T14:29:51.9926125Z  16 │ } from "@t3tools/client-runtime/state/thread-search";
2026-10-24T14:29:51.9926176Z     ╰────
2026-10-24T14:29:51.9926273Z   help: Consider removing this import.
2026-10-24T14:29:51.9926275Z
2026-10-24T14:29:51.9926525Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9926690Z      ╭─[apps/mobile/src/features/home/HomeScreen.tsx:527:25]
2026-10-24T14:29:51.9926822Z  526 │     // range) the boundary string is identical and the chain would die.
2026-10-24T14:29:51.9926912Z  527 │   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-24T14:29:51.9927017Z      ·                         ───────┬──────
2026-10-24T14:29:51.9927186Z      ·                                ╰── Unnecessary dependency `snoozeWakeTick`
2026-10-24T14:29:51.9927326Z  528 │   const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase();
2026-10-24T14:29:51.9927376Z      ╰────
2026-10-24T14:29:51.9927673Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9927991Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9927997Z
2026-10-24T14:29:51.9928167Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T14:29:51.9928295Z      ╭─[apps/mobile/src/features/home/HomeScreen.tsx:518:53]
2026-10-24T14:29:51.9928380Z  517 │     if (Number.isNaN(wakeAtMs)) return;
2026-10-24T14:29:51.9928542Z  518 │     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-24T14:29:51.9928664Z      ·                                                     ─────┬────
2026-10-24T14:29:51.9928833Z      ·                                                          ╰── Cannot call impure function
2026-10-24T14:29:51.9928917Z  519 │     const id = setTimeout(() => {
2026-10-24T14:29:51.9928971Z      ╰────
2026-10-24T14:29:51.9929259Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T14:29:51.9929555Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T14:29:51.9929557Z
2026-10-24T14:29:51.9929743Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9929919Z      ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70]
2026-10-24T14:29:51.9930001Z  554 │           assert.deepStrictEqual(
2026-10-24T14:29:51.9930170Z  555 │             (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-24T14:29:51.9930296Z      ·                                                                      ┬
2026-10-24T14:29:51.9930462Z      ·                                                                      ╰── '_' is declared here
2026-10-24T14:29:51.9930525Z  556 │             [
2026-10-24T14:29:51.9930578Z      ╰────
2026-10-24T14:29:51.9930683Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9930686Z
2026-10-24T14:29:51.9930869Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9931047Z       ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70]
2026-10-24T14:29:51.9931131Z  1154 │           assert.deepStrictEqual(
2026-10-24T14:29:51.9931296Z  1155 │             (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-24T14:29:51.9931468Z       ·                                                                      ┬
2026-10-24T14:29:51.9931664Z       ·                                                                      ╰── '_' is declared here
2026-10-24T14:29:51.9931727Z  1156 │             [
2026-10-24T14:29:51.9931780Z       ╰────
2026-10-24T14:29:51.9931880Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9931883Z
2026-10-24T14:29:51.9932106Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T14:29:51.9932254Z     ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-24T14:29:51.9932343Z  35 │       <T3SourceTextRunNativeComponent
2026-10-24T14:29:51.9932406Z  36 │         key={index}
2026-10-24T14:29:51.9932489Z     ·         ───────────
2026-10-24T14:29:51.9932569Z  37 │         style={flattenedStyle}
2026-10-24T14:29:51.9932623Z     ╰────
2026-10-24T14:29:51.9932771Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T14:29:51.9932773Z
2026-10-24T14:29:51.9933034Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9933200Z      ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:279:5]
2026-10-24T14:29:51.9933328Z  277 │   const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
2026-10-24T14:29:51.9933394Z  278 │   useEffect(() => {
2026-10-24T14:29:51.9933468Z      ·   ────┬────
2026-10-24T14:29:51.9933601Z      ·       ╰── This is the containing effect
2026-10-24T14:29:51.9933687Z  279 │     setNow(new Date().toISOString());
2026-10-24T14:29:51.9933762Z      ·     ───┬──
2026-10-24T14:29:51.9933934Z      ·        ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9934075Z  280 │     const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
2026-10-24T14:29:51.9934126Z      ╰────
2026-10-24T14:29:51.9934734Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9935059Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9935061Z
2026-10-24T14:29:51.9935296Z   ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used.
2026-10-24T14:29:51.9935461Z     ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:13:8]
2026-10-24T14:29:51.9935531Z  12 │   threadSearchMatchKey,
2026-10-24T14:29:51.9935617Z  13 │   type EnvironmentThreadSearchMatch,
2026-10-24T14:29:51.9935723Z     ·        ──────────────┬─────────────
2026-10-24T14:29:51.9935901Z     ·                      ╰── 'EnvironmentThreadSearchMatch' is imported here
2026-10-24T14:29:51.9936011Z  14 │ } from "@t3tools/client-runtime/state/thread-search";
2026-10-24T14:29:51.9936062Z     ╰────
2026-10-24T14:29:51.9936162Z   help: Consider removing this import.
2026-10-24T14:29:51.9936164Z
2026-10-24T14:29:51.9936423Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9936620Z      ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:359:25]
2026-10-24T14:29:51.9936754Z  358 │     // range) the boundary string is identical and the chain would die.
2026-10-24T14:29:51.9936844Z  359 │   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-24T14:29:51.9936948Z      ·                         ───────┬──────
2026-10-24T14:29:51.9937115Z      ·                                ╰── Unnecessary dependency `snoozeWakeTick`
2026-10-24T14:29:51.9937230Z  360 │   const listItems = ((): readonly SidebarListItem[] => {
2026-10-24T14:29:51.9937281Z      ╰────
2026-10-24T14:29:51.9937580Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9937900Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9937905Z
2026-10-24T14:29:51.9938076Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T14:29:51.9938239Z      ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:350:53]
2026-10-24T14:29:51.9938327Z  349 │     if (Number.isNaN(wakeAtMs)) return;
2026-10-24T14:29:51.9938486Z  350 │     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-24T14:29:51.9938607Z      ·                                                     ─────┬────
2026-10-24T14:29:51.9938774Z      ·                                                          ╰── Cannot call impure function
2026-10-24T14:29:51.9938857Z  351 │     const id = setTimeout(() => {
2026-10-24T14:29:51.9938911Z      ╰────
2026-10-24T14:29:51.9939200Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T14:29:51.9939501Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T14:29:51.9939503Z
2026-10-24T14:29:51.9939762Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9939937Z     ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5]
2026-10-24T14:29:51.9939990Z  76 │
2026-10-24T14:29:51.9940056Z  77 │   useEffect(() => {
2026-10-24T14:29:51.9940126Z     ·   ────┬────
2026-10-24T14:29:51.9940262Z     ·       ╰── This is the containing effect
2026-10-24T14:29:51.9940395Z  78 │     const { host, code } = parsePairingUrl(connectionPairingUrl);
2026-10-24T14:29:51.9940464Z  79 │     setHostInput(host);
2026-10-24T14:29:51.9940539Z     ·     ──────┬─────
2026-10-24T14:29:51.9940709Z     ·           ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9940777Z  80 │     setCodeInput(code);
2026-10-24T14:29:51.9940828Z     ╰────
2026-10-24T14:29:51.9941430Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9941808Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9941839Z
2026-10-24T14:29:51.9942123Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9942301Z     ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5]
2026-10-24T14:29:51.9942355Z  82 │
2026-10-24T14:29:51.9942418Z  83 │   useEffect(() => {
2026-10-24T14:29:51.9942491Z     ·   ────┬────
2026-10-24T14:29:51.9942621Z     ·       ╰── This is the containing effect
2026-10-24T14:29:51.9942711Z  84 │     if (routePairingUrl.length === 0) {
2026-10-24T14:29:51.9942771Z  85 │       return;
2026-10-24T14:29:51.9942831Z  86 │     }
2026-10-24T14:29:51.9942886Z  87 │
2026-10-24T14:29:51.9943002Z  88 │     const { host, code } = parsePairingUrl(routePairingUrl);
2026-10-24T14:29:51.9943068Z  89 │     setHostInput(host);
2026-10-24T14:29:51.9943145Z     ·     ──────┬─────
2026-10-24T14:29:51.9943314Z     ·           ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9943380Z  90 │     setCodeInput(code);
2026-10-24T14:29:51.9943429Z     ╰────
2026-10-24T14:29:51.9944033Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9944365Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9944370Z
2026-10-24T14:29:51.9944629Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9944800Z     ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7]
2026-10-24T14:29:51.9944851Z  92 │
2026-10-24T14:29:51.9944917Z  93 │   useEffect(() => {
2026-10-24T14:29:51.9944986Z     ·   ────┬────
2026-10-24T14:29:51.9945118Z     ·       ╰── This is the containing effect
2026-10-24T14:29:51.9945202Z  94 │     if (pairingConnectionError) {
2026-10-24T14:29:51.9945276Z  95 │       setIsSubmitting(false);
2026-10-24T14:29:51.9945360Z     ·       ───────┬───────
2026-10-24T14:29:51.9945583Z     ·              ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9945667Z  96 │     }
2026-10-24T14:29:51.9945718Z     ╰────
2026-10-24T14:29:51.9947803Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9948146Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9948149Z
2026-10-24T14:29:51.9948365Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T14:29:51.9948497Z     ╭─[apps/web/src/lib/announce.browser.test.ts:41:46]
2026-10-24T14:29:51.9948553Z  40 │
2026-10-24T14:29:51.9948664Z  41 │     expect(regionTexts()).toEqual([...first].reverse());
2026-10-24T14:29:51.9948776Z     ·                                              ───────
2026-10-24T14:29:51.9948875Z  42 │     expect(regionTexts()).toContain("Claude");
2026-10-24T14:29:51.9948927Z     ╰────
2026-10-24T14:29:51.9949191Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T14:29:51.9949194Z
2026-10-24T14:29:51.9949410Z   ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T14:29:51.9949555Z      ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
2026-10-24T14:29:51.9949665Z  772 │     if (settingsSheetPresentation.isActive) {
2026-10-24T14:29:51.9949801Z  773 │       settingsRoutePresentation.present(settingsRouteSession);
2026-10-24T14:29:51.9949899Z      ·       ────────────┬────────────
2026-10-24T14:29:51.9950073Z      ·                   ╰── Missing dependency `settingsRoutePresentation`
2026-10-24T14:29:51.9950129Z  774 │     }
2026-10-24T14:29:51.9950337Z  775 │   }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
2026-10-24T14:29:51.9950449Z      ·       ────────────────┬────────────────
2026-10-24T14:29:51.9950733Z      ·                       ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
2026-10-24T14:29:51.9950787Z  776 │
2026-10-24T14:29:51.9950839Z      ╰────
2026-10-24T14:29:51.9951275Z   help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9951594Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9951598Z
2026-10-24T14:29:51.9951756Z   ⚠ react(immutability): This value cannot be modified
2026-10-24T14:29:51.9951901Z      ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5]
2026-10-24T14:29:51.9952066Z  387 │     typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
2026-10-24T14:29:51.9952247Z  388 │   const animatedBorderRadius = useSharedValue(targetBorderRadius);
2026-10-24T14:29:51.9952426Z      ·         ──────────┬─────────
2026-10-24T14:29:51.9952633Z      ·                   ╰── `animatedBorderRadius` originates here
2026-10-24T14:29:51.9952796Z  389 │   const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
2026-10-24T14:29:51.9952868Z  390 │   useLayoutEffect(() => {
2026-10-24T14:29:51.9952970Z  391 │     animatedBorderRadius.value = shouldAnimate
2026-10-24T14:29:51.9953060Z      ·     ──────────┬─────────
2026-10-24T14:29:51.9953221Z      ·               ╰── `animatedBorderRadius` cannot be modified
2026-10-24T14:29:51.9953311Z  392 │       ? withTiming(targetBorderRadius, {
2026-10-24T14:29:51.9953363Z      ╰────
2026-10-24T14:29:51.9953633Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T14:29:51.9953953Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T14:29:51.9953958Z
2026-10-24T14:29:51.9954120Z   ⚠ react(immutability): This value cannot be modified
2026-10-24T14:29:51.9954281Z     ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
2026-10-24T14:29:51.9954382Z  53 │ function usePulseAnimation(pulse: boolean) {
2026-10-24T14:29:51.9954478Z  54 │   const pulseProgress = useSharedValue(0);
2026-10-24T14:29:51.9954563Z     ·         ──────┬──────
2026-10-24T14:29:51.9954704Z     ·               ╰── `pulseProgress` originates here
2026-10-24T14:29:51.9954756Z  55 │
2026-10-24T14:29:51.9954822Z  56 │   useEffect(() => {
2026-10-24T14:29:51.9954892Z  57 │     if (pulse) {
2026-10-24T14:29:51.9954982Z  58 │       pulseProgress.value = withRepeat(
2026-10-24T14:29:51.9955063Z     ·       ──────┬──────
2026-10-24T14:29:51.9955208Z     ·             ╰── `pulseProgress` cannot be modified
2026-10-24T14:29:51.9955276Z  59 │         withTiming(1, {
2026-10-24T14:29:51.9955327Z     ╰────
2026-10-24T14:29:51.9955592Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T14:29:51.9955903Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T14:29:51.9955906Z
2026-10-24T14:29:51.9956122Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T14:29:51.9956255Z      ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28]
2026-10-24T14:29:51.9956360Z  258 │   visit(parser.parse(markdown), false, false);
2026-10-24T14:29:51.9956448Z  259 │   for (const edit of edits.reverse())
2026-10-24T14:29:51.9956546Z      ·                            ───────
2026-10-24T14:29:51.9956715Z  260 │     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T14:29:51.9956765Z      ╰────
2026-10-24T14:29:51.9957031Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T14:29:51.9957033Z
2026-10-24T14:29:51.9957252Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T14:29:51.9957427Z      ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28]
2026-10-24T14:29:51.9957538Z  289 │   visit(parser.parse(markdown));
2026-10-24T14:29:51.9957625Z  290 │   for (const edit of edits.reverse())
2026-10-24T14:29:51.9957719Z      ·                            ───────
2026-10-24T14:29:51.9957884Z  291 │     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T14:29:51.9957935Z      ╰────
2026-10-24T14:29:51.9958196Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T14:29:51.9958199Z
2026-10-24T14:29:51.9958410Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T14:29:51.9958534Z      ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38]
2026-10-24T14:29:51.9958613Z  343 │   visit(parser.parse(markdown));
2026-10-24T14:29:51.9958725Z  344 │   for (const lineStart of lineStarts.reverse()) {
2026-10-24T14:29:51.9958833Z      ·                                      ───────
2026-10-24T14:29:51.9959002Z  345 │     // The header row may be a lazy line without its container markers (`>` or list indent),
2026-10-24T14:29:51.9959052Z      ╰────
2026-10-24T14:29:51.9959315Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T14:29:51.9959317Z
2026-10-24T14:29:51.9959522Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T14:29:51.9959686Z      ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7]
2026-10-24T14:29:51.9959742Z  154 │     }
2026-10-24T14:29:51.9959811Z  155 │   }, [wrappedRender]);
2026-10-24T14:29:51.9959899Z      ·       ──────┬──────
2026-10-24T14:29:51.9960056Z      ·             ╰── Unnecessary dependency `wrappedRender`
2026-10-24T14:29:51.9960111Z  156 │
2026-10-24T14:29:51.9960161Z      ╰────
2026-10-24T14:29:51.9960462Z   help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-24T14:29:51.9960783Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T14:29:51.9960786Z
2026-10-24T14:29:51.9961031Z   ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T14:29:51.9961194Z      ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42]
2026-10-24T14:29:51.9961253Z  799 │     >
2026-10-24T14:29:51.9961385Z  800 │       <AdaptiveWorkspaceContext.Provider value={contextValue}>
2026-10-24T14:29:51.9961511Z      ·                                          ────────────────────
2026-10-24T14:29:51.9961611Z  801 │         <WindowHingeContext value={windowHinge}>
2026-10-24T14:29:51.9961663Z      ╰────
2026-10-24T14:29:51.9961891Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T14:29:51.9962035Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T14:29:51.9962038Z
2026-10-24T14:29:51.9962349Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9962557Z     ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
2026-10-24T14:29:51.9962826Z  28 │   const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
2026-10-24T14:29:51.9962891Z  29 │   useEffect(() => {
2026-10-24T14:29:51.9962965Z     ·   ────┬────
2026-10-24T14:29:51.9963095Z     ·       ╰── This is the containing effect
2026-10-24T14:29:51.9963222Z  30 │     if (snapshot && snapshot !== live) setHeld({ key, snapshot });
2026-10-24T14:29:51.9963329Z     ·                                        ───┬───
2026-10-24T14:29:51.9963526Z     ·                                           ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9963599Z  31 │   }, [key, live, snapshot]);
2026-10-24T14:29:51.9963651Z     ╰────
2026-10-24T14:29:51.9964268Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9964597Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9964600Z
2026-10-24T14:29:51.9964882Z   ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-24T14:29:51.9965014Z      ╭─[packages/provider-cursor/src/server/auth.ts:249:20]
2026-10-24T14:29:51.9965069Z  248 │     },
2026-10-24T14:29:51.9965155Z  249 │     (effect, flow, stopSessions) =>
2026-10-24T14:29:51.9965252Z      ·                    ──────┬─────
2026-10-24T14:29:51.9965404Z      ·                          ╰── 'stopSessions' is declared here
2026-10-24T14:29:51.9965472Z  250 │       effect.pipe(
2026-10-24T14:29:51.9965524Z      ╰────
2026-10-24T14:29:51.9965628Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9965631Z
2026-10-24T14:29:51.9965890Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9966080Z      ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10]
2026-10-24T14:29:51.9966134Z  117 │
2026-10-24T14:29:51.9966201Z  118 │   useEffect(() => {
2026-10-24T14:29:51.9966271Z      ·   ────┬────
2026-10-24T14:29:51.9966411Z      ·       ╰── This is the containing effect
2026-10-24T14:29:51.9966494Z  119 │     void refreshNotifications();
2026-10-24T14:29:51.9966586Z      ·          ──────────┬─────────
2026-10-24T14:29:51.9966765Z      ·                    ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9966912Z  120 │     const subscription = AppState.addEventListener("change", (state) => {
2026-10-24T14:29:51.9966964Z      ╰────
2026-10-24T14:29:51.9967572Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9967949Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9967981Z
2026-10-24T14:29:51.9968293Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T14:29:51.9968480Z      ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7]
2026-10-24T14:29:51.9968533Z  125 │
2026-10-24T14:29:51.9968600Z  126 │   useEffect(() => {
2026-10-24T14:29:51.9968671Z      ·   ────┬────
2026-10-24T14:29:51.9968803Z      ·       ╰── This is the containing effect
2026-10-24T14:29:51.9968870Z  127 │     if (!isLoaded) {
2026-10-24T14:29:51.9968962Z  128 │       setLiveActivityStatus("checking");
2026-10-24T14:29:51.9969051Z      ·       ──────────┬──────────
2026-10-24T14:29:51.9969235Z      ·                 ╰── Avoid calling setState() directly within an effect
2026-10-24T14:29:51.9969303Z  129 │       return;
2026-10-24T14:29:51.9969354Z      ╰────
2026-10-24T14:29:51.9969953Z   help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
2026-10-24T14:29:51.9970278Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T14:29:51.9970281Z
2026-10-24T14:29:51.9970439Z   ⚠ react(immutability): This value cannot be modified
2026-10-24T14:29:51.9970606Z     ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5]
2026-10-24T14:29:51.9970661Z  35 │
2026-10-24T14:29:51.9970798Z  36 │   const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0);
2026-10-24T14:29:51.9970886Z     ·         ────────┬────────
2026-10-24T14:29:51.9971037Z     ·                 ╰── `inspectorProgress` originates here
2026-10-24T14:29:51.9971132Z  37 │   const { renderedInspectorWidth } = props;
2026-10-24T14:29:51.9971266Z  38 │   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-24T14:29:51.9971318Z  39 │
2026-10-24T14:29:51.9971399Z  40 │   const onClosed = props.onClosed;
2026-10-24T14:29:51.9971463Z  41 │   useEffect(() => {
2026-10-24T14:29:51.9971552Z  42 │     inspectorProgress.value = withTiming(
2026-10-24T14:29:51.9971635Z     ·     ────────┬────────
2026-10-24T14:29:51.9971840Z     ·             ╰── `inspectorProgress` cannot be modified
2026-10-24T14:29:51.9971956Z  43 │       inspectorVisible ? 1 : 0,
2026-10-24T14:29:51.9972006Z     ╰────
2026-10-24T14:29:51.9972315Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T14:29:51.9972625Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T14:29:51.9972628Z
2026-10-24T14:29:51.9972786Z   ⚠ react(immutability): This value cannot be modified
2026-10-24T14:29:51.9972946Z     ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7]
2026-10-24T14:29:51.9973039Z  37 │   const { renderedInspectorWidth } = props;
2026-10-24T14:29:51.9973176Z  38 │   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-24T14:29:51.9973268Z     ·         ──────────┬─────────
2026-10-24T14:29:51.9973424Z     ·                   ╰── `renderedContentWidth` originates here
2026-10-24T14:29:51.9973476Z  39 │
2026-10-24T14:29:51.9973558Z  40 │   const onClosed = props.onClosed;
2026-10-24T14:29:51.9973624Z  41 │   useEffect(() => {
2026-10-24T14:29:51.9973711Z  42 │     inspectorProgress.value = withTiming(
2026-10-24T14:29:51.9973790Z  43 │       inspectorVisible ? 1 : 0,
2026-10-24T14:29:51.9973862Z  44 │       WORKSPACE_PANE_TIMING,
2026-10-24T14:29:51.9973929Z  45 │       (finished) => {
2026-10-24T14:29:51.9974071Z  46 │         if (finished === true && !inspectorVisible && onClosed !== undefined) {
2026-10-24T14:29:51.9974146Z  47 │           runOnJS(onClosed)();
2026-10-24T14:29:51.9974209Z  48 │         }
2026-10-24T14:29:51.9974269Z  49 │       },
2026-10-24T14:29:51.9974322Z  50 │     );
2026-10-24T14:29:51.9974456Z  51 │     const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
2026-10-24T14:29:51.9974536Z  52 │     renderedInspectorWidth.set(
2026-10-24T14:29:51.9974682Z  53 │       resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
2026-10-24T14:29:51.9974736Z  54 │     );
2026-10-24T14:29:51.9974791Z  55 │   }, [
2026-10-24T14:29:51.9974860Z  56 │     inspectorProgress,
2026-10-24T14:29:51.9974926Z  57 │     inspectorVisible,
2026-10-24T14:29:51.9974989Z  58 │     inspectorWidth,
2026-10-24T14:29:51.9975049Z  59 │     onClosed,
2026-10-24T14:29:51.9975122Z  60 │     renderedInspectorWidth,
2026-10-24T14:29:51.9975181Z  61 │     resizing,
2026-10-24T14:29:51.9975235Z  62 │   ]);
2026-10-24T14:29:51.9975287Z  63 │
2026-10-24T14:29:51.9975357Z  64 │   useEffect(() => {
2026-10-24T14:29:51.9975452Z  65 │     const targetWidth = inspectorWidth ?? 0;
2026-10-24T14:29:51.9975538Z  66 │     if (!inspectorVisible || resizing) {
2026-10-24T14:29:51.9975637Z  67 │       renderedContentWidth.value = targetWidth;
2026-10-24T14:29:51.9975725Z     ·       ──────────┬─────────
2026-10-24T14:29:51.9975887Z     ·                 ╰── `renderedContentWidth` cannot be modified
2026-10-24T14:29:51.9975948Z  68 │       return;
2026-10-24T14:29:51.9975999Z     ╰────
2026-10-24T14:29:51.9976264Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T14:29:51.9976570Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T14:29:51.9976626Z
2026-10-24T14:29:51.9976910Z   ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T14:29:51.9977068Z      ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
2026-10-24T14:29:51.9977129Z  289 │   return (
2026-10-24T14:29:51.9977265Z  290 │     <ExistingThreadSettingsRouteContext.Provider value={value}>
2026-10-24T14:29:51.9977388Z      ·                                                  ─────────────
2026-10-24T14:29:51.9977458Z  291 │       {props.children}
2026-10-24T14:29:51.9977510Z      ╰────
2026-10-24T14:29:51.9977734Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T14:29:51.9977883Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T14:29:51.9977888Z
2026-10-24T14:29:51.9978131Z   ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T14:29:51.9978288Z      ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
2026-10-24T14:29:51.9978347Z  653 │   return (
2026-10-24T14:29:51.9978468Z  654 │     <ThreadSettingsSessionContext.Provider value={value}>
2026-10-24T14:29:51.9978584Z      ·                                            ─────────────
2026-10-24T14:29:51.9978652Z  655 │       {props.children}
2026-10-24T14:29:51.9978704Z      ╰────
2026-10-24T14:29:51.9978923Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T14:29:51.9979065Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T14:29:51.9979070Z
2026-10-24T14:29:51.9979310Z   ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T14:29:51.9979470Z       ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
2026-10-24T14:29:51.9979530Z  1461 │   return (
2026-10-24T14:29:51.9979694Z  1462 │     <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
2026-10-24T14:29:51.9979827Z       ·                                                       ────────────────────
2026-10-24T14:29:51.9979926Z  1463 │       <ThreadSettingsPickerStack.Navigator
2026-10-24T14:29:51.9979978Z       ╰────
2026-10-24T14:29:51.9980200Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T14:29:51.9980343Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T14:29:51.9980349Z
2026-10-24T14:29:51.9980636Z   ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:51.9980793Z     ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
2026-10-24T14:29:51.9980843Z  14 │
2026-10-24T14:29:51.9980917Z  15 │ const legacyCredentials = {
2026-10-24T14:29:51.9981003Z     ·       ────────┬────────
2026-10-24T14:29:51.9981150Z     ·               ╰── 'legacyCredentials' is declared here
2026-10-24T14:29:51.9981216Z  16 │   version: 1 as const,
2026-10-24T14:29:51.9981268Z     ╰────
2026-10-24T14:29:51.9981376Z   help: Consider removing this declaration.
2026-10-24T14:29:51.9981379Z
2026-10-24T14:29:51.9981638Z   ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor.
2026-10-24T14:29:51.9981793Z      ╭─[apps/desktop/src/preview/Manager.test.ts:158:18]
2026-10-24T14:29:51.9981897Z  157 │       BrowserWindow: browserWindowConstructor,
2026-10-24T14:29:51.9982062Z  158 │ ╭─▶   ClipboardItem: class {
2026-10-24T14:29:51.9982232Z  159 │ │       constructor(data: Record<string, unknown>) {
2026-10-24T14:29:51.9982351Z  160 │ │         clipboardItemConstructor(data);
2026-10-24T14:29:51.9982427Z  161 │ │       }
2026-10-24T14:29:51.9982557Z  162 │ ╰─▶   },
2026-10-24T14:29:51.9982622Z  163 │       clipboard: {
2026-10-24T14:29:51.9982673Z      ╰────
2026-10-24T14:29:51.9982851Z   help: Try replacing this class with a standalone function or deleting it entirely
2026-10-24T14:29:51.9982856Z
2026-10-24T14:29:51.9983045Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9983185Z      ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
2026-10-24T14:29:51.9983349Z  120 │   const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
2026-10-24T14:29:51.9983438Z  121 │   const dispatch = vi.fn((_: unknown) =>
2026-10-24T14:29:51.9983524Z      ·                           ┬
2026-10-24T14:29:51.9983658Z      ·                           ╰── '_' is declared here
2026-10-24T14:29:51.9983760Z  122 │     (options.dispatchGate ?? Effect.void).pipe(
2026-10-24T14:29:51.9983812Z      ╰────
2026-10-24T14:29:51.9983926Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9983931Z
2026-10-24T14:29:51.9984119Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9984256Z      ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
2026-10-24T14:29:51.9984311Z  133 │   );
2026-10-24T14:29:51.9984420Z  134 │   const listLocalBranchNames = vi.fn((_: string) =>
2026-10-24T14:29:51.9984520Z      ·                                       ┬
2026-10-24T14:29:51.9984664Z      ·                                       ╰── '_' is declared here
2026-10-24T14:29:51.9984732Z  135 │     Effect.succeed(
2026-10-24T14:29:51.9984783Z      ╰────
2026-10-24T14:29:51.9984885Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9984887Z
2026-10-24T14:29:51.9985074Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9985212Z      ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
2026-10-24T14:29:51.9985267Z  177 │   });
2026-10-24T14:29:51.9985367Z  178 │   const sendToThread = vi.fn((_: unknown) => {
2026-10-24T14:29:51.9985454Z      ·                               ┬
2026-10-24T14:29:51.9985589Z      ·                               ╰── '_' is declared here
2026-10-24T14:29:51.9985691Z  179 │     switch (options.continuation ?? "queued") {
2026-10-24T14:29:51.9985742Z      ╰────
2026-10-24T14:29:51.9985841Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9985847Z
2026-10-24T14:29:51.9986029Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9986215Z      ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
2026-10-24T14:29:51.9986360Z  202 │   );
2026-10-24T14:29:51.9986457Z  203 │   const removeWorktree = vi.fn((_: unknown) =>
2026-10-24T14:29:51.9986548Z      ·                                 ┬
2026-10-24T14:29:51.9986686Z      ·                                 ╰── '_' is declared here
2026-10-24T14:29:51.9986768Z  204 │     options.removeWorktreeFails
2026-10-24T14:29:51.9986818Z      ╰────
2026-10-24T14:29:51.9986918Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9986920Z
2026-10-24T14:29:51.9987102Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9987238Z      ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
2026-10-24T14:29:51.9987293Z  207 │   );
2026-10-24T14:29:51.9987400Z  208 │   const deleteLocalBranch = vi.fn((_: unknown) =>
2026-10-24T14:29:51.9987498Z      ·                                    ┬
2026-10-24T14:29:51.9987640Z      ·                                    ╰── '_' is declared here
2026-10-24T14:29:51.9987726Z  209 │     options.deleteLocalBranchFails
2026-10-24T14:29:51.9987776Z      ╰────
2026-10-24T14:29:51.9987875Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9987878Z
2026-10-24T14:29:51.9988059Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9988193Z      ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
2026-10-24T14:29:51.9988247Z  212 │   );
2026-10-24T14:29:51.9988361Z  213 │   const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
2026-10-24T14:29:51.9988465Z      ·                                          ┬
2026-10-24T14:29:51.9988617Z      ·                                          ╰── '_' is declared here
2026-10-24T14:29:51.9988705Z  214 │     options.fetchWorktreeBaseFails
2026-10-24T14:29:51.9988756Z      ╰────
2026-10-24T14:29:51.9988857Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9988859Z
2026-10-24T14:29:51.9989039Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9989173Z      ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
2026-10-24T14:29:51.9989228Z  253 │   );
2026-10-24T14:29:51.9989321Z  254 │   const localStatus = vi.fn((_: unknown) =>
2026-10-24T14:29:51.9989409Z      ·                              ┬
2026-10-24T14:29:51.9989542Z      ·                              ╰── '_' is declared here
2026-10-24T14:29:51.9989617Z  255 │     Effect.succeed({
2026-10-24T14:29:51.9989670Z      ╰────
2026-10-24T14:29:51.9989769Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9989771Z
2026-10-24T14:29:51.9989952Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T14:29:51.9990087Z      ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
2026-10-24T14:29:51.9990141Z  263 │   );
2026-10-24T14:29:51.9990295Z  264 │   const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
2026-10-24T14:29:51.9990384Z      ·                                ┬
2026-10-24T14:29:51.9990521Z      ·                                ╰── '_' is declared here
2026-10-24T14:29:51.9990671Z  265 │   const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
2026-10-24T14:29:51.9990792Z      ╰────
2026-10-24T14:29:51.9990925Z   help: Consider removing this parameter.
2026-10-24T14:29:51.9990928Z
2026-10-24T14:29:51.9991399Z   ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T14:29:51.9991534Z      ╭─[packages/contracts/src/composerContext.test.ts:181:18]
2026-10-24T14:29:51.9991671Z  180 │   it("sends a message without the records the wire cannot carry", () => {
2026-10-24T14:29:51.9991854Z  181 │     const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
2026-10-24T14:29:51.9991961Z      ·                  ────────────────────────
2026-10-24T14:29:51.9992027Z  182 │       version: 1,
2026-10-24T14:29:51.9992106Z      ╰────
2026-10-24T14:29:51.9992116Z
2026-10-24T14:29:51.9992578Z   ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T14:29:51.9992705Z     ╭─[packages/contracts/src/baseSchemas.test.ts:39:9]
2026-10-24T14:29:51.9992772Z  38 │       JSON.stringify(
2026-10-24T14:29:51.9992893Z  39 │         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
2026-10-24T14:29:51.9992991Z     ·         ────────────────────────
2026-10-24T14:29:51.9993059Z  40 │           { name: "a" },
2026-10-24T14:29:51.9993111Z     ╰────
2026-10-24T14:29:51.9993114Z
2026-10-24T14:29:51.9993313Z   ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used.
2026-10-24T14:29:51.9993459Z    ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3]
2026-10-24T14:29:51.9993526Z  1 │ import type {
2026-10-24T14:29:51.9993591Z  2 │   EnvironmentId,
2026-10-24T14:29:51.9993667Z    ·   ──────┬──────
2026-10-24T14:29:51.9993808Z    ·         ╰── 'EnvironmentId' is imported here
2026-10-24T14:29:51.9993893Z  3 │   ExecutionEnvironmentCapabilities,
2026-10-24T14:29:51.9993945Z    ╰────
2026-10-24T14:29:51.9994044Z   help: Consider removing this import.
2026-10-24T14:29:51.9994047Z
2026-10-24T14:29:51.9994238Z   ⚠ react(capitalized-calls): Capitalized function called without JSX
2026-10-24T14:29:51.9994393Z      ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27]
2026-10-24T14:29:51.9994574Z  601 │   const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
2026-10-24T14:29:51.9994656Z  602 │   const gesture = Gesture.Pan()
2026-10-24T14:29:51.9994743Z      ·                           ─┬─
2026-10-24T14:29:51.9994883Z      ·                            ╰── `Pan` may be a component
2026-10-24T14:29:51.9994959Z  603 │     .enabled(!props.disabled)
2026-10-24T14:29:51.9995010Z      ╰────
2026-10-24T14:29:51.9995291Z   help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
2026-10-24T14:29:51.9995742Z   note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T14:29:51.9995747Z
2026-10-24T14:29:51.9996273Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:51.9996441Z      ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3]
2026-10-24T14:29:51.9996498Z  225 │     ) {
2026-10-24T14:29:51.9996710Z  226 │ ╭─▶   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T14:29:51.9996823Z  227 │ │       const socket = sockets[index];
2026-10-24T14:29:51.9996913Z  228 │ │       if (socket) {
2026-10-24T14:29:51.9997007Z  229 │ │         return socket;
2026-10-24T14:29:51.9997083Z  230 │ │       }
2026-10-24T14:29:51.9997192Z  231 │ │       yield* Effect.yieldNow;
2026-10-24T14:29:51.9997324Z  232 │ ╰─▶   }
2026-10-24T14:29:51.9997501Z  233 │       return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket."));
2026-10-24T14:29:51.9997558Z      ╰────
2026-10-24T14:29:51.9997561Z
2026-10-24T14:29:51.9998030Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:51.9998164Z      ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3]
2026-10-24T14:29:51.9998223Z  239 │     ) {
2026-10-24T14:29:51.9998428Z  240 │ ╭─▶   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T14:29:51.9998651Z  241 │ │       const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index];
2026-10-24T14:29:51.9998747Z  242 │ │       if (request) {
2026-10-24T14:29:51.9998843Z  243 │ │         return request;
2026-10-24T14:29:51.9998918Z  244 │ │       }
2026-10-24T14:29:51.9999021Z  245 │ │       yield* Effect.yieldNow;
2026-10-24T14:29:51.9999147Z  246 │ ╰─▶   }
2026-10-24T14:29:51.9999318Z  247 │       return yield* Effect.die(new Error("Expected the RPC protocol to send a request."));
2026-10-24T14:29:51.9999369Z      ╰────
2026-10-24T14:29:51.9999371Z
2026-10-24T14:29:51.9999580Z   ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-24T14:29:51.9999739Z      ╭─[packages/contracts/src/rpc.ts:297:8]
2026-10-24T14:29:51.9999837Z  296 │ } from "./device.ts";
2026-10-24T14:29:51.9999930Z  297 │ import {} from "./previewAutomation.ts";
2026-10-24T14:29:51.9999999Z      ·        ──
2026-10-24T14:29:52.0000057Z  298 │ import {
2026-10-24T14:29:52.0000109Z      ╰────
2026-10-24T14:29:52.0000192Z   help: Remove empty braces
2026-10-24T14:29:52.0000196Z
2026-10-24T14:29:52.0000402Z   ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-24T14:29:52.0000529Z     ╭─[apps/web/src/contextMenuFallback.test.ts:38:9]
2026-10-24T14:29:52.0000597Z  37 │   get isConnected() {
2026-10-24T14:29:52.0000692Z  38 │     let current: FakeElement | null = this;
2026-10-24T14:29:52.0000768Z     ·         ───────
2026-10-24T14:29:52.0000847Z  39 │     while (current?.parent) {
2026-10-24T14:29:52.0000902Z     ╰────
2026-10-24T14:29:52.0001184Z   help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well.
2026-10-24T14:29:52.0001186Z
2026-10-24T14:29:52.0001657Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:52.0001792Z      ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9]
2026-10-24T14:29:52.0001853Z  130 │           ) {
2026-10-24T14:29:52.0002064Z  131 │ ╭─▶         for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T14:29:52.0002224Z  132 │ │             if (subscriptions.length >= count) {
2026-10-24T14:29:52.0002318Z  133 │ │               return;
2026-10-24T14:29:52.0002400Z  134 │ │             }
2026-10-24T14:29:52.0002509Z  135 │ │             yield* Effect.yieldNow;
2026-10-24T14:29:52.0002645Z  136 │ ╰─▶         }
2026-10-24T14:29:52.0002813Z  137 │             return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`));
2026-10-24T14:29:52.0002864Z      ╰────
2026-10-24T14:29:52.0002866Z
2026-10-24T14:29:52.0003332Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:52.0003473Z      ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7]
2026-10-24T14:29:52.0003642Z  251 │           yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient)));
2026-10-24T14:29:52.0003897Z  252 │ ╭─▶       for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) {
2026-10-24T14:29:52.0004004Z  253 │ │           yield* Effect.yieldNow;
2026-10-24T14:29:52.0004138Z  254 │ ╰─▶       }
2026-10-24T14:29:52.0004266Z  255 │           yield* SubscriptionRef.set(activeSession, Option.none());
2026-10-24T14:29:52.0004318Z      ╰────
2026-10-24T14:29:52.0004321Z
2026-10-24T14:29:52.0004835Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:52.0005003Z      ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7]
2026-10-24T14:29:52.0005058Z  257 │
2026-10-24T14:29:52.0005310Z  258 │ ╭─▶       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-24T14:29:52.0005415Z  259 │ │           yield* Effect.yieldNow;
2026-10-24T14:29:52.0005548Z  260 │ ╰─▶       }
2026-10-24T14:29:52.0005653Z  261 │           yield* Fiber.interrupt(subscriptionFiber);
2026-10-24T14:29:52.0005704Z      ╰────
2026-10-24T14:29:52.0005707Z
2026-10-24T14:29:52.0006175Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:52.0006309Z      ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7]
2026-10-24T14:29:52.0006369Z  321 │           );
2026-10-24T14:29:52.0006626Z  322 │ ╭─▶       for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) {
2026-10-24T14:29:52.0006731Z  323 │ │           yield* Effect.yieldNow;
2026-10-24T14:29:52.0006861Z  324 │ ╰─▶       }
2026-10-24T14:29:52.0006915Z  325 │
2026-10-24T14:29:52.0006966Z      ╰────
2026-10-24T14:29:52.0006968Z
2026-10-24T14:29:52.0007439Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:52.0007574Z      ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7]
2026-10-24T14:29:52.0007737Z  329 │           yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient)));
2026-10-24T14:29:52.0007986Z  330 │ ╭─▶       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-24T14:29:52.0008090Z  331 │ │           yield* Effect.yieldNow;
2026-10-24T14:29:52.0008221Z  332 │ ╰─▶       }
2026-10-24T14:29:52.0008326Z  333 │           yield* Fiber.interrupt(subscriptionFiber);
2026-10-24T14:29:52.0008384Z      ╰────
2026-10-24T14:29:52.0008387Z
2026-10-24T14:29:52.0008769Z   ⚠ 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.
2026-10-24T14:29:52.0008886Z     ╭─[packages/contracts/src/auth.test.ts:17:12]
2026-10-24T14:29:52.0009048Z  16 │   it("decodes legacy review credentials without offering them in new grants", () => {
2026-10-24T14:29:52.0009218Z  17 │     expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
2026-10-24T14:29:52.0009322Z     ·            ────────────────────────
2026-10-24T14:29:52.0009389Z  18 │       "review:write",
2026-10-24T14:29:52.0009440Z     ╰────
2026-10-24T14:29:52.0009442Z
2026-10-24T14:29:52.0009863Z   ⚠ 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.
2026-10-24T14:29:52.0010009Z     ╭─[packages/contracts/src/auth.test.ts:20:18]
2026-10-24T14:29:52.0010065Z  19 │     ]);
2026-10-24T14:29:52.0010232Z  20 │     expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
2026-10-24T14:29:52.0010338Z     ·                  ────────────────────────
2026-10-24T14:29:52.0010473Z  21 │     expect(AuthStandardClientScopes).not.toContain("review:write");
2026-10-24T14:29:52.0010524Z     ╰────
2026-10-24T14:29:52.0010527Z
2026-10-24T14:29:52.0010891Z   ⚠ 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.
2026-10-24T14:29:52.0011003Z     ╭─[packages/contracts/src/auth.test.ts:58:21]
2026-10-24T14:29:52.0011181Z  57 │   it("ignores unknown response permissions without falling back to broader scopes", () => {
2026-10-24T14:29:52.0011310Z  58 │     const session = Schema.decodeUnknownSync(AuthSessionState)({
2026-10-24T14:29:52.0011417Z     ·                     ────────────────────────
2026-10-24T14:29:52.0011487Z  59 │       authenticated: true,
2026-10-24T14:29:52.0011538Z     ╰────
2026-10-24T14:29:52.0011541Z
2026-10-24T14:29:52.0011711Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T14:29:52.0011845Z       ╭─[apps/web/src/components/CommandPalette.tsx:2037:20]
2026-10-24T14:29:52.0011964Z  2036 │         title: inferProjectTitleFromPath(destinationPath),
2026-10-24T14:29:52.0012061Z  2037 │         createdAt: new Date().toISOString(),
2026-10-24T14:29:52.0012182Z       ·                    ─────┬────
2026-10-24T14:29:52.0012336Z       ·                         ╰── Cannot call impure function
2026-10-24T14:29:52.0012448Z  2038 │         remoteUrl: addProjectCloneFlow.remoteUrl,
2026-10-24T14:29:52.0012502Z       ╰────
2026-10-24T14:29:52.0012787Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T14:29:52.0013092Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T14:29:52.0013094Z
2026-10-24T14:29:52.0013285Z   ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops
2026-10-24T14:29:52.0013411Z      ╭─[packages/client-runtime/src/state/shell.ts:189:5]
2026-10-24T14:29:52.0013522Z  186 │     let waiting = yield* Ref.get(awaitingCompletion);
2026-10-24T14:29:52.0013594Z  187 │     let next = initial;
2026-10-24T14:29:52.0013669Z      ·         ──┬─
2026-10-24T14:29:52.0013789Z      ·           ╰── From this accumulator
2026-10-24T14:29:52.0013876Z  188 │     let receivedSnapshot = false;
2026-10-24T14:29:52.0013955Z  189 │     for (const item of items) {
2026-10-24T14:29:52.0014025Z      ·     ─┬─
2026-10-24T14:29:52.0014130Z      ·      ╰── For this loop
2026-10-24T14:29:52.0014222Z  190 │       if (item.kind === "synchronized") {
2026-10-24T14:29:52.0014291Z  191 │         waiting = false;
2026-10-24T14:29:52.0014384Z  192 │         if (Option.isSome(next.snapshot)) {
2026-10-24T14:29:52.0014505Z  193 │           next = { ...next, status: "live", error: Option.none() };
2026-10-24T14:29:52.0014593Z      ·                    ───┬───
2026-10-24T14:29:52.0014775Z      ·                       ╰── From this spread
2026-10-24T14:29:52.0014866Z  194 │         }
2026-10-24T14:29:52.0014917Z      ╰────
2026-10-24T14:29:52.0015076Z   help: Consider using `Object.assign()` to mutate the accumulator instead.
2026-10-24T14:29:52.0015235Z   note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-24T14:29:52.0015238Z
2026-10-24T14:29:52.0015455Z   ⚠ react(no-unstable-nested-components): Do not define components during render.
2026-10-24T14:29:52.0015559Z       ╭─[apps/mobile/src/Stack.tsx:1079:21]
2026-10-24T14:29:52.0015624Z  1078 │     <Navigator
2026-10-24T14:29:52.0015757Z  1079 │       screenLayout={(props) => <GuardedScreenLayout {...props} />}
2026-10-24T14:29:52.0015896Z       ·                     ─────────────────────────────────────────────
2026-10-24T14:29:52.0015987Z  1080 │       screenOptions={({ route }) =>
2026-10-24T14:29:52.0016042Z       ╰────
2026-10-24T14:29:52.0016410Z   help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true.
2026-10-24T14:29:52.0016413Z
2026-10-24T14:29:52.0016697Z   ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-24T14:29:52.0016827Z      ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20]
2026-10-24T14:29:52.0016885Z  284 │     },
2026-10-24T14:29:52.0016968Z  285 │     (effect, flow, stopSessions) =>
2026-10-24T14:29:52.0017061Z      ·                    ──────┬─────
2026-10-24T14:29:52.0017282Z      ·                          ╰── 'stopSessions' is declared here
2026-10-24T14:29:52.0017353Z  286 │       effect.pipe(
2026-10-24T14:29:52.0017407Z      ╰────
2026-10-24T14:29:52.0017512Z   help: Consider removing this parameter.
2026-10-24T14:29:52.0017515Z
2026-10-24T14:29:52.0017985Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:52.0018120Z     ╭─[apps/server/src/project/ProjectService.test.ts:94:3]
2026-10-24T14:29:52.0018177Z  93 │     ) {
2026-10-24T14:29:52.0018381Z  94 │ ╭─▶   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T14:29:52.0018564Z  95 │ │       const project = Option.getOrThrow(yield* service.getById(projectId));
2026-10-24T14:29:52.0018687Z  96 │ │       if (predicate(project)) return project;
2026-10-24T14:29:52.0018790Z  97 │ │       yield* Effect.yieldNow;
2026-10-24T14:29:52.0018916Z  98 │ ╰─▶   }
2026-10-24T14:29:52.0019069Z  99 │       return yield* Effect.die(`Project ${projectId} was not enriched in time.`);
2026-10-24T14:29:52.0019120Z     ╰────
2026-10-24T14:29:52.0019123Z
2026-10-24T14:29:52.0019293Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T14:29:52.0019431Z      ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58]
2026-10-24T14:29:52.0019566Z  139 │                             {...(weekStartsOn === undefined ? {} : { weekStartsOn })}
2026-10-24T14:29:52.0019765Z  140 │                             disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }}
2026-10-24T14:29:52.0019923Z      ·                                                          ─────┬────
2026-10-24T14:29:52.0020097Z      ·                                                               ╰── Cannot call impure function
2026-10-24T14:29:52.0020196Z  141 │                             onSelect={(selected) => {
2026-10-24T14:29:52.0020247Z      ╰────
2026-10-24T14:29:52.0020531Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T14:29:52.0020839Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T14:29:52.0020842Z
2026-10-24T14:29:52.0021111Z   ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts.
2026-10-24T14:29:52.0021259Z     ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14]
2026-10-24T14:29:52.0021417Z  11 │       addEventListener(_type: string, listener: (event: { data: string }) => void) {
2026-10-24T14:29:52.0021498Z  12 │         this.onmessage = listener;
2026-10-24T14:29:52.0021579Z     ·              ─────────
2026-10-24T14:29:52.0021635Z  13 │       }
2026-10-24T14:29:52.0021685Z     ╰────
2026-10-24T14:29:52.0022010Z   help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on<event>` replaces any previously registered handler.
2026-10-24T14:29:52.0022013Z
2026-10-24T14:29:52.0022258Z   ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-24T14:29:52.0022410Z     ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9]
2026-10-24T14:29:52.0022482Z  15 │       constructor() {
2026-10-24T14:29:52.0022547Z  16 │         source = this;
2026-10-24T14:29:52.0022621Z     ·         ──────
2026-10-24T14:29:52.0022678Z  17 │       }
2026-10-24T14:29:52.0022728Z     ╰────
2026-10-24T14:29:52.0023008Z   help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well.
2026-10-24T14:29:52.0023010Z
2026-10-24T14:29:52.0023482Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:52.0023691Z     ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3]
2026-10-24T14:29:52.0023780Z  27 │     ) {
2026-10-24T14:29:52.0023983Z  28 │ ╭─▶   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T14:29:52.0024130Z  29 │ │       const available = yield* service.peek(workspaceRoot);
2026-10-24T14:29:52.0024258Z  30 │ │       if (predicate(available)) return available;
2026-10-24T14:29:52.0024358Z  31 │ │       yield* Effect.yieldNow;
2026-10-24T14:29:52.0024482Z  32 │ ╰─▶   }
2026-10-24T14:29:52.0024665Z  33 │       return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`);
2026-10-24T14:29:52.0024715Z     ╰────
2026-10-24T14:29:52.0024718Z
2026-10-24T14:29:52.0024895Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T14:29:52.0025046Z      ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14]
2026-10-24T14:29:52.0025100Z  465 │
2026-10-24T14:29:52.0025207Z  466 │   for (const {} of ["direct", "wrapper"] as const) {
2026-10-24T14:29:52.0025280Z      ·              ──
2026-10-24T14:29:52.0025333Z  467 │   }
2026-10-24T14:29:52.0025386Z      ╰────
2026-10-24T14:29:52.0025620Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T14:29:52.0025623Z
2026-10-24T14:29:52.0025883Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:52.0026014Z       ╭─[packages/provider-pi/src/server/adapter.ts:3405:7]
2026-10-24T14:29:52.0026066Z  3404 │
2026-10-24T14:29:52.0026362Z  3405 │ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
2026-10-24T14:29:52.0026439Z       ·       ──┬──
2026-10-24T14:29:52.0026568Z       ·         ╰── 'layer' is declared here
2026-10-24T14:29:52.0026632Z  3406 │   Layer.effect(
2026-10-24T14:29:52.0026685Z       ╰────
2026-10-24T14:29:52.0026792Z   help: Consider removing this declaration.
2026-10-24T14:29:52.0026795Z
2026-10-24T14:29:52.0026997Z   ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used.
2026-10-24T14:29:52.0027133Z     ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13]
2026-10-24T14:29:52.0027228Z  23 │ import * as Deferred from "effect/Deferred";
2026-10-24T14:29:52.0027321Z  24 │ import * as Duration from "effect/Duration";
2026-10-24T14:29:52.0027407Z     ·             ────┬───
2026-10-24T14:29:52.0027543Z     ·                 ╰── 'Duration' is imported here
2026-10-24T14:29:52.0027632Z  25 │ import * as Effect from "effect/Effect";
2026-10-24T14:29:52.0027683Z     ╰────
2026-10-24T14:29:52.0027784Z   help: Consider removing this import.
2026-10-24T14:29:52.0027786Z
2026-10-24T14:29:52.0028254Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:52.0028386Z       ╭─[apps/server/src/usage/UsageService.test.ts:2615:7]
2026-10-24T14:29:52.0028484Z  2614 │           let orphanedAt: number | undefined;
2026-10-24T14:29:52.0028784Z  2615 │ ╭─▶       for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
2026-10-24T14:29:52.0028947Z  2616 │ │           const tasks: Array<() => void> = [];
2026-10-24T14:29:52.0029099Z  2617 │ │           const dispatcher: Scheduler.SchedulerDispatcher = {
2026-10-24T14:29:52.0029238Z  2618 │ │             scheduleTask: (task) => tasks.push(task),
2026-10-24T14:29:52.0029340Z  2619 │ │             flush: () => {
2026-10-24T14:29:52.0029465Z  2620 │ │               let task: (() => void) | undefined;
2026-10-24T14:29:52.0029617Z  2621 │ │               while ((task = tasks.shift()) !== undefined) task();
2026-10-24T14:29:52.0029701Z  2622 │ │             },
2026-10-24T14:29:52.0029784Z  2623 │ │           };
2026-10-24T14:29:52.0029861Z  2624 │ │
2026-10-24T14:29:52.0030027Z  2625 │ │           let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
2026-10-24T14:29:52.0030134Z  2626 │ │           let requestChecks = 0;
2026-10-24T14:29:52.0030266Z  2627 │ │           const scheduler: Scheduler.Scheduler = {
2026-10-24T14:29:52.0030378Z  2628 │ │             executionMode: "async",
2026-10-24T14:29:52.0030499Z  2629 │ │             makeDispatcher: () => dispatcher,
2026-10-24T14:29:52.0030614Z  2630 │ │             shouldYield: (fiber) => {
2026-10-24T14:29:52.0030750Z  2631 │ │               if (fiber !== requestFiber) return false;
2026-10-24T14:29:52.0030858Z  2632 │ │               requestChecks += 1;
2026-10-24T14:29:52.0031008Z  2633 │ │               if (requestChecks !== interruptAt) return false;
2026-10-24T14:29:52.0031128Z  2634 │ │               fiber.interruptUnsafe();
2026-10-24T14:29:52.0031229Z  2635 │ │               return true;
2026-10-24T14:29:52.0031314Z  2636 │ │             },
2026-10-24T14:29:52.0031394Z  2637 │ │           };
2026-10-24T14:29:52.0031466Z  2638 │ │
2026-10-24T14:29:52.0031590Z  2639 │ │           const input: UsageSummaryInput = {
2026-10-24T14:29:52.0031685Z  2640 │ │             ...WINDOW,
2026-10-24T14:29:52.0031814Z  2641 │ │             sinceDay: UsageDay.make("2026-09-01"),
2026-10-24T14:29:52.0032006Z  2642 │ │             untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
2026-10-24T14:29:52.0032105Z  2643 │ │           };
2026-10-24T14:29:52.0032249Z  2644 │ │           const first = yield* service
2026-10-24T14:29:52.0032355Z  2645 │ │             .readSummary(input)
2026-10-24T14:29:52.0032444Z  2646 │ │             .pipe(
2026-10-24T14:29:52.0032544Z  2647 │ │               Effect.exit,
2026-10-24T14:29:52.0032705Z  2648 │ │               Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-24T14:29:52.0032810Z  2649 │ │               Effect.forkChild,
2026-10-24T14:29:52.0032895Z  2650 │ │             );
2026-10-24T14:29:52.0033000Z  2651 │ │           requestFiber = first;
2026-10-24T14:29:52.0033109Z  2652 │ │           yield* Effect.yieldNow;
2026-10-24T14:29:52.0033263Z  2653 │ │           dispatcher.flush();
2026-10-24T14:29:52.0033366Z  2654 │ │
2026-10-24T14:29:52.0033520Z  2655 │ │           const second = yield* service.readSummary(input).pipe(
2026-10-24T14:29:52.0033620Z  2656 │ │             Effect.match({
2026-10-24T14:29:52.0033745Z  2657 │ │               onFailure: (error) => error.reason,
2026-10-24T14:29:52.0033872Z  2658 │ │               onSuccess: () => "success" as const,
2026-10-24T14:29:52.0033957Z  2659 │ │             }),
2026-10-24T14:29:52.0034114Z  2660 │ │             Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-24T14:29:52.0034216Z  2661 │ │             Effect.forkChild,
2026-10-24T14:29:52.0034297Z  2662 │ │           );
2026-10-24T14:29:52.0034410Z  2663 │ │           yield* Effect.yieldNow;
2026-10-24T14:29:52.0034517Z  2664 │ │           dispatcher.flush();
2026-10-24T14:29:52.0034645Z  2665 │ │           const secondExit = second.pollUnsafe();
2026-10-24T14:29:52.0034765Z  2666 │ │           if (secondExit === undefined) {
2026-10-24T14:29:52.0034883Z  2667 │ │             second.interruptUnsafe();
2026-10-24T14:29:52.0034995Z  2668 │ │             orphanedAt = interruptAt;
2026-10-24T14:29:52.0035084Z  2669 │ │             break;
2026-10-24T14:29:52.0035166Z  2670 │ │           }
2026-10-24T14:29:52.0035286Z  2671 │ │           if (Exit.isFailure(secondExit)) {
2026-10-24T14:29:52.0035446Z  2672 │ │             assert.fail("the matching request fiber was interrupted");
2026-10-24T14:29:52.0035531Z  2673 │ │           }
2026-10-24T14:29:52.0035689Z  2674 │ │           assert.strictEqual(secondExit.value, "invalidWindow");
2026-10-24T14:29:52.0035826Z  2675 │ ╰─▶       }
2026-10-24T14:29:52.0035881Z  2676 │
2026-10-24T14:29:52.0035932Z       ╰────
2026-10-24T14:29:52.0035934Z
2026-10-24T14:29:52.0036205Z   ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:52.0036326Z      ╭─[apps/server/src/usage/UsageService.ts:169:7]
2026-10-24T14:29:52.0036379Z  168 │
2026-10-24T14:29:52.0036458Z  169 │ const layerTest = Layer.succeed(
2026-10-24T14:29:52.0036534Z      ·       ────┬────
2026-10-24T14:29:52.0036675Z      ·           ╰── 'layerTest' is declared here
2026-10-24T14:29:52.0036744Z  170 │   UsageService,
2026-10-24T14:29:52.0036798Z      ╰────
2026-10-24T14:29:52.0036905Z   help: Consider removing this declaration.
2026-10-24T14:29:52.0036908Z
2026-10-24T14:29:52.0037182Z   ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:52.0037329Z     ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
2026-10-24T14:29:52.0037382Z  60 │ ) {
2026-10-24T14:29:52.0037551Z  61 │   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
2026-10-24T14:29:52.0037634Z     ·         ──────┬──────
2026-10-24T14:29:52.0037776Z     ·               ╰── 'useDragRegion' is declared here
2026-10-24T14:29:52.0037995Z  62 │   const isInline = props.mode === "inline";
2026-10-24T14:29:52.0038090Z     ╰────
2026-10-24T14:29:52.0038196Z   help: Consider removing this declaration.
2026-10-24T14:29:52.0038199Z
2026-10-24T14:29:52.0038466Z   ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:52.0038599Z      ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7]
2026-10-24T14:29:52.0038652Z  339 │
2026-10-24T14:29:52.0038757Z  340 │ const layerTest = AnalyticsService.layerTest;
2026-10-24T14:29:52.0038832Z      ·       ────┬────
2026-10-24T14:29:52.0038968Z      ·           ╰── 'layerTest' is declared here
2026-10-24T14:29:52.0039018Z      ╰────
2026-10-24T14:29:52.0039122Z   help: Consider removing this declaration.
2026-10-24T14:29:52.0039129Z
2026-10-24T14:29:52.0039301Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T14:29:52.0039453Z      ╭─[apps/web/src/components/CommandPaletteThreadItems.tsx:152:58]
2026-10-24T14:29:52.0039633Z  151 │       if (threadSearchQuery.trim().length > 0 && !threadSearchQuery.startsWith(">") && !isOpen) {
2026-10-24T14:29:52.0039766Z  152 │         claimThreadOpen(thread.environmentId, thread.id, Date.now());
2026-10-24T14:29:52.0039892Z      ·                                                          ─────┬────
2026-10-24T14:29:52.0040064Z      ·                                                               ╰── Cannot call impure function
2026-10-24T14:29:52.0040119Z  153 │       }
2026-10-24T14:29:52.0040170Z      ╰────
2026-10-24T14:29:52.0040466Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T14:29:52.0040768Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T14:29:52.0040771Z
2026-10-24T14:29:52.0040940Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T14:29:52.0041088Z      ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
2026-10-24T14:29:52.0041220Z  371 │   const { open, onOpenChange, onSnooze, timestampFormat } = props;
2026-10-24T14:29:52.0041379Z  372 │   const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
2026-10-24T14:29:52.0041495Z      ·                                               ─────┬────
2026-10-24T14:29:52.0041660Z      ·                                                    ╰── Cannot call impure function
2026-10-24T14:29:52.0041725Z  373 │   return (
2026-10-24T14:29:52.0041777Z      ╰────
2026-10-24T14:29:52.0042059Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T14:29:52.0042388Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T14:29:52.0042390Z
2026-10-24T14:29:52.0042558Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T14:29:52.0042707Z      ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39]
2026-10-24T14:29:52.0042803Z  852 │   if (snoozeGateClock.thread !== thread) {
2026-10-24T14:29:52.0042980Z  853 │     setSnoozeGateClock({ thread, now: new Date().toISOString() });
2026-10-24T14:29:52.0043127Z      ·                                       ─────┬────
2026-10-24T14:29:52.0043285Z      ·                                            ╰── Cannot call impure function
2026-10-24T14:29:52.0043341Z  854 │   }
2026-10-24T14:29:52.0043392Z      ╰────
2026-10-24T14:29:52.0043671Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T14:29:52.0043969Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T14:29:52.0043971Z
2026-10-24T14:29:52.0044184Z   ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
2026-10-24T14:29:52.0044319Z     ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10]
2026-10-24T14:29:52.0044373Z  78 │
2026-10-24T14:29:52.0044512Z  79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string {
2026-10-24T14:29:52.0044600Z     ·          ────────┬───────
2026-10-24T14:29:52.0044752Z     ·                  ╰── 'describeSchedule' is declared here
2026-10-24T14:29:52.0044861Z  80 │   if (schedule.type === "webhook") return "On webhook";
2026-10-24T14:29:52.0044914Z     ╰────
2026-10-24T14:29:52.0045019Z   help: Consider removing this declaration.
2026-10-24T14:29:52.0045022Z
2026-10-24T14:29:52.0045499Z   ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
2026-10-24T14:29:52.0045687Z      ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
2026-10-24T14:29:52.0045760Z  520 │                 })).delivery;
2026-10-24T14:29:52.0045961Z  521 │ ╭─▶             while (delivery.outcome === "accepted") {
2026-10-24T14:29:52.0046080Z  522 │ │                 yield* Effect.yieldNow;
2026-10-24T14:29:52.0046228Z  523 │ │                 delivery = (yield* service.getWebhookDelivery({
2026-10-24T14:29:52.0046329Z  524 │ │                   id: task.id,
2026-10-24T14:29:52.0046444Z  525 │ │                   deliveryId: deliveryId!,
2026-10-24T14:29:52.0046544Z  526 │ │                 })).delivery;
2026-10-24T14:29:52.0046690Z  527 │ ╰─▶             }
2026-10-24T14:29:52.0046808Z  528 │                 assert.equal(delivery.outcome, "dispatch_failed");
2026-10-24T14:29:52.0046860Z      ╰────
2026-10-24T14:29:52.0046863Z
2026-10-24T14:29:52.0047073Z   ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used.
2026-10-24T14:29:52.0047179Z     ╭─[infra/relay/src/http/Api.ts:69:13]
2026-10-24T14:29:52.0047321Z  68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts";
2026-10-24T14:29:52.0047438Z  69 │ import * as HookForwarder from "../hooks/HookForwarder.ts";
2026-10-24T14:29:52.0047526Z     ·             ──────┬──────
2026-10-24T14:29:52.0047672Z     ·                   ╰── 'HookForwarder' is imported here
2026-10-24T14:29:52.0047776Z  70 │ import * as HeldHooks from "../hooks/HeldHooks.ts";
2026-10-24T14:29:52.0047877Z     ╰────
2026-10-24T14:29:52.0048006Z   help: Consider removing this import.
2026-10-24T14:29:52.0048008Z
2026-10-24T14:29:52.0048241Z   ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T14:29:52.0048366Z      ╭─[apps/server/src/terminal/Manager.test.ts:731:31]
2026-10-24T14:29:52.0048425Z  730 │       );
2026-10-24T14:29:52.0048603Z  731 │       const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot;
2026-10-24T14:29:52.0048702Z      ·                               ──────
2026-10-24T14:29:52.0048814Z  732 │       expect(snapshot?.history).toBe("aa😀\rEND");
2026-10-24T14:29:52.0048867Z      ╰────
2026-10-24T14:29:52.0049045Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T14:29:52.0049054Z
2026-10-24T14:29:52.0049257Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T14:29:52.0049430Z      ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17]
2026-10-24T14:29:52.0049495Z  817 │               <div
2026-10-24T14:29:52.0049610Z  818 │                 key={`${index}:${check.name}:${check.url ?? ""}`}
2026-10-24T14:29:52.0049751Z      ·                 ─────────────────────────────────────────────────
2026-10-24T14:29:52.0049920Z  819 │                 className="group flex items-center gap-2 rounded-md pr-1 hover:bg-accent/60"
2026-10-24T14:29:52.0049970Z      ╰────
2026-10-24T14:29:52.0050122Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T14:29:52.0050124Z
2026-10-24T14:29:52.0050364Z   ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used.
2026-10-24T14:29:52.0050489Z     ╭─[apps/server/src/checkpointing/Utils.ts:12:10]
2026-10-24T14:29:52.0050540Z  11 │
2026-10-24T14:29:52.0050642Z  12 │ function resolveThreadWorkspaceCwd(input: {
2026-10-24T14:29:52.0050745Z     ·          ────────────┬────────────
2026-10-24T14:29:52.0050919Z     ·                      ╰── 'resolveThreadWorkspaceCwd' is declared here
2026-10-24T14:29:52.0050986Z  13 │   readonly thread: {
2026-10-24T14:29:52.0051038Z     ╰────
2026-10-24T14:29:52.0051144Z   help: Consider removing this declaration.
2026-10-24T14:29:52.0051147Z
2026-10-24T14:29:52.0051407Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T14:29:52.0051586Z      ╭─[apps/server/src/serverRuntimeStartup.ts:728:7]
2026-10-24T14:29:52.0051668Z  727 │
2026-10-24T14:29:52.0051758Z  728 │ const layer = layerWithOptions();
2026-10-24T14:29:52.0051833Z      ·       ──┬──
2026-10-24T14:29:52.0051959Z      ·         ╰── 'layer' is declared here
2026-10-24T14:29:52.0052011Z      ╰────
2026-10-24T14:29:52.0052142Z   help: Consider removing this declaration.
2026-10-24T14:29:52.0052145Z
2026-10-24T14:29:52.0052508Z   ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T14:29:52.0052645Z       ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34]
2026-10-24T14:29:52.0052783Z  1785 │           const stat = branch.files!.find((file) => file.path === path)!;
2026-10-24T14:29:52.0052940Z  1786 │           const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({
2026-10-24T14:29:52.0053063Z       ·                                  ───────────────────
2026-10-24T14:29:52.0053127Z  1787 │             cwd,
2026-10-24T14:29:52.0053180Z       ╰────
2026-10-24T14:29:52.0053183Z
2026-10-24T14:29:52.0053428Z   ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret.
2026-10-24T14:29:52.0053556Z      ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:517:11]
2026-10-24T14:29:52.0053659Z  516 │         GIT_DIAGNOSTIC_LINE_PATTERN.test(line) ||
2026-10-24T14:29:52.0053797Z  517 │         (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)),
2026-10-24T14:29:52.0053886Z      ·           ───────────────
2026-10-24T14:29:52.0053943Z  518 │     )
2026-10-24T14:29:52.0053995Z      ╰────
2026-10-24T14:29:52.0054160Z   help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`.
2026-10-24T14:29:52.0054165Z
2026-10-24T14:29:52.0054351Z   ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used.
2026-10-24T14:29:52.0054490Z     ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18]
2026-10-24T14:29:52.0054577Z  14 │ import * as Layer from "effect/Layer";
2026-10-24T14:29:52.0054670Z  15 │ import type * as Scope from "effect/Scope";
2026-10-24T14:29:52.0054752Z     ·                  ──┬──
2026-10-24T14:29:52.0054887Z     ·                    ╰── 'Scope' is imported here
2026-10-24T14:29:52.0054975Z  16 │ import * as Stream from "effect/Stream";
2026-10-24T14:29:52.0055025Z     ╰────
2026-10-24T14:29:52.0055125Z   help: Consider removing this import.
2026-10-24T14:29:52.0055134Z
2026-10-24T14:29:52.0055306Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T14:29:52.0055447Z      ╭─[apps/server/src/process/externalLauncher.test.ts:186:12]
2026-10-24T14:29:52.0055500Z  185 │
2026-10-24T14:29:52.0055603Z  186 │ for (const {} of ["darwin", "linux"] as const) {
2026-10-24T14:29:52.0055674Z      ·            ──
2026-10-24T14:29:52.0055727Z  187 │ }
2026-10-24T14:29:52.0055778Z      ╰────
2026-10-24T14:29:52.0056013Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T14:29:52.0056016Z
2026-10-24T14:29:52.0056184Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T14:29:52.0056376Z      ╭─[apps/server/src/process/externalLauncher.test.ts:189:12]
2026-10-24T14:29:52.0056457Z  188 │
2026-10-24T14:29:52.0056524Z  189 │ for (const {} of [
2026-10-24T14:29:52.0056595Z      ·            ──
2026-10-24T14:29:52.0056688Z  190 │   { kind: "browser", folderVerb: "none" },
2026-10-24T14:29:52.0056738Z      ╰────
2026-10-24T14:29:52.0056967Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T14:29:52.0056969Z
2026-10-24T14:29:52.0057136Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T14:29:52.0057275Z      ╭─[apps/server/src/process/externalLauncher.test.ts:311:12]
2026-10-24T14:29:52.0057327Z  310 │
2026-10-24T14:29:52.0057457Z  311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) {
2026-10-24T14:29:52.0057529Z      ·            ──
2026-10-24T14:29:52.0057587Z  312 │ }
2026-10-24T14:29:52.0057640Z      ╰────
2026-10-24T14:29:52.0057870Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T14:29:52.0057872Z
2026-10-24T14:29:52.0058038Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T14:29:52.0058175Z      ╭─[apps/server/src/process/externalLauncher.test.ts:314:12]
2026-10-24T14:29:52.0058227Z  313 │
2026-10-24T14:29:52.0058292Z  314 │ for (const {} of [
2026-10-24T14:29:52.0058360Z      ·            ──
2026-10-24T14:29:52.0058415Z  315 │   {
2026-10-24T14:29:52.0058464Z      ╰────
2026-10-24T14:29:52.0058691Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T14:29:52.0058693Z
2026-10-24T14:29:52.0058984Z   ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T14:29:52.0059144Z      ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
2026-10-24T14:29:52.0059201Z  162 │   keys,
2026-10-24T14:29:52.0059276Z  163 │   overridingProjects = [],
2026-10-24T14:29:52.0059360Z      ·                        ──
2026-10-24T14:29:52.0059427Z  164 │   onClearOverrides,
2026-10-24T14:29:52.0059477Z      ╰────
2026-10-24T14:29:52.0059802Z   help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
2026-10-24T14:29:52.0059805Z
2026-10-24T14:29:52.0060046Z   ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-24T14:29:52.0060187Z      ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13]
2026-10-24T14:29:52.0060311Z  984 │           const changedBeforeDecline = draftChangedSinceSend();
2026-10-24T14:29:52.0060556Z  985 │ ╭─▶       const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
2026-10-24T14:29:52.0060679Z  986 │ │           (approval) => approval.requestId,
2026-10-24T14:29:52.0060815Z  987 │ ╰─▶       );
2026-10-24T14:29:52.0060956Z  988 │           const approvalResponding = approvalsToDecline.some((approval) =>
2026-10-24T14:29:52.0061007Z      ╰────
2026-10-24T14:29:52.0061085Z   help: Switch to `Set`
2026-10-24T14:29:52.0061087Z
2026-10-24T14:29:52.0061376Z   ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used.
2026-10-24T14:29:52.0061582Z       ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10]
2026-10-24T14:29:52.0061635Z  1397 │
2026-10-24T14:29:52.0061726Z  1398 │ function assertUserMessagesExclude(
2026-10-24T14:29:52.0061834Z       ·          ────────────┬────────────
2026-10-24T14:29:52.0062007Z       ·                      ╰── 'assertUserMessagesExclude' is declared here
2026-10-24T14:29:52.0062144Z  1399 │   projection: OrchestrationV2ThreadProjection,
2026-10-24T14:29:52.0062198Z       ╰────
2026-10-24T14:29:52.0062304Z   help: Consider removing this declaration.
2026-10-24T14:29:52.0062306Z
2026-10-24T14:29:52.0062476Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T14:29:52.0062601Z       ╭─[apps/web/src/components/Sidebar.tsx:1136:11]
2026-10-24T14:29:52.0062706Z  1135 │           foldSearchQuery(threadSearchQuery),
2026-10-24T14:29:52.0062776Z  1136 │           Date.now(),
2026-10-24T14:29:52.0062858Z       ·           ─────┬────
2026-10-24T14:29:52.0062994Z       ·                ╰── Cannot call impure function
2026-10-24T14:29:52.0063137Z  1137 │           // A list filter, as on mobile: a pick would move rows unexplained.
2026-10-24T14:29:52.0063189Z       ╰────
2026-10-24T14:29:52.0063478Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T14:29:52.0063780Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T14:29:52.0063789Z
2026-10-24T14:29:52.0063876Z Found 0 errors and 367 warnings in 5477 files (6.1s, 8 threads)
2026-10-24T14:29:52.0508789Z Post job cleanup.
2026-10-24T14:29:52.1118005Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-24T14:29:52.1191235Z Post job cleanup.
2026-10-24T14:29:52.1203041Z ##[start-action display=Cache full pnpm store;id=__331fab51-36e9-4e9b-9d1c-da5c89ea4d52.__actions_cache]
2026-10-24T14:29:52.1570541Z Post job cleanup.
2026-10-24T14:29:52.2196693Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074, not saving cache.
2026-10-24T14:29:52.2225620Z ##[end-action id=__331fab51-36e9-4e9b-9d1c-da5c89ea4d52.__actions_cache;outcome=success;conclusion=success;duration_ms=102]
2026-10-24T14:29:52.2227353Z ##[start-action display=Cache Vite+;id=__331fab51-36e9-4e9b-9d1c-da5c89ea4d52.vp_cache]
2026-10-24T14:29:52.2247218Z Post job cleanup.
2026-10-24T14:29:52.2834819Z Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache.
2026-10-24T14:29:52.2861847Z ##[end-action id=__331fab51-36e9-4e9b-9d1c-da5c89ea4d52.vp_cache;outcome=success;conclusion=success;duration_ms=63]
2026-10-24T14:29:52.2896950Z Post job cleanup.
2026-10-24T14:29:52.3284057Z [command]/usr/local/bin/git version
2026-10-24T14:29:52.3332803Z git version 2.55.0
2026-10-24T14:29:52.3349734Z Temporarily overriding HOME='/home/runner/_work/_temp/aa483762-5855-4bc6-acde-5c9ddf18e3e5' before making global git config changes
2026-10-24T14:29:52.3350084Z Adding repository directory to the temporary git global config as a safe directory
2026-10-24T14:29:52.3352482Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-24T14:29:52.3378168Z Removing SSH command configuration
2026-10-24T14:29:52.3381054Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-24T14:29:52.3401802Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-10-24T14:29:52.3514840Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-24T14:29:52.3534898Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-24T14:29:52.3571648Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-24T14:29:52.3598282Z ##[group]Run '/job_completed.sh'
2026-10-24T14:29:52.3611509Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-24T14:29:52.3611687Z env:
2026-10-24T14:29:52.3611801Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 182
2026-10-24T14:29:52.3611950Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 362
2026-10-24T14:29:52.3612106Z   BLACKSMITH_CHECK_RUN_ID: 120897908140
2026-10-24T14:29:52.3612321Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-24T14:29:52.3612497Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-24T14:29:52.3612633Z ##[endgroup]
2026-10-24T14:29:52.3690755Z Docker container cache not activated, skipping hash computation.
2026-10-24T14:29:52.3951023Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-24T14:29:52.3993480Z Cleaning up orphan processes