GitHub check
256 KB of 616 KB loaded Download the full log (616 KB)
360 KB of earlier output not loaded
Z โ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/effect-codex-app-server/src/schema.test.ts:51:18]
50 โ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
51 โ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
ยท โโโโโโโโโ
52 โ }
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/effect-codex-app-server/src/schema.test.ts:55:5]
54 โ assert.equal(
55 โ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"),
ยท โโโโโโโโโ
56 โ true,
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/effect-codex-app-server/src/schema.test.ts:59:5]
58 โ assert.equal(
59 โ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"),
ยท โโโโโโโโโ
60 โ true,
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/effect-codex-app-server/src/schema.test.ts:103:16]
102 โ
103 โ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true);
ยท โโโโโโโโโ
104 โ });
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/effect-acp/src/client.ts:1270:11]
1269 โ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
1270 โ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
1271 โ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
โฐโโโโ
โ react(memo-dependencies): Found extra memoization dependencies
โญโ[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:122:34]
121 โ return [...commands];
122 โ }, [activeThreadRef, pathname, registrationVersion, navigation]);
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `registrationVersion`
123 โ
โฐโโโโ
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
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3]
27 โ ) {
28 โ โญโโถ for (let attempt = 0; attempt < 100; attempt += 1) {
29 โ โ const available = yield* service.peek(workspaceRoot);
30 โ โ if (predicate(available)) return available;
31 โ โ yield* Effect.yieldNow;
32 โ โฐโโถ }
33 โ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`);
โฐโโโโ
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[apps/server/src/project/ProjectService.test.ts:94:3]
93 โ ) {
94 โ โญโโถ for (let attempt = 0; attempt < 100; attempt += 1) {
95 โ โ const project = Option.getOrThrow(yield* service.getById(projectId));
96 โ โ if (predicate(project)) return project;
97 โ โ yield* Effect.yieldNow;
98 โ โฐโโถ }
99 โ return yield* Effect.die(`Project ${projectId} was not enriched in time.`);
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/effect-acp/src/schema.test.ts:18:12]
17 โ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
18 โ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
ยท โโโโโโโโโ
19 โ expect(
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/effect-acp/src/schema.test.ts:20:7]
19 โ expect(
20 โ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
ยท โโโโโโโโโ
21 โ ).toBe(true);
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
โญโ[packages/effect-acp/src/protocol.test.ts:500:31]
499 โ
500 โ const response = yield* Schema.decodeUnknownEffect(
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
501 โ Schema.fromJsonString(JsonRpcErrorResponse),
โฐโโโโ
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
104 โ
105 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
106 โ clearReviewCommentTarget();
107 โ setPendingNativeCommentSelection(null);
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
108 โ }, [selectedSection?.id]);
โฐโโโโ
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/review/useReviewCommentSelectionController.ts:112:7]
109 โ
110 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
111 โ if (activeCommentTarget === null) {
112 โ setPendingNativeCommentSelection(null);
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
113 โ }
โฐโโโโ
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/review/useReviewCommentSelectionController.ts:108:7]
107 โ setPendingNativeCommentSelection(null);
108 โ }, [selectedSection?.id]);
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `selectedSection?.id`
109 โ
โฐโโโโ
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
โ 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:222:5]
221 โ let idlePasses = 0;
222 โ โญโโถ for (;;) {
223 โ โ yield* Effect.promise(() => Promise.resolve());
224 โ โ const pending = backgroundRuntime.pending.shift();
225 โ โ if (!pending) {
226 โ โ idlePasses++;
227 โ โ if (idlePasses >= 3) {
228 โ โ return;
229 โ โ }
230 โ โ continue;
231 โ โ }
232 โ โ idlePasses = 0;
233 โ โ const exit = yield* Effect.exit(
234 โ โ pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
235 โ โ );
236 โ โ yield* Effect.sync(() => {
237 โ โ pending.resolve(exit);
238 โ โ });
239 โ โฐโโถ }
240 โ },
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
โญโ[packages/effect-acp/src/errors.test.ts:129:28]
128 โ const secret = "acp-summary-secret";
129 โ const cause = yield* Schema.decodeUnknownEffect(
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
130 โ Schema.Struct({
โฐโโโโ
โ react(no-array-index-key): Usage of Array index in keys is not allowed
โญโ[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
222 โ ? snippetTokens.map((line, lineIndex) => (
223 โ <NativeText key={lineIndex}>
ยท โโโโโโโโโโโโโโโ
224 โ {lineIndex > 0 ? "\n" : ""}
โฐโโโโ
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/review/ReviewCommentCard.tsx:227:25]
226 โ <NativeText
227 โ key={tokenIndex}
ยท โโโโโโโโโโโโโโโโ
228 โ 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/modules/t3-source-text/src/SourceText.tsx:36:9]
35 โ <T3SourceTextRunNativeComponent
36 โ key={index}
ยท โโโโโโโโโโโ
37 โ style={flattenedStyle}
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
โ eslint(no-empty-pattern): Empty object binding pattern
โญโ[apps/server/src/processRunner.test.ts:264:14]
263 โ
264 โ for (const {} of ["timeout", "success"] as const) {
ยท โโ
265 โ }
โฐโโโโ
help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/review/ReviewSheet.tsx:456:7]
455 โ showAuxiliaryPane("inspector");
456 โ }, [environmentId, showAuxiliaryPane, threadId]);
ยท โโโโโโโฌโโโโโโ โโโโโฌโโโ
ยท โ โฐโโ Unnecessary dependency `threadId`
ยท โฐโโ Unnecessary dependency `environmentId`
457 โ const {
โฐโโโโ
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(static-components): Cannot create components during render
โญโ[apps/mobile/src/features/review/ReviewSheet.tsx:724:20]
491 โ // Expo may return null before registration or in older binaries; use the fallback.
492 โ const NativeReviewDiffView = resolveNativeReviewDiffView();
ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
ยท โฐโโ The component is created during render here
493 โ const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
494 โ const showcasedReviewDrawRef = useRef<string | null>(null);
495 โ const [isPullRefreshing, setIsPullRefreshing] = useState(false);
496 โ const handlePullToRefresh = async () => {
497 โ setIsPullRefreshing(true);
498 โ await refreshSelectedSection();
499 โ setIsPullRefreshing(false);
500 โ };
501 โ const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
502 โ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
503 โ const fileVisibility = useReviewFileVisibility({
504 โ threadKey: reviewCache.threadKey,
505 โ sectionId: selectedSection?.id ?? null,
506 โ files: reviewFiles,
507 โ cachedExpandedFileIds: selectedSection?.id
508 โ ? reviewCache.expandedFileIdsBySection[selectedSection.id]
509 โ : undefined,
510 โ cachedViewedFileIds: selectedSection?.id
511 โ ? reviewCache.viewedFileIdsBySection[selectedSection.id]
512 โ : undefined,
513 โ });
514 โ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
515 โ const commentSelection = useReviewCommentSelectionController({
516 โ environmentId,
517 โ threadId,
518 โ selectedSection,
519 โ nativeReviewDiffData,
520 โ });
521 โ const nativeBridge = useNativeReviewDiffBridge({
522 โ threadKey: reviewCache.threadKey,
523 โ sectionId: selectedSection?.id ?? null,
524 โ diff: selectedSection?.diff,
525 โ data: nativeReviewDiffData,
526 โ collapsedFileIds,
527 โ viewedFileIds,
528 โ selectedRowIds: commentSelection.selectedRowIds,
529 โ canHighlight: parsedDiff.kind === "files",
530 โ });
531 โ const showcaseReviewKey =
532 โ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
533 โ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
534 โ : null;
535 โ const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
536 โ nativeBridge.onDebug(event);
537 โ if (
538 โ showcaseReviewKey === null ||
539 โ showcasedReviewDrawRef.current === showcaseReviewKey ||
540 โ !isNativeReviewDiffDrawEvent(event.nativeEvent)
541 โ ) {
542 โ return;
543 โ }
544 โ showcasedReviewDrawRef.current = showcaseReviewKey;
545 โ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
546 โ };
547 โ
548 โ const handleSelectFile = async (fileId: string | null) => {
549 โ loadVisibleFile(fileId, true);
550 โ commentSelection.clearSelection();
551 โ if (fileId !== null && collapsedFileIds.includes(fileId)) {
552 โ toggleExpandedFile(fileId);
553 โ }
554 โ const nativeView = nativeReviewDiffViewRef.current;
555 โ if (!nativeView) return;
556 โ const result = await settlePromise(() =>
557 โ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
558 โ );
559 โ if (AsyncResult.isFailure(result)) {
560 โ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
561 โ }
562 โ };
563 โ const handleVisibleFileChange = (
564 โ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
565 โ ) => {
566 โ loadVisibleFile(event.nativeEvent.fileId ?? null);
567 โ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
568 โ };
569 โ const renderInspector = () => (
570 โ <ReviewFileNavigator
571 โ ref={reviewFileNavigatorRef}
572 โ files={nativeReviewDiffData.files}
573 โ headerInset={insets.top}
574 โ sectionId={selectedSection?.id ?? null}
575 โ onSelectFile={(fileId) => void handleSelectFile(fileId)}
576 โ />
577 โ );
578 โ
579 โ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
580 โ const { fileId } = event.nativeEvent;
581 โ if (fileId) {
582 โ loadVisibleFile(fileId, true);
583 โ toggleExpandedFile(fileId);
584 โ }
585 โ };
586 โ
587 โ const handleNativeToggleViewedFile = (
588 โ event: NativeSyntheticEvent<{ readonly fileId?: string }>,
589 โ ) => {
590 โ const { fileId } = event.nativeEvent;
591 โ if (fileId) {
592 โ toggleViewedFile(fileId);
593 โ }
594 โ };
595 โ
596 โ const parsedDiffNotice =
597 โ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
598 โ const hasCachedSelectedDiff = selectedSection?.diff != null;
599 โ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
600 โ const sectionMenu = buildReviewSectionMenu(reviewSections);
601 โ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
602 โ hasEnvironmentPresentation: environment.isReady,
603 โ isEnvironmentConnected: isEnvironmentReady,
604 โ hasCachedSelectedDiff,
605 โ hasAnyCachedDiff,
606 โ });
607 โ const handleRetryEnvironment = () => {
608 โ void retryEnvironment(environmentId);
609 โ };
610 โ const handleReturnToThread = () => {
611 โ if (navigation.canGoBack()) {
612 โ navigation.goBack();
613 โ return;
614 โ }
615 โ selectDetail({
616 โ name: "Thread",
617 โ params: { environmentId: String(environmentId), threadId: String(threadId) },
618 โ });
619 โ };
620 โ const androidHeaderSubtitle = [
621 โ selectedSection?.title,
622 โ headerDiffSummary.additions,
623 โ headerDiffSummary.deletions,
624 โ ]
625 โ .filter((part): part is string => Boolean(part))
626 โ .join(" ยท ");
627 โ
628 โ const showChangedFilesPane =
629 โ !showConnectionNotice &&
630 โ selectedSection !== null &&
631 โ parsedDiff.kind === "files" &&
632 โ NativeReviewDiffView !== null;
633 โ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
634 โ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
635 โ
636 โ const listHeader = (() => {
637 โ const children: ReactElement[] = [];
638 โ
639 โ if (error) {
640 โ children.push(
641 โ <View
642 โ key="review-error"
643 โ className={cn(
644 โ "bg-card px-4 py-3",
645 โ Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
646 โ )}
647 โ >
648 โ <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
649 โ <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
650 โ </View>,
651 โ );
652 โ }
653 โ
654 โ if (parsedDiffNotice) {
655 โ children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
656 โ }
657 โ
658 โ if (children.length === 0) {
659 โ return null;
660 โ }
661 โ
662 โ return <>{children}</>;
663 โ })();
664 โ const headerSubtitle = [
665 โ headerDiffSummary.additions,
666 โ headerDiffSummary.deletions,
667 โ pendingReviewCommentCount > 0
668 โ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
669 โ : null,
670 โ ]
671 โ .filter(Boolean)
672 โ .join(" ยท ");
673 โ const headerTitleText = selectedSection?.title ?? "Review changes";
674 โ
675 โ return (
676 โ <>
677 โ <ReviewHeader
678 โ environmentId={environmentId}
679 โ threadId={threadId}
680 โ title={headerTitleText}
681 โ subtitle={headerSubtitle}
682 โ androidSubtitle={androidHeaderSubtitle}
683 โ iconColor={headerIcon}
684 โ selectedThreadCwd={selectedThreadCwd}
685 โ sectionMenu={sectionMenu}
686 โ selectedSection={selectedSection}
687 โ showSectionToolbar={showSectionToolbar}
688 โ showChangedFilesToggle={showChangedFilesToggle}
689 โ onRefresh={handlePullToRefresh}
690 โ onSelectSection={selectSection}
691 โ onReturnToThread={handleReturnToThread}
692 โ />
693 โ
694 โ <ScreenContent>
695 โ <View className="flex-1 bg-sheet android:bg-sheet-solid">
696 โ {showConnectionNotice ? (
697 โ <View className="flex-1" style={{ paddingTop: topContentInset }}>
698 โ <EnvironmentConnectionNotice
699 โ environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
700 โ connection={
701 โ environment.presentation?.connection ?? {
702 โ phase: "available",
703 โ error: null,
704 โ traceId: null,
705 โ }
706 โ }
707 โ resourceName="review"
708 โ onRetry={handleRetryEnvironment}
709 โ />
710 โ </View>
711 โ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
712 โ <View
713 โ className="flex-1"
714 โ style={{
715 โ backgroundColor: nativeBridge.theme.background,
716 โ }}
717 โ >
718 โ <View
719 โ className="min-w-0 flex-1"
720 โ style={listHeader ? { paddingTop: topContentInset } : undefined}
721 โ >
722 โ {listHeader}
723 โ <View className="min-w-0 flex-1" collapsable={false}>
724 โ <NativeReviewDiffView
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ This component is created during render
725 โ collapsable={false}
โฐโโโโ
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
โ eslint(no-unused-vars): Identifier 'Duration' is imported but never used.
โญโ[packages/provider-pi/src/server/adapter.test.ts:24:13]
23 โ import * as Deferred from "effect/Deferred";
24 โ import * as Duration from "effect/Duration";
ยท โโโโโฌโโโ
ยท โฐโโ 'Duration' is imported here
25 โ import * as Effect from "effect/Effect";
โฐโโโโ
help: Consider removing this import.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:124:7]
119 โ
120 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
121 โ if (orientationSettled) return;
122 โ const orientation = getNativeShowcaseOrientation();
123 โ if (orientation === null) {
124 โ setOrientationSettled(true);
ยท โโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
125 โ return;
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:299:7]
287 โ
288 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
289 โ if (
290 โ scene === null ||
291 โ requestedScene === null ||
292 โ scene !== requestedScene ||
293 โ !hasFixture ||
294 โ !orientationSettled ||
295 โ !themeApplied ||
296 โ (scene === "agent-activity" && !agentActivityStaged) ||
297 โ !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
298 โ ) {
299 โ setReadyScene(null);
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
300 โ return;
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:129:9]
128 โ let cancelled = false;
129 โ let lastOutcome: string | null = null;
ยท โโโโโโฌโโโโโ
ยท โฐโโ 'lastOutcome' is declared here
130 โ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
โฐโโโโ
help: Consider removing this declaration.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5]
50 โ
51 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
52 โ traceDiffHighlight("viewport-reset", {
53 โ reset: diffHighlightTraceId(resetKey),
54 โ enabled,
55 โ rows: rows.length,
56 โ });
57 โ const previousRange = scheduler.reset();
58 โ highlightedRowIdsRef.current = new Set();
59 โ pendingPatchesRef.current = [];
60 โ setViewport({ scope: viewportScope, range: null });
ยท โโโโโโฌโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
61 โ setTokensPatchJson(createEmptyTokenPatch(resetKey));
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
28 โ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
29 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
30 โ if (snapshot && snapshot !== live) setHeld({ key, snapshot });
ยท โโโโฌโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
31 โ }, [key, live, snapshot]);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
โญโ[packages/provider-pi/src/server/adapter.ts:3337:7]
3336 โ
3337 โ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
ยท โโโฌโโ
ยท โฐโโ 'layer' is declared here
3338 โ Layer.effect(
โฐโโโโ
help: Consider removing this declaration.
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[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(
โฐโโโโ
โ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/usage/UsageService.ts:162:7]
161 โ
162 โ const layerTest = Layer.succeed(
ยท โโโโโฌโโโโ
ยท โฐโโ 'layerTest' is declared here
163 โ UsageService,
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Identifier 'serverEnvironment' is imported but never used.
โญโ[apps/web/src/components/LegacySidebar.tsx:211:40]
210 โ import { useClientSettings, updateClientSettings } from "~/hooks/useSettings";
211 โ import { primaryServerKeybindingsAtom, serverEnvironment } from "../state/server";
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ 'serverEnvironment' is imported here
212 โ import { appAtomRegistry } from "../rpc/atomRegistry";
โฐโโโโ
help: Consider removing this import.
โ 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/usage/UsageService.test.ts:2613:7]
2612 โ let orphanedAt: number | undefined;
2613 โ โญโโถ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
2614 โ โ const tasks: Array<() => void> = [];
2615 โ โ const dispatcher: Scheduler.SchedulerDispatcher = {
2616 โ โ scheduleTask: (task) => tasks.push(task),
2617 โ โ flush: () => {
2618 โ โ let task: (() => void) | undefined;
2619 โ โ while ((task = tasks.shift()) !== undefined) task();
2620 โ โ },
2621 โ โ };
2622 โ โ
2623 โ โ let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
2624 โ โ let requestChecks = 0;
2625 โ โ const scheduler: Scheduler.Scheduler = {
2626 โ โ executionMode: "async",
2627 โ โ makeDispatcher: () => dispatcher,
2628 โ โ shouldYield: (fiber) => {
2629 โ โ if (fiber !== requestFiber) return false;
2630 โ โ requestChecks += 1;
2631 โ โ if (requestChecks !== interruptAt) return false;
2632 โ โ fiber.interruptUnsafe();
2633 โ โ return true;
2634 โ โ },
2635 โ โ };
2636 โ โ
2637 โ โ const input: UsageSummaryInput = {
2638 โ โ ...WINDOW,
2639 โ โ sinceDay: UsageDay.make("2026-09-01"),
2640 โ โ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
2641 โ โ };
2642 โ โ const first = yield* service
2643 โ โ .readSummary(input)
2644 โ โ .pipe(
2645 โ โ Effect.exit,
2646 โ โ Effect.provideService(Scheduler.Scheduler, scheduler),
2647 โ โ Effect.forkChild,
2648 โ โ );
2649 โ โ requestFiber = first;
2650 โ โ yield* Effect.yieldNow;
2651 โ โ dispatcher.flush();
2652 โ โ
2653 โ โ const second = yield* service.readSummary(input).pipe(
2654 โ โ Effect.match({
2655 โ โ onFailure: (error) => error.reason,
2656 โ โ onSuccess: () => "success" as const,
2657 โ โ }),
2658 โ โ Effect.provideService(Scheduler.Scheduler, scheduler),
2659 โ โ Effect.forkChild,
2660 โ โ );
2661 โ โ yield* Effect.yieldNow;
2662 โ โ dispatcher.flush();
2663 โ โ const secondExit = second.pollUnsafe();
2664 โ โ if (secondExit === undefined) {
2665 โ โ second.interruptUnsafe();
2666 โ โ orphanedAt = interruptAt;
2667 โ โ break;
2668 โ โ }
2669 โ โ if (Exit.isFailure(secondExit)) {
2670 โ โ assert.fail("the matching request fiber was interrupted");
2671 โ โ }
2672 โ โ assert.strictEqual(secondExit.value, "invalidWindow");
2673 โ โฐโโถ }
2674 โ
โฐโโโโ
โ typescript(no-extraneous-class): Unexpected class with only a constructor.
โญโ[apps/desktop/src/preview/Manager.test.ts:150:18]
149 โ BrowserWindow: browserWindowConstructor,
150 โ โญโโถ ClipboardItem: class {
151 โ โ constructor(data: Record<string, unknown>) {
152 โ โ clipboardItemConstructor(data);
153 โ โ }
154 โ โฐโโถ },
155 โ clipboard: {
โฐโโโโ
help: Try replacing this class with a standalone function or deleting it entirely
โ unicorn(no-new-array): Do not use `new Array(singleArgument)`.
โญโ[apps/web/src/terminal/ghostty/core.ts:186:19]
185 โ const count = Math.min(CHUNK_SIZE, graphemeLength - start);
186 โ const codes = new Array<number>(count);
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
187 โ 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/thread-inspector-content-stack.tsx:60:5]
58 โ
59 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
60 โ setMountedModes((current) => {
ยท โโโโโโโโฌโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
61 โ if (current.has(props.mode)) {
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used.
โญโ[packages/client-runtime/src/work-log/presentation.ts:237:10]
236 โ
237 โ function nonEmptyString(value: unknown): string | null {
ยท โโโโโโโโฌโโโโโโ
ยท โฐโโ 'nonEmptyString' is declared here
238 โ return typeof value === "string" && value.trim().length > 0 ? value : null;
โฐโโโโ
help: Consider removing this declaration.
โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadComposer.tsx:767:7]
766 โ if (settingsSheetPresentation.isActive) {
767 โ settingsRoutePresentation.present(settingsRouteSession);
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ Missing dependency `settingsRoutePresentation`
768 โ }
769 โ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
ยท โฐโโ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
770 โ
โฐโโโโ
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:388:5]
384 โ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
385 โ const animatedBorderRadius = useSharedValue(targetBorderRadius);
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ `animatedBorderRadius` originates here
386 โ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
387 โ useLayoutEffect(() => {
388 โ animatedBorderRadius.value = shouldAnimate
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ `animatedBorderRadius` cannot be modified
389 โ ? 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
โ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
โญโ[scripts/lib/cli-external-packages.test.ts:104:11]
103 โ const declared = {
104 โ ...(manifest.dependencies ?? {}),
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
105 โ ...(manifest.optionalDependencies ?? {}),
โฐโโโโ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
โ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
โญโ[scripts/lib/cli-external-packages.test.ts:105:11]
104 โ ...(manifest.dependencies ?? {}),
105 โ ...(manifest.optionalDependencies ?? {}),
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
106 โ ...(manifest.peerDependencies ?? {}),
โฐโโโโ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
โ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
โญโ[scripts/lib/cli-external-packages.test.ts:106:11]
105 โ ...(manifest.optionalDependencies ?? {}),
106 โ ...(manifest.peerDependencies ?? {}),
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
107 โ };
โฐโโโโ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/threads/PendingUserInputCard.tsx:90:5]
79 โ
80 โ const cardCoverage = props.cardCoverage;
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `cardCoverage` originates here
81 โ const barHeightRef = useRef(0);
82 โ const cardHeightRef = useRef(0);
83 โ const cardHeight = useSharedValue(0);
84 โ const notifyCoverage = useCallback(() => {
85 โ if (!cardCoverage) {
86 โ return;
87 โ }
88 โ // The card resizes with the keyboard every frame, so easing each sample would leave the
89 โ // feed inset and floating controls trailing it.
90 โ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `cardCoverage` cannot be modified
91 โ }, [cardCoverage]);
โฐโโโโ
help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/threads/PendingUserInputCard.tsx:102:7]
82 โ const cardHeightRef = useRef(0);
83 โ const cardHeight = useSharedValue(0);
ยท โโโโโโฌโโโโ
ยท โฐโโ `cardHeight` originates here
84 โ const notifyCoverage = useCallback(() => {
85 โ if (!cardCoverage) {
86 โ return;
87 โ }
88 โ // The card resizes with the keyboard every frame, so easing each sample would leave the
89 โ // feed inset and floating controls trailing it.
90 โ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
91 โ }, [cardCoverage]);
92 โ const handleBarLayout = useCallback(
93 โ (event: LayoutChangeEvent) => {
94 โ barHeightRef.current = event.nativeEvent.layout.height;
95 โ notifyCoverage();
96 โ },
97 โ [notifyCoverage],
98 โ );
99 โ const handleCardLayout = useCallback(
100 โ (event: LayoutChangeEvent) => {
101 โ cardHeightRef.current = event.nativeEvent.layout.height;
102 โ cardHeight.value = event.nativeEvent.layout.height;
ยท โโโโโโฌโโโโ
ยท โฐโโ `cardHeight` cannot be modified
103 โ 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:90:5]
83 โ const cardHeight = useSharedValue(0);
84 โ const notifyCoverage = useCallback(() => {
ยท โโโโฌโโโ
ยท โฐโโ This function may (indirectly) reassign or modify `cardCoverage` after render
85 โ if (!cardCoverage) {
86 โ return;
87 โ }
88 โ // The card resizes with the keyboard every frame, so easing each sample would leave the
89 โ // feed inset and floating controls trailing it.
90 โ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ This modifies `cardCoverage`
91 โ }, [cardCoverage]);
โฐโโโโ
help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(immutability): Cannot modify local variables after render completes
โญโ[apps/mobile/src/features/threads/PendingUserInputCard.tsx:90:5]
89 โ // feed inset and floating controls trailing it.
90 โ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ This modifies `cardCoverage`
91 โ }, [cardCoverage]);
92 โ const handleBarLayout = useCallback(
93 โ (event: LayoutChangeEvent) => {
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ This function may (indirectly) reassign or modify `cardCoverage` after render
94 โ 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:102:7]
99 โ const handleCardLayout = useCallback(
100 โ (event: LayoutChangeEvent) => {
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ This function may (indirectly) reassign or modify `cardHeight` after render
101 โ cardHeightRef.current = event.nativeEvent.layout.height;
102 โ cardHeight.value = event.nativeEvent.layout.height;
ยท โโโโโโฌโโโโ
ยท โฐโโ This modifies `cardHeight`
103 โ 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
โ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
โญโ[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:2143:15]
2142 โ assert.equal(
2143 โ items.filter((item) => item.type === "assistant_message").at(-1)?.text,
ยท โโโโโโ
2144 โ "authoritative answer",
โฐโโโโ
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.
โญโ[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:4245:7]
4244 โ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped);
4245 โ โญโโถ while (!responseLifecycle.includes("failed")) {
4246 โ โ yield* Effect.yieldNow;
4247 โ โฐโโถ }
4248 โ const responseExit = yield* Fiber.join(responseFiber);
โฐโโโโ
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6355:9]
6354 โ .pipe(Effect.forkScoped);
6355 โ โญโโถ while (promptGates.length < 1) {
6356 โ โ yield* Effect.yieldNow;
6357 โ โฐโโถ }
6358 โ assert.isDefined(sessionUpdateHandler, "session update handler must be wired");
โฐโโโโ
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6490:9]
6489 โ .pipe(Effect.forkScoped);
6490 โ โญโโถ while (promptGates.length < 2) {
6491 โ โ yield* Effect.yieldNow;
6492 โ โฐโโถ }
6493 โ if (sessionUpdateHandler === undefined || capturedMutation.current === null) {
โฐโโโโ
โ eslint(no-unused-vars): Identifier 'serverEnvironment' is imported but never used.
โญโ[apps/web/src/components/Sidebar.tsx:135:40]
134 โ import { environmentPresentations } from "../state/presentation";
135 โ import { primaryServerKeybindingsAtom, serverEnvironment } from "../state/server";
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ 'serverEnvironment' is imported here
136 โ import { environmentProjects } from "../state/projects";
โฐโโโโ
help: Consider removing this import.
โ react(purity): Cannot call impure function during render
โญโ[apps/web/src/components/Sidebar.tsx:1177:11]
1176 โ foldSearchQuery(threadSearchQuery),
1177 โ Date.now(),
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
1178 โ // A list filter, as on mobile: a pick would move rows unexplained.
โฐโโโโ
help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ react(capitalized-calls): Capitalized function called without JSX
โญโ[apps/mobile/src/features/threads/ThreadQueueControl.tsx:617:27]
616 โ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
617 โ const gesture = Gesture.Pan()
ยท โโฌโ
ยท โฐโโ `Pan` may be a component
618 โ .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
โ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used.
โญโ[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:956:10]
955 โ
956 โ function layerClaudeAgentSdkReplayQueryRunner(
ยท โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
ยท โฐโโ 'layerClaudeAgentSdkReplayQueryRunner' is declared here
957 โ transcript: ClaudeAgentSdkReplayTranscript,
โฐโโโโ
help: Consider removing this declaration.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/new-task-flow-provider.tsx:434:5]
424 โ : null;
425 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
426 โ if (
427 โ props.active === false ||
428 โ activeDraftKey !== null ||
429 โ editingPendingTask !== null ||
430 โ selectedProject === null
431 โ ) {
432 โ return;
433 โ }
434 โ setActiveDraftKey(
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
435 โ 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:1217:36]
1216 โ <ActiveNewTaskContext value={activeNewTask}>
1217 โ <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
ยท โโโโโโโโโโโโโ
1218 โ </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.
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[packages/client-runtime/src/state/shell-sync.test.ts:319:7]
318 โ });
319 โ โญโโถ for (let index = 0; index < 100; index += 1) {
320 โ โ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break;
321 โ โ yield* Effect.yieldNow;
322 โ โฐโโถ }
323 โ
โฐโโโโ
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[packages/client-runtime/src/state/shell-sync.test.ts:328:7]
327 โ yield* Deferred.succeed(releaseSave, undefined);
328 โ โญโโถ for (let index = 0; index < 100; index += 1) {
329 โ โ if ((yield* Ref.get(saved)).length > 0) break;
330 โ โ yield* Effect.yieldNow;
331 โ โฐโโถ }
332 โ
โฐโโโโ
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[packages/client-runtime/src/state/shell-sync.test.ts:457:7]
456 โ yield* Deferred.succeed(releaseUnenrichedSave, undefined);
457 โ โญโโถ for (let index = 0; index < 100; index += 1) {
458 โ โ const values = yield* Ref.get(saved);
459 โ โ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) {
460 โ โ break;
461 โ โ }
462 โ โ yield* Effect.yieldNow;
463 โ โฐโโถ }
464 โ
โฐโโโโ
โ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1409:7]
1408 โ
1409 โ const layerCodexAppServerClientFactoryCommand = (
ยท โโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
ยท โฐโโ 'layerCodexAppServerClientFactoryCommand' is declared here
1410 โ options: CodexClient.CodexAppServerClientOptions & {
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1645:7]
1644 โ
1645 โ const layer: Layer.Layer<
ยท โโโฌโโ
ยท โฐโโ 'layer' is declared here
1646 โ ProviderAdapter.ProviderAdapterV2,
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10633:7]
10632 โ
10633 โ const layer: Layer.Layer<
ยท โโโฌโโ
ยท โฐโโ 'layer' is declared here
10634 โ ProviderAdapter.ProviderAdapterV2,
โฐโโโโ
help: Consider removing this declaration.
โ 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.
โ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
โญโ[packages/client-runtime/src/state/usageAccess.ts:3:8]
2 โ AuthDiagnosticsReadScope,
3 โ type AuthSessionState,
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'AuthSessionState' is imported here
4 โ sessionGrantsScope,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
โญโ[apps/server/src/provider/AntigravityAuth.ts:303:20]
302 โ },
303 โ (effect, flow, stopSessions) =>
ยท โโโโโโโฌโโโโโ
ยท โฐโโ 'stopSessions' is declared here
304 โ effect.pipe(
โฐโโโโ
help: Consider removing this parameter.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:287:5]
285 โ .join("|");
286 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
287 โ stop();
ยท โโโฌโ
ยท โฐโโ Avoid calling setState() directly within an effect
288 โ }, [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:287:5]
286 โ useEffect(() => {
287 โ stop();
ยท โโโฌโ
ยท โฐโโ Missing dependency `stop`
288 โ }, [orderVersion]);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Unnecessary dependency `orderVersion`
289 โ 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:105:9]
104 โ const latest = useRef(props);
105 โ latest.current = props;
ยท โโโโฌโโโโโโโฌโโโ
ยท โ โฐโโ Cannot update ref value during render
ยท โฐโโ This value is a ref
106 โ 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:113:18]
112 โ .runOnJS(true)
113 โ .onStart(() => latest.current.onStart())
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
114 โ .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:114:19]
113 โ .onStart(() => latest.current.onStart())
114 โ .onUpdate((event) => latest.current.onMove(event.translationY))
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
115 โ .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:115:16]
114 โ .onUpdate((event) => latest.current.onMove(event.translationY))
115 โ .onEnd((event) => latest.current.onMove(event.translationY))
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
116 โ .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:116:21]
115 โ .onEnd((event) => latest.current.onMove(event.translationY))
116 โ .onFinalize((_, success) => latest.current.onEnd(!success)),
ยท โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
117 โ [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:275:9]
274 โ const latest = useRef({ rows, planners, moveThread });
275 โ latest.current = { rows, planners, moveThread };
ยท โโโโฌโโโโโโโฌโโโ
ยท โ โฐโโ Cannot update ref value during render
ยท โฐโโ This value is a ref
276 โ
โฐโโโโ
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:273:22]
272 โ const [preview, setPreview] = useState<Drag | null>(null);
273 โ const translateY = useRef(new Animated.Value(0)).current;
ยท โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
274 โ 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:350:16]
349 โ update(0);
350 โ let last = performance.now();
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Cannot call impure function
351 โ 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:108:15]
107 โ () =>
108 โ Gesture.Pan()
ยท โโฌโ
ยท โฐโโ `Pan` may be a component
109 โ .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:117:5]
112 โ .runOnJS(true)
113 โ .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
114 โ .onUpdate((event) => latest.current.onMove(event.translationY))
115 โ .onEnd((event) => latest.current.onMove(event.translationY))
116 โ .onFinalize((_, success) => latest.current.onEnd(!success)),
117 โ [props.disabled],
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ This dependency list is missing values used by the callback
118 โ );
โฐโโโโ
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(exhaustive-effect-dependencies): Found missing/extra effect dependencies
โญโ[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:250:7]
249 โ mountedRef.current = false;
250 โ flow.setBranchQuery("");
ยท โโโฌโ
ยท โฐโโ Missing dependency `flow`
251 โ };
252 โ }, [flow.setBranchQuery]);
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Overly precise dependency `flow.setBranchQuery`, use `flow` instead
253 โ
โฐโโโโ
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
โ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
โญโ[apps/mobile/src/state/use-model-option-memory.ts:21:7]
20 โ [instanceId]: {
21 โ ...(state[instanceId] ?? {}),
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
22 โ [model]: options,
โฐโโโโ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
โ eslint(no-unused-vars): Type 'Scope' is imported but never used.
โญโ[apps/server/src/provider/ProviderAuthService.ts:15:18]
14 โ import * as Layer from "effect/Layer";
15 โ import type * as Scope from "effect/Scope";
ยท โโโฌโโ
ยท โฐโโ 'Scope' is imported here
16 โ import * as Stream from "effect/Stream";
โฐโโโโ
help: Consider removing this import.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:565:5]
563 โ }, []);
564 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
565 โ setKeyboardStateSuspect(false);
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
566 โ }, [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:977:7]
974 โ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
975 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
976 โ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
977 โ setLastKnownKeyboardHeight(liveKeyboardHeight);
ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
978 โ }
โฐโโโโ
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:1220:5]
1218 โ
1219 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
1220 โ setAnchorMessageId(null);
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
1221 โ 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:566:7]
565 โ setKeyboardStateSuspect(false);
566 โ }, [isKeyboardVisible, liveKeyboardHeight]);
ยท โโโโโโโโโฌโโโโโโโโ โโโโโโโโโโฌโโโโโโโโ
ยท โ โฐโโ Unnecessary dependency `liveKeyboardHeight`
ยท โฐโโ Unnecessary dependency `isKeyboardVisible`
567 โ 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:1168:7]
1167 โ userInputInsetProgress.set(1);
1168 โ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `activeUserInputRequestId`
1169 โ 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:1226:15]
1225 โ freeze.set(false);
1226 โ }, [freeze, selectedThreadKey]);
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Unnecessary dependency `selectedThreadKey`
1227 โ
โฐโโโโ
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:1063:5]
1058 โ const composerPopoverHeight = useSharedValue(0);
1059 โ const floatingControlCoverage = useSharedValue(
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ `floatingControlCoverage` originates here
1060 โ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
1061 โ );
1062 โ useEffect(() => {
1063 โ floatingControlCoverage.value = withTiming(
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ `floatingControlCoverage` cannot be modified
1064 โ 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:1079:7]
1069 โ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
1070 โ const combinedContentInsetEndAdjustment = useSharedValue(
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
ยท โฐโโ `combinedContentInsetEndAdjustment` originates here
1071 โ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
1072 โ );
1073 โ useAnimatedReaction(
1074 โ () =>
1075 โ contentInsetEndAdjustment.value +
1076 โ floatingControlCoverage.value +
1077 โ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
1078 โ (value) => {
1079 โ combinedContentInsetEndAdjustment.value = value;
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
ยท โฐโโ `combinedContentInsetEndAdjustment` cannot be modified
1080 โ },
โฐโโโโ
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
โ eslint(no-empty-pattern): Empty object binding pattern
โญโ[apps/server/src/provider/Drivers/CodexDriver.test.ts:460:14]
459 โ
460 โ for (const {} of ["direct", "wrapper"] as const) {
ยท โโ
461 โ }
โฐโโโโ
help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
โ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
โญโ[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:287:50]
286 โ return (
287 โ <ExistingThreadSettingsRouteContext.Provider value={value}>
ยท โโโโโโโโโโโโโ
288 โ {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:651:44]
650 โ return (
651 โ <ThreadSettingsSessionContext.Provider value={value}>
ยท โโโโโโโโโโโโโ
652 โ {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:1460:55]
1459 โ return (
1460 โ <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
ยท โโโโโโโโโโโโโโโโโโโโ
1461 โ <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.
โ eslint(no-unused-vars): Identifier 'androidWorkspaceNavigationState' is imported but never used.
โญโ[apps/mobile/src/lib/android-workspace-navigation.test.ts:9:3]
8 โ import {
9 โ androidWorkspaceNavigationState,
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ 'androidWorkspaceNavigationState' is imported here
10 โ linkedThreadStep,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining
โญโ[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1849:8]
1848 โ assert.equal(
1849 โ (stored.context?.records[0] as { attachmentId: string }).attachmentId,
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
1850 โ stored.attachments[0]?.id,
โฐโโโโ
help: If this short-circuits with 'undefined' the evaluation will throw TypeError
โ 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);
โฐโโโโ
โ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
โญโ[apps/mobile/src/lib/markdownDocument.ts:259:28]
258 โ visit(parser.parse(markdown), false, false);
259 โ for (const edit of edits.reverse())
ยท โโโโโโโ
260 โ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
โฐโโโโ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
โ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
โญโ[apps/mobile/src/lib/markdownDocument.ts:290:28]
289 โ visit(parser.parse(markdown));
290 โ for (const edit of edits.reverse())
ยท โโโโโโโ
291 โ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
โฐโโโโ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
โ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
โญโ[apps/mobile/src/lib/markdownDocument.ts:339:38]
338 โ visit(parser.parse(markdown));
339 โ for (const lineStart of lineStarts.reverse()) {
ยท โโโโโโโ
340 โ // Lazy headers can lack container markers; copy the delimiter's markers to the header and blank line.
โฐโโโโ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
โ react(purity): Cannot call impure function during render
โญโ[apps/web/src/components/CommandPalette.tsx:2057:20]
2056 โ title: inferProjectTitleFromPath(destinationPath),
2057 โ createdAt: new Date().toISOString(),
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
2058 โ remoteUrl: addProjectCloneFlow.remoteUrl,
โฐโโโโ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
โญโ[packages/client-runtime/src/operations/projects.ts:238:51]
237 โ ): string {
238 โ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? "";
ยท โโโโโโ
239 โ return target.owner ? `${target.owner}/${folderName}` : folderName;
โฐโโโโ
help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
โ react(capitalized-calls): Capitalized function called without JSX
โญโ[apps/mobile/src/lib/useHoverGesture.ts:8:15]
7 โ () =>
8 โ Gesture.Hover()
ยท โโโฌโโ
ยท โฐโโ `Hover` may be a component
9 โ .manualActivation(true)
โฐโโโโ
help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
โ react(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:1239:23]
1238 โ <Text
1239 โ key={`${index}:${line}`}
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
1240 โ 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/ThreadMarkdownImage.tsx:52:5]
50 โ
51 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
52 โ setDecodedSize(null);
ยท โโโโโโโโฌโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
53 โ }, [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:56:5]
54 โ
55 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
56 โ setFailedUri(null);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
57 โ }, [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:53:7]
52 โ setDecodedSize(null);
53 โ }, [props.sourceKey]);
ยท โโโโโโโโฌโโโโโโโ
ยท โฐโโ Unnecessary dependency `props.sourceKey`
54 โ
โฐโโโโ
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:57:7]
56 โ setFailedUri(null);
57 โ }, [props.uri]);
ยท โโโโโฌโโโโ
ยท โฐโโ Unnecessary dependency `props.uri`
58 โ
โฐโโโโ
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
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/contracts/src/auth.test.ts:17:12]
16 โ it("decodes legacy review credentials without offering them in new grants", () => {
17 โ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
18 โ "review:write",
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/contracts/src/auth.test.ts:20:18]
19 โ ]);
20 โ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
21 โ expect(AuthStandardClientScopes).not.toContain("review:write");
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/contracts/src/auth.test.ts:57:21]
56 โ it("ignores unknown response permissions without falling back to broader scopes", () => {
57 โ const session = Schema.decodeUnknownSync(AuthSessionState)({
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
58 โ authenticated: true,
โฐโโโโ
โ react(purity): Cannot call impure function during render
โญโ[apps/web/src/components/sidebar/SidebarThreadRow.tsx:373:47]
372 โ const { open, onOpenChange, onSnooze, timestampFormat } = props;
373 โ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
374 โ 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:860:39]
859 โ if (snoozeGateClock.thread !== thread) {
860 โ setSnoozeGateClock({ thread, now: new Date().toISOString() });
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
861 โ }
โฐโโโโ
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:720:7]
719 โ
720 โ const layer = layerWithOptions();
ยท โโโฌโโ
ยท โฐโโ 'layer' is declared here
โฐโโโโ
help: Consider removing this declaration.
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[apps/server/src/assets/AssetAccess.test.ts:975:35]
974 โ // Every client and server release spells the resource this way on the wire.
975 โ const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
976 โ resource: { _tag: "github-media", cwd: "/repo", url },
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
โญโ[apps/server/src/assets/AssetAccess.test.ts:1012:32]
1011 โ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError");
1012 โ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error);
ยท โโโโโโโโโโโโโโโโโโโ
1013 โ expect(encoded).not.toContain(url);
โฐโโโโ
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/components/ComposerEditor.tsx:82:6]
81 โ },
82 โ [draftKey],
ยท โโโโโฌโโโ
ยท โฐโโ Unnecessary dependency `draftKey`
83 โ );
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
โญโ[packages/contracts/src/composerContext.test.ts:181:18]
180 โ it("sends a message without the records the wire cannot carry", () => {
181 โ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
182 โ version: 1,
โฐโโโโ
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:413:5]
411 โ
412 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
413 โ setInspectorSelection((current) => {
ยท โโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
414 โ 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:541:24]
540 โ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
541 โ โญโโถ const GitInspector = () => (
542 โ โ <GitOverviewSheet
543 โ โ headerInset={inspectorHeaderInset}
544 โ โ presentation="inspector"
545 โ โ route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
546 โ โ />
547 โ โฐโโถ );
548 โ 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:548:26]
547 โ );
548 โ โญโโถ const FilesInspector = () =>
549 โ โ selectedThread !== null && selectedThreadCwd !== null ? (
550 โ โ <ThreadFileNavigatorPane
551 โ โ cwd={selectedThreadCwd}
552 โ โ environmentId={selectedThread.environmentId}
553 โ โ headerInset={inspectorHeaderInset}
554 โ โ projectName={selectedThreadProject?.title ?? "Files"}
555 โ โ selectedPath={null}
556 โ โ onSelectFile={handleSelectInspectorFile}
557 โ โ />
558 โ โฐโโถ ) : null;
559 โ 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/components/VideoPreviewModal.tsx:67:5]
65 โ const { id: attachmentId, fileUri } = attachment;
66 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
67 โ setUri(null);
ยท โโโโฌโโ
ยท โฐโโ Avoid calling setState() directly within an effect
68 โ setError(null);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/components/VideoPreviewModal.tsx:90:7]
89 โ };
90 โ }, [attachmentId, fileUri]);
ยท โโโโโโโฌโโโโโ โโโโฌโโโ
ยท โ โฐโโ Unnecessary dependency `fileUri`
ยท โฐโโ Unnecessary dependency `attachmentId`
91 โ const mimeType = videoMimeType(attachment) ?? attachment.mimeType;
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
โญโ[apps/mobile/src/components/VideoPreviewModal.tsx:212:34]
211 โ useEffect(() => {
212 โ if (!isFocused && hasSource) props.onRequestClose();
ยท โโโฌโโ
ยท โฐโโ Missing dependency `props`
213 โ }, [isFocused, hasSource, props.onRequestClose]);
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Overly precise dependency `props.onRequestClose`, use `props` instead
214 โ const { source } = props;
โฐโโโโ
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:108:5]
104 โ );
105 โ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0);
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ `separationProgress` originates here
106 โ
107 โ useEffect(() => {
108 โ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING);
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ `separationProgress` cannot be modified
109 โ }, [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:132:5]
122 โ // Animate an in-flow sizer for native glass layout. Measure labels at fixed width to avoid repeated animation retargeting.
123 โ const capsuleWidth = useSharedValue<number | null>(null);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `capsuleWidth` originates here
124 โ const measuredWidthRef = useRef<number | null>(null);
125 โ const handleLabelLayout = (event: LayoutChangeEvent) => {
126 โ const width = event.nativeEvent.layout.width;
127 โ if (width === measuredWidthRef.current) {
128 โ return;
129 โ }
130 โ const first = measuredWidthRef.current === null;
131 โ measuredWidthRef.current = width;
132 โ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `capsuleWidth` cannot be modified
133 โ };
โฐโโโโ
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:139:7]
122 โ // Animate an in-flow sizer for native glass layout. Measure labels at fixed width to avoid repeated animation retargeting.
123 โ const capsuleWidth = useSharedValue<number | null>(null);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `capsuleWidth` originates here
124 โ const measuredWidthRef = useRef<number | null>(null);
125 โ const handleLabelLayout = (event: LayoutChangeEvent) => {
126 โ const width = event.nativeEvent.layout.width;
127 โ if (width === measuredWidthRef.current) {
128 โ return;
129 โ }
130 โ const first = measuredWidthRef.current === null;
131 โ measuredWidthRef.current = width;
132 โ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
133 โ };
134 โ const hasStatus = props.status !== null;
135 โ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
136 โ useEffect(() => {
137 โ if (!hasStatus) {
138 โ measuredWidthRef.current = null;
139 โ capsuleWidth.value = null;
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `capsuleWidth` cannot be modified
140 โ }
โฐโโโโ
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:139:7]
135 โ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
136 โ useEffect(() => {
ยท โโโโฌโโโ
ยท โฐโโ This function may (indirectly) reassign or modify `capsuleWidth` after render
137 โ if (!hasStatus) {
138 โ measuredWidthRef.current = null;
139 โ capsuleWidth.value = null;
ยท โโโโโโโฌโโโโโ
ยท โฐโโ This modifies `capsuleWidth`
140 โ }
โฐโโโโ
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:132:5]
124 โ const measuredWidthRef = useRef<number | null>(null);
125 โ const handleLabelLayout = (event: LayoutChangeEvent) => {
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ This function may (indirectly) reassign or modify `capsuleWidth` after render
126 โ const width = event.nativeEvent.layout.width;
127 โ if (width === measuredWidthRef.current) {
128 โ return;
129 โ }
130 โ const first = measuredWidthRef.current === null;
131 โ measuredWidthRef.current = width;
132 โ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ This modifies `capsuleWidth`
133 โ };
โฐโโโโ
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
โ eslint(no-empty-pattern): Empty array binding pattern
โญโ[apps/server/src/pullRequest/PullRequestService.test.ts:1436:12]
1435 โ
1436 โ for (const [] of [
ยท โโ
1437 โ ["github", "github.com"],
โฐโโโโ
help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2223:5]
2221 โ );
2222 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
2223 โ setExpandedVideo(null);
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
2224 โ setExpandedFile(null);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2716:9]
2707 โ const stopFollowingEnd = useEffectEvent(() => setEndFollow(false));
2708 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
2709 โ if (!jumpToMessageId || loadedListKey !== listMountKey) return;
2710 โ const index = presentedFeed.findIndex(
2711 โ (entry) => entry.type === "message" && entry.id === jumpToMessageId,
2712 โ );
2713 โ if (index === -1) {
2714 โ const runId = messageFoldRunId(props.feed, jumpToMessageId);
2715 โ if (runId && !expandedTurnIds.has(runId)) {
2716 โ setInteractionState((current) => ({
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
2717 โ ...current,
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:72:10]
71 โ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
72 โ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ 'isMarkdownFileLinkLabel' is imported here
73 โ 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:98:3]
97 โ import {
98 โ createContext,
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ 'createContext' is imported here
99 โ memo,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:114:3]
113 โ import {
114 โ ActivityIndicator,
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ 'ActivityIndicator' is imported here
115 โ Image,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:121:3]
120 โ Pressable,
121 โ ScrollView,
ยท โโโโโโฌโโโโ
ยท โฐโโ 'ScrollView' is imported here
122 โ StyleSheet,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:123:11]
122 โ StyleSheet,
123 โ Text as NativeText,
ยท โโโโโโฌโโโโ
ยท โฐโโ 'NativeText' is imported here
124 โ 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:146:10]
145 โ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
146 โ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ 'tryOpenExternalUrl' is imported here
147 โ 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:149:10]
148 โ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
149 โ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ 'faviconUrlForOrigin' is imported here
150 โ import {
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:163:10]
162 โ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
163 โ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'MediaVideoPlayer' is imported here
164 โ 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:167:3]
166 โ attachmentVideoPreviewSource,
167 โ mediaVideoPreviewUri,
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ 'mediaVideoPreviewUri' is imported here
168 โ mediaVideoThumbnailKey,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:168:3]
167 โ mediaVideoPreviewUri,
168 โ mediaVideoThumbnailKey,
ยท โโโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ 'mediaVideoThumbnailKey' is imported here
169 โ 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:169:8]
168 โ mediaVideoThumbnailKey,
169 โ type MediaVideoPreviewSource,
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ 'MediaVideoPreviewSource' is imported here
170 โ } from "../../lib/videoPreviewSource";
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:191:3]
190 โ import {
191 โ resolveMarkdownFontSizes,
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ 'resolveMarkdownFontSizes' is imported here
192 โ resolveNativeMarkdownTypography,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:198:3]
197 โ normalizeNativeMarkdownUrl,
198 โ resolveMarkdownInlineCodePresentation,
ยท โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ
ยท โฐโโ 'resolveMarkdownInlineCodePresentation' is imported here
199 โ resolveMarkdownLinkPresentation,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Type 'PendingThreadFeedEntry' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:237:8]
236 โ isCompactionCommandFeedEntry,
237 โ type PendingThreadFeedEntry,
ยท โโโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ 'PendingThreadFeedEntry' is imported here
238 โ type ThreadFeedRow,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:248:3]
247 โ useAssetUrl,
248 โ useAssetUrlState,
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'useAssetUrlState' is imported here
249 โ useRefreshAssetUrl,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Variable 'navigation' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:438:9]
437 โ const forkFromRun = useAtomCommand(threadEnvironment.forkFromRun, "fork from response");
438 โ const navigation = useNavigation();
ยท โโโโโโฌโโโโ
ยท โฐโโ 'navigation' is declared here
439 โ const selectDetail = useSelectWorkspaceDetail();
โฐโโโโ
help: Consider removing this declaration.
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2225:7]
2224 โ setExpandedFile(null);
2225 โ }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
ยท โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโฌโโโโโโ โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
ยท โ โ โฐโโ Unnecessary dependency `props.contentPresentation.kind`
ยท โ โฐโโ Unnecessary dependency `props.threadId`
ยท โฐโโ Unnecessary dependency `props.environmentId`
2226 โ 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:2685:7]
2684 โ reportHeaderMaterialVisibility(false);
2685 โ }, [feedThreadKey, reportHeaderMaterialVisibility]);
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ Unnecessary dependency `feedThreadKey`
2686 โ
โฐโโโโ
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:2701:7]
2700 โ }
2701 โ }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Unnecessary dependency `listMountKey`
2702 โ // Opening at a message: its run unfolds, the list stops following the end
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2895:7]
2894 โ }
2895 โ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
ยท โโโโโโโโฌโโโโโโโ โโโโโโโโโโฌโโโโโโโโ โโโโโโโโโฌโโโโโโโ
ยท โ โ โฐโโ Unnecessary dependency `expandedWorkRows`
ยท โ โฐโโ Unnecessary dependency `expandedWorkGroups`
ยท โฐโโ Unnecessary dependency `expandedTurnIds`
2896 โ
โฐโโโโ
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:628:9]
627 โ };
628 โ }, [props.environmentId, attachment.id, httpBaseUrl]),
ยท โโโโโโโโโโฌโโโโโโโโโ โโโโโโโฌโโโโโโ โโโโโโฌโโโโโ
ยท โ โ โฐโโ Unnecessary dependency `httpBaseUrl`
ยท โ โฐโโ Unnecessary dependency `attachment.id`
ยท โฐโโ Unnecessary dependency `props.environmentId`
629 โ );
โฐโโโโ
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/use-composer-command-menu.ts:221:7]
217 โ };
218 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
219 โ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null;
220 โ if (inserted) {
221 โ setSelection((current) =>
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
222 โ 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:301:7]
289 โ }, [hasWorkspaceSnapshot]);
290 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
291 โ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return;
292 โ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`;
293 โ const now = Date.now();
294 โ const lastRequest = workspaceRefreshKeyRef.current;
295 โ if (
296 โ lastRequest?.key === key &&
297 โ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS
298 โ )
299 โ return;
300 โ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) {
301 โ setWorkspaceRefreshRetry(null);
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
302 โ 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:331:5]
330 โ }, [
331 โ draftMessage,
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Unnecessary dependency `draftMessage`
332 โ 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(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(purity): Cannot call impure function during render
โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:712:76]
711 โ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() }));
712 โ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() });
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
713 โ 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:733:71]
732 โ const snoozePresets = useMemo(
733 โ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
734 โ [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:734:6]
733 โ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
734 โ [props.snoozePresetMinute, swipeActions.secondary],
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `props.snoozePresetMinute`
735 โ );
โฐโโโโ
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:780:7]
779 โ thread.pinnedAt,
780 โ variant,
ยท โโโโฌโโโ
ยท โฐโโ Unnecessary dependency `variant`
781 โ ],
โฐโโโโ
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:1229:21]
1228 โ {providerDrivers.slice(0, -1).map((driver, index) => (
1229 โ <View key={`${driver}:${index}`} className="-mr-1 opacity-30">
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
1230 โ <ProviderIcon provider={driver} size={12} />
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
Found 0 errors and 383 warnings in 5589 files (5.8s, 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=__cdc1a910-3d38-401a-8b1b-103b2321eb93.__actions_cache]
Post job cleanup.
Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-1af206af93d733fa7c4e35fa5de35961f61c0d15b9f10a3bf0b6b76380c4d2df, not saving cache.
##[end-action id=__cdc1a910-3d38-401a-8b1b-103b2321eb93.__actions_cache;outcome=success;conclusion=success;duration_ms=160]
##[start-action display=Cache Vite+;id=__cdc1a910-3d38-401a-8b1b-103b2321eb93.vp_cache]
Post job cleanup.
Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.4.0-node26.12.1-pnpm@12.14.0, not saving cache.
##[end-action id=__cdc1a910-3d38-401a-8b1b-103b2321eb93.vp_cache;outcome=success;conclusion=success;duration_ms=69]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/7611a110-3880-4aff-b7eb-0cec05687e29' 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: 146
BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 552
BLACKSMITH_CHECK_RUN_ID: 121182404788
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