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