GitHub check
256 KB of 597 KB loaded Download the full log (597 KB)
341 KB of earlier output not loaded
lint-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 '_'.
โญโ[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7]
412 โ
413 โ const layer = Layer.effect(ThreadPullRequestServiceV2, make);
ยท โโโฌโโ
ยท โฐโโ 'layer' is declared here
โฐโโโโ
help: Consider removing this declaration.
โ 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): 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): Identifier 'Fiber' is imported but never used.
โญโ[apps/server/src/ws.ts:10:13]
9 โ import * as Effect from "effect/Effect";
10 โ import * as Fiber from "effect/Fiber";
ยท โโโฌโโ
ยท โฐโโ 'Fiber' is imported here
11 โ import * as FileSystem from "effect/FileSystem";
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used.
โญโ[apps/server/src/ws.ts:17:13]
16 โ import * as Ref from "effect/Ref";
17 โ import * as Schedule from "effect/Schedule";
ยท โโโโโฌโโโ
ยท โฐโโ 'Schedule' is imported here
18 โ import * as Schema from "effect/Schema";
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/ws.ts:1285:13]
1284 โ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources;
1285 โ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner;
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ 'projectSetupScriptRunner' is declared here
1286 โ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker;
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): Identifier 'identity' is imported but never used.
โญโ[apps/server/src/auth/http.ts:28:10]
27 โ import * as Schema from "effect/Schema";
28 โ import { identity } from "effect/Function";
ยท โโโโโฌโโโ
ยท โฐโโ 'identity' is imported here
29 โ import * as Layer from "effect/Layer";
โฐโโโโ
help: Consider removing this import.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
55 โ
56 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
57 โ setDecodedSize(null);
ยท โโโโโโโโฌโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
58 โ }, [props.sourceKey]);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
59 โ
60 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
61 โ setFailedUri(null);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
62 โ }, [props.uri]);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
6 โ import { parse, SvgAst, type JsxAST } from "react-native-svg";
7 โ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ 'ActivityIndicator' is imported here
8 โ
โฐโโโโ
help: Consider removing this import.
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
57 โ setDecodedSize(null);
58 โ }, [props.sourceKey]);
ยท โโโโโโโโฌโโโโโโโ
ยท โฐโโ Unnecessary dependency `props.sourceKey`
59 โ
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
61 โ setFailedUri(null);
62 โ }, [props.uri]);
ยท โโโโโฌโโโโ
ยท โฐโโ Unnecessary dependency `props.uri`
63 โ
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ 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.
โ 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.
โญโ[apps/server/src/auth/RpcAuthorization.ts:237:17]
236 โ const requiredScopesForSettingsUpdate = (payload: unknown) => {
237 โ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload);
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
238 โ const scopes = requiredScopesForServerSettingsPatch(input.patch);
โฐโโโโ
โ 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.
โญโ[apps/server/src/auth/RpcAuthorization.ts:256:26]
255 โ if (method === WS_METHODS.assetsCreateUrl) {
256 โ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload);
ยท โโโโโโโโโโโโโโโโโโโโโโโโ
257 โ return [
โฐโโโโ
โ 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.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5]
283 โ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
284 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
285 โ setNow(new Date().toISOString());
ยท โโโโฌโโ
ยท โฐโโ Avoid calling setState() directly within an effect
286 โ const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25]
364 โ // range) the boundary string is identical and the chain would die.
365 โ }, [nextSnoozeWakeAt, snoozeWakeTick]);
ยท โโโโโโโโฌโโโโโโ
ยท โฐโโ Unnecessary dependency `snoozeWakeTick`
366 โ const listItems = ((): readonly SidebarListItem[] => {
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(purity): Cannot call impure function during render
โญโ[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53]
355 โ if (Number.isNaN(wakeAtMs)) return;
356 โ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
357 โ const id = setTimeout(() => {
โฐโโโโ
help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ 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): 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(require-module-specifiers): Empty import specifier is not allowed
โญโ[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13]
14 โ } from "@t3tools/contracts";
15 โ import type {} from "@t3tools/contracts";
ยท โโ
16 โ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl";
โฐโโโโ
help: Remove empty braces
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5]
2137 โ );
2138 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
2139 โ setExpandedVideo(null);
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
2140 โ setExpandedFile(null);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10]
65 โ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
66 โ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ 'isMarkdownFileLinkLabel' is imported here
67 โ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3]
91 โ import {
92 โ createContext,
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ 'createContext' is imported here
93 โ memo,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3]
107 โ import {
108 โ ActivityIndicator,
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ 'ActivityIndicator' is imported here
109 โ Image,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3]
114 โ Pressable,
115 โ ScrollView,
ยท โโโโโโฌโโโโ
ยท โฐโโ 'ScrollView' is imported here
116 โ StyleSheet,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11]
116 โ StyleSheet,
117 โ Text as NativeText,
ยท โโโโโโฌโโโโ
ยท โฐโโ 'NativeText' is imported here
118 โ type ColorValue,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10]
139 โ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
140 โ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ 'tryOpenExternalUrl' is imported here
141 โ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10]
142 โ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
143 โ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ 'faviconUrlForOrigin' is imported here
144 โ import {
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10]
156 โ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
157 โ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'MediaVideoPlayer' is imported here
158 โ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3]
160 โ attachmentVideoPreviewSource,
161 โ mediaVideoPreviewUri,
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ 'mediaVideoPreviewUri' is imported here
162 โ mediaVideoThumbnailKey,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3]
161 โ mediaVideoPreviewUri,
162 โ mediaVideoThumbnailKey,
ยท โโโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ 'mediaVideoThumbnailKey' is imported here
163 โ type MediaVideoPreviewSource,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8]
162 โ mediaVideoThumbnailKey,
163 โ type MediaVideoPreviewSource,
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ 'MediaVideoPreviewSource' is imported here
164 โ } from "../../lib/videoPreviewSource";
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15]
170 โ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection";
171 โ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter";
ยท โโโโโโโโฌโโโโโโโ
ยท โฐโโ 'ReviewDiffTheme' is imported here
172 โ import {
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3]
185 โ import {
186 โ resolveMarkdownFontSizes,
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ 'resolveMarkdownFontSizes' is imported here
187 โ resolveNativeMarkdownTypography,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10]
190 โ import { PierreEntryIcon } from "../../components/PierreEntryIcon";
191 โ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons";
ยท โโโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ 'markdownLinkIconSource' is imported here
192 โ import {
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3]
193 โ normalizeNativeMarkdownUrl,
194 โ resolveMarkdownInlineCodePresentation,
ยท โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ
ยท โฐโโ 'resolveMarkdownInlineCodePresentation' is imported here
195 โ resolveMarkdownLinkIcon,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3]
194 โ resolveMarkdownInlineCodePresentation,
195 โ resolveMarkdownLinkIcon,
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ 'resolveMarkdownLinkIcon' is imported here
196 โ resolveMarkdownLinkPresentation,
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10]
233 โ import { ThreadMcpApp } from "./McpAppWebView";
234 โ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState";
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ 'useMarkdownCodeHighlight' is imported here
235 โ import {
โฐโโโโ
help: Consider removing this import.
โ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3]
237 โ useAssetUrl,
238 โ useAssetUrlState,
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'useAssetUrlState' is imported here
239 โ useRefreshAssetUrl,
โฐโโโโ
help: Consider removing this import.
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7]
2140 โ setExpandedFile(null);
2141 โ }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
ยท โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโฌโโโโโโ โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
ยท โ โ โฐโโ Unnecessary dependency `props.contentPresentation.kind`
ยท โ โฐโโ Unnecessary dependency `props.threadId`
ยท โฐโโ Unnecessary dependency `props.environmentId`
2142 โ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7]
2608 โ reportHeaderMaterialVisibility(false);
2609 โ }, [feedThreadKey, reportHeaderMaterialVisibility]);
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ Unnecessary dependency `feedThreadKey`
2610 โ
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7]
2624 โ }
2625 โ }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Unnecessary dependency `listMountKey`
2626 โ
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7]
2781 โ }
2782 โ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
ยท โโโโโโโโฌโโโโโโโ โโโโโโโโโโฌโโโโโโโโ โโโโโโโโโฌโโโโโโโ
ยท โ โ โฐโโ Unnecessary dependency `expandedWorkRows`
ยท โ โฐโโ Unnecessary dependency `expandedWorkGroups`
ยท โฐโโ Unnecessary dependency `expandedTurnIds`
2783 โ
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(memo-dependencies): Found extra memoization dependencies
โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9]
612 โ };
613 โ }, [props.environmentId, attachment.id, httpBaseUrl]),
ยท โโโโโโโโโโฌโโโโโโโโโ โโโโโโโฌโโโโโโ โโโโโโฌโโโโโ
ยท โ โ โฐโโ Unnecessary dependency `httpBaseUrl`
ยท โ โฐโโ Unnecessary dependency `attachment.id`
ยท โฐโโ Unnecessary dependency `props.environmentId`
614 โ );
โฐโโโโ
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ 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): Function 'assertUserMessagesExclude' is declared but never used.
โญโ[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10]
1397 โ
1398 โ function assertUserMessagesExclude(
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ 'assertUserMessagesExclude' is declared here
1399 โ projection: OrchestrationV2ThreadProjection,
โฐโโโโ
help: Consider removing this declaration.
โ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
โญโ[apps/server/src/serverSettings.test.ts:1741:32]
1740 โ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
1741 โ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
ยท โโโโโโโโโโโโโโโโโโโ
1742 โ const scriptsJson = yield* Schema.encodeEffect(
โฐโโโโ
โ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
โญโ[apps/server/src/serverSettings.test.ts:1742:34]
1741 โ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
1742 โ const scriptsJson = yield* Schema.encodeEffect(
ยท โโโโโโโโโโโโโโโโโโโ
1743 โ Schema.fromJsonString(Schema.Array(ProjectScript)),
โฐโโโโ
โ 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(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7]
211 โ };
212 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
213 โ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null;
214 โ if (inserted) {
215 โ setSelection((current) =>
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
216 โ current.start === inserted.start && current.end === inserted.end ? current : inserted,
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7]
284 โ }, [hasWorkspaceSnapshot]);
285 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
286 โ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return;
287 โ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`;
288 โ const now = Date.now();
289 โ const lastRequest = workspaceRefreshKeyRef.current;
290 โ if (
291 โ lastRequest?.key === key &&
292 โ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS
293 โ )
294 โ return;
295 โ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) {
296 โ setWorkspaceRefreshRetry(null);
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
297 โ return;
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5]
325 โ }, [
326 โ draftMessage,
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Unnecessary dependency `draftMessage`
327 โ environmentId,
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ 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.
โ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
โญโ[apps/server/src/scheduledTasks/Schedule.ts:79:10]
78 โ
79 โ function describeSchedule(schedule: ScheduledTaskSchedule): string {
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'describeSchedule' is declared here
80 โ if (schedule.type === "webhook") return "On webhook";
โฐโโโโ
help: Consider removing this declaration.
โ eslint(no-unused-vars): 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.
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
37 โ const [initialized, setInitialized] = useState(false);
38 โ useLayoutEffect(() => {
ยท โโโโโโโโฌโโโโโโโ
ยท โฐโโ This is the containing effect
39 โ reset();
40 โ setInitialized(true);
ยท โโโโโโโโฌโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
41 โ }, [reset]);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
88 โ
89 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
90 โ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
91 โ const branchName = initialProjectRef.branch;
92 โ let active = true;
93 โ setPendingCheckouts((count) => count + 1);
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
94 โ // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
520 โ })).delivery;
521 โ โญโโถ while (delivery.outcome === "accepted") {
522 โ โ yield* Effect.yieldNow;
523 โ โ delivery = (yield* service.getWebhookDelivery({
524 โ โ id: task.id,
525 โ โ deliveryId: deliveryId!,
526 โ โ })).delivery;
527 โ โฐโโถ }
528 โ assert.equal(delivery.outcome, "dispatch_failed");
โฐโโโโ
โ eslint(no-unused-vars): 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-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[apps/server/src/usage/UsageService.test.ts:2383:7]
2382 โ let orphanedAt: number | undefined;
2383 โ โญโโถ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
2384 โ โ const tasks: Array<() => void> = [];
2385 โ โ const dispatcher: Scheduler.SchedulerDispatcher = {
2386 โ โ scheduleTask: (task) => tasks.push(task),
2387 โ โ flush: () => {
2388 โ โ let task: (() => void) | undefined;
2389 โ โ while ((task = tasks.shift()) !== undefined) task();
2390 โ โ },
2391 โ โ };
2392 โ โ
2393 โ โ let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
2394 โ โ let requestChecks = 0;
2395 โ โ const scheduler: Scheduler.Scheduler = {
2396 โ โ executionMode: "async",
2397 โ โ makeDispatcher: () => dispatcher,
2398 โ โ shouldYield: (fiber) => {
2399 โ โ if (fiber !== requestFiber) return false;
2400 โ โ requestChecks += 1;
2401 โ โ if (requestChecks !== interruptAt) return false;
2402 โ โ fiber.interruptUnsafe();
2403 โ โ return true;
2404 โ โ },
2405 โ โ };
2406 โ โ
2407 โ โ const input: UsageSummaryInput = {
2408 โ โ ...WINDOW,
2409 โ โ sinceDay: UsageDay.make("2026-09-01"),
2410 โ โ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
2411 โ โ };
2412 โ โ const first = yield* service
2413 โ โ .readSummary(input)
2414 โ โ .pipe(
2415 โ โ Effect.exit,
2416 โ โ Effect.provideService(Scheduler.Scheduler, scheduler),
2417 โ โ Effect.forkChild,
2418 โ โ );
2419 โ โ requestFiber = first;
2420 โ โ yield* Effect.yieldNow;
2421 โ โ dispatcher.flush();
2422 โ โ
2423 โ โ const second = yield* service.readSummary(input).pipe(
2424 โ โ Effect.match({
2425 โ โ onFailure: (error) => error.reason,
2426 โ โ onSuccess: () => "success" as const,
2427 โ โ }),
2428 โ โ Effect.provideService(Scheduler.Scheduler, scheduler),
2429 โ โ Effect.forkChild,
2430 โ โ );
2431 โ โ yield* Effect.yieldNow;
2432 โ โ dispatcher.flush();
2433 โ โ const secondExit = second.pollUnsafe();
2434 โ โ if (secondExit === undefined) {
2435 โ โ second.interruptUnsafe();
2436 โ โ orphanedAt = interruptAt;
2437 โ โ break;
2438 โ โ }
2439 โ โ if (Exit.isFailure(secondExit)) {
2440 โ โ assert.fail("the matching request fiber was interrupted");
2441 โ โ }
2442 โ โ assert.strictEqual(secondExit.value, "invalidWindow");
2443 โ โฐโโถ }
2444 โ
โฐโโโโ
โ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/usage/UsageService.ts:169:7]
168 โ
169 โ const layerTest = Layer.succeed(
ยท โโโโโฌโโโโ
ยท โฐโโ 'layerTest' is declared here
170 โ UsageService,
โฐโโโโ
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/ThreadDetailScreen.tsx:512:5]
510 โ }, []);
511 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
512 โ setKeyboardStateSuspect(false);
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
513 โ }, [isKeyboardVisible, liveKeyboardHeight]);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7]
869 โ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
870 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
871 โ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
872 โ setLastKnownKeyboardHeight(liveKeyboardHeight);
ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
873 โ }
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5]
1117 โ
1118 โ useEffect(() => {
ยท โโโโโฌโโโโ
ยท โฐโโ This is the containing effect
1119 โ setAnchorMessageId(null);
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Avoid calling setState() directly within an effect
1120 โ setSubmittedMessageId(null);
โฐโโโโ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7]
512 โ setKeyboardStateSuspect(false);
513 โ }, [isKeyboardVisible, liveKeyboardHeight]);
ยท โโโโโโโโโฌโโโโโโโโ โโโโโโโโโโฌโโโโโโโโ
ยท โ โฐโโ Unnecessary dependency `liveKeyboardHeight`
ยท โฐโโ Unnecessary dependency `isKeyboardVisible`
514 โ const handleOwnedInputFocusChange = (focused: boolean) => {
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7]
1066 โ userInputInsetProgress.set(1);
1067 โ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ Unnecessary dependency `activeUserInputRequestId`
1068 โ const showContent = props.showContent ?? true;
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(exhaustive-effect-dependencies): Found extra effect dependencies
โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15]
1124 โ freeze.set(false);
1125 โ }, [freeze, selectedThreadKey]);
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Unnecessary dependency `selectedThreadKey`
1126 โ
โฐโโโโ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5]
950 โ const composerPopoverHeight = useSharedValue(0);
951 โ const floatingControlCoverage = useSharedValue(
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ `floatingControlCoverage` originates here
952 โ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
953 โ );
954 โ useEffect(() => {
955 โ floatingControlCoverage.value = withTiming(
ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
ยท โฐโโ `floatingControlCoverage` cannot be modified
956 โ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7]
963 โ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
964 โ const combinedContentInsetEndAdjustment = useSharedValue(
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
ยท โฐโโ `combinedContentInsetEndAdjustment` originates here
965 โ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
966 โ );
967 โ useAnimatedReaction(
968 โ () =>
969 โ contentInsetEndAdjustment.value +
970 โ floatingControlCoverage.value +
971 โ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
972 โ (value) => {
973 โ combinedContentInsetEndAdjustment.value = value;
ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
ยท โฐโโ `combinedContentInsetEndAdjustment` cannot be modified
974 โ },
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
โญโ[packages/client-runtime/src/state/threads-sync.test.ts:1228:7]
1227 โ yield* harness.replaceSession;
1228 โ โญโโถ for (let attempt = 0; attempt < 100; attempt += 1) {
1229 โ โ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
1230 โ โ break;
1231 โ โ }
1232 โ โ yield* Effect.yieldNow;
1233 โ โฐโโถ }
1234 โ 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:1337:7]
1336 โ yield* harness.replaceSession;
1337 โ โญโโถ for (let attempt = 0; attempt < 100; attempt += 1) {
1338 โ โ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
1339 โ โ yield* Effect.yieldNow;
1340 โ โฐโโถ }
1341 โ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
โฐโโโโ
โ react(capitalized-calls): Capitalized function called without JSX
โญโ[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27]
601 โ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
602 โ const gesture = Gesture.Pan()
ยท โโฌโ
ยท โฐโโ `Pan` may be a component
603 โ .enabled(!props.disabled)
โฐโโโโ
help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
โ 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/threads/floating-working-control.tsx:111:5]
107 โ );
108 โ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0);
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ `separationProgress` originates here
109 โ
110 โ useEffect(() => {
111 โ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING);
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ `separationProgress` cannot be modified
112 โ }, [props.showScrollToEnd, separationProgress]);
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
128 โ // and repeatedly retargets the animation as it grows.
129 โ const capsuleWidth = useSharedValue<number | null>(null);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `capsuleWidth` originates here
130 โ const measuredWidthRef = useRef<number | null>(null);
131 โ const handleLabelLayout = (event: LayoutChangeEvent) => {
132 โ const width = event.nativeEvent.layout.width;
133 โ if (width === measuredWidthRef.current) {
134 โ return;
135 โ }
136 โ const first = measuredWidthRef.current === null;
137 โ measuredWidthRef.current = width;
138 โ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `capsuleWidth` cannot be modified
139 โ };
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
128 โ // and repeatedly retargets the animation as it grows.
129 โ const capsuleWidth = useSharedValue<number | null>(null);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `capsuleWidth` originates here
130 โ const measuredWidthRef = useRef<number | null>(null);
131 โ const handleLabelLayout = (event: LayoutChangeEvent) => {
132 โ const width = event.nativeEvent.layout.width;
133 โ if (width === measuredWidthRef.current) {
134 โ return;
135 โ }
136 โ const first = measuredWidthRef.current === null;
137 โ measuredWidthRef.current = width;
138 โ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
139 โ };
140 โ const hasStatus = props.status !== null;
141 โ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
142 โ useEffect(() => {
143 โ if (!hasStatus) {
144 โ measuredWidthRef.current = null;
145 โ capsuleWidth.value = null;
ยท โโโโโโโฌโโโโโ
ยท โฐโโ `capsuleWidth` cannot be modified
146 โ }
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(immutability): Cannot modify local variables after render completes
โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
141 โ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
142 โ useEffect(() => {
ยท โโโโฌโโโ
ยท โฐโโ This function may (indirectly) reassign or modify `capsuleWidth` after render
143 โ if (!hasStatus) {
144 โ measuredWidthRef.current = null;
145 โ capsuleWidth.value = null;
ยท โโโโโโโฌโโโโโ
ยท โฐโโ This modifies `capsuleWidth`
146 โ }
โฐโโโโ
help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(immutability): Cannot modify local variables after render completes
โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
130 โ const measuredWidthRef = useRef<number | null>(null);
131 โ const handleLabelLayout = (event: LayoutChangeEvent) => {
ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
ยท โฐโโ This function may (indirectly) reassign or modify `capsuleWidth` after render
132 โ const width = event.nativeEvent.layout.width;
133 โ if (width === measuredWidthRef.current) {
134 โ return;
135 โ }
136 โ const first = measuredWidthRef.current === null;
137 โ measuredWidthRef.current = width;
138 โ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ This modifies `capsuleWidth`
139 โ };
โฐโโโโ
help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
120 โ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
121 โ const dispatch = vi.fn((_: unknown) =>
ยท โฌ
ยท โฐโโ '_' is declared here
122 โ (options.dispatchGate ?? Effect.void).pipe(
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
133 โ );
134 โ const listLocalBranchNames = vi.fn((_: string) =>
ยท โฌ
ยท โฐโโ '_' is declared here
135 โ Effect.succeed(
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
177 โ });
178 โ const sendToThread = vi.fn((_: unknown) => {
ยท โฌ
ยท โฐโโ '_' is declared here
179 โ switch (options.continuation ?? "queued") {
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
202 โ );
203 โ const removeWorktree = vi.fn((_: unknown) =>
ยท โฌ
ยท โฐโโ '_' is declared here
204 โ options.removeWorktreeFails
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
207 โ );
208 โ const deleteLocalBranch = vi.fn((_: unknown) =>
ยท โฌ
ยท โฐโโ '_' is declared here
209 โ options.deleteLocalBranchFails
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
212 โ );
213 โ const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
ยท โฌ
ยท โฐโโ '_' is declared here
214 โ options.fetchWorktreeBaseFails
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
253 โ );
254 โ const localStatus = vi.fn((_: unknown) =>
ยท โฌ
ยท โฐโโ '_' is declared here
255 โ Effect.succeed({
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-unused-vars): Parameter '_' is declared but never used.
โญโ[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
263 โ );
264 โ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
ยท โฌ
ยท โฐโโ '_' is declared here
265 โ const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
โฐโโโโ
help: Consider removing this parameter.
โ eslint(no-new): Do not use 'new' for side effects.
โญโ[apps/server/src/mcp/McpToolAccess.test.ts:168:3]
167 โ // @ts-expect-error a declaration constructed directly
168 โ new McpToolAccess.Declaration(unchecked);
ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
169 โ // @ts-expect-error a handlers layer built outside McpToolAccess
โฐโโโโ
help: Assign the result of 'new' to a variable or compare it to a reference.
โ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
โญโ[apps/web/src/contextMenuFallback.test.ts:38:9]
37 โ get isConnected() {
38 โ let current: FakeElement | null = this;
ยท โโโโโโโ
39 โ while (current?.parent) {
โฐโโโโ
help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well.
โ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/server/src/telemetry/AnalyticsService.ts:340:7]
339 โ
340 โ const layerTest = AnalyticsService.layerTest;
ยท โโโโโฌโโโโ
ยท โฐโโ 'layerTest' is declared here
โฐโโโโ
help: Consider removing this declaration.
โ react(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
65 โ const [expanded, setExpanded] = useState(false);
66 โ const progress = useSharedValue(0);
ยท โโโโโฌโโโ
ยท โฐโโ `progress` originates here
67 โ useEffect(() => {
68 โ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
ยท โโโโโฌโโโ
ยท โฐโโ `progress` cannot be modified
69 โ }, [expanded, progress]);
โฐโโโโ
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(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
121 โ const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
122 โ const audioLevels = useSharedValue(audioLevelsRef.current);
ยท โโโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
123 โ const sessionRef = useRef<VoiceInputSession | null>(null);
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
125 โ
126 โ if (!sessionRef.current || !recorderRef.current) {
ยท โโโโโโโโโโฌโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
127 โ const recorder = createLazyVoiceRecorder({
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
125 โ
126 โ if (!sessionRef.current || !recorderRef.current) {
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
127 โ const recorder = createLazyVoiceRecorder({
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
125 โ
126 โ if (!sessionRef.current || !recorderRef.current) {
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
127 โ const recorder = createLazyVoiceRecorder({
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
125 โ
126 โ if (!sessionRef.current || !recorderRef.current) {
ยท โโโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
127 โ const recorder = createLazyVoiceRecorder({
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
126 โ if (!sessionRef.current || !recorderRef.current) {
127 โ โญโโถ const recorder = createLazyVoiceRecorder({
128 โ โ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
129 โ โ onStatus: (status: RecordingStatus) => {
130 โ โ sessionRef.current?.controller.handleRecorderStatus({
131 โ โ isFinished: status.isFinished,
132 โ โ hasError: status.hasError || status.mediaServicesDidReset === true,
133 โ โ error: status.error,
134 โ โ url: status.url,
135 โ โ });
136 โ โ },
137 โ โ // Read when recording starts so preference changes do not re-render every composer.
138 โ โ selectInput: (inputs) => {
139 โ โ const preferences = registry.get(mobilePreferencesAtom);
140 โ โ if (!AsyncResult.isSuccess(preferences)) return null;
141 โ โ const known = microphoneOrder(preferences.value.microphones);
142 โ โ const order = rememberMicrophones(known, inputs);
143 โ โ if (order !== known) {
144 โ โ registry.set(updateMobilePreferencesAtom, {
145 โ โ transform: (current) => ({
146 โ โ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
147 โ โ }),
148 โ โ });
149 โ โ }
150 โ โ return preferredMicrophoneInput(inputs, order);
151 โ โ },
152 โ โโโถ });
ยท โฐโโโโ Passing a ref to a function may read its value during render
153 โ recorderRef.current = recorder;
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
152 โ });
153 โ recorderRef.current = recorder;
ยท โโโโโโฌโโโโโโโโโโฌโโโ
ยท โ โฐโโ Cannot update ref value during render
ยท โฐโโ This value is a ref
154 โ sessionRef.current = new VoiceInputSession({
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
153 โ recorderRef.current = recorder;
154 โ โญโโถ sessionRef.current = new VoiceInputSession({
155 โ โ recorder,
156 โ โ getTranscriber: getLocalVoiceTranscriber,
157 โ โ requestPermission: async () => {
158 โ โ const permission = await requestRecordingPermissionsAsync();
159 โ โ return { granted: permission.granted, canAskAgain: permission.canAskAgain };
160 โ โ },
161 โ โ configureRecording: configureVoiceRecordingAudio,
162 โ โ releaseRecording: releaseVoiceRecordingAudio,
163 โ โ deleteRecording: (uri) => new File(uri).delete(),
164 โ โ onStateChange: (nextState) =>
165 โ โ setState({
166 โ โ state: nextState,
167 โ โ ownerKey: sessionRef.current?.ownerKey ?? null,
168 โ โ label: sessionRef.current?.label ?? null,
169 โ โ }),
170 โ โโโถ });
ยท โฐโโโโ Cannot access ref value during render
171 โ }
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
153 โ recorderRef.current = recorder;
154 โ sessionRef.current = new VoiceInputSession({
ยท โโโโโโฌโโโโโโโโโฌโโโ
ยท โ โฐโโ Cannot update ref value during render
ยท โฐโโ This value is a ref
155 โ recorder,
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
184 โ return () => subscription.remove();
185 โ }, [controller]);
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot access ref value during render
186 โ
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
184 โ return () => subscription.remove();
185 โ }, [controller]);
ยท โโโโโโโฌโโโโโ
ยท โฐโโ Cannot access ref value during render
186 โ
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
191 โ },
192 โ [controller, recorder],
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot access ref value during render
193 โ );
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
174 โ const controller = session.controller;
175 โ const recorder = recorderRef.current;
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
176 โ
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
191 โ },
192 โ [controller, recorder],
ยท โโโโโโโโโโโโฌโโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
193 โ );
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
245 โ return () => clearInterval(intervalId);
246 โ }, [audioLevels, controller, recorder, state.phase]);
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot access ref value during render
247 โ
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
245 โ return () => clearInterval(intervalId);
246 โ }, [audioLevels, controller, recorder, state.phase]);
ยท โโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
ยท โฐโโ Cannot access ref value during render
247 โ
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
260 โ setOwnerFocused,
261 โ session,
ยท โโโโฌโโโ
ยท โฐโโ Cannot access ref value during render
262 โ stop,
โฐโโโโ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
250 โ
251 โ โญโโถ return {
252 โ โ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
253 โ โ state,
254 โ โ audioLevels,
255 โ โ elapsedSeconds,
256 โ โ isBusy: voiceInputBlocksSubmission(state),
257 โ โ ownerKey,
258 โ โ label,
259 โ โ focusedOwners,
260 โ โ setOwnerFocused,
261 โ โ session,
262 โ โ stop,
263 โ โ cancel,
264 โ โโโถ };
ยท โฐโโโโ Cannot access ref value during render
265 โ }
โฐโโโโ
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(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
121 โ const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
122 โ const audioLevels = useSharedValue(audioLevelsRef.current);
ยท โโโโโโฌโโโโโ
ยท โฐโโ `audioLevels` originates here
123 โ const sessionRef = useRef<VoiceInputSession | null>(null);
124 โ const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
125 โ
126 โ if (!sessionRef.current || !recorderRef.current) {
127 โ const recorder = createLazyVoiceRecorder({
128 โ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
129 โ onStatus: (status: RecordingStatus) => {
130 โ sessionRef.current?.controller.handleRecorderStatus({
131 โ isFinished: status.isFinished,
132 โ hasError: status.hasError || status.mediaServicesDidReset === true,
133 โ error: status.error,
134 โ url: status.url,
135 โ });
136 โ },
137 โ // Read when recording starts so preference changes do not re-render every composer.
138 โ selectInput: (inputs) => {
139 โ const preferences = registry.get(mobilePreferencesAtom);
140 โ if (!AsyncResult.isSuccess(preferences)) return null;
141 โ const known = microphoneOrder(preferences.value.microphones);
142 โ const order = rememberMicrophones(known, inputs);
143 โ if (order !== known) {
144 โ registry.set(updateMobilePreferencesAtom, {
145 โ transform: (current) => ({
146 โ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
147 โ }),
148 โ });
149 โ }
150 โ return preferredMicrophoneInput(inputs, order);
151 โ },
152 โ });
153 โ recorderRef.current = recorder;
154 โ sessionRef.current = new VoiceInputSession({
155 โ recorder,
156 โ getTranscriber: getLocalVoiceTranscriber,
157 โ requestPermission: async () => {
158 โ const permission = await requestRecordingPermissionsAsync();
159 โ return { granted: permission.granted, canAskAgain: permission.canAskAgain };
160 โ },
161 โ configureRecording: configureVoiceRecordingAudio,
162 โ releaseRecording: releaseVoiceRecordingAudio,
163 โ deleteRecording: (uri) => new File(uri).delete(),
164 โ onStateChange: (nextState) =>
165 โ setState({
166 โ state: nextState,
167 โ ownerKey: sessionRef.current?.ownerKey ?? null,
168 โ label: sessionRef.current?.label ?? null,
169 โ }),
170 โ });
171 โ }
172 โ
173 โ const session = sessionRef.current;
174 โ const controller = session.controller;
175 โ const recorder = recorderRef.current;
176 โ
177 โ useEffect(() => {
178 โ const subscription = AppState.addEventListener("change", (nextState) => {
179 โ // iOS reports `inactive` while its permission dialog is open. Only the
180 โ // real background state cancels preparation; recorder status handles
181 โ // calls and route interruptions during capture.
182 โ if (nextState === "background") controller.appMovedToBackground();
183 โ });
184 โ return () => subscription.remove();
185 โ }, [controller]);
186 โ
187 โ useEffect(
188 โ () => () => {
189 โ controller.dispose();
190 โ recorder.release();
191 โ },
192 โ [controller, recorder],
193 โ );
194 โ
195 โ useEffect(() => {
196 โ if (state.phase !== "recording") return;
197 โ
198 โ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
199 โ const activation = activateKeepAwakeAsync(tag);
200 โ void activation.catch(() => {});
201 โ return () => {
202 โ // Release after activation settles, even if the recording ends immediately.
203 โ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
204 โ };
205 โ }, [keepAwakeId, state.phase]);
206 โ
207 โ useEffect(() => {
208 โ if (state.phase !== "preparing" && state.phase !== "recording") return;
209 โ
210 โ if (audioLevelsRef.current.some((level) => level !== 0)) {
211 โ audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
212 โ audioLevels.value = audioLevelsRef.current;
ยท โโโโโโฌโโโโโ
ยท โฐโโ `audioLevels` cannot be modified
213 โ }
โฐโโโโ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(immutability): Cannot modify local variables after render completes
โญโ[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
206 โ
207 โ useEffect(() => {
ยท โโโโฌโโโ
ยท โฐโโ This function may (indirectly) reassign or modify `audioLevels` after render
208 โ if (state.phase !== "preparing" && state.phase !== "recording") return;
209 โ
210 โ if (audioLevelsRef.current.some((level) => level !== 0)) {
211 โ audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
212 โ audioLevels.value = audioLevelsRef.current;
ยท โโโโโโฌโโโโโ
ยท โฐโโ This modifies `audioLevels`
213 โ }
โฐโโโโ
help: This argument is a function which may reassign or mutate `audioLevels` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
โ react(refs): Cannot access refs during render
โญโ[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
26 โ const latestInput = useRef(input);
27 โ latestInput.current = input;
ยท โโโโโโฌโโโโโโโโโโฌโโโ
ยท โ โฐโโ Cannot update ref value during render
ยท โฐโโ This value is a ref
28 โ const mounted = useRef(true);
โฐโโโโ
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(immutability): This value cannot be modified
โญโ[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5]
90 โ }) {
91 โ const rotation = useSharedValue(props.hidden ? 1 : 0);
ยท โโโโโฌโโโ
ยท โฐโโ `rotation` originates here
92 โ useLayoutEffect(() => {
93 โ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
ยท โโโโโฌโโโ
ยท โฐโโ `rotation` cannot be modified
94 โ }, [props.hidden, rotation]);
โฐโโโโ
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/voice-input/ComposerDictationControl.tsx:269:5]
266 โ const variant = props.variant ?? "plain";
267 โ const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ `loadingVisibility` originates here
268 โ useLayoutEffect(() => {
269 โ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
ยท โโโโโโโโโฌโโโโโโโโ
ยท โฐโโ `loadingVisibility` cannot be modified
270 โ }, [loadingVisibility, props.loading]);
โฐโโโโ
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/voice-input/ComposerDictationControl.tsx:328:5]
325 โ }) {
326 โ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ `recordingVisibility` originates here
327 โ useLayoutEffect(() => {
328 โ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
ยท โโโโโโโโโโฌโโโโโโโโโ
ยท โฐโโ `recordingVisibility` cannot be modified
329 โ }, [props.phase, recordingVisibility]);
โฐโโโโ
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(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
โ typescript(no-extraneous-class): Unexpected class with only a constructor.
โญโ[apps/desktop/src/preview/Manager.test.ts:158:18]
157 โ BrowserWindow: browserWindowConstructor,
158 โ โญโโถ ClipboardItem: class {
159 โ โ constructor(data: Record<string, unknown>) {
160 โ โ clipboardItemConstructor(data);
161 โ โ }
162 โ โฐโโถ },
163 โ clipboard: {
โฐโโโโ
help: Try replacing this class with a standalone function or deleting it entirely
โ 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
โ 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
โ 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
โ 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
โ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
โญโ[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
3 โ AuthProvidersManageScope,
4 โ type AuthSessionState,
ยท โโโโโโโโโฌโโโโโโโ
ยท โฐโโ 'AuthSessionState' is imported here
5 โ type EnvironmentId,
โฐโโโโ
help: Consider removing this import.
โ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts.
โญโ[apps/web/src/components/device/deviceHubApi.test.ts:12:14]
11 โ addEventListener(_type: string, listener: (event: { data: string }) => void) {
12 โ this.onmessage = listener;
ยท โโโโโโโโโ
13 โ }
โฐโโโโ
help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on<event>` replaces any previously registered handler.
โ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
โญโ[apps/web/src/components/device/deviceHubApi.test.ts:16:9]
15 โ constructor() {
16 โ source = this;
ยท โโโโโโ
17 โ }
โฐโโโโ
help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well.
โ react(purity): Cannot call impure function during render
โญโ[apps/web/src/components/CustomSnoozeDialog.tsx:140:58]
139 โ {...(weekStartsOn === undefined ? {} : { weekStartsOn })}
140 โ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }}
ยท โโโโโโฌโโโโ
ยท โฐโโ Cannot call impure function
141 โ onSelect={(selected) => {
โฐโโโโ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
โ react(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(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
โญโ[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
60 โ ) {
61 โ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
ยท โโโโโโโฌโโโโโโ
ยท โฐโโ 'useDragRegion' is declared here
62 โ const isInline = props.mode === "inline";
โฐโโโโ
help: Consider removing this declaration.
Found 0 errors and 362 warnings in 5405 files (5.9s, 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=__f7aef9e6-9734-4381-baa3-b2b48ecf9f11.__actions_cache]
Post job cleanup.
Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache.
##[end-action id=__f7aef9e6-9734-4381-baa3-b2b48ecf9f11.__actions_cache;outcome=success;conclusion=success;duration_ms=114]
##[start-action display=Cache Vite+;id=__f7aef9e6-9734-4381-baa3-b2b48ecf9f11.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=__f7aef9e6-9734-4381-baa3-b2b48ecf9f11.vp_cache;outcome=success;conclusion=success;duration_ms=78]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/a9e0696f-b0f8-4e3f-b8d1-3b87a4a40989' 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: 160
BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 480
BLACKSMITH_CHECK_RUN_ID: 120722315357
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