GitHub check
256 KB of 604 KB loaded Download the full log (604 KB)
348 KB of earlier output not loaded
174 โ rotation.value = withTiming(props.expanded ? expandedAngle : 0, {
ยท โโโโโฌโโโ
ยท โฐโโ `rotation` cannot be modified
175 โ duration: THREAD_DISCLOSURE_TRANSITION_MS,
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(no-array-index-key): Usage of Array index in keys is not allowed
โญโ[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23]
1245 โ <Text
1246 โ key={`${index}:${line}`}
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
1247 โ selectable
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
โ 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:1269:11]
1268 โ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
1269 โ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
1270 โ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
โฐโโโโ
โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
โญโ[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7]
248 โ mountedRef.current = false;
249 โ flow.setBranchQuery("");
ยท โโโฌโ
ยท โฐโโ Missing dependency `flow`
250 โ };
251 โ }, [flow.setBranchQuery]);
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Overly precise dependency `flow.setBranchQuery`, use `flow` instead
252 โ
โฐโโโโ
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27]
151 โ <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
152 โ {props.children(open)}
ยท โโโฌโ
ยท โฐโโ Cannot access ref value during render
153 โ </View>
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(memo-dependencies): Found missing/extra memoization dependencies
โญโ[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9]
139 โ if (action.id !== undefined) {
140 โ props.onPressAction?.({
ยท โโโฌโโ
ยท โฐโโ Missing dependency `props`
141 โ nativeEvent: { event: action.id },
142 โ } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
143 โ }
144 โ },
145 โ [close, props.onPressAction],
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Overly precise dependency `props.onPressAction`, use `props` instead
146 โ );
โฐโโโโ
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. 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/new-task-flow-provider.tsx:444:5]
434 โ : null;
435 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
436 โ if (
437 โ props.active === false ||
438 โ activeDraftKey !== null ||
439 โ editingPendingTask !== null ||
440 โ selectedProject === null
441 โ ) {
442 โ return;
443 โ }
444 โ setActiveDraftKey(
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
445 โ createNewTaskDraft({
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
โญโ[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36]
1243 โ <ActiveNewTaskContext value={activeNewTask}>
1244 โ <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
ยท โโโโโโโโโโโโโ
1245 โ </ActiveNewTaskContext>
โฐโโโโ
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
โ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used.
โญโ[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13]
24 โ import * as Schema from "effect/Schema";
25 โ import * as HostProcess from "@t3tools/shared/HostProcess";
ยท โโโโโโฌโโโโโ
ยท โฐโโ 'HostProcess' is imported here
26 โ
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11]
123 โ const path = yield* Path.Path;
124 โ const serverConfig = yield* ServerConfig.ServerConfig;
ยท โโโโโโโฌโโโโโ
ยท โฐโโ 'serverConfig' is declared here
125 โ const serverSettings = yield* ServerSettings.ServerSettingsService;
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11]
124 โ const serverConfig = yield* ServerConfig.ServerConfig;
125 โ const serverSettings = yield* ServerSettings.ServerSettingsService;
ยท โโโโโโโโฌโโโโโโ
ยท โฐโโ 'serverSettings' is declared here
126 โ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService;
โฐโโโโ
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/NewTaskDraftScreen.tsx:361:7]
355 โ }, [cancelledIncomingShareId, navigation, props.incomingShareId]);
356 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
357 โ if (!isReturningToProjectPicker) {
358 โ return;
359 โ }
360 โ if (requestedInitialProjectAvailable) {
361 โ setIsReturningToProjectPicker(false);
ยท โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
362 โ return;
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9]
447 โ
448 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
449 โ if (props.pendingTaskId || props.draftId) {
450 โ return;
451 โ }
452 โ if (lastInitialProjectRefRef.current !== props.initialProjectRef) {
453 โ lastInitialProjectRefRef.current = props.initialProjectRef;
454 โ appliedInitialProjectKeyRef.current = null;
455 โ }
456 โ const initialEnvironmentId = props.initialProjectRef?.environmentId;
457 โ const initialProjectId = props.initialProjectRef?.projectId;
458 โ if (initialEnvironmentId && initialProjectId) {
459 โ const directProject =
460 โ projects.find(
461 โ (project) =>
462 โ project.environmentId === initialEnvironmentId && project.id === initialProjectId,
463 โ ) ?? null;
464 โ
465 โ if (directProject) {
466 โ // Apply the route's project once. Re-applying on every change would
467 โ // instantly revert environment/project switches made in the picker.
468 โ const directProjectKey = `${directProject.environmentId}:${directProject.id}`;
469 โ if (appliedInitialProjectKeyRef.current === directProjectKey) {
470 โ return;
471 โ }
472 โ if (props.initialProjectRef?.branch) {
473 โ if (
474 โ selectedProject?.environmentId !== directProject.environmentId ||
475 โ selectedProject.id !== directProject.id
476 โ ) {
477 โ setProject(directProject);
478 โ return;
479 โ }
480 โ if (!flow.draftKey) return;
481 โ // The route completes checkout before mounting this composer. Local
482 โ // mode reuses an existing worktree; worktree mode would create another.
483 โ updateComposerDraftSettings(flow.draftKey, {
484 โ workspaceSelection: {
485 โ mode: "local",
486 โ branch: props.initialProjectRef.branch,
487 โ worktreePath: props.initialProjectRef.worktreePath ?? null,
488 โ startFromOrigin: false,
489 โ },
490 โ });
491 โ }
492 โ appliedInitialProjectKeyRef.current = directProjectKey;
493 โ if (
494 โ selectedProject?.environmentId === directProject.environmentId &&
495 โ selectedProject.id === directProject.id
496 โ ) {
497 โ return;
498 โ }
499 โ setProject(directProject);
500 โ return;
501 โ }
502 โ
503 โ if (projects.length > 0) {
504 โ setIsReturningToProjectPicker(true);
ยท โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
505 โ }
โฐโโโโ
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/NewTaskDraftScreen.tsx:604:5]
545 โ
546 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
547 โ const shareId = props.incomingShareId;
548 โ const draftKey = flow.draftKey;
549 โ const destinationProject = selectedProject;
550 โ const initialEnvironmentId = props.initialProjectRef?.environmentId;
551 โ const initialProjectId = props.initialProjectRef?.projectId;
552 โ const selectedProjectMatchesRoute =
553 โ !initialEnvironmentId ||
554 โ !initialProjectId ||
555 โ (destinationProject?.environmentId === initialEnvironmentId &&
556 โ destinationProject.id === initialProjectId);
557 โ if (
558 โ !shareId ||
559 โ !draftKey ||
560 โ !destinationProject ||
561 โ !selectedProjectMatchesRoute ||
562 โ cancelledIncomingShareId === shareId
563 โ ) {
564 โ return;
565 โ }
566 โ const importKey = `${shareId}:${draftKey}`;
567 โ if (
568 โ startedShareImportKeyRef.current === importKey ||
569 โ cancellingShareImportKeyRef.current === importKey
570 โ ) {
571 โ return;
572 โ }
573 โ
574 โ if (!incomingShare) {
575 โ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
576 โ alertedUnavailableIncomingShareIdRef.current = shareId;
577 โ Dialog.alert(
578 โ "Shared content unavailable",
579 โ "The shared content is no longer in the inbox. You can continue editing this task draft.",
580 โ );
581 โ }
582 โ return;
583 โ }
584 โ
585 โ if (
586 โ incomingShare.attachments.some((attachment) => attachment.type === "file") &&
587 โ selectedEnvironmentServerConfig === null
588 โ ) {
589 โ return;
590 โ }
591 โ
592 โ if (alertedUnavailableIncomingShareIdRef.current === shareId) {
593 โ alertedUnavailableIncomingShareIdRef.current = null;
594 โ }
595 โ startedShareImportKeyRef.current = importKey;
596 โ const draftBackup =
597 โ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
598 โ shareImportDraftBackupRef.current.set(importKey, draftBackup);
599 โ const importToken = Symbol(importKey);
600 โ let didReserveShare = false;
601 โ let didConsumeShare = false;
602 โ let needsDraftRestore = false;
603 โ activeShareImportTokenRef.current = importToken;
604 โ setImportingShareKey(importKey);
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
605 โ void (async () => {
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5]
523 โ props.initialProjectRef,
524 โ props.incomingShareId,
ยท โโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `props.incomingShareId`
525 โ props.pendingTaskId,
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5]
542 โ loadedBranchesProjectKeyRef.current = projectKey;
543 โ flow.loadBranches();
ยท โโโฌโ
ยท โฐโโ Missing dependency `flow`
544 โ }, [flow.loadBranches, selectedProject]);
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Overly precise dependency `flow.loadBranches`, use `flow` instead
545 โ
โฐโโโโ
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
765 โ flow.draftKey,
766 โ hasImportedIncomingShare,
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `hasImportedIncomingShare`
767 โ incomingShare,
768 โ isIncomingShareInboxLoading,
ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `isIncomingShareInboxLoading`
769 โ isIncomingShareUnavailable,
770 โ props.incomingShareId,
771 โ props.initialProjectRef?.environmentId,
772 โ props.initialProjectRef?.projectId,
773 โ releaseShareReservation,
774 โ reserveShare,
775 โ selectedEnvironmentServerConfig,
776 โ selectedProject,
777 โ shareImportAttempt,
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Unnecessary dependency `shareImportAttempt`
778 โ ]);
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70]
554 โ assert.deepStrictEqual(
555 โ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest),
ยท โฌ
ยท โฐโโ '_' is declared here
556 โ [
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70]
1154 โ assert.deepStrictEqual(
1155 โ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest),
ยท โฌ
ยท โฐโโ '_' is declared here
1156 โ [
โฐโโโโ
help: Consider removing this parameter.
โ 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.
โ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
โญโ[apps/web/src/lib/composerContextReferences.ts:90:40]
89 โ let cursor = prompt.length;
90 โ for (const occurrence of occurrences.reverse()) {
ยท โโโโโโโ
91 โ let { start, end } = occurrence;
โฐโโโโ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
772 โ if (settingsSheetPresentation.isActive) {
773 โ settingsRoutePresentation.present(settingsRouteSession);
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ Missing dependency `settingsRoutePresentation`
774 โ }
775 โ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
ยท โฐโโ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
776 โ
โฐโโโโ
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5]
387 โ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
388 โ const animatedBorderRadius = useSharedValue(targetBorderRadius);
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ `animatedBorderRadius` originates here
389 โ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
390 โ useLayoutEffect(() => {
391 โ animatedBorderRadius.value = shouldAnimate
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ `animatedBorderRadius` cannot be modified
392 โ ? withTiming(targetBorderRadius, {
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/components/ProjectFavicon.tsx:172:5]
167 โ const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
168 โ useLayoutEffect(() => {
ยท โโโโโโโโฌโโโโโโโ
ยท โฐโโ This is the containing effect
169 โ if (faviconRequest === null) return;
170 โ
171 โ const endRequest = beginProjectFaviconRequest(faviconRequest);
172 โ setActiveFaviconRequest(faviconRequest);
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
173 โ return endRequest;
โฐโโโโ
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-array-index-key): Usage of Array index in keys is not allowed
โญโ[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17]
817 โ <div
818 โ key={`${index}:${check.name}:${check.url ?? ""}`}
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
819 โ className="group flex items-center gap-2 rounded-md pr-1 hover:bg-accent/60"
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/components/VideoPreviewModal.tsx:68:5]
66 โ const { id: attachmentId, fileUri } = attachment;
67 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
68 โ setUri(null);
ยท โโโโฌโโ
ยท โฐโโ Avoid calling setState() directly within an effect
69 โ 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:91:7]
90 โ };
91 โ }, [attachmentId, fileUri]);
ยท โโโโโโโฌโโโโโ โโโโฌโโโ
ยท โ โฐโโ Unnecessary dependency `fileUri`
ยท โฐโโ Unnecessary dependency `attachmentId`
92 โ 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:213:34]
212 โ useEffect(() => {
213 โ if (!isFocused && hasSource) props.onRequestClose();
ยท โโโฌโโ
ยท โฐโโ Missing dependency `props`
214 โ }, [isFocused, hasSource, props.onRequestClose]);
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Overly precise dependency `props.onRequestClose`, use `props` instead
215 โ 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(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39]
276 โ
277 โ โญโโถ return createElement(RawNativeView, {
278 โ โ ...nativeProps,
279 โ โ refreshEnabled: props.onPullToRefresh !== undefined,
280 โ โ ref: nativeRef,
281 โ โโโถ });
ยท โฐโโโโ Passing a ref to a function may read its value during render
282 โ }
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
โญโ[packages/provider-pi/src/server/adapter.ts:3405:7]
3404 โ
3405 โ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
ยท โโโฌโโ
ยท โฐโโ 'layer' is declared here
3406 โ Layer.effect(
โฐโโโโ
help: Consider removing this declaration.
โ react(purity): Cannot call impure function during render
โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:698:76]
697 โ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() }));
698 โ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() });
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
699 โ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString();
โฐโโโโ
help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ react(purity): Cannot call impure function during render
โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:71]
718 โ const snoozePresets = useMemo(
719 โ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
720 โ [props.snoozePresetMinute, swipeActions.secondary],
โฐโโโโ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ react(memo-dependencies): Found extra memoization dependencies
โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:6]
719 โ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
720 โ [props.snoozePresetMinute, swipeActions.secondary],
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `props.snoozePresetMinute`
721 โ );
โฐโโโโ
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(memo-dependencies): Found extra memoization dependencies
โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:766:7]
765 โ thread.pinnedAt,
766 โ variant,
ยท โโโโฌโโโ
ยท โฐโโ Unnecessary dependency `variant`
767 โ ],
โฐโโโโ
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(no-array-index-key): Usage of Array index in keys is not allowed
โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21]
1215 โ {providerDrivers.slice(0, -1).map((driver, index) => (
1216 โ <View key={`${driver}:${index}`} className="-mr-1 opacity-30">
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
1217 โ <ProviderIcon provider={driver} size={12} />
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
โ unicorn(require-module-specifiers): Empty import specifier is not allowed
โญโ[packages/contracts/src/rpc.ts:297:8]
296 โ } from "./device.ts";
297 โ import {} from "./previewAutomation.ts";
ยท โโ
298 โ import {
โฐโโโโ
help: Remove empty braces
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55]
61 โ }, []);
62 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
63 โ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl);
ยท โโโโโโโโฌโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
64 โ }, [playbackUrl, resolvedUrl]);
โฐโโโโ
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/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 'normalizeTerminalContextSelection' is declared but never used.
โญโ[apps/web/src/lib/terminalContext.ts:56:10]
55 โ
56 โ function normalizeTerminalContextSelection(
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
ยท โฐโโ 'normalizeTerminalContextSelection' is declared here
57 โ selection: TerminalContextSelection,
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/orchestration-v2/EffectWorker.ts:914:7]
913 โ
914 โ const layerDaemon: Layer.Layer<never, never, OrchestrationEffectWorkerV2> = Layer.effectDiscard(
ยท โโโโโโฌโโโโโ
ยท โฐโโ 'layerDaemon' is declared here
915 โ runDaemon.pipe(Effect.forkScoped),
โฐโโโโ
help: Consider removing this declaration.
โ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
โญโ[packages/contracts/src/baseSchemas.test.ts:39:9]
38 โ JSON.stringify(
39 โ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
40 โ { name: "a" },
โฐโโโโ
โ react(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
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
57 โ
58 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
59 โ const controller = new AbortController();
60 โ setLoadState("pending");
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
61 โ // A renewed signature is used on Retry, not as a reason to reset the native player.
โฐโโโโ
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/MediaVideoPlayer.tsx:71:7]
70 โ return () => controller.abort();
71 โ }, [player, props.playRequested, attempt]);
ยท โโโโฌโโ โโโโโโโโโโฌโโโโโโโโโ โโโโฌโโโ
ยท โ โ โฐโโ Unnecessary dependency `attempt`
ยท โ โฐโโ Unnecessary dependency `props.playRequested`
ยท โฐโโ Unnecessary dependency `player_0`
72 โ
โฐโโโโ
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
โ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
โญโ[packages/provider-grok/src/server/adapter.ts:408:7]
407 โ
408 โ const layer: Layer.Layer<
ยท โโโฌโโ
ยท โฐโโ 'layer' is declared here
409 โ ProviderAdapter.ProviderAdapterV2,
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used.
โญโ[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10]
1619 โ
1620 โ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean {
ยท โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ
ยท โฐโโ 'promptResponseHasMissingXAiStopReason' is declared here
1621 โ const meta = response._meta;
โฐโโโโ
help: Consider removing this declaration.
โ react(no-array-index-key): Usage of Array index in keys is not allowed
โญโ[apps/mobile/src/components/ComposerContextSheet.tsx:272:25]
271 โ {record.elements?.map((element, index) => (
272 โ <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
273 โ <ContextField
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
โ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
โญโ[apps/web/src/lib/announce.browser.test.ts:41:46]
40 โ
41 โ expect(regionTexts()).toEqual([...first].reverse());
ยท โโโโโโโ
42 โ expect(regionTexts()).toContain("Claude");
โฐโโโโ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
โ 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/FoundationPersistence.test.ts:566:7]
565 โ let afterSequence = created[0]!.sequence;
566 โ โญโโถ for (let index = 1; index <= 32; index += 1) {
567 โ โ const nextEvent = {
568 โ โ id: EventId.make(`event:foundation-stream-race:${index}`),
569 โ โ type: "thread.metadata-updated" as const,
570 โ โ threadId,
571 โ โ providerInstanceId,
572 โ โ occurredAt: now,
573 โ โ payload: { ...thread, title: `Race update ${index}` },
574 โ โ } satisfies OrchestrationV2DomainEvent;
575 โ โ const reader = yield* eventSink
576 โ โ .stream({ threadId, afterSequence })
577 โ โ .pipe(Stream.runHead, Effect.forkChild);
578 โ โ yield* Effect.yieldNow;
579 โ โ const written = yield* eventSink.write({ events: [nextEvent] });
580 โ โ const received = yield* Fiber.join(reader);
581 โ โ if (Option.isNone(received)) {
582 โ โ return yield* Effect.die("The event stream ended before delivering the live event.");
583 โ โ }
584 โ โ assert.equal(received.value.sequence, written[0]?.sequence);
585 โ โ assert.equal(received.value.event.id, nextEvent.id);
586 โ โ afterSequence = received.value.sequence;
587 โ โฐโโถ }
588 โ }),
โฐโโโโ
โ 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/FoundationPersistence.test.ts:2327:9]
2326 โ let settled = false;
2327 โ โญโโถ while (!settled) {
2328 โ โ settled = (yield* outbox.listByCommandId(commandId)).every(
2329 โ โ (effect) => effect.status === "succeeded",
2330 โ โ );
2331 โ โ if (!settled) yield* Effect.yieldNow;
2332 โ โฐโโถ }
2333 โ }).pipe(Effect.provide(layerWorker), Effect.scoped);
โฐโโโโ
โ react(purity): Cannot call impure function during render
โญโ[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58]
177 โ if (snoozeClockState.shell !== activeThreadShell) {
178 โ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() });
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
179 โ }
โฐโโโโ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/contracts/src/auth.test.ts:17:12]
16 โ it("decodes legacy review credentials without offering them in new grants", () => {
17 โ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
18 โ "review:write",
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/contracts/src/auth.test.ts:20:18]
19 โ ]);
20 โ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
21 โ expect(AuthStandardClientScopes).not.toContain("review:write");
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/contracts/src/auth.test.ts:58:21]
57 โ it("ignores unknown response permissions without falling back to broader scopes", () => {
58 โ const session = Schema.decodeUnknownSync(AuthSessionState)({
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
59 โ authenticated: true,
โฐโโโโ
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[apps/server/src/background/HostPowerMonitor.test.ts:133:11]
132 โ const monitor = yield* HostPowerMonitor.HostPowerMonitor;
133 โ โญโโถ for (
134 โ โ let attempt = 0;
135 โ โ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true";
136 โ โ attempt += 1
137 โ โ ) {
138 โ โ yield* Effect.yieldNow;
139 โ โฐโโถ }
140 โ expect((yield* monitor.snapshot).onBattery).toBe("true");
โฐโโโโ
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7]
154 โ }
155 โ }, [wrappedRender]);
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ Unnecessary dependency `wrappedRender`
156 โ
โฐโโโโ
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(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
โญโ[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42]
799 โ >
800 โ <AdaptiveWorkspaceContext.Provider value={contextValue}>
ยท โโโโโโโโโโโโโโโโโโโโ
801 โ <WindowHingeContext value={windowHinge}>
โฐโโโโ
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(purity): Cannot call impure function during render
โญโ[apps/web/src/components/Sidebar.tsx:1136:11]
1135 โ foldSearchQuery(threadSearchQuery),
1136 โ Date.now(),
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
1137 โ // A list filter, as on mobile: a pick would move rows unexplained.
โฐโโโโ
help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used.
โญโ[apps/server/src/checkpointing/Utils.ts:12:10]
11 โ
12 โ function resolveThreadWorkspaceCwd(input: {
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ 'resolveThreadWorkspaceCwd' is declared here
13 โ readonly thread: {
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/mcp/McpSessionRegistry.ts:218:7]
217 โ
218 โ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect<void> =>
ยท โโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ 'revokeActiveMcpThread' is declared here
219 โ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void;
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/mcp/McpSessionRegistry.ts:221:7]
220 โ
221 โ const revokeAllActiveMcpCredentials = (): Effect.Effect<void> =>
ยท โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
ยท โฐโโ 'revokeAllActiveMcpCredentials' is declared here
222 โ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void;
โฐโโโโ
help: Consider removing this declaration.
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5]
35 โ
36 โ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0);
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ `inspectorProgress` originates here
37 โ const { renderedInspectorWidth } = props;
38 โ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
39 โ
40 โ const onClosed = props.onClosed;
41 โ useEffect(() => {
42 โ inspectorProgress.value = withTiming(
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ `inspectorProgress` cannot be modified
43 โ inspectorVisible ? 1 : 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/layout/workspace-inspector-pane.tsx:67:7]
37 โ const { renderedInspectorWidth } = props;
38 โ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ `renderedContentWidth` originates here
39 โ
40 โ const onClosed = props.onClosed;
41 โ useEffect(() => {
42 โ inspectorProgress.value = withTiming(
43 โ inspectorVisible ? 1 : 0,
44 โ WORKSPACE_PANE_TIMING,
45 โ (finished) => {
46 โ if (finished === true && !inspectorVisible && onClosed !== undefined) {
47 โ runOnJS(onClosed)();
48 โ }
49 โ },
50 โ );
51 โ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
52 โ renderedInspectorWidth.set(
53 โ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
54 โ );
55 โ }, [
56 โ inspectorProgress,
57 โ inspectorVisible,
58 โ inspectorWidth,
59 โ onClosed,
60 โ renderedInspectorWidth,
61 โ resizing,
62 โ ]);
63 โ
64 โ useEffect(() => {
65 โ const targetWidth = inspectorWidth ?? 0;
66 โ if (!inspectorVisible || resizing) {
67 โ renderedContentWidth.value = targetWidth;
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ `renderedContentWidth` cannot be modified
68 โ return;
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7]
118 โ
119 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
120 โ if (orientationSettled) return;
121 โ const orientation = getNativeShowcaseOrientation();
122 โ if (orientation === null) {
123 โ setOrientationSettled(true);
ยท โโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
124 โ return;
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7]
292 โ
293 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
294 โ if (
295 โ scene === null ||
296 โ requestedScene === null ||
297 โ scene !== requestedScene ||
298 โ !hasFixture ||
299 โ !orientationSettled ||
300 โ !themeApplied ||
301 โ (scene === "agent-activity" && !agentActivityStaged) ||
302 โ !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
303 โ ) {
304 โ setReadyScene(null);
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
305 โ return;
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9]
127 โ let cancelled = false;
128 โ let lastOutcome: string | null = null;
ยท โโโโโโฌโโโโโ
ยท โฐโโ 'lastOutcome' is declared here
129 โ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
โญโ[packages/client-runtime/src/state/filesystem.ts:3:8]
2 โ AuthFilesystemReadScope,
3 โ type AuthSessionState,
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'AuthSessionState' is imported here
4 โ type FilesystemBrowseEntry,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used.
โญโ[packages/client-runtime/src/state/sharedSettings.ts:2:3]
1 โ import type {
2 โ EnvironmentId,
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ 'EnvironmentId' is imported here
3 โ ExecutionEnvironmentCapabilities,
โฐโโโโ
help: Consider removing this import.
โ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
โญโ[apps/web/src/components/chat/useComposerSend.ts:985:13]
984 โ const changedBeforeDecline = draftChangedSinceSend();
985 โ โญโโถ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
986 โ โ (approval) => approval.requestId,
987 โ โฐโโถ );
988 โ const approvalResponding = approvalsToDecline.some((approval) =>
โฐโโโโ
help: Switch to `Set`
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5]
76 โ
77 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
78 โ const { host, code } = parsePairingUrl(connectionPairingUrl);
79 โ setHostInput(host);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
80 โ setCodeInput(code);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5]
82 โ
83 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
84 โ if (routePairingUrl.length === 0) {
85 โ return;
86 โ }
87 โ
88 โ const { host, code } = parsePairingUrl(routePairingUrl);
89 โ setHostInput(host);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
90 โ setCodeInput(code);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7]
92 โ
93 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
94 โ if (pairingConnectionError) {
95 โ setIsSubmitting(false);
ยท โโโโโโโโฌโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
96 โ }
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
53 โ function usePulseAnimation(pulse: boolean) {
54 โ const pulseProgress = useSharedValue(0);
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ `pulseProgress` originates here
55 โ
56 โ useEffect(() => {
57 โ if (pulse) {
58 โ pulseProgress.value = withRepeat(
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ `pulseProgress` cannot be modified
59 โ withTiming(1, {
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ oxc(no-accumulating-spread): Do not spread accumulators in loops
โญโ[packages/client-runtime/src/state/shell.ts:189:5]
186 โ let waiting = yield* Ref.get(awaitingCompletion);
187 โ let next = initial;
ยท โโโฌโ
ยท โฐโโ From this accumulator
188 โ let receivedSnapshot = false;
189 โ for (const item of items) {
ยท โโฌโ
ยท โฐโโ For this loop
190 โ if (item.kind === "synchronized") {
191 โ waiting = false;
192 โ if (Option.isSome(next.snapshot)) {
193 โ next = { ...next, status: "live", error: Option.none() };
ยท โโโโฌโโโ
ยท โฐโโ From this spread
194 โ }
โฐโโโโ
help: Consider using `Object.assign()` to mutate the accumulator instead.
note: Using spreads within accumulators leads to `O(n^2)` time complexity.
โ 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.
โ eslint(no-unused-vars): Identifier 'Arr' is imported but never used.
โญโ[packages/client-runtime/src/state/threadSort.ts:4:13]
3 โ import type { EnvironmentThreadShell } from "./models.ts";
4 โ import * as Arr from "effect/Array";
ยท โโฌโ
ยท โฐโโ 'Arr' is imported here
5 โ import * as Order from "effect/Order";
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'Order' is imported but never used.
โญโ[packages/client-runtime/src/state/threadSort.ts:5:13]
4 โ import * as Arr from "effect/Array";
5 โ import * as Order from "effect/Order";
ยท โโโฌโโ
ยท โฐโโ 'Order' is imported here
6 โ
โฐโโโโ
help: Consider removing this import.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
150 โ
151 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
152 โ if (!controlledSelectedPath) {
153 โ return;
154 โ }
155 โ setExpandedPaths((current) => {
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
156 โ const ancestors = ancestorPaths(controlledSelectedPath);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ t3code(no-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/threads-sync.test.ts:1680:7]
1679 โ yield* harness.replaceSession;
1680 โ โญโโถ for (let attempt = 0; attempt < 100; attempt += 1) {
1681 โ โ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
1682 โ โ break;
1683 โ โ }
1684 โ โ yield* Effect.yieldNow;
1685 โ โฐโโถ }
1686 โ yield* Queue.offer(
โฐโโโโ
โ 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/threads-sync.test.ts:1789:7]
1788 โ yield* harness.replaceSession;
1789 โ โญโโถ for (let attempt = 0; attempt < 100; attempt += 1) {
1790 โ โ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
1791 โ โ yield* Effect.yieldNow;
1792 โ โฐโโถ }
1793 โ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
โฐโโโโ
โ 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:169:7]
168 โ });
169 โ โญโโถ for (let index = 0; index < 100; index += 1) {
170 โ โ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break;
171 โ โ yield* Effect.yieldNow;
172 โ โฐโโถ }
173 โ
โฐโโโโ
โ 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:178:7]
177 โ yield* Deferred.succeed(releaseSave, undefined);
178 โ โญโโถ for (let index = 0; index < 100; index += 1) {
179 โ โ if ((yield* Ref.get(saved)).length > 0) break;
180 โ โ yield* Effect.yieldNow;
181 โ โฐโโถ }
182 โ
โฐโโโโ
โ 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:307:7]
306 โ yield* Deferred.succeed(releaseUnenrichedSave, undefined);
307 โ โญโโถ for (let index = 0; index < 100; index += 1) {
308 โ โ const values = yield* Ref.get(saved);
309 โ โ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) {
310 โ โ break;
311 โ โ }
312 โ โ yield* Effect.yieldNow;
313 โ โฐโโถ }
314 โ
โฐโโโโ
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
256 โ return () => cancelAnimationFrame(frame);
257 โ }, [props.path, targetIndex]);
ยท โโโโโโฌโโโโ
ยท โฐโโ Unnecessary dependency `props.path`
258 โ
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(no-array-index-key): Usage of Array index in keys is not allowed
โญโ[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
292 โ <SourceText
293 โ key={`${index}:${tokenIndex}`}
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
294 โ style={{
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
โ react(no-array-index-key): Usage of Array index in keys is not allowed
โญโ[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
308 โ return (
309 โ <SourceText key={index}>
ยท โโโโโโโโโโโ
310 โ {body}
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
โ 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);
โฐโโโโ
โ react(purity): Cannot call impure function during render
โญโ[apps/web/src/hooks/useThreadActions.ts:821:56]
820 โ const resolved = resolveThreadTarget(target);
821 โ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
822 โ return AsyncResult.failure(
โฐโโโโ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ react(purity): Cannot call impure function during render
โญโ[apps/web/src/hooks/useThreadActions.ts:709:46]
708 โ const wokeAt = resolved
709 โ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
710 โ : null;
โฐโโโโ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ eslint(no-unused-vars): 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.
โ 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(purity): Cannot call impure function during render
โญโ[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
371 โ const { open, onOpenChange, onSnooze, timestampFormat } = props;
372 โ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
373 โ return (
โฐโโโโ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ react(purity): Cannot call impure function during render
โญโ[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39]
852 โ if (snoozeGateClock.thread !== thread) {
853 โ setSnoozeGateClock({ thread, now: new Date().toISOString() });
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
854 โ }
โฐโโโโ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
โญโ[apps/server/src/scheduledTasks/Schedule.ts:79:10]
78 โ
79 โ function describeSchedule(schedule: ScheduledTaskSchedule): string {
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'describeSchedule' is declared here
80 โ if (schedule.type === "webhook") return "On webhook";
โฐโโโโ
help: Consider removing this declaration.
โ 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(
โฐโโโโ
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
520 โ })).delivery;
521 โ โญโโถ while (delivery.outcome === "accepted") {
522 โ โ yield* Effect.yieldNow;
523 โ โ delivery = (yield* service.getWebhookDelivery({
524 โ โ id: task.id,
525 โ โ deliveryId: deliveryId!,
526 โ โ })).delivery;
527 โ โฐโโถ }
528 โ assert.equal(delivery.outcome, "dispatch_failed");
โฐโโโโ
โ 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(no-unstable-nested-components): Do not define components during render.
โญโ[apps/mobile/src/Stack.tsx:1079:21]
1078 โ <Navigator
1079 โ screenLayout={(props) => <GuardedScreenLayout {...props} />}
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1080 โ screenOptions={({ route }) =>
โฐโโโโ
help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true.
โ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used.
โญโ[packages/provider-acp/src/server/nativeLogging.ts:22:10]
21 โ
22 โ function summarizePayload(payload: unknown): Readonly<Record<string, unknown>> {
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'summarizePayload' is declared here
23 โ if (payload === null) return { valueType: "null" };
โฐโโโโ
help: Consider removing this declaration.
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/state/use-thread-outbox-drain.ts:1321:5]
1320 โ queuedMessagesByThreadKey,
1321 โ retryTick,
ยท โโโโโฌโโโโ
ยท โฐโโ Unnecessary dependency `retryTick`
1322 โ restoreQueuedMessage,
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(no-array-index-key): Usage of Array index in keys is not allowed
โญโ[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
35 โ <T3SourceTextRunNativeComponent
36 โ key={index}
ยท โโโโโโโโโโโ
37 โ style={flattenedStyle}
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
โ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
โญโ[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
162 โ keys,
163 โ overridingProjects = [],
ยท โโ
164 โ onClearOverrides,
โฐโโโโ
help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
โ eslint(require-yield): This generator function does not have `yield`
โญโ[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78]
80 โ
81 โ โญโโถ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* (
82 โ โ options: AcpMcpOverAcpBridgeOptions,
83 โ โ ): Effect.fn.Return<AcpMcpOverAcpBridge> {
84 โ โ const fetchImplementation = options.fetchImplementation ?? fetch;
85 โ โ const connections = new Map<string, Connection>();
86 โ โ
87 โ โ const connectionFor = (connectionId: string): Effect.Effect<Connection, AcpMcpOverAcpError> =>
88 โ โ Effect.suspend(() => {
89 โ โ const connection = connections.get(connectionId);
90 โ โ return connection === undefined
91 โ โ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`))
92 โ โ : Effect.succeed(connection);
93 โ โ });
94 โ โ
95 โ โ const send = (
96 โ โ connection: Connection,
97 โ โ message: unknown,
98 โ โ ): Effect.Effect<ReadonlyArray<unknown>, AcpMcpOverAcpError> =>
99 โ โ connection.mutex.withPermits(1)(
100 โ โ Effect.gen(function* () {
101 โ โ const body = JSON.stringify(message);
102 โ โ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) {
103 โ โ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB."));
104 โ โ }
105 โ โ const response = yield* Effect.tryPromise({
106 โ โ try: (signal) =>
107 โ โ fetchImplementation(options.endpoint, {
108 โ โ method: "POST",
109 โ โ signal,
110 โ โ headers: {
111 โ โ "content-type": "application/json",
112 โ โ accept: "application/json, text/event-stream",
113 โ โ authorization: options.authorization,
114 โ โ ...(connection.sessionId === null
115 โ โ ? {}
116 โ โ : { "mcp-session-id": connection.sessionId }),
117 โ โ ...(connection.protocolVersion === null
118 โ โ ? {}
119 โ โ : { "mcp-protocol-version": connection.protocolVersion }),
120 โ โ },
121 โ โ body,
122 โ โ }),
123 โ โ catch: bridgeError,
124 โ โ });
125 โ โ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId;
126 โ โ if (!response.ok) {
127 โ โ yield* Effect.promise(
128 โ โ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
129 โ โ );
130 โ โ return yield* Effect.fail(
131 โ โ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`),
132 โ โ );
133 โ โ }
134 โ โ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))];
135 โ โ for (const payload of payloads) {
136 โ โ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion;
137 โ โ }
138 โ โ return payloads;
139 โ โ }).pipe(Effect.mapError(bridgeError)),
140 โ โ );
141 โ โ
142 โ โ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* (
143 โ โ request: AcpSchema.DisconnectMcpRequest,
144 โ โ ): Effect.fn.Return<AcpSchema.DisconnectMcpResponse, AcpMcpOverAcpError> {
145 โ โ const connection = yield* connectionFor(request.connectionId);
146 โ โ connections.delete(request.connectionId);
147 โ โ const sessionId = connection.sessionId;
148 โ โ if (sessionId !== null) {
149 โ โ const response = yield* Effect.tryPromise({
150 โ โ try: (signal) =>
151 โ โ fetchImplementation(options.endpoint, {
152 โ โ method: "DELETE",
153 โ โ signal,
154 โ โ headers: {
155 โ โ authorization: options.authorization,
156 โ โ "mcp-session-id": sessionId,
157 โ โ ...(connection.protocolVersion === null
158 โ โ ? {}
159 โ โ : { "mcp-protocol-version": connection.protocolVersion }),
160 โ โ },
161 โ โ }),
162 โ โ catch: bridgeError,
163 โ โ });
164 โ โ if (!response.ok && response.status !== 404) {
165 โ โ return yield* Effect.fail(
166 โ โ new AcpMcpOverAcpError(
167 โ โ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`,
168 โ โ ),
169 โ โ );
170 โ โ }
171 โ โ yield* Effect.promise(
172 โ โ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
173 โ โ );
174 โ โ }
175 โ โ return {};
176 โ โ });
177 โ โ
178 โ โ return {
179 โ โ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) {
180 โ โ if (request.serverId !== "t3-code") {
181 โ โ return yield* Effect.fail(
182 โ โ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`),
183 โ โ );
184 โ โ }
185 โ โ if (connections.size >= MAX_CONNECTIONS) {
186 โ โ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections."));
187 โ โ }
188 โ โ const connectionId = yield* options.allocateConnectionId;
189 โ โ connections.set(connectionId, {
190 โ โ mutex: yield* Semaphore.make(1),
191 โ โ sessionId: null,
192 โ โ protocolVersion: null,
193 โ โ nextRequestId: 0,
194 โ โ });
195 โ โ return { connectionId };
196 โ โ }),
197 โ โ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) {
198 โ โ const connection = yield* connectionFor(request.connectionId);
199 โ โ const id = ++connection.nextRequestId;
200 โ โ const payloads = yield* send(connection, {
201 โ โ jsonrpc: "2.0",
202 โ โ id,
203 โ โ method: request.method,
204 โ โ ...(request.params == null ? {} : { params: request.params }),
205 โ โ });
206 โ โ const response = payloads.find((payload) => asEnvelope(payload)?.id === id);
207 โ โ const envelope = asEnvelope(response);
208 โ โ if (envelope === null) {
209 โ โ return yield* Effect.fail(
210 โ โ new AcpMcpOverAcpError("MCP server did not return a matching response."),
211 โ โ );
212 โ โ }
213 โ โ if (envelope.error !== undefined) {
214 โ โ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error)));
215 โ โ }
216 โ โ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse;
217 โ โ }),
218 โ โ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) {
219 โ โ const connection = yield* connectionFor(request.connectionId);
220 โ โ yield* send(connection, {
221 โ โ jsonrpc: "2.0",
222 โ โ method: request.method,
223 โ โ ...(request.params == null ? {} : { params: request.params }),
224 โ โ });
225 โ โ }),
226 โ โ disconnect,
227 โ โ dispose: Effect.suspend(() =>
228 โ โ Effect.forEach(
229 โ โ [...connections.keys()],
230 โ โ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore),
231 โ โ { discard: true },
232 โ โ ),
233 โ โ ),
234 โ โ };
235 โ โฐโโถ });
โฐโโโโ
help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed.
โ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
โญโ[apps/mobile/src/state/use-composer-drafts.ts:1022:15]
1021 โ instanceId,
1022 โ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models },
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1023 โ ]),
โฐโโโโ
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-new-array): Do not use `new Array(singleArgument)`.
โญโ[apps/web/src/terminal/ghostty/core.ts:194:19]
193 โ const count = Math.min(CHUNK_SIZE, graphemeLength - start);
194 โ const codes = new Array<number>(count);
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
195 โ for (let index = 0; index < count; index += 1) {
โฐโโโโ
help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`.
โ eslint(no-empty-pattern): Empty object binding pattern
โญโ[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
52 โ
53 โ for (const {} of [
ยท โโ
54 โ { healthy: true },
โฐโโโโ
help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
โ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
โญโ[packages/shared/src/serverSettings.ts:346:9]
345 โ const entry: ProjectSettingsOverrides = {
346 โ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}),
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
347 โ };
โฐโโโโ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
โ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce()
โญโ[packages/shared/src/serverSettings.ts:448:24]
447 โ const favorites =
448 โ setModelFavorites?.reduce((current, change) => {
ยท โโโโฌโโ
ยท โฐโโ For this reduce
449 โ const exists = current.some(
450 โ (favorite) => favorite.provider === change.provider && favorite.model === change.model,
451 โ );
452 โ return change.favorite
453 โ ? exists
454 โ ? current
455 โ : [...current, { provider: change.provider, model: change.model }]
ยท โโโโโโฌโโโโ
ยท โฐโโ From this spread
456 โ : current.filter(
โฐโโโโ
help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead.
note: Using spreads within accumulators leads to `O(n^2)` time complexity.
โ oxc(no-accumulating-spread): Do not spread accumulators in loops
โญโ[packages/shared/src/serverSettings.ts:466:3]
464 โ null;
465 โ let nextModelPreferences = initialModelPreferences;
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ From this accumulator
466 โ for (const change of setModelsHidden ?? []) {
ยท โโฌโ
ยท โฐโโ For this loop
467 โ const preferences = nextModelPreferences?.[change.provider] ?? {
468 โ hiddenModels: [],
469 โ modelOrder: [],
470 โ };
471 โ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model);
472 โ if (change.hidden) hiddenModels.push(change.model);
473 โ nextModelPreferences = {
474 โ ...nextModelPreferences,
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ From this spread
475 โ [change.provider]: { ...preferences, hiddenModels },
โฐโโโโ
help: Consider using `Object.assign()` to mutate the accumulator instead.
note: Using spreads within accumulators leads to `O(n^2)` time complexity.
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[packages/shared/src/qrCode.ts:458:44]
457 โ ): Array<byte> {
458 โ let result: Array<byte> = divisor.map((_) => 0);
ยท โฌ
ยท โฐโโ '_' is declared here
459 โ for (const b of data) {
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
โญโ[packages/provider-opencode/src/server/adapter.ts:3755:7]
3754 โ
3755 โ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, OpenCodeAdapterV2DriverEnv> =
ยท โโโฌโโ
ยท โฐโโ 'layer' is declared here
3756 โ Layer.effect(
โฐโโโโ
help: Consider removing this declaration.
โ 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): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
โญโ[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
14 โ
15 โ const legacyCredentials = {
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ 'legacyCredentials' is declared here
16 โ version: 1 as const,
โฐโโโโ
help: Consider removing this declaration.
โ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
โญโ[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19]
472 โ onFilters,
473 โ authorOptions = [],
ยท โโ
474 โ labelOptions = [],
โฐโโโโ
help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
โ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
โญโ[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18]
473 โ authorOptions = [],
474 โ labelOptions = [],
ยท โโ
475 โ optionScope,
โฐโโโโ
help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
โ eslint(no-control-regex): Unexpected control character
โญโ[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46]
219 โ <Text selectable className="font-mono text-sm text-foreground">
220 โ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")}
ยท โโโฌโ
ยท โฐโโ 'U+001B' is a control character.
221 โ </Text>
โฐโโโโ
help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/state/use-vcs-action-state.ts:86:5]
83 โ const [nowMs, setNowMs] = useState(() => Date.now());
84 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
85 โ if (!actionState.isRunning) return;
86 โ setNowMs(Date.now());
ยท โโโโโฌโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
87 โ const interval = setInterval(() => setNowMs(Date.now()), 1000);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression
โญโ[packages/shared/src/serverSettings.test.ts:35:7]
34 โ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) =>
35 โ instanceId === configured ? true : false,
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
36 โ );
โฐโโโโ
help: Remove this ternary operator
โ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
โญโ[apps/web/src/components/pullRequest/pullRequestList.logic.ts:262:9]
261 โ ): boolean {
262 โ const labels = entry.labels.map((label) => label.name.trim().toLowerCase());
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
263 โ const holds = (label: string) => labels.includes(label.trim().toLowerCase());
โฐโโโโ
help: Switch to `Set`
โ react(no-array-index-key): Usage of Array index in keys is not allowed
โญโ[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15]
87 โ <li
88 โ key={`${index}:${check.name}`}
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
89 โ className="col-span-full grid grid-cols-subgrid items-center text-xs"
โฐโโโโ
help: Use a unique data-dependent key to avoid unnecessary rerenders
โ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
โญโ[packages/shared/src/composerContextLegacySend.ts:19:45]
18 โ const occurrences = collectComposerContextReferences(text);
19 โ for (const occurrence of [...occurrences].reverse()) {
ยท โโโโโโโ
20 โ const record = recordsById.get(occurrence.contextId);
โฐโโโโ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
โ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
โญโ[packages/provider-cursor/src/server/auth.ts:249:20]
248 โ },
249 โ (effect, flow, stopSessions) =>
ยท โโโโโโโฌโโโโโ
ยท โฐโโ 'stopSessions' is declared here
250 โ effect.pipe(
โฐโโโโ
help: Consider removing this parameter.
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/state/thread-order.ts:29:7]
28 โ getPendingThreadOrder();
29 โ }, [nowMinute, snoozeWakeTick]);
ยท โโโโโฌโโโโ โโโโโโโโฌโโโโโโ
ยท โ โฐโโ Unnecessary dependency `snoozeWakeTick`
ยท โฐโโ Unnecessary dependency `nowMinute`
30 โ return pending;
โฐโโโโ
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/settings/scheduled-task-editor.tsx:100:85]
99 โ const startEditor = startScheduledTaskEditor;
100 โ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
ยท โโโโโโฌโโโโโ
ยท โฐโโ Unnecessary dependency `startEditor`
101 โ const readEditor = useCallback(
โฐโโโโ
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(memo-dependencies): Found extra memoization dependencies
โญโ[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7]
120 โ setEditor,
121 โ startEditor,
ยท โโโโโโฌโโโโโ
ยท โฐโโ Unnecessary dependency `startEditor`
122 โ hasChanges,
โฐโโโโ
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'.
โญโ[packages/shared/src/model.test.ts:36:7]
35 โ
36 โ const claudeCaps: ModelCapabilities = createModelCapabilities({
ยท โโโโโโฌโโโโ
ยท โฐโโ 'claudeCaps' is declared here
37 โ optionDescriptors: [
โฐโโโโ
help: Consider removing this declaration.
โ 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:344:38]
343 โ visit(parser.parse(markdown));
344 โ for (const lineStart of lineStarts.reverse()) {
ยท โโโโโโโ
345 โ // The header row may be a lazy line without its container markers (`>` or list indent),
โฐโโโโ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
โ eslint(no-unused-vars): Identifier 'Image' is imported but never used.
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10]
16 โ import type { NativeSyntheticEvent, ViewProps } from "react-native";
17 โ import { Image, Platform, StyleSheet } from "react-native";
ยท โโโฌโโ
ยท โฐโโ 'Image' is imported here
18 โ
โฐโโโโ
help: Consider removing this import.
โ react(exhaustive-effect-dependencies): Found missing effect dependencies
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6]
225 โ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
226 โ nativeEventSnapshotsRef.current,
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
227 โ mostRecentEventCount,
228 โ );
229 โ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโ
ยท โฐโโ This dependency list is missing values used by the callback
230 โ const assumedValue = props.value;
โฐโโโโ
help: Missing dependencies can cause an effect to fire less often than it should
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7]
236 โ nativeEventSnapshotsRef.current = assumeComposerControlledState(
237 โ nativeEventSnapshotsRef.current,
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
238 โ controlledEventCount,
239 โ assumedValue,
240 โ );
241 โ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
ยท โโโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `controlledDocumentJson`
242 โ const acceptNativeEvent = useCallback(
โฐโโโโ
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
161 โ const tokens = collectComposerInlineTokens(props.value, {
162 โ preserveTrailingFrom: confirmedTokensRef.current,
ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
163 โ });
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
161 โ const tokens = collectComposerInlineTokens(props.value, {
162 โ preserveTrailingFrom: confirmedTokensRef.current,
ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
163 โ });
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23]
163 โ });
164 โ confirmedTokensRef.current = tokens;
ยท โโโโโโโโโโฌโโโโโโโโโโโโโฌโโโ
ยท โ โฐโโ Cannot update ref value during render
ยท โฐโโ This value is a ref
165 โ return JSON.stringify(
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5]
205 โ mostRecentEventCount,
206 โ nativeEventSnapshotsRef.current,
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
207 โ );
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5]
211 โ mostRecentEventCount,
212 โ nativeEventSnapshotsRef.current,
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
213 โ );
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(memo-dependencies): Found missing memoization dependencies
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6]
161 โ const tokens = collectComposerInlineTokens(props.value, {
162 โ preserveTrailingFrom: confirmedTokensRef.current,
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
163 โ });
164 โ confirmedTokensRef.current = tokens;
165 โ return JSON.stringify(
166 โ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
167 โ const record =
168 โ token.type === "context"
169 โ ? props.context?.records.find((record) => record.contextId === token.contextId)
170 โ : undefined;
171 โ const presentation = contextChipPresentation(
172 โ token.type === "context" ? token.kind : token.type,
173 โ record,
174 โ );
175 โ const icon = contextChipIcon(
176 โ presentation,
177 โ token.type === "mention" ? token.value : contextRecordFileName(record),
178 โ );
179 โ return {
180 โ type: token.type,
181 โ source: token.source,
182 โ start: token.start,
183 โ end: token.end,
184 โ accent: contextChipAccent(presentation.accent, theme, chipTextColor),
185 โ label:
186 โ token.type === "skill"
187 โ ? (skillLabels.get(token.value) ?? token.value)
188 โ : token.type === "context"
189 โ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " ยท unavailable"}`
190 โ : basename(token.value),
191 โ detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
192 โ iconUri: contextChipIconUri(icon),
193 โ tintsIcon: icon.kind === "chip",
194 โ };
195 โ }),
196 โ );
197 โ }, [props.value, props.context, skillLabels, theme, chipTextColor]);
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ยท โฐโโ This dependency list is missing values used by the callback
198 โ // Every render resolves against the snapshot history, so a render whose
โฐโโโโ
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(memo-dependencies): Found missing memoization dependencies
โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5]
251 โ mostRecentEventCountRef.current = acknowledgedEventCount;
252 โ nativeEventSnapshotsRef.current.push({
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
253 โ eventCount: acknowledgedEventCount,
254 โ value,
255 โ selection: nextSelection,
256 โ });
257 โ return acknowledgedEventCount;
258 โ },
259 โ [],
ยท โโฌ
ยท โฐโโ This dependency list is missing values used by the callback
260 โ );
โฐโโโโ
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownOption(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
โญโ[packages/shared/src/otelEnvironment.ts:146:14]
145 โ name,
146 โ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()),
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
147 โ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`,
โฐโโโโ
โ react(exhaustive-effect-dependencies): Found missing effect dependencies
โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6]
227 โ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
228 โ nativeEventSnapshotsRef.current,
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
229 โ mostRecentEventCount,
230 โ );
231 โ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโ
ยท โฐโโ This dependency list is missing values used by the callback
232 โ const assumedValue = props.value;
โฐโโโโ
help: Missing dependencies can cause an effect to fire less often than it should
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7]
238 โ nativeEventSnapshotsRef.current = assumeComposerControlledState(
239 โ nativeEventSnapshotsRef.current,
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
240 โ controlledEventCount,
241 โ assumedValue,
242 โ );
243 โ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
ยท โโโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `controlledDocumentJson`
244 โ const acceptNativeEvent = useCallback(
โฐโโโโ
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
163 โ const tokens = collectComposerInlineTokens(props.value, {
164 โ preserveTrailingFrom: confirmedTokensRef.current,
ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
165 โ });
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
163 โ const tokens = collectComposerInlineTokens(props.value, {
164 โ preserveTrailingFrom: confirmedTokensRef.current,
ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
165 โ });
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23]
165 โ });
166 โ confirmedTokensRef.current = tokens;
ยท โโโโโโโโโโฌโโโโโโโโโโโโโฌโโโ
ยท โ โฐโโ Cannot update ref value during render
ยท โฐโโ This value is a ref
167 โ return JSON.stringify(
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5]
207 โ mostRecentEventCount,
208 โ nativeEventSnapshotsRef.current,
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
209 โ );
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5]
213 โ mostRecentEventCount,
214 โ nativeEventSnapshotsRef.current,
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
215 โ );
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(memo-dependencies): Found missing memoization dependencies
โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6]
163 โ const tokens = collectComposerInlineTokens(props.value, {
164 โ preserveTrailingFrom: confirmedTokensRef.current,
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
165 โ });
166 โ confirmedTokensRef.current = tokens;
167 โ return JSON.stringify(
168 โ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
169 โ const record =
170 โ token.type === "context"
171 โ ? props.context?.records.find((record) => record.contextId === token.contextId)
172 โ : undefined;
173 โ const presentation = contextChipPresentation(
174 โ token.type === "context" ? token.kind : token.type,
175 โ record,
176 โ );
177 โ const icon = contextChipIcon(
178 โ presentation,
179 โ token.type === "mention" ? token.value : contextRecordFileName(record),
180 โ );
181 โ return {
182 โ type: token.type,
183 โ source: token.source,
184 โ start: token.start,
185 โ end: token.end,
186 โ accent: contextChipAccent(presentation.accent, theme, chipTextColor),
187 โ label:
188 โ token.type === "skill"
189 โ ? (skillLabels.get(token.value) ?? token.value)
190 โ : token.type === "context"
191 โ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " ยท unavailable"}`
192 โ : basename(token.value),
193 โ detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
194 โ iconUri: contextChipIconUri(icon),
195 โ tintsIcon: icon.kind === "chip",
196 โ };
197 โ }),
198 โ );
199 โ }, [props.value, props.context, skillLabels, theme, chipTextColor]);
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ยท โฐโโ This dependency list is missing values used by the callback
200 โ // Every render resolves against the snapshot history, so a render whose
โฐโโโโ
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(memo-dependencies): Found missing memoization dependencies
โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5]
253 โ mostRecentEventCountRef.current = acknowledgedEventCount;
254 โ nativeEventSnapshotsRef.current.push({
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
255 โ eventCount: acknowledgedEventCount,
256 โ value,
257 โ selection: nextSelection,
258 โ });
259 โ return acknowledgedEventCount;
260 โ },
261 โ [],
ยท โโฌ
ยท โฐโโ This dependency list is missing values used by the callback
262 โ );
โฐโโโโ
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ 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:50:18]
49 โ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) {
50 โ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
ยท โโโโโโโโโ
51 โ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), 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: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 โ });
โฐโโโโ
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/StackHeader.tsx:185:9]
184 โ "options",
185 โ latestOptionFunctionsRef.current,
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
186 โ optionFunctionWrappersRef.current,
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/native/StackHeader.tsx:186:9]
185 โ latestOptionFunctionsRef.current,
186 โ optionFunctionWrappersRef.current,
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
ยท โฐโโ Passing a ref to a function may read its value during render
187 โ ) as NativeStackNavigationOptions)
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ t3code(no-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/shared/src/atomicWrite.test.ts:139:5]
138 โ Effect.gen(function* () {
139 โ โญโโถ while (fiber.pollUnsafe() === undefined) {
140 โ โ yield* TestClock.adjust("100 millis");
141 โ โ // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock
142 โ โ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve)));
143 โ โฐโโถ }
144 โ return yield* Fiber.join(fiber);
โฐโโโโ
โ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
โญโ[scripts/lib/cli-external-packages.test.ts:114:11]
113 โ const declared = {
114 โ ...(manifest.dependencies ?? {}),
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
115 โ ...(manifest.optionalDependencies ?? {}),
โฐโโโโ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
โ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
โญโ[scripts/lib/cli-external-packages.test.ts:115:11]
114 โ ...(manifest.dependencies ?? {}),
115 โ ...(manifest.optionalDependencies ?? {}),
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
116 โ ...(manifest.peerDependencies ?? {}),
โฐโโโโ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
โ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
โญโ[scripts/lib/cli-external-packages.test.ts:116:11]
115 โ ...(manifest.optionalDependencies ?? {}),
116 โ ...(manifest.peerDependencies ?? {}),
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
117 โ };
โฐโโโโ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
Found 0 errors and 367 warnings in 5480 files (5.2s, 8 threads)
Post job cleanup.
Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
Post job cleanup.
##[start-action display=Cache full pnpm store;id=__9d21ae10-8771-49db-80b7-9443abd82dfb.__actions_cache]
Post job cleanup.
[command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /home/runner/_work/t3code/t3code --files-from manifest.txt --use-compress-program zstdmt
Failed to save: Unable to reserve cache with key pnpm-full-v1-Linux-X64-00603bf3edbe5c5c110144002d8c9a314f8b592aed66db22932aa917c61d6447, another job may be creating this cache.
##[end-action id=__9d21ae10-8771-49db-80b7-9443abd82dfb.__actions_cache;outcome=success;conclusion=success;duration_ms=3590]
##[start-action display=Cache Vite+;id=__9d21ae10-8771-49db-80b7-9443abd82dfb.vp_cache]
Post job cleanup.
Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache.
##[end-action id=__9d21ae10-8771-49db-80b7-9443abd82dfb.vp_cache;outcome=success;conclusion=success;duration_ms=63]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/b5a0aba0-d7c0-45b6-a960-299c6825cb9d' 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: 187
BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352
BLACKSMITH_CHECK_RUN_ID: 121013057479
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