GitHub check
256 KB of 598 KB loaded Download the full log (598 KB)
342 KB of earlier output not loaded
-10-24T11:04:40.4143536Z 573 │
574 │ if (!incomingShare) {
575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
576 │ alertedUnavailableIncomingShareIdRef.current = shareId;
577 │ Dialog.alert(
578 │ "Shared content unavailable",
579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.",
580 │ );
581 │ }
582 │ return;
583 │ }
584 │
585 │ if (
586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") &&
587 │ selectedEnvironmentServerConfig === null
588 │ ) {
589 │ return;
590 │ }
591 │
592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) {
593 │ alertedUnavailableIncomingShareIdRef.current = null;
594 │ }
595 │ startedShareImportKeyRef.current = importKey;
596 │ const draftBackup =
597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup);
599 │ const importToken = Symbol(importKey);
600 │ let didReserveShare = false;
601 │ let didConsumeShare = false;
602 │ let needsDraftRestore = false;
603 │ activeShareImportTokenRef.current = importToken;
604 │ setImportingShareKey(importKey);
· ──────────┬─────────
· ╰── Avoid calling setState() directly within an effect
605 │ void (async () => {
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5]
523 │ props.initialProjectRef,
524 │ props.incomingShareId,
· ──────────┬──────────
· ╰── Unnecessary dependency `props.incomingShareId`
525 │ props.pendingTaskId,
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5]
542 │ loadedBranchesProjectKeyRef.current = projectKey;
543 │ flow.loadBranches();
· ──┬─
· ╰── Missing dependency `flow`
544 │ }, [flow.loadBranches, selectedProject]);
· ────────┬────────
· ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead
545 │
╰────
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
765 │ flow.draftKey,
766 │ hasImportedIncomingShare,
· ────────────┬───────────
· ╰── Unnecessary dependency `hasImportedIncomingShare`
767 │ incomingShare,
768 │ isIncomingShareInboxLoading,
· ─────────────┬─────────────
· ╰── Unnecessary dependency `isIncomingShareInboxLoading`
769 │ isIncomingShareUnavailable,
770 │ props.incomingShareId,
771 │ props.initialProjectRef?.environmentId,
772 │ props.initialProjectRef?.projectId,
773 │ releaseShareReservation,
774 │ reserveShare,
775 │ selectedEnvironmentServerConfig,
776 │ selectedProject,
777 │ shareImportAttempt,
· ─────────┬────────
· ╰── Unnecessary dependency `shareImportAttempt`
778 │ ]);
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
256 │ return () => cancelAnimationFrame(frame);
257 │ }, [props.path, targetIndex]);
· ─────┬────
· ╰── Unnecessary dependency `props.path`
258 │
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
292 │ <SourceText
293 │ key={`${index}:${tokenIndex}`}
· ──────────────────────────────
294 │ style={{
╰────
help: Use a unique data-dependent key to avoid unnecessary rerenders
⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
308 │ return (
309 │ <SourceText key={index}>
· ───────────
310 │ {body}
╰────
help: Use a unique data-dependent key to avoid unnecessary rerenders
⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`.
╭─[apps/web/src/terminal/ghostty/core.ts:194:19]
193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start);
194 │ const codes = new Array<number>(count);
· ────────────────────────
195 │ for (let index = 0; index < count; index += 1) {
╰────
help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`.
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5]
283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
284 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
285 │ setNow(new Date().toISOString());
· ───┬──
· ╰── Avoid calling setState() directly within an effect
286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25]
364 │ // range) the boundary string is identical and the chain would die.
365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]);
· ───────┬──────
· ╰── Unnecessary dependency `snoozeWakeTick`
366 │ const listItems = ((): readonly SidebarListItem[] => {
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(purity): Cannot call impure function during render
╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53]
355 │ if (Number.isNaN(wakeAtMs)) return;
356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
· ─────┬────
· ╰── Cannot call impure function
357 │ const id = setTimeout(() => {
╰────
help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used.
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10]
16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native";
17 │ import { Image, Platform, StyleSheet } from "react-native";
· ──┬──
· ╰── 'Image' is imported here
18 │
╰────
help: Consider removing this import.
⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6]
225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
226 │ nativeEventSnapshotsRef.current,
· ───────────┬───────────
· ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
227 │ mostRecentEventCount,
228 │ );
229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
· ──────────────────────────┬──────────────────────────
· ╰── This dependency list is missing values used by the callback
230 │ const assumedValue = props.value;
╰────
help: Missing dependencies can cause an effect to fire less often than it should
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7]
236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState(
237 │ nativeEventSnapshotsRef.current,
· ───────────┬───────────
· ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
238 │ controlledEventCount,
239 │ assumedValue,
240 │ );
241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
· ───────────┬──────────
· ╰── Unnecessary dependency `controlledDocumentJson`
242 │ const acceptNativeEvent = useCallback(
╰────
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
161 │ const tokens = collectComposerInlineTokens(props.value, {
162 │ preserveTrailingFrom: confirmedTokensRef.current,
· ─────────────┬────────────
· ╰── Cannot access ref value during render
163 │ });
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
161 │ const tokens = collectComposerInlineTokens(props.value, {
162 │ preserveTrailingFrom: confirmedTokensRef.current,
· ─────────────┬────────────
· ╰── Passing a ref to a function may read its value during render
163 │ });
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23]
163 │ });
164 │ confirmedTokensRef.current = tokens;
· ─────────┬────────────┬───
· │ ╰── Cannot update ref value during render
· ╰── This value is a ref
165 │ return JSON.stringify(
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5]
205 │ mostRecentEventCount,
206 │ nativeEventSnapshotsRef.current,
· ───────────────┬───────────────
· ╰── Passing a ref to a function may read its value during render
207 │ );
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5]
211 │ mostRecentEventCount,
212 │ nativeEventSnapshotsRef.current,
· ───────────────┬───────────────
· ╰── Passing a ref to a function may read its value during render
213 │ );
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(memo-dependencies): Found missing memoization dependencies
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6]
161 │ const tokens = collectComposerInlineTokens(props.value, {
162 │ preserveTrailingFrom: confirmedTokensRef.current,
· ─────────┬────────
· ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
163 │ });
164 │ confirmedTokensRef.current = tokens;
165 │ return JSON.stringify(
166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
167 │ const record =
168 │ token.type === "context"
169 │ ? props.context?.records.find((record) => record.contextId === token.contextId)
170 │ : undefined;
171 │ const presentation = contextChipPresentation(
172 │ token.type === "context" ? token.kind : token.type,
173 │ record,
174 │ );
175 │ const icon = contextChipIcon(
176 │ presentation,
177 │ token.type === "mention" ? token.value : contextRecordFileName(record),
178 │ );
179 │ return {
180 │ type: token.type,
181 │ source: token.source,
182 │ start: token.start,
183 │ end: token.end,
184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor),
185 │ label:
186 │ token.type === "skill"
187 │ ? (skillLabels.get(token.value) ?? token.value)
188 │ : token.type === "context"
189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}`
190 │ : basename(token.value),
191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
192 │ iconUri: contextChipIconUri(icon),
193 │ tintsIcon: icon.kind === "chip",
194 │ };
195 │ }),
196 │ );
197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]);
· ───────────────────────────────┬───────────────────────────────
· ╰── This dependency list is missing values used by the callback
198 │ // Every render resolves against the snapshot history, so a render whose
╰────
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(memo-dependencies): Found missing memoization dependencies
╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5]
251 │ mostRecentEventCountRef.current = acknowledgedEventCount;
252 │ nativeEventSnapshotsRef.current.push({
· ───────────┬───────────
· ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
253 │ eventCount: acknowledgedEventCount,
254 │ value,
255 │ selection: nextSelection,
256 │ });
257 │ return acknowledgedEventCount;
258 │ },
259 │ [],
· ─┬
· ╰── This dependency list is missing values used by the callback
260 │ );
╰────
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
150 │
151 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
152 │ if (!controlledSelectedPath) {
153 │ return;
154 │ }
155 │ setExpandedPaths((current) => {
· ────────┬───────
· ╰── Avoid calling setState() directly within an effect
156 │ const ancestors = ancestorPaths(controlledSelectedPath);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
╭─[apps/server/src/serverSettings.test.ts:1741:32]
1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
· ───────────────────
1742 │ const scriptsJson = yield* Schema.encodeEffect(
╰────
⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
╭─[apps/server/src/serverSettings.test.ts:1742:34]
1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
1742 │ const scriptsJson = yield* Schema.encodeEffect(
· ───────────────────
1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)),
╰────
⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6]
227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
228 │ nativeEventSnapshotsRef.current,
· ───────────┬───────────
· ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
229 │ mostRecentEventCount,
230 │ );
231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
· ──────────────────────────┬──────────────────────────
· ╰── This dependency list is missing values used by the callback
232 │ const assumedValue = props.value;
╰────
help: Missing dependencies can cause an effect to fire less often than it should
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7]
238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState(
239 │ nativeEventSnapshotsRef.current,
· ───────────┬───────────
· ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
240 │ controlledEventCount,
241 │ assumedValue,
242 │ );
243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
· ───────────┬──────────
· ╰── Unnecessary dependency `controlledDocumentJson`
244 │ const acceptNativeEvent = useCallback(
╰────
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
163 │ const tokens = collectComposerInlineTokens(props.value, {
164 │ preserveTrailingFrom: confirmedTokensRef.current,
· ─────────────┬────────────
· ╰── Cannot access ref value during render
165 │ });
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
163 │ const tokens = collectComposerInlineTokens(props.value, {
164 │ preserveTrailingFrom: confirmedTokensRef.current,
· ─────────────┬────────────
· ╰── Passing a ref to a function may read its value during render
165 │ });
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23]
165 │ });
166 │ confirmedTokensRef.current = tokens;
· ─────────┬────────────┬───
· │ ╰── Cannot update ref value during render
· ╰── This value is a ref
167 │ return JSON.stringify(
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5]
207 │ mostRecentEventCount,
208 │ nativeEventSnapshotsRef.current,
· ───────────────┬───────────────
· ╰── Passing a ref to a function may read its value during render
209 │ );
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5]
213 │ mostRecentEventCount,
214 │ nativeEventSnapshotsRef.current,
· ───────────────┬───────────────
· ╰── Passing a ref to a function may read its value during render
215 │ );
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(memo-dependencies): Found missing memoization dependencies
╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6]
163 │ const tokens = collectComposerInlineTokens(props.value, {
164 │ preserveTrailingFrom: confirmedTokensRef.current,
· ─────────┬────────
· ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
165 │ });
166 │ confirmedTokensRef.current = tokens;
167 │ return JSON.stringify(
168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
169 │ const record =
170 │ token.type === "context"
171 │ ? props.context?.records.find((record) => record.contextId === token.contextId)
172 │ : undefined;
173 │ const presentation = contextChipPresentation(
174 │ token.type === "context" ? token.kind : token.type,
175 │ record,
176 │ );
177 │ const icon = contextChipIcon(
178 │ presentation,
179 │ token.type === "mention" ? token.value : contextRecordFileName(record),
180 │ );
181 │ return {
182 │ type: token.type,
183 │ source: token.source,
184 │ start: token.start,
185 │ end: token.end,
186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor),
187 │ label:
188 │ token.type === "skill"
189 │ ? (skillLabels.get(token.value) ?? token.value)
190 │ : token.type === "context"
191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}`
192 │ : basename(token.value),
193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
194 │ iconUri: contextChipIconUri(icon),
195 │ tintsIcon: icon.kind === "chip",
196 │ };
197 │ }),
198 │ );
199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]);
· ───────────────────────────────┬───────────────────────────────
· ╰── This dependency list is missing values used by the callback
200 │ // Every render resolves against the snapshot history, so a render whose
╰────
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(memo-dependencies): Found missing memoization dependencies
╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5]
253 │ mostRecentEventCountRef.current = acknowledgedEventCount;
254 │ nativeEventSnapshotsRef.current.push({
· ───────────┬───────────
· ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
255 │ eventCount: acknowledgedEventCount,
256 │ value,
257 │ selection: nextSelection,
258 │ });
259 │ return acknowledgedEventCount;
260 │ },
261 │ [],
· ─┬
· ╰── This dependency list is missing values used by the callback
262 │ );
╰────
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
259 │ .join("|");
260 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
261 │ stop();
· ──┬─
· ╰── Avoid calling setState() directly within an effect
262 │ }, [orderVersion]);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
260 │ useEffect(() => {
261 │ stop();
· ──┬─
· ╰── Missing dependency `stop`
262 │ }, [orderVersion]);
· ──────┬─────
· ╰── Unnecessary dependency `orderVersion`
263 │ useEffect(
╰────
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
95 │ const latest = useRef(props);
96 │ latest.current = props;
· ───┬──────┬───
· │ ╰── Cannot update ref value during render
· ╰── This value is a ref
97 │ const gesture = useMemo(
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
103 │ .runOnJS(true)
104 │ .onStart(() => latest.current.onStart())
· ───────────────┬──────────────
· ╰── Passing a ref to a function may read its value during render
105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
104 │ .onStart(() => latest.current.onStart())
105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
· ──────────────────────────┬─────────────────────────
· ╰── Passing a ref to a function may read its value during render
106 │ .onEnd((event) => latest.current.onMove(event.translationY))
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
106 │ .onEnd((event) => latest.current.onMove(event.translationY))
· ──────────────────────────┬─────────────────────────
· ╰── Passing a ref to a function may read its value during render
107 │ .onFinalize((_, success) => latest.current.onEnd(!success)),
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
106 │ .onEnd((event) => latest.current.onMove(event.translationY))
107 │ .onFinalize((_, success) => latest.current.onEnd(!success)),
· ───────────────────────┬──────────────────────
· ╰── Passing a ref to a function may read its value during render
108 │ [props.disabled],
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
248 │ const latest = useRef({ rows, planners, moveThread });
249 │ latest.current = { rows, planners, moveThread };
· ───┬──────┬───
· │ ╰── Cannot update ref value during render
· ╰── This value is a ref
250 │
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
246 │ const [preview, setPreview] = useState<Drag | null>(null);
247 │ const translateY = useRef(new Animated.Value(0)).current;
· ──────────────────┬──────────────────
· ╰── Cannot access ref value during render
248 │ const latest = useRef({ rows, planners, moveThread });
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(purity): Cannot call impure function during render
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
323 │ update(0);
324 │ let last = performance.now();
· ────────┬────────
· ╰── Cannot call impure function
325 │ const tick = () => {
╰────
help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
⚠ react(capitalized-calls): Capitalized function called without JSX
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
98 │ () =>
99 │ Gesture.Pan()
· ─┬─
· ╰── `Pan` may be a component
100 │ .enabled(!props.disabled)
╰────
help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
⚠ react(memo-dependencies): Found missing memoization dependencies
╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
103 │ .runOnJS(true)
104 │ .onStart(() => latest.current.onStart())
· ───┬──
· ╰── Missing dependency `latest`. 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
105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
106 │ .onEnd((event) => latest.current.onMove(event.translationY))
107 │ .onFinalize((_, success) => latest.current.onEnd(!success)),
108 │ [props.disabled],
· ────────┬───────
· ╰── This dependency list is missing values used by the callback
109 │ );
╰────
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'.
╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7]
345 │
346 │ const layerFromProviderAdapter: Layer.Layer<
· ────────────┬───────────
· ╰── 'layerFromProviderAdapter' is declared here
347 │ ProviderAdapterRegistryV2,
╰────
help: Consider removing this declaration.
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/StackHeader.tsx:185:9]
184 │ "options",
185 │ latestOptionFunctionsRef.current,
· ────────────────┬───────────────
· ╰── Passing a ref to a function may read its value during render
186 │ optionFunctionWrappersRef.current,
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/native/StackHeader.tsx:186:9]
185 │ latestOptionFunctionsRef.current,
186 │ optionFunctionWrappersRef.current,
· ────────────────┬────────────────
· ╰── Passing a ref to a function may read its value during render
187 │ ) as NativeStackNavigationOptions)
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
╭─[packages/client-runtime/src/operations/projects.ts:228:51]
227 │ ): string {
228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? "";
· ──────
229 │ return target.owner ? `${target.owner}/${folderName}` : folderName;
╰────
help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3]
134 │ let lastState = yield* SubscriptionRef.get(state);
135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) {
136 │ │ lastState = yield* SubscriptionRef.get(state);
137 │ │ if (predicate(lastState)) {
138 │ │ return lastState;
139 │ │ }
140 │ │ yield* Effect.yieldNow;
141 │ ╰─▶ }
142 │ return yield* Effect.die(
╰────
⚠ react(purity): Cannot call impure function during render
╭─[apps/web/src/hooks/useThreadActions.ts:821:56]
820 │ const resolved = resolveThreadTarget(target);
821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
· ─────┬────
· ╰── Cannot call impure function
822 │ return AsyncResult.failure(
╰────
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
⚠ react(purity): Cannot call impure function during render
╭─[apps/web/src/hooks/useThreadActions.ts:709:46]
708 │ const wokeAt = resolved
709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
· ─────┬────
· ╰── Cannot call impure function
710 │ : null;
╰────
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
╭─[apps/server/src/serverRuntimeStartup.ts:728:7]
727 │
728 │ const layer = layerWithOptions();
· ──┬──
· ╰── 'layer' is declared here
╰────
help: Consider removing this declaration.
⚠ react(purity): Cannot call impure function during render
╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76]
696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() }));
697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() });
· ─────┬────
· ╰── Cannot call impure function
698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString();
╰────
help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
⚠ react(purity): Cannot call impure function during render
╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71]
717 │ const snoozePresets = useMemo(
718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
· ─────┬────
· ╰── Cannot call impure function
719 │ [props.snoozePresetMinute, swipeActions.secondary],
╰────
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
⚠ react(memo-dependencies): Found extra memoization dependencies
╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6]
718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
719 │ [props.snoozePresetMinute, swipeActions.secondary],
· ────────────┬───────────
· ╰── Unnecessary dependency `props.snoozePresetMinute`
720 │ );
╰────
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(memo-dependencies): Found extra memoization dependencies
╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7]
764 │ thread.pinnedAt,
765 │ variant,
· ───┬───
· ╰── Unnecessary dependency `variant`
766 │ ],
╰────
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21]
1214 │ {providerDrivers.slice(0, -1).map((driver, index) => (
1215 │ <View key={`${driver}:${index}`} className="-mr-1 opacity-30">
· ──────────────────────────
1216 │ <ProviderIcon provider={driver} size={12} />
╰────
help: Use a unique data-dependent key to avoid unnecessary rerenders
⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed
╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13]
14 │ } from "@t3tools/contracts";
15 │ import type {} from "@t3tools/contracts";
· ──
16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl";
╰────
help: Remove empty braces
⚠ eslint(no-empty-pattern): Empty object binding pattern
╭─[apps/server/src/processRunner.test.ts:266:14]
265 │
266 │ for (const {} of ["timeout", "success"] as const) {
· ──
267 │ }
╰────
help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
⚠ react(purity): Cannot call impure function during render
╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props;
372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
· ─────┬────
· ╰── Cannot call impure function
373 │ return (
╰────
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
⚠ react(purity): Cannot call impure function during render
╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39]
852 │ if (snoozeGateClock.thread !== thread) {
853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() });
· ─────┬────
· ╰── Cannot call impure function
854 │ }
╰────
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'.
╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7]
217 │
218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect<void> =>
· ──────────┬──────────
· ╰── 'revokeActiveMcpThread' is declared here
219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void;
╰────
help: Consider removing this declaration.
⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'.
╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7]
220 │
221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect<void> =>
· ──────────────┬──────────────
· ╰── 'revokeAllActiveMcpCredentials' is declared here
222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void;
╰────
help: Consider removing this declaration.
⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
121 │ const dispatch = vi.fn((_: unknown) =>
· ┬
· ╰── '_' is declared here
122 │ (options.dispatchGate ?? Effect.void).pipe(
╰────
help: Consider removing this parameter.
⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
133 │ );
134 │ const listLocalBranchNames = vi.fn((_: string) =>
· ┬
· ╰── '_' is declared here
135 │ Effect.succeed(
╰────
help: Consider removing this parameter.
⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
177 │ });
178 │ const sendToThread = vi.fn((_: unknown) => {
· ┬
· ╰── '_' is declared here
179 │ switch (options.continuation ?? "queued") {
╰────
help: Consider removing this parameter.
⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
202 │ );
203 │ const removeWorktree = vi.fn((_: unknown) =>
· ┬
· ╰── '_' is declared here
204 │ options.removeWorktreeFails
╰────
help: Consider removing this parameter.
⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
207 │ );
208 │ const deleteLocalBranch = vi.fn((_: unknown) =>
· ┬
· ╰── '_' is declared here
209 │ options.deleteLocalBranchFails
╰────
help: Consider removing this parameter.
⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
212 │ );
213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
· ┬
· ╰── '_' is declared here
214 │ options.fetchWorktreeBaseFails
╰────
help: Consider removing this parameter.
⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
253 │ );
254 │ const localStatus = vi.fn((_: unknown) =>
· ┬
· ╰── '_' is declared here
255 │ Effect.succeed({
╰────
help: Consider removing this parameter.
⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
263 │ );
264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
· ┬
· ╰── '_' is declared here
265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
╰────
help: Consider removing this parameter.
⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
289 │ return (
290 │ <ExistingThreadSettingsRouteContext.Provider value={value}>
· ─────────────
291 │ {props.children}
╰────
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
653 │ return (
654 │ <ThreadSettingsSessionContext.Provider value={value}>
· ─────────────
655 │ {props.children}
╰────
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
1461 │ return (
1462 │ <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
· ────────────────────
1463 │ <ThreadSettingsPickerStack.Navigator
╰────
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
638 │
639 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
640 │ if (pendingLaunchEntry.key === launchTargetKey) {
641 │ return;
642 │ }
643 │ setPendingLaunchEntry({
· ──────────┬──────────
· ╰── Avoid calling setState() directly within an effect
644 │ key: launchTargetKey,
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
648 │
649 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
650 │ if (initialAttachGridEntry.key === launchTargetKey) {
651 │ return;
652 │ }
653 │ setInitialAttachGridEntry({
· ────────────┬────────────
· ╰── Avoid calling setState() directly within an effect
654 │ key: launchTargetKey,
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
743 │
744 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
745 │ if (!routeEnvironmentId || !routeThreadId) {
746 │ setLastGridSize({
· ───────┬───────
· ╰── Avoid calling setState() directly within an effect
747 │ cols: DEFAULT_TERMINAL_COLS,
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
537 │ });
538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]);
· ───────────┬──────────
· ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
708 │ sentInitialInputKeyRef.current = null;
709 │ }, [terminalKey]);
· ─────┬─────
· ╰── Unnecessary dependency `terminalKey`
710 │
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
799 │ };
800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
· ────────────┬──────────── ─────┬─────
· │ ╰── Unnecessary dependency `terminalKey`
· ╰── Unnecessary dependency `terminal.lifecycleVersion`
801 │
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(refs): Cannot access refs during render
╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
792 │ }
793 │ const pasteSession = pasteSessionRef.current;
· ───────────┬───────────
· ╰── Cannot access ref value during render
794 │
╰────
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
╭─[apps/web/src/components/chat/useComposerSend.ts:985:13]
984 │ const changedBeforeDecline = draftChangedSinceSend();
985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
986 │ │ (approval) => approval.requestId,
987 │ ╰─▶ );
988 │ const approvalResponding = approvalsToDecline.some((approval) =>
╰────
help: Switch to `Set`
⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15]
71 │ <Pressable
72 │ key={index}
· ───────────
73 │ accessibilityRole="button"
╰────
help: Use a unique data-dependent key to avoid unnecessary rerenders
⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7]
248 │ mountedRef.current = false;
249 │ flow.setBranchQuery("");
· ──┬─
· ╰── Missing dependency `flow`
250 │ };
251 │ }, [flow.setBranchQuery]);
· ─────────┬─────────
· ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead
252 │
╰────
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(static-components): Cannot create components during render
╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10]
196 │ const { onInput, onResize } = props;
197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView();
· ────────────────┬───────────────
· ╰── The component is created during render here
198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView);
199 │
200 │ useEffect(() => {
201 │ terminalDebugLog("native:surface", {
202 │ terminalKey: props.terminalKey,
203 │ native: hasNativeSurface,
204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(),
205 │ bufferLen: props.buffer.length,
206 │ isRunning: props.isRunning,
207 │ });
208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]);
209 │ const handleNativeInput = useCallback(
210 │ (event: NativeSyntheticEvent<TerminalInputEvent>) => {
211 │ if (!props.isRunning || props.readOnly) {
212 │ return;
213 │ }
214 │ terminalDebugLog("native:onInput", {
215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)),
216 │ });
217 │ onInput(event.nativeEvent.data);
218 │ },
219 │ [onInput, props.isRunning, props.readOnly],
220 │ );
221 │ const handleNativeResize = useCallback(
222 │ (event: NativeSyntheticEvent<TerminalResizeEvent>) => {
223 │ onResize({
224 │ cols: event.nativeEvent.cols,
225 │ rows: event.nativeEvent.rows,
226 │ });
227 │ },
228 │ [onResize],
229 │ );
230 │
231 │ if (NativeTerminalSurfaceView) {
232 │ return (
233 │ <View style={props.style}>
234 │ <NativeTerminalSurfaceView
· ────────────┬────────────
· ╰── This component is created during render
235 │ appearanceScheme={themeAppearance}
╰────
help: Components created during render will reset their state each time they are created. Declare components outside of render
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
113 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
115 │ return;
116 │ }
117 │ setEntry({ key: input.targetKey, location: candidate });
· ────┬───
· ╰── Avoid calling setState() directly within an effect
118 │ }, [candidate, entry.key, entry.location, input.targetKey]);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining
╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8]
1782 │ assert.equal(
1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId,
· ──────────────────────────
1784 │ stored.attachments[0]?.id,
╰────
help: If this short-circuits with 'undefined' the evaluation will throw TypeError
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5]
434 │ : null;
435 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
436 │ if (
437 │ props.active === false ||
438 │ activeDraftKey !== null ||
439 │ editingPendingTask !== null ||
440 │ selectedProject === null
441 │ ) {
442 │ return;
443 │ }
444 │ setActiveDraftKey(
· ────────┬────────
· ╰── Avoid calling setState() directly within an effect
445 │ createNewTaskDraft({
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36]
1243 │ <ActiveNewTaskContext value={activeNewTask}>
1244 │ <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
· ─────────────
1245 │ </ActiveNewTaskContext>
╰────
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:523:5]
521 │ }, []);
522 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
523 │ setKeyboardStateSuspect(false);
· ───────────┬───────────
· ╰── Avoid calling setState() directly within an effect
524 │ }, [isKeyboardVisible, liveKeyboardHeight]);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:888:7]
885 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
886 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
887 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
888 │ setLastKnownKeyboardHeight(liveKeyboardHeight);
· ─────────────┬────────────
· ╰── Avoid calling setState() directly within an effect
889 │ }
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1135:5]
1133 │
1134 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
1135 │ setAnchorMessageId(null);
· ─────────┬────────
· ╰── Avoid calling setState() directly within an effect
1136 │ setSubmittedMessageId(null);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:524:7]
523 │ setKeyboardStateSuspect(false);
524 │ }, [isKeyboardVisible, liveKeyboardHeight]);
· ────────┬──────── ─────────┬────────
· │ ╰── Unnecessary dependency `liveKeyboardHeight`
· ╰── Unnecessary dependency `isKeyboardVisible`
525 │ const handleOwnedInputFocusChange = (focused: boolean) => {
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1083:7]
1082 │ userInputInsetProgress.set(1);
1083 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
· ────────────┬───────────
· ╰── Unnecessary dependency `activeUserInputRequestId`
1084 │ const showContent = props.showContent ?? true;
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1141:15]
1140 │ freeze.set(false);
1141 │ }, [freeze, selectedThreadKey]);
· ────────┬────────
· ╰── Unnecessary dependency `selectedThreadKey`
1142 │
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(immutability): This value cannot be modified
╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:971:5]
966 │ const composerPopoverHeight = useSharedValue(0);
967 │ const floatingControlCoverage = useSharedValue(
· ───────────┬───────────
· ╰── `floatingControlCoverage` originates here
968 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
969 │ );
970 │ useEffect(() => {
971 │ floatingControlCoverage.value = withTiming(
· ───────────┬───────────
· ╰── `floatingControlCoverage` cannot be modified
972 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
╰────
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(immutability): This value cannot be modified
╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:989:7]
979 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
980 │ const combinedContentInsetEndAdjustment = useSharedValue(
· ────────────────┬────────────────
· ╰── `combinedContentInsetEndAdjustment` originates here
981 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
982 │ );
983 │ useAnimatedReaction(
984 │ () =>
985 │ contentInsetEndAdjustment.value +
986 │ floatingControlCoverage.value +
987 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
988 │ (value) => {
989 │ combinedContentInsetEndAdjustment.value = value;
· ────────────────┬────────────────
· ╰── `combinedContentInsetEndAdjustment` cannot be modified
990 │ },
╰────
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
29 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot });
· ───┬───
· ╰── Avoid calling setState() directly within an effect
31 │ }, [key, live, snapshot]);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5]
222 │ let idlePasses = 0;
223 │ ╭─▶ for (;;) {
224 │ │ yield* Effect.promise(() => Promise.resolve());
225 │ │ const pending = backgroundRuntime.pending.shift();
226 │ │ if (!pending) {
227 │ │ idlePasses++;
228 │ │ if (idlePasses >= 3) {
229 │ │ return;
230 │ │ }
231 │ │ continue;
232 │ │ }
233 │ │ idlePasses = 0;
234 │ │ const exit = yield* Effect.exit(
235 │ │ pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
236 │ │ );
237 │ │ yield* Effect.sync(() => {
238 │ │ pending.resolve(exit);
239 │ │ });
240 │ ╰─▶ }
241 │ },
╰────
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5]
2137 │ );
2138 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
2139 │ setExpandedVideo(null);
· ────────┬───────
· ╰── Avoid calling setState() directly within an effect
2140 │ setExpandedFile(null);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10]
65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
· ───────────┬───────────
· ╰── 'isMarkdownFileLinkLabel' is imported here
67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3]
91 │ import {
92 │ createContext,
· ──────┬──────
· ╰── 'createContext' is imported here
93 │ memo,
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3]
107 │ import {
108 │ ActivityIndicator,
· ────────┬────────
· ╰── 'ActivityIndicator' is imported here
109 │ Image,
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3]
114 │ Pressable,
115 │ ScrollView,
· ─────┬────
· ╰── 'ScrollView' is imported here
116 │ StyleSheet,
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11]
116 │ StyleSheet,
117 │ Text as NativeText,
· ─────┬────
· ╰── 'NativeText' is imported here
118 │ type ColorValue,
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10]
139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
· ─────────┬────────
· ╰── 'tryOpenExternalUrl' is imported here
141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10]
142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
· ─────────┬─────────
· ╰── 'faviconUrlForOrigin' is imported here
144 │ import {
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10]
156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
· ────────┬───────
· ╰── 'MediaVideoPlayer' is imported here
158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3]
160 │ attachmentVideoPreviewSource,
161 │ mediaVideoPreviewUri,
· ──────────┬─────────
· ╰── 'mediaVideoPreviewUri' is imported here
162 │ mediaVideoThumbnailKey,
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3]
161 │ mediaVideoPreviewUri,
162 │ mediaVideoThumbnailKey,
· ───────────┬──────────
· ╰── 'mediaVideoThumbnailKey' is imported here
163 │ type MediaVideoPreviewSource,
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8]
162 │ mediaVideoThumbnailKey,
163 │ type MediaVideoPreviewSource,
· ───────────┬───────────
· ╰── 'MediaVideoPreviewSource' is imported here
164 │ } from "../../lib/videoPreviewSource";
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15]
170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection";
171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter";
· ───────┬───────
· ╰── 'ReviewDiffTheme' is imported here
172 │ import {
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3]
185 │ import {
186 │ resolveMarkdownFontSizes,
· ────────────┬───────────
· ╰── 'resolveMarkdownFontSizes' is imported here
187 │ resolveNativeMarkdownTypography,
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10]
190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon";
191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons";
· ───────────┬──────────
· ╰── 'markdownLinkIconSource' is imported here
192 │ import {
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3]
193 │ normalizeNativeMarkdownUrl,
194 │ resolveMarkdownInlineCodePresentation,
· ──────────────────┬──────────────────
· ╰── 'resolveMarkdownInlineCodePresentation' is imported here
195 │ resolveMarkdownLinkIcon,
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3]
194 │ resolveMarkdownInlineCodePresentation,
195 │ resolveMarkdownLinkIcon,
· ───────────┬───────────
· ╰── 'resolveMarkdownLinkIcon' is imported here
196 │ resolveMarkdownLinkPresentation,
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10]
233 │ import { ThreadMcpApp } from "./McpAppWebView";
234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState";
· ────────────┬───────────
· ╰── 'useMarkdownCodeHighlight' is imported here
235 │ import {
╰────
help: Consider removing this import.
⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3]
237 │ useAssetUrl,
238 │ useAssetUrlState,
· ────────┬───────
· ╰── 'useAssetUrlState' is imported here
239 │ useRefreshAssetUrl,
╰────
help: Consider removing this import.
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7]
2140 │ setExpandedFile(null);
2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
· ─────────┬───────── ───────┬────── ───────────────┬──────────────
· │ │ ╰── Unnecessary dependency `props.contentPresentation.kind`
· │ ╰── Unnecessary dependency `props.threadId`
· ╰── Unnecessary dependency `props.environmentId`
2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7]
2608 │ reportHeaderMaterialVisibility(false);
2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]);
· ──────┬──────
· ╰── Unnecessary dependency `feedThreadKey`
2610 │
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7]
2624 │ }
2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
· ──────┬─────
· ╰── Unnecessary dependency `listMountKey`
2626 │
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7]
2781 │ }
2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
· ───────┬─────── ─────────┬──────── ────────┬───────
· │ │ ╰── Unnecessary dependency `expandedWorkRows`
· │ ╰── Unnecessary dependency `expandedWorkGroups`
· ╰── Unnecessary dependency `expandedTurnIds`
2783 │
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(memo-dependencies): Found extra memoization dependencies
╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9]
612 │ };
613 │ }, [props.environmentId, attachment.id, httpBaseUrl]),
· ─────────┬───────── ──────┬────── ─────┬─────
· │ │ ╰── Unnecessary dependency `httpBaseUrl`
· │ ╰── Unnecessary dependency `attachment.id`
· ╰── Unnecessary dependency `props.environmentId`
614 │ );
╰────
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(immutability): This value cannot be modified
╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
86 │
87 │ const cardCoverage = props.cardCoverage;
· ──────┬─────
· ╰── `cardCoverage` originates here
88 │ const barHeightRef = useRef(0);
89 │ const cardHeightRef = useRef(0);
90 │ const cardHeight = useSharedValue(0);
91 │ const notifyCoverage = useCallback(() => {
92 │ if (!cardCoverage) {
93 │ return;
94 │ }
95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
96 │ if (coverage === cardCoverage.value) {
97 │ return;
98 │ }
99 │ if (cardCoverage.value === 0) {
100 │ cardCoverage.value = coverage;
· ──────┬─────
· ╰── `cardCoverage` cannot be modified
101 │ return;
╰────
help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(immutability): This value cannot be modified
╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
89 │ const cardHeightRef = useRef(0);
90 │ const cardHeight = useSharedValue(0);
· ─────┬────
· ╰── `cardHeight` originates here
91 │ const notifyCoverage = useCallback(() => {
92 │ if (!cardCoverage) {
93 │ return;
94 │ }
95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
96 │ if (coverage === cardCoverage.value) {
97 │ return;
98 │ }
99 │ if (cardCoverage.value === 0) {
100 │ cardCoverage.value = coverage;
101 │ return;
102 │ }
103 │ cardCoverage.value = withTiming(coverage, {
104 │ duration: USER_INPUT_TOGGLE_DURATION_MS,
105 │ easing: Easing.out(Easing.cubic),
106 │ });
107 │ }, [cardCoverage]);
108 │ const handleBarLayout = useCallback(
109 │ (event: LayoutChangeEvent) => {
110 │ barHeightRef.current = event.nativeEvent.layout.height;
111 │ notifyCoverage();
112 │ },
113 │ [notifyCoverage],
114 │ );
115 │ const handleCardLayout = useCallback(
116 │ (event: LayoutChangeEvent) => {
117 │ cardHeightRef.current = event.nativeEvent.layout.height;
118 │ cardHeight.value = event.nativeEvent.layout.height;
· ─────┬────
· ╰── `cardHeight` cannot be modified
119 │ notifyCoverage();
╰────
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(immutability): Cannot modify local variables after render completes
╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
90 │ const cardHeight = useSharedValue(0);
91 │ const notifyCoverage = useCallback(() => {
· ───┬───
· ╰── This function may (indirectly) reassign or modify `cardCoverage` after render
92 │ if (!cardCoverage) {
93 │ return;
94 │ }
95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
96 │ if (coverage === cardCoverage.value) {
97 │ return;
98 │ }
99 │ if (cardCoverage.value === 0) {
100 │ cardCoverage.value = coverage;
· ──────┬─────
· ╰── This modifies `cardCoverage`
101 │ return;
╰────
help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(immutability): Cannot modify local variables after render completes
╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
99 │ if (cardCoverage.value === 0) {
100 │ cardCoverage.value = coverage;
· ──────┬─────
· ╰── This modifies `cardCoverage`
101 │ return;
102 │ }
103 │ cardCoverage.value = withTiming(coverage, {
104 │ duration: USER_INPUT_TOGGLE_DURATION_MS,
105 │ easing: Easing.out(Easing.cubic),
106 │ });
107 │ }, [cardCoverage]);
108 │ const handleBarLayout = useCallback(
109 │ (event: LayoutChangeEvent) => {
· ───────────────┬───────────────
· ╰── This function may (indirectly) reassign or modify `cardCoverage` after render
110 │ barHeightRef.current = event.nativeEvent.layout.height;
╰────
help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(immutability): Cannot modify local variables after render completes
╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
115 │ const handleCardLayout = useCallback(
116 │ (event: LayoutChangeEvent) => {
· ───────────────┬───────────────
· ╰── This function may (indirectly) reassign or modify `cardHeight` after render
117 │ cardHeightRef.current = event.nativeEvent.layout.height;
118 │ cardHeight.value = event.nativeEvent.layout.height;
· ─────┬────
· ╰── This modifies `cardHeight`
119 │ notifyCoverage();
╰────
help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(capitalized-calls): Capitalized function called without JSX
╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27]
601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
602 │ const gesture = Gesture.Pan()
· ─┬─
· ╰── `Pan` may be a component
603 │ .enabled(!props.disabled)
╰────
help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5]
58 │
59 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
60 │ setMountedModes((current) => {
· ───────┬───────
· ╰── Avoid calling setState() directly within an effect
61 │ if (current.has(props.mode)) {
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5]
398 │
399 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
400 │ setInspectorSelection((current) => {
· ──────────┬──────────
· ╰── Avoid calling setState() directly within an effect
401 │ if (props.renderInspector === undefined) {
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(no-unstable-nested-components): Do not define components during render.
╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24]
527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
528 │ ╭─▶ const GitInspector = () => (
529 │ │ <GitOverviewSheet
530 │ │ headerInset={inspectorHeaderInset}
531 │ │ presentation="inspector"
532 │ │ route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
533 │ │ />
534 │ ╰─▶ );
535 │ const FilesInspector = () =>
╰────
help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
⚠ react(no-unstable-nested-components): Do not define components during render.
╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26]
534 │ );
535 │ ╭─▶ const FilesInspector = () =>
536 │ │ selectedThread !== null && selectedThreadCwd !== null ? (
537 │ │ <ThreadFileNavigatorPane
538 │ │ cwd={selectedThreadCwd}
539 │ │ environmentId={selectedThread.environmentId}
540 │ │ headerInset={inspectorHeaderInset}
541 │ │ projectName={selectedThreadProject?.title ?? "Files"}
542 │ │ selectedPath={null}
543 │ │ onSelectFile={handleSelectInspectorFile}
544 │ │ />
545 │ ╰─▶ ) : null;
546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
╰────
help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
55 │
56 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
57 │ setDecodedSize(null);
· ───────┬──────
· ╰── Avoid calling setState() directly within an effect
58 │ }, [props.sourceKey]);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
59 │
60 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
61 │ setFailedUri(null);
· ──────┬─────
· ╰── Avoid calling setState() directly within an effect
62 │ }, [props.uri]);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg";
7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
· ────────┬────────
· ╰── 'ActivityIndicator' is imported here
8 │
╰────
help: Consider removing this import.
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
57 │ setDecodedSize(null);
58 │ }, [props.sourceKey]);
· ───────┬───────
· ╰── Unnecessary dependency `props.sourceKey`
59 │
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
61 │ setFailedUri(null);
62 │ }, [props.uri]);
· ────┬────
· ╰── Unnecessary dependency `props.uri`
63 │
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(immutability): This value cannot be modified
╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5]
107 │ );
108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0);
· ─────────┬────────
· ╰── `separationProgress` originates here
109 │
110 │ useEffect(() => {
111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING);
· ─────────┬────────
· ╰── `separationProgress` cannot be modified
112 │ }, [props.showScrollToEnd, separationProgress]);
╰────
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(immutability): This value cannot be modified
╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
128 │ // and repeatedly retargets the animation as it grows.
129 │ const capsuleWidth = useSharedValue<number | null>(null);
· ──────┬─────
· ╰── `capsuleWidth` originates here
130 │ const measuredWidthRef = useRef<number | null>(null);
131 │ const handleLabelLayout = (event: LayoutChangeEvent) => {
132 │ const width = event.nativeEvent.layout.width;
133 │ if (width === measuredWidthRef.current) {
134 │ return;
135 │ }
136 │ const first = measuredWidthRef.current === null;
137 │ measuredWidthRef.current = width;
138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
· ──────┬─────
· ╰── `capsuleWidth` cannot be modified
139 │ };
╰────
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(immutability): This value cannot be modified
╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
128 │ // and repeatedly retargets the animation as it grows.
129 │ const capsuleWidth = useSharedValue<number | null>(null);
· ──────┬─────
· ╰── `capsuleWidth` originates here
130 │ const measuredWidthRef = useRef<number | null>(null);
131 │ const handleLabelLayout = (event: LayoutChangeEvent) => {
132 │ const width = event.nativeEvent.layout.width;
133 │ if (width === measuredWidthRef.current) {
134 │ return;
135 │ }
136 │ const first = measuredWidthRef.current === null;
137 │ measuredWidthRef.current = width;
138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
139 │ };
140 │ const hasStatus = props.status !== null;
141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
142 │ useEffect(() => {
143 │ if (!hasStatus) {
144 │ measuredWidthRef.current = null;
145 │ capsuleWidth.value = null;
· ──────┬─────
· ╰── `capsuleWidth` cannot be modified
146 │ }
╰────
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(immutability): Cannot modify local variables after render completes
╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
142 │ useEffect(() => {
· ───┬───
· ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render
143 │ if (!hasStatus) {
144 │ measuredWidthRef.current = null;
145 │ capsuleWidth.value = null;
· ──────┬─────
· ╰── This modifies `capsuleWidth`
146 │ }
╰────
help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(immutability): Cannot modify local variables after render completes
╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
130 │ const measuredWidthRef = useRef<number | null>(null);
131 │ const handleLabelLayout = (event: LayoutChangeEvent) => {
· ───────────────┬───────────────
· ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render
132 │ const width = event.nativeEvent.layout.width;
133 │ if (width === measuredWidthRef.current) {
134 │ return;
135 │ }
136 │ const first = measuredWidthRef.current === null;
137 │ measuredWidthRef.current = width;
138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
· ──────┬─────
· ╰── This modifies `capsuleWidth`
139 │ };
╰────
help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(purity): Cannot call impure function during render
╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58]
139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })}
140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }}
· ─────┬────
· ╰── Cannot call impure function
141 │ onSelect={(selected) => {
╰────
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7]
211 │ };
212 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null;
214 │ if (inserted) {
215 │ setSelection((current) =>
· ──────┬─────
· ╰── Avoid calling setState() directly within an effect
216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted,
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7]
284 │ }, [hasWorkspaceSnapshot]);
285 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return;
287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`;
288 │ const now = Date.now();
289 │ const lastRequest = workspaceRefreshKeyRef.current;
290 │ if (
291 │ lastRequest?.key === key &&
292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS
293 │ )
294 │ return;
295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) {
296 │ setWorkspaceRefreshRetry(null);
· ────────────┬───────────
· ╰── Avoid calling setState() directly within an effect
297 │ return;
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5]
325 │ }, [
326 │ draftMessage,
· ──────┬─────
· ╰── Unnecessary dependency `draftMessage`
327 │ environmentId,
╰────
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(immutability): This value cannot be modified
╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5]
170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180;
171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0);
· ────┬───
· ╰── `rotation` originates here
172 │
173 │ useLayoutEffect(() => {
174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, {
· ────┬───
· ╰── `rotation` cannot be modified
175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS,
╰────
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23]
1245 │ <Text
1246 │ key={`${index}:${line}`}
· ────────────────────────
1247 │ selectable
╰────
help: Use a unique data-dependent key to avoid unnecessary rerenders
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
37 │ const [initialized, setInitialized] = useState(false);
38 │ useLayoutEffect(() => {
· ───────┬───────
· ╰── This is the containing effect
39 │ reset();
40 │ setInitialized(true);
· ───────┬──────
· ╰── Avoid calling setState() directly within an effect
41 │ }, [reset]);
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
88 │
89 │ useEffect(() => {
· ────┬────
· ╰── This is the containing effect
90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
91 │ const branchName = initialProjectRef.branch;
92 │ let active = true;
93 │ setPendingCheckouts((count) => count + 1);
· ─────────┬─────────
· ╰── Avoid calling setState() directly within an effect
94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
╰────
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
772 │ if (settingsSheetPresentation.isActive) {
773 │ settingsRoutePresentation.present(settingsRouteSession);
· ────────────┬────────────
· ╰── Missing dependency `settingsRoutePresentation`
774 │ }
775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
· ────────────────┬────────────────
· ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
776 │
╰────
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
⚠ react(immutability): This value cannot be modified
╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5]
387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius);
· ──────────┬─────────
· ╰── `animatedBorderRadius` originates here
389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
390 │ useLayoutEffect(() => {
391 │ animatedBorderRadius.value = shouldAnimate
· ──────────┬─────────
· ╰── `animatedBorderRadius` cannot be modified
392 │ ? withTiming(targetBorderRadius, {
╰────
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[packages/client-runtime/src/rpc/session.test.ts:226:3]
225 │ ) {
226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) {
227 │ │ const socket = sockets[index];
228 │ │ if (socket) {
229 │ │ return socket;
230 │ │ }
231 │ │ yield* Effect.yieldNow;
232 │ ╰─▶ }
233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket."));
╰────
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[packages/client-runtime/src/rpc/session.test.ts:240:3]
239 │ ) {
240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) {
241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index];
242 │ │ if (request) {
243 │ │ return request;
244 │ │ }
245 │ │ yield* Effect.yieldNow;
246 │ ╰─▶ }
247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request."));
╰────
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[packages/client-runtime/src/rpc/client.test.ts:131:9]
130 │ ) {
131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) {
132 │ │ if (subscriptions.length >= count) {
133 │ │ return;
134 │ │ }
135 │ │ yield* Effect.yieldNow;
136 │ ╰─▶ }
137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`));
╰────
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[packages/client-runtime/src/rpc/client.test.ts:252:7]
251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient)));
252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) {
253 │ │ yield* Effect.yieldNow;
254 │ ╰─▶ }
255 │ yield* SubscriptionRef.set(activeSession, Option.none());
╰────
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[packages/client-runtime/src/rpc/client.test.ts:258:7]
257 │
258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
259 │ │ yield* Effect.yieldNow;
260 │ ╰─▶ }
261 │ yield* Fiber.interrupt(subscriptionFiber);
╰────
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[packages/client-runtime/src/rpc/client.test.ts:322:7]
321 │ );
322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) {
323 │ │ yield* Effect.yieldNow;
324 │ ╰─▶ }
325 │
╰────
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[packages/client-runtime/src/rpc/client.test.ts:330:7]
329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient)));
330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
331 │ │ yield* Effect.yieldNow;
332 │ ╰─▶ }
333 │ yield* Fiber.interrupt(subscriptionFiber);
╰────
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11]
132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor;
133 │ ╭─▶ for (
134 │ │ let attempt = 0;
135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true";
136 │ │ attempt += 1
137 │ │ ) {
138 │ │ yield* Effect.yieldNow;
139 │ ╰─▶ }
140 │ expect((yield* monitor.snapshot).onBattery).toBe("true");
╰────
⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7]
412 │
413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make);
· ──┬──
· ╰── 'layer' is declared here
╰────
help: Consider removing this declaration.
⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
520 │ })).delivery;
521 │ ╭─▶ while (delivery.outcome === "accepted") {
522 │ │ yield* Effect.yieldNow;
523 │ │ delivery = (yield* service.getWebhookDelivery({
524 │ │ id: task.id,
525 │ │ deliveryId: deliveryId!,
526 │ │ })).delivery;
527 │ ╰─▶ }
528 │ assert.equal(delivery.outcome, "dispatch_failed");
╰────
⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10]
78 │
79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string {
· ────────┬───────
· ╰── 'describeSchedule' is declared here
80 │ if (schedule.type === "webhook") return "On webhook";
╰────
help: Consider removing this declaration.
⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
14 │
15 │ const legacyCredentials = {
· ────────┬────────
· ╰── 'legacyCredentials' is declared here
16 │ version: 1 as const,
╰────
help: Consider removing this declaration.
⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
╭─[packages/provider-cursor/src/server/auth.ts:249:20]
248 │ },
249 │ (effect, flow, stopSessions) =>
· ──────┬─────
· ╰── 'stopSessions' is declared here
250 │ effect.pipe(
╰────
help: Consider removing this parameter.
Found 0 errors and 362 warnings in 5420 files (5.2s, 8 threads)
Post job cleanup.
Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
Post job cleanup.
##[start-action display=Cache full pnpm store;id=__72382c44-2b10-4661-a05e-44d3e0f5c7b4.__actions_cache]
Post job cleanup.
Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d, not saving cache.
##[end-action id=__72382c44-2b10-4661-a05e-44d3e0f5c7b4.__actions_cache;outcome=success;conclusion=success;duration_ms=136]
##[start-action display=Cache Vite+;id=__72382c44-2b10-4661-a05e-44d3e0f5c7b4.vp_cache]
Post job cleanup.
Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache.
##[end-action id=__72382c44-2b10-4661-a05e-44d3e0f5c7b4.vp_cache;outcome=success;conclusion=success;duration_ms=70]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/0b78dfb6-42ca-4c8c-94e3-fad64bccfe33' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
Removing SSH command configuration
[command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
Warning: The process '/usr/local/bin/git' failed with exit code 128
A job completed hook has been configured by the self-hosted runner administrator
▸ Run '/job_completed.sh'
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
env:
BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155
BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370
BLACKSMITH_CHECK_RUN_ID: 120855859117
BLACKSMITH_JOB_DISPLAY_NAME: Lint
GITHUB_ACTIONS_CACHE_MODE: write
Docker container cache not activated, skipping hash computation.
No active SSH sessions detected. Proceeding with shutdown immediately.
Cleaning up orphan processes