GitHub check
256 KB of 598 KB loaded Download the full log (598 KB)
342 KB of earlier output not loaded
ββ[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
177 β });
178 β const sendToThread = vi.fn((_: unknown) => {
Β· β¬
Β· β°ββ '_' is declared here
179 β switch (options.continuation ?? "queued") {
β°ββββ
help: Consider removing this parameter.
β eslint(no-unused-vars): Parameter '_' is declared but never used.
ββ[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
202 β );
203 β const removeWorktree = vi.fn((_: unknown) =>
Β· β¬
Β· β°ββ '_' is declared here
204 β options.removeWorktreeFails
β°ββββ
help: Consider removing this parameter.
β eslint(no-unused-vars): Parameter '_' is declared but never used.
ββ[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
207 β );
208 β const deleteLocalBranch = vi.fn((_: unknown) =>
Β· β¬
Β· β°ββ '_' is declared here
209 β options.deleteLocalBranchFails
β°ββββ
help: Consider removing this parameter.
β eslint(no-unused-vars): Parameter '_' is declared but never used.
ββ[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
212 β );
213 β const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
Β· β¬
Β· β°ββ '_' is declared here
214 β options.fetchWorktreeBaseFails
β°ββββ
help: Consider removing this parameter.
β eslint(no-unused-vars): Parameter '_' is declared but never used.
ββ[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
253 β );
254 β const localStatus = vi.fn((_: unknown) =>
Β· β¬
Β· β°ββ '_' is declared here
255 β Effect.succeed({
β°ββββ
help: Consider removing this parameter.
β eslint(no-unused-vars): Parameter '_' is declared but never used.
ββ[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
263 β );
264 β const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
Β· β¬
Β· β°ββ '_' is declared here
265 β const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
β°ββββ
help: Consider removing this parameter.
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5]
398 β
399 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
400 β setInspectorSelection((current) => {
Β· βββββββββββ¬ββββββββββ
Β· β°ββ Avoid calling setState() directly within an effect
401 β if (props.renderInspector === undefined) {
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β react(no-unstable-nested-components): Do not define components during render.
ββ[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24]
527 β const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
528 β βββΆ const GitInspector = () => (
529 β β <GitOverviewSheet
530 β β headerInset={inspectorHeaderInset}
531 β β presentation="inspector"
532 β β route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
533 β β />
534 β β°ββΆ );
535 β const FilesInspector = () =>
β°ββββ
help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
β react(no-unstable-nested-components): Do not define components during render.
ββ[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26]
534 β );
535 β βββΆ const FilesInspector = () =>
536 β β selectedThread !== null && selectedThreadCwd !== null ? (
537 β β <ThreadFileNavigatorPane
538 β β cwd={selectedThreadCwd}
539 β β environmentId={selectedThread.environmentId}
540 β β headerInset={inspectorHeaderInset}
541 β β projectName={selectedThreadProject?.title ?? "Files"}
542 β β selectedPath={null}
543 β β onSelectFile={handleSelectInspectorFile}
544 β β />
545 β β°ββΆ ) : null;
546 β const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
β°ββββ
help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
β eslint(no-unused-vars): Function 'summarizePayload' is declared but never used.
ββ[packages/provider-acp/src/server/nativeLogging.ts:22:10]
21 β
22 β function summarizePayload(payload: unknown): Readonly<Record<string, unknown>> {
Β· βββββββββ¬βββββββ
Β· β°ββ 'summarizePayload' is declared here
23 β if (payload === null) return { valueType: "null" };
β°ββββ
help: Consider removing this declaration.
β react(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-inline-schema-compile): Hoist Schema.decodeUnknownOption(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
ββ[packages/shared/src/otelEnvironment.ts:146:14]
145 β name,
146 β (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()),
Β· ββββββββββββββββββββββββββ
147 β `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`,
β°ββββ
β eslint(require-yield): This generator function does not have `yield`
ββ[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78]
80 β
81 β βββΆ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* (
82 β β options: AcpMcpOverAcpBridgeOptions,
83 β β ): Effect.fn.Return<AcpMcpOverAcpBridge> {
84 β β const fetchImplementation = options.fetchImplementation ?? fetch;
85 β β const connections = new Map<string, Connection>();
86 β β
87 β β const connectionFor = (connectionId: string): Effect.Effect<Connection, AcpMcpOverAcpError> =>
88 β β Effect.suspend(() => {
89 β β const connection = connections.get(connectionId);
90 β β return connection === undefined
91 β β ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`))
92 β β : Effect.succeed(connection);
93 β β });
94 β β
95 β β const send = (
96 β β connection: Connection,
97 β β message: unknown,
98 β β ): Effect.Effect<ReadonlyArray<unknown>, AcpMcpOverAcpError> =>
99 β β connection.mutex.withPermits(1)(
100 β β Effect.gen(function* () {
101 β β const body = JSON.stringify(message);
102 β β if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) {
103 β β return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB."));
104 β β }
105 β β const response = yield* Effect.tryPromise({
106 β β try: (signal) =>
107 β β fetchImplementation(options.endpoint, {
108 β β method: "POST",
109 β β signal,
110 β β headers: {
111 β β "content-type": "application/json",
112 β β accept: "application/json, text/event-stream",
113 β β authorization: options.authorization,
114 β β ...(connection.sessionId === null
115 β β ? {}
116 β β : { "mcp-session-id": connection.sessionId }),
117 β β ...(connection.protocolVersion === null
118 β β ? {}
119 β β : { "mcp-protocol-version": connection.protocolVersion }),
120 β β },
121 β β body,
122 β β }),
123 β β catch: bridgeError,
124 β β });
125 β β connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId;
126 β β if (!response.ok) {
127 β β yield* Effect.promise(
128 β β () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
129 β β );
130 β β return yield* Effect.fail(
131 β β new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`),
132 β β );
133 β β }
134 β β const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))];
135 β β for (const payload of payloads) {
136 β β connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion;
137 β β }
138 β β return payloads;
139 β β }).pipe(Effect.mapError(bridgeError)),
140 β β );
141 β β
142 β β const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* (
143 β β request: AcpSchema.DisconnectMcpRequest,
144 β β ): Effect.fn.Return<AcpSchema.DisconnectMcpResponse, AcpMcpOverAcpError> {
145 β β const connection = yield* connectionFor(request.connectionId);
146 β β connections.delete(request.connectionId);
147 β β const sessionId = connection.sessionId;
148 β β if (sessionId !== null) {
149 β β const response = yield* Effect.tryPromise({
150 β β try: (signal) =>
151 β β fetchImplementation(options.endpoint, {
152 β β method: "DELETE",
153 β β signal,
154 β β headers: {
155 β β authorization: options.authorization,
156 β β "mcp-session-id": sessionId,
157 β β ...(connection.protocolVersion === null
158 β β ? {}
159 β β : { "mcp-protocol-version": connection.protocolVersion }),
160 β β },
161 β β }),
162 β β catch: bridgeError,
163 β β });
164 β β if (!response.ok && response.status !== 404) {
165 β β return yield* Effect.fail(
166 β β new AcpMcpOverAcpError(
167 β β `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`,
168 β β ),
169 β β );
170 β β }
171 β β yield* Effect.promise(
172 β β () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
173 β β );
174 β β }
175 β β return {};
176 β β });
177 β β
178 β β return {
179 β β connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) {
180 β β if (request.serverId !== "t3-code") {
181 β β return yield* Effect.fail(
182 β β new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`),
183 β β );
184 β β }
185 β β if (connections.size >= MAX_CONNECTIONS) {
186 β β return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections."));
187 β β }
188 β β const connectionId = yield* options.allocateConnectionId;
189 β β connections.set(connectionId, {
190 β β mutex: yield* Semaphore.make(1),
191 β β sessionId: null,
192 β β protocolVersion: null,
193 β β nextRequestId: 0,
194 β β });
195 β β return { connectionId };
196 β β }),
197 β β message: Effect.fn("mcpOverAcpBridge.message")(function* (request) {
198 β β const connection = yield* connectionFor(request.connectionId);
199 β β const id = ++connection.nextRequestId;
200 β β const payloads = yield* send(connection, {
201 β β jsonrpc: "2.0",
202 β β id,
203 β β method: request.method,
204 β β ...(request.params == null ? {} : { params: request.params }),
205 β β });
206 β β const response = payloads.find((payload) => asEnvelope(payload)?.id === id);
207 β β const envelope = asEnvelope(response);
208 β β if (envelope === null) {
209 β β return yield* Effect.fail(
210 β β new AcpMcpOverAcpError("MCP server did not return a matching response."),
211 β β );
212 β β }
213 β β if (envelope.error !== undefined) {
214 β β return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error)));
215 β β }
216 β β return (envelope.result ?? null) as AcpSchema.MessageMcpResponse;
217 β β }),
218 β β notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) {
219 β β const connection = yield* connectionFor(request.connectionId);
220 β β yield* send(connection, {
221 β β jsonrpc: "2.0",
222 β β method: request.method,
223 β β ...(request.params == null ? {} : { params: request.params }),
224 β β });
225 β β }),
226 β β disconnect,
227 β β dispose: Effect.suspend(() =>
228 β β Effect.forEach(
229 β β [...connections.keys()],
230 β β (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore),
231 β β { discard: true },
232 β β ),
233 β β ),
234 β β };
235 β β°ββΆ });
β°ββββ
help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed.
β eslint(no-empty-pattern): Empty object binding pattern
ββ[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
52 β
53 β for (const {} of [
Β· ββ
54 β { healthy: true },
β°ββββ
help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
β react(no-array-index-key): Usage of Array index in keys is not allowed
ββ[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15]
87 β <li
88 β key={`${index}:${check.name}`}
Β· ββββββββββββββββββββββββββββββ
89 β className="col-span-full grid grid-cols-subgrid items-center text-xs"
β°ββββ
help: Use a unique data-dependent key to avoid unnecessary rerenders
β unicorn(no-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-control-regex): Unexpected control character
ββ[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46]
219 β <Text selectable className="font-mono text-sm text-foreground">
220 β {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")}
Β· βββ¬β
Β· β°ββ 'U+001B' is a control character.
221 β </Text>
β°ββββ
help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression.
β react(capitalized-calls): Capitalized function called without JSX
ββ[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27]
601 β const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
602 β const gesture = Gesture.Pan()
Β· ββ¬β
Β· β°ββ `Pan` may be a component
603 β .enabled(!props.disabled)
β°ββββ
help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10]
117 β
118 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
119 β void refreshNotifications();
Β· βββββββββββ¬βββββββββ
Β· β°ββ Avoid calling setState() directly within an effect
120 β const subscription = AppState.addEventListener("change", (state) => {
β°ββββ
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/settings/SettingsNotificationsRouteScreen.tsx:128:7]
125 β
126 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
127 β if (!isLoaded) {
128 β setLiveActivityStatus("checking");
Β· βββββββββββ¬ββββββββββ
Β· β°ββ Avoid calling setState() directly within an effect
129 β 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/thread-inspector-content-stack.tsx:60:5]
58 β
59 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
60 β setMountedModes((current) => {
Β· ββββββββ¬βββββββ
Β· β°ββ Avoid calling setState() directly within an effect
61 β if (current.has(props.mode)) {
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used.
ββ[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10]
1619 β
1620 β function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean {
Β· βββββββββββββββββββ¬ββββββββββββββββββ
Β· β°ββ 'promptResponseHasMissingXAiStopReason' is declared here
1621 β const meta = response._meta;
β°ββββ
help: Consider removing this declaration.
β eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
ββ[packages/provider-opencode/src/server/adapter.ts:3755:7]
3754 β
3755 β const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, OpenCodeAdapterV2DriverEnv> =
Β· βββ¬ββ
Β· β°ββ 'layer' is declared here
3756 β Layer.effect(
β°ββββ
help: Consider removing this declaration.
β 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
β unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
ββ[scripts/lib/cli-external-packages.test.ts:114:11]
113 β const declared = {
114 β ...(manifest.dependencies ?? {}),
Β· ββββββββββββββββββββββββββββββββ
115 β ...(manifest.optionalDependencies ?? {}),
β°ββββ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
β unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
ββ[scripts/lib/cli-external-packages.test.ts:115:11]
114 β ...(manifest.dependencies ?? {}),
115 β ...(manifest.optionalDependencies ?? {}),
Β· ββββββββββββββββββββββββββββββββββββββββ
116 β ...(manifest.peerDependencies ?? {}),
β°ββββ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
β unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
ββ[scripts/lib/cli-external-packages.test.ts:116:11]
115 β ...(manifest.optionalDependencies ?? {}),
116 β ...(manifest.peerDependencies ?? {}),
Β· ββββββββββββββββββββββββββββββββββββ
117 β };
β°ββββ
help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
β 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(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(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
β 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.
β 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/features/diffs/nativeReviewDiffSurface.ts:277:39]
276 β
277 β βββΆ return createElement(RawNativeView, {
278 β β ...nativeProps,
279 β β refreshEnabled: props.onPullToRefresh !== undefined,
280 β β ref: nativeRef,
281 β βββΆ });
Β· β°ββββ Passing a ref to a function may read its value during render
282 β }
β°ββββ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
β eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
ββ[packages/provider-grok/src/server/adapter.ts:408:7]
407 β
408 β const layer: Layer.Layer<
Β· βββ¬ββ
Β· β°ββ 'layer' is declared here
409 β ProviderAdapter.ProviderAdapterV2,
β°ββββ
help: Consider removing this declaration.
β eslint(no-unused-vars): 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.
β 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:236:17]
235 β const requiredScopesForSettingsUpdate = (payload: unknown) => {
236 β const input = Schema.decodeUnknownSync(SettingsUpdate)(payload);
Β· ββββββββββββββββββββββββ
237 β 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:255:26]
254 β if (method === WS_METHODS.assetsCreateUrl) {
255 β const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload);
Β· ββββββββββββββββββββββββ
256 β return [
β°ββββ
β react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
ββ[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:387:19]
386 β onFilters,
387 β authorOptions = [],
Β· ββ
388 β labelOptions = [],
β°ββββ
help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
β react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
ββ[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:388:18]
387 β authorOptions = [],
388 β labelOptions = [],
Β· ββ
389 β host,
β°ββββ
help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
β react(memo-dependencies): Found extra memoization dependencies
ββ[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34]
115 β return [...commands];
116 β }, [activeThreadRef, pathname, registrationVersion, navigation]);
Β· ββββββββββ¬βββββββββ
Β· β°ββ Unnecessary dependency `registrationVersion`
117 β
β°ββββ
help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
β eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
ββ[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7]
412 β
413 β const layer = Layer.effect(ThreadPullRequestServiceV2, make);
Β· βββ¬ββ
Β· β°ββ 'layer' is declared here
β°ββββ
help: Consider removing this declaration.
β t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
ββ[packages/effect-acp/src/protocol.test.ts:500:31]
499 β
500 β const response = yield* Schema.decodeUnknownEffect(
Β· ββββββββββββββββββββββββββ
501 β Schema.fromJsonString(JsonRpcErrorResponse),
β°ββββ
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
638 β
639 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
640 β if (pendingLaunchEntry.key === launchTargetKey) {
641 β return;
642 β }
643 β setPendingLaunchEntry({
Β· βββββββββββ¬ββββββββββ
Β· β°ββ Avoid calling setState() directly within an effect
644 β key: launchTargetKey,
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
648 β
649 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
650 β if (initialAttachGridEntry.key === launchTargetKey) {
651 β return;
652 β }
653 β setInitialAttachGridEntry({
Β· βββββββββββββ¬ββββββββββββ
Β· β°ββ Avoid calling setState() directly within an effect
654 β key: launchTargetKey,
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
743 β
744 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
745 β if (!routeEnvironmentId || !routeThreadId) {
746 β setLastGridSize({
Β· ββββββββ¬βββββββ
Β· β°ββ Avoid calling setState() directly within an effect
747 β cols: DEFAULT_TERMINAL_COLS,
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β react(exhaustive-effect-dependencies): Found extra effect dependencies
ββ[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
537 β });
538 β }, [terminal.buffer, terminal.buffer.length, terminalKey]);
Β· ββββββββββββ¬ββββββββββ
Β· β°ββ Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
539 β const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
β°ββββ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
β react(exhaustive-effect-dependencies): Found extra effect dependencies
ββ[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
708 β sentInitialInputKeyRef.current = null;
709 β }, [terminalKey]);
Β· ββββββ¬βββββ
Β· β°ββ Unnecessary dependency `terminalKey`
710 β
β°ββββ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
β react(exhaustive-effect-dependencies): Found extra effect dependencies
ββ[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
799 β };
800 β }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
Β· βββββββββββββ¬ββββββββββββ ββββββ¬βββββ
Β· β β°ββ Unnecessary dependency `terminalKey`
Β· β°ββ Unnecessary dependency `terminal.lifecycleVersion`
801 β
β°ββββ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
β react(refs): Cannot access refs during render
ββ[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
792 β }
793 β const pasteSession = pasteSessionRef.current;
Β· ββββββββββββ¬βββββββββββ
Β· β°ββ Cannot access ref value during render
794 β
β°ββββ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
β t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
ββ[packages/effect-acp/src/client.ts:1269:11]
1268 β extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
1269 β Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
Β· ββββββββββββββββββββββββββ
1270 β Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
β°ββββ
β t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
ββ[packages/effect-acp/src/schema.test.ts:18:12]
17 β const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
18 β expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
Β· βββββββββ
19 β expect(
β°ββββ
β t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
ββ[packages/effect-acp/src/schema.test.ts:20:7]
19 β expect(
20 β Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
Β· βββββββββ
21 β ).toBe(true);
β°ββββ
β react(no-array-index-key): Usage of Array index in keys is not allowed
ββ[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17]
813 β <div
814 β key={`${index}:${check.name}:${check.url ?? ""}`}
Β· βββββββββββββββββββββββββββββββββββββββββββββββββ
815 β className="group flex items-center gap-2 rounded-md pr-1 hover:bg-accent/60"
β°ββββ
help: Use a unique data-dependent key to avoid unnecessary rerenders
β t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
ββ[packages/effect-acp/src/errors.test.ts:129:28]
128 β const secret = "acp-summary-secret";
129 β const cause = yield* Schema.decodeUnknownEffect(
Β· ββββββββββββββββββββββββββ
130 β Schema.Struct({
β°ββββ
β react(static-components): Cannot create components during render
ββ[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10]
196 β const { onInput, onResize } = props;
197 β const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView();
Β· βββββββββββββββββ¬βββββββββββββββ
Β· β°ββ The component is created during render here
198 β const hasNativeSurface = Boolean(NativeTerminalSurfaceView);
199 β
200 β useEffect(() => {
201 β terminalDebugLog("native:surface", {
202 β terminalKey: props.terminalKey,
203 β native: hasNativeSurface,
204 β hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(),
205 β bufferLen: props.buffer.length,
206 β isRunning: props.isRunning,
207 β });
208 β }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]);
209 β const handleNativeInput = useCallback(
210 β (event: NativeSyntheticEvent<TerminalInputEvent>) => {
211 β if (!props.isRunning || props.readOnly) {
212 β return;
213 β }
214 β terminalDebugLog("native:onInput", {
215 β codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)),
216 β });
217 β onInput(event.nativeEvent.data);
218 β },
219 β [onInput, props.isRunning, props.readOnly],
220 β );
221 β const handleNativeResize = useCallback(
222 β (event: NativeSyntheticEvent<TerminalResizeEvent>) => {
223 β onResize({
224 β cols: event.nativeEvent.cols,
225 β rows: event.nativeEvent.rows,
226 β });
227 β },
228 β [onResize],
229 β );
230 β
231 β if (NativeTerminalSurfaceView) {
232 β return (
233 β <View style={props.style}>
234 β <NativeTerminalSurfaceView
Β· βββββββββββββ¬ββββββββββββ
Β· β°ββ This component is created during render
235 β appearanceScheme={themeAppearance}
β°ββββ
help: Components created during render will reset their state each time they are created. Declare components outside of render
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
112 β const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
113 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
114 β if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
115 β return;
116 β }
117 β setEntry({ key: input.targetKey, location: candidate });
Β· βββββ¬βββ
Β· β°ββ Avoid calling setState() directly within an effect
118 β }, [candidate, entry.key, entry.location, input.targetKey]);
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β react(no-array-index-key): Usage of Array index in keys is not allowed
ββ[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15]
71 β <Pressable
72 β key={index}
Β· βββββββββββ
73 β accessibilityRole="button"
β°ββββ
help: Use a unique data-dependent key to avoid unnecessary rerenders
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
28 β const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
29 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
30 β if (snapshot && snapshot !== live) setHeld({ key, snapshot });
Β· ββββ¬βββ
Β· β°ββ Avoid calling setState() directly within an effect
31 β }, [key, live, snapshot]);
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'.
ββ[apps/server/src/orchestration-v2/EffectWorker.ts:914:7]
913 β
914 β const layerDaemon: Layer.Layer<never, never, OrchestrationEffectWorkerV2> = Layer.effectDiscard(
Β· ββββββ¬βββββ
Β· β°ββ 'layerDaemon' is declared here
915 β runDaemon.pipe(Effect.forkScoped),
β°ββββ
help: Consider removing this declaration.
β react(immutability): This value cannot be modified
ββ[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5]
35 β
36 β const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0);
Β· βββββββββ¬ββββββββ
Β· β°ββ `inspectorProgress` originates here
37 β const { renderedInspectorWidth } = props;
38 β const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
39 β
40 β const onClosed = props.onClosed;
41 β useEffect(() => {
42 β inspectorProgress.value = withTiming(
Β· βββββββββ¬ββββββββ
Β· β°ββ `inspectorProgress` cannot be modified
43 β inspectorVisible ? 1 : 0,
β°ββββ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
β react(immutability): This value cannot be modified
ββ[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7]
37 β const { renderedInspectorWidth } = props;
38 β const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
Β· βββββββββββ¬βββββββββ
Β· β°ββ `renderedContentWidth` originates here
39 β
40 β const onClosed = props.onClosed;
41 β useEffect(() => {
42 β inspectorProgress.value = withTiming(
43 β inspectorVisible ? 1 : 0,
44 β WORKSPACE_PANE_TIMING,
45 β (finished) => {
46 β if (finished === true && !inspectorVisible && onClosed !== undefined) {
47 β runOnJS(onClosed)();
48 β }
49 β },
50 β );
51 β const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
52 β renderedInspectorWidth.set(
53 β resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
54 β );
55 β }, [
56 β inspectorProgress,
57 β inspectorVisible,
58 β inspectorWidth,
59 β onClosed,
60 β renderedInspectorWidth,
61 β resizing,
62 β ]);
63 β
64 β useEffect(() => {
65 β const targetWidth = inspectorWidth ?? 0;
66 β if (!inspectorVisible || resizing) {
67 β renderedContentWidth.value = targetWidth;
Β· βββββββββββ¬βββββββββ
Β· β°ββ `renderedContentWidth` cannot be modified
68 β return;
β°ββββ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
β react(exhaustive-effect-dependencies): Found extra effect dependencies
ββ[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7]
214 β }
215 β }, [wrappedRender]);
Β· βββββββ¬ββββββ
Β· β°ββ Unnecessary dependency `wrappedRender`
216 β
β°ββββ
help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
β react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
ββ[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35]
816 β >
817 β <AdaptiveWorkspaceContext value={contextValue}>
Β· ββββββββββββββββββββ
818 β <NativeWorkspaceInspectorContext
β°ββββ
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
β react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
ββ[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:832:42]
831 β >
832 β <AdaptiveWorkspaceContext.Provider value={contextValue}>
Β· ββββββββββββββββββββ
833 β <WindowHingeContext value={windowHinge}>
β°ββββ
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
259 β .join("|");
260 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
261 β stop();
Β· βββ¬β
Β· β°ββ Avoid calling setState() directly within an effect
262 β }, [orderVersion]);
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
260 β useEffect(() => {
261 β stop();
Β· βββ¬β
Β· β°ββ Missing dependency `stop`
262 β }, [orderVersion]);
Β· βββββββ¬βββββ
Β· β°ββ Unnecessary dependency `orderVersion`
263 β useEffect(
β°ββββ
help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
β react(refs): Cannot access refs during render
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
95 β const latest = useRef(props);
96 β latest.current = props;
Β· ββββ¬βββββββ¬βββ
Β· β β°ββ Cannot update ref value during render
Β· β°ββ This value is a ref
97 β const gesture = useMemo(
β°ββββ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
β react(refs): Cannot access refs during render
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
103 β .runOnJS(true)
104 β .onStart(() => latest.current.onStart())
Β· ββββββββββββββββ¬ββββββββββββββ
Β· β°ββ Passing a ref to a function may read its value during render
105 β .onUpdate((event) => latest.current.onMove(event.translationY))
β°ββββ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
β react(refs): Cannot access refs during render
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
104 β .onStart(() => latest.current.onStart())
105 β .onUpdate((event) => latest.current.onMove(event.translationY))
Β· βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ
Β· β°ββ Passing a ref to a function may read its value during render
106 β .onEnd((event) => latest.current.onMove(event.translationY))
β°ββββ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
β react(refs): Cannot access refs during render
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
105 β .onUpdate((event) => latest.current.onMove(event.translationY))
106 β .onEnd((event) => latest.current.onMove(event.translationY))
Β· βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ
Β· β°ββ Passing a ref to a function may read its value during render
107 β .onFinalize((_, success) => latest.current.onEnd(!success)),
β°ββββ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
β react(refs): Cannot access refs during render
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
106 β .onEnd((event) => latest.current.onMove(event.translationY))
107 β .onFinalize((_, success) => latest.current.onEnd(!success)),
Β· ββββββββββββββββββββββββ¬ββββββββββββββββββββββ
Β· β°ββ Passing a ref to a function may read its value during render
108 β [props.disabled],
β°ββββ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
β react(refs): Cannot access refs during render
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
248 β const latest = useRef({ rows, planners, moveThread });
249 β latest.current = { rows, planners, moveThread };
Β· ββββ¬βββββββ¬βββ
Β· β β°ββ Cannot update ref value during render
Β· β°ββ This value is a ref
250 β
β°ββββ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
β react(refs): Cannot access refs during render
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
246 β const [preview, setPreview] = useState<Drag | null>(null);
247 β const translateY = useRef(new Animated.Value(0)).current;
Β· βββββββββββββββββββ¬ββββββββββββββββββ
Β· β°ββ Cannot access ref value during render
248 β const latest = useRef({ rows, planners, moveThread });
β°ββββ
help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
β react(purity): Cannot call impure function during render
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
323 β update(0);
324 β let last = performance.now();
Β· βββββββββ¬ββββββββ
Β· β°ββ Cannot call impure function
325 β const tick = () => {
β°ββββ
help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
β react(capitalized-calls): Capitalized function called without JSX
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
98 β () =>
99 β Gesture.Pan()
Β· ββ¬β
Β· β°ββ `Pan` may be a component
100 β .enabled(!props.disabled)
β°ββββ
help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
β react(memo-dependencies): Found missing memoization dependencies
ββ[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
103 β .runOnJS(true)
104 β .onStart(() => latest.current.onStart())
Β· ββββ¬ββ
Β· β°ββ Missing dependency `latest`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
105 β .onUpdate((event) => latest.current.onMove(event.translationY))
106 β .onEnd((event) => latest.current.onMove(event.translationY))
107 β .onFinalize((_, success) => latest.current.onEnd(!success)),
108 β [props.disabled],
Β· βββββββββ¬βββββββ
Β· β°ββ This dependency list is missing values used by the callback
109 β );
β°ββββ
help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
β t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
ββ[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7]
565 β let afterSequence = created[0]!.sequence;
566 β βββΆ for (let index = 1; index <= 32; index += 1) {
567 β β const nextEvent = {
568 β β id: EventId.make(`event:foundation-stream-race:${index}`),
569 β β type: "thread.metadata-updated" as const,
570 β β threadId,
571 β β providerInstanceId,
572 β β occurredAt: now,
573 β β payload: { ...thread, title: `Race update ${index}` },
574 β β } satisfies OrchestrationV2DomainEvent;
575 β β const reader = yield* eventSink
576 β β .stream({ threadId, afterSequence })
577 β β .pipe(Stream.runHead, Effect.forkChild);
578 β β yield* Effect.yieldNow;
579 β β const written = yield* eventSink.write({ events: [nextEvent] });
580 β β const received = yield* Fiber.join(reader);
581 β β if (Option.isNone(received)) {
582 β β return yield* Effect.die("The event stream ended before delivering the live event.");
583 β β }
584 β β assert.equal(received.value.sequence, written[0]?.sequence);
585 β β assert.equal(received.value.event.id, nextEvent.id);
586 β β afterSequence = received.value.sequence;
587 β β°ββΆ }
588 β }),
β°ββββ
β t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
ββ[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9]
2326 β let settled = false;
2327 β βββΆ while (!settled) {
2328 β β settled = (yield* outbox.listByCommandId(commandId)).every(
2329 β β (effect) => effect.status === "succeeded",
2330 β β );
2331 β β if (!settled) yield* Effect.yieldNow;
2332 β β°ββΆ }
2333 β }).pipe(Effect.provide(layerWorker), Effect.scoped);
β°ββββ
β 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.
β react(immutability): This value cannot be modified
ββ[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
53 β function usePulseAnimation(pulse: boolean) {
54 β const pulseProgress = useSharedValue(0);
Β· βββββββ¬ββββββ
Β· β°ββ `pulseProgress` originates here
55 β
56 β useEffect(() => {
57 β if (pulse) {
58 β pulseProgress.value = withRepeat(
Β· βββββββ¬ββββββ
Β· β°ββ `pulseProgress` cannot be modified
59 β withTiming(1, {
β°ββββ
help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
β react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
ββ[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
289 β return (
290 β <ExistingThreadSettingsRouteContext.Provider value={value}>
Β· βββββββββββββ
291 β {props.children}
β°ββββ
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
β react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
ββ[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
653 β return (
654 β <ThreadSettingsSessionContext.Provider value={value}>
Β· βββββββββββββ
655 β {props.children}
β°ββββ
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
β react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
ββ[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
1461 β return (
1462 β <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
Β· ββββββββββββββββββββ
1463 β <ThreadSettingsPickerStack.Navigator
β°ββββ
help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
Alternatively, move the value outside the render function if it doesn't depend on props or state.
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/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
β unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
ββ[apps/web/src/components/pullRequest/pullRequestList.logic.ts:187:9]
186 β ): boolean {
187 β const labels = entry.labels.map((label) => label.name.trim().toLowerCase());
Β· βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
188 β const holds = (label: string) => labels.includes(label.trim().toLowerCase());
β°ββββ
help: Switch to `Set`
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5]
76 β
77 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
78 β const { host, code } = parsePairingUrl(connectionPairingUrl);
79 β setHostInput(host);
Β· βββββββ¬βββββ
Β· β°ββ Avoid calling setState() directly within an effect
80 β setCodeInput(code);
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5]
82 β
83 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
84 β if (routePairingUrl.length === 0) {
85 β return;
86 β }
87 β
88 β const { host, code } = parsePairingUrl(routePairingUrl);
89 β setHostInput(host);
Β· βββββββ¬βββββ
Β· β°ββ Avoid calling setState() directly within an effect
90 β setCodeInput(code);
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7]
92 β
93 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
94 β if (pairingConnectionError) {
95 β setIsSubmitting(false);
Β· ββββββββ¬βββββββ
Β· β°ββ Avoid calling setState() directly within an effect
96 β }
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β 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.
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7]
118 β
119 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
120 β if (orientationSettled) return;
121 β const orientation = getNativeShowcaseOrientation();
122 β if (orientation === null) {
123 β setOrientationSettled(true);
Β· βββββββββββ¬ββββββββββ
Β· β°ββ Avoid calling setState() directly within an effect
124 β return;
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
ββ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7]
292 β
293 β useEffect(() => {
Β· βββββ¬ββββ
Β· β°ββ This is the containing effect
294 β if (
295 β scene === null ||
296 β requestedScene === null ||
297 β scene !== requestedScene ||
298 β !hasFixture ||
299 β !orientationSettled ||
300 β !themeApplied ||
301 β (scene === "agent-activity" && !agentActivityStaged) ||
302 β !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
303 β ) {
304 β setReadyScene(null);
Β· βββββββ¬ββββββ
Β· β°ββ Avoid calling setState() directly within an effect
305 β return;
β°ββββ
help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system.
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
β eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'.
ββ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9]
127 β let cancelled = false;
128 β let lastOutcome: string | null = null;
Β· ββββββ¬βββββ
Β· β°ββ 'lastOutcome' is declared here
129 β void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
β°ββββ
help: Consider removing this declaration.
β react(purity): Cannot call impure function during render
ββ[apps/web/src/hooks/useThreadActions.ts:821:56]
820 β const resolved = resolveThreadTarget(target);
821 β if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
Β· ββββββ¬ββββ
Β· β°ββ Cannot call impure function
822 β return AsyncResult.failure(
β°ββββ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
β react(purity): Cannot call impure function during render
ββ[apps/web/src/hooks/useThreadActions.ts:709:46]
708 β const wokeAt = resolved
709 β ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
Β· ββββββ¬ββββ
Β· β°ββ Cannot call impure function
710 β : null;
β°ββββ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
β 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(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
β eslint(no-empty-pattern): Empty object binding pattern
ββ[apps/server/src/processRunner.test.ts:266:14]
265 β
266 β for (const {} of ["timeout", "success"] as const) {
Β· ββ
267 β }
β°ββββ
help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
β unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
ββ[apps/web/src/components/chat/useComposerSend.ts:985:13]
984 β const changedBeforeDecline = draftChangedSinceSend();
985 β βββΆ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
986 β β (approval) => approval.requestId,
987 β β°ββΆ );
988 β const approvalResponding = approvalsToDecline.some((approval) =>
β°ββββ
help: Switch to `Set`
β react(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
β t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
ββ[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5]
222 β let idlePasses = 0;
223 β βββΆ for (;;) {
224 β β yield* Effect.promise(() => Promise.resolve());
225 β β const pending = backgroundRuntime.pending.shift();
226 β β if (!pending) {
227 β β idlePasses++;
228 β β if (idlePasses >= 3) {
229 β β return;
230 β β }
231 β β continue;
232 β β }
233 β β idlePasses = 0;
234 β β const exit = yield* Effect.exit(
235 β β pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
236 β β );
237 β β yield* Effect.sync(() => {
238 β β pending.resolve(exit);
239 β β });
240 β β°ββΆ }
241 β },
β°ββββ
β eslint(no-empty-pattern): Empty array binding pattern
ββ[apps/server/src/pullRequest/PullRequestService.test.ts:1429:12]
1428 β
1429 β for (const [] of [
Β· ββ
1430 β ["github", "github.com"],
β°ββββ
help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.
β eslint(no-unused-vars): Parameter '_' is declared but never used.
ββ[packages/shared/src/qrCode.ts:458:44]
457 β ): Array<byte> {
458 β let result: Array<byte> = divisor.map((_) => 0);
Β· β¬
Β· β°ββ '_' is declared here
459 β for (const b of data) {
β°ββββ
help: Consider removing this parameter.
β eslint(no-unused-vars): Variable '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.
β eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
ββ[apps/server/src/scheduledTasks/Schedule.ts:79:10]
78 β
79 β function describeSchedule(schedule: ScheduledTaskSchedule): string {
Β· βββββββββ¬βββββββ
Β· β°ββ 'describeSchedule' is declared here
80 β if (schedule.type === "webhook") return "On webhook";
β°ββββ
help: Consider removing this declaration.
β t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone.
ββ[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");
β°ββββ
β unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret.
ββ[apps/server/src/vcs/GitVcsDriverCore.ts:509:11]
508 β GIT_DIAGNOSTIC_LINE_PATTERN.test(line) ||
509 β (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)),
Β· βββββββββββββββ
510 β )
β°ββββ
help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`.
β eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used.
ββ[infra/relay/src/http/Api.ts:69:13]
68 β import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts";
69 β import * as HookForwarder from "../hooks/HookForwarder.ts";
Β· βββββββ¬ββββββ
Β· β°ββ 'HookForwarder' is imported here
70 β import * as HeldHooks from "../hooks/HeldHooks.ts";
β°ββββ
help: Consider removing this import.
β t3code(no-inline-schema-compile): Hoist Schema.decodeEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
ββ[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34]
1785 β const stat = branch.files!.find((file) => file.path === path)!;
1786 β const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({
Β· βββββββββββββββββββ
1787 β cwd,
β°ββββ
β react(purity): Cannot call impure function during render
ββ[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
371 β const { open, onOpenChange, onSnooze, timestampFormat } = props;
372 β const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
Β· ββββββ¬ββββ
Β· β°ββ Cannot call impure function
373 β return (
β°ββββ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
β react(purity): Cannot call impure function during render
ββ[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39]
852 β if (snoozeGateClock.thread !== thread) {
853 β setSnoozeGateClock({ thread, now: new Date().toISOString() });
Β· ββββββ¬ββββ
Β· β°ββ Cannot call impure function
854 β }
β°ββββ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
β eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used.
ββ[apps/web/src/lib/terminalContext.ts:56:10]
55 β
56 β function normalizeTerminalContextSelection(
Β· βββββββββββββββββ¬ββββββββββββββββ
Β· β°ββ 'normalizeTerminalContextSelection' is declared here
57 β selection: TerminalContextSelection,
β°ββββ
help: Consider removing this declaration.
β eslint(no-unused-vars): 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.
β unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
ββ[apps/web/src/lib/composerContextReferences.ts:90:40]
89 β let cursor = prompt.length;
90 β for (const occurrence of occurrences.reverse()) {
Β· βββββββ
91 β let { start, end } = occurrence;
β°ββββ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
β unicorn(no-new-array): Do not use `new Array(singleArgument)`.
ββ[apps/web/src/terminal/ghostty/core.ts:194:19]
193 β const count = Math.min(CHUNK_SIZE, graphemeLength - start);
194 β const codes = new Array<number>(count);
Β· ββββββββββββββββββββββββ
195 β for (let index = 0; index < count; index += 1) {
β°ββββ
help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`.
β unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
ββ[apps/mobile/src/lib/markdownDocument.ts:138:28]
137 β visit(parser.parse(markdown));
138 β for (const edit of edits.reverse())
Β· βββββββ
139 β markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
β°ββββ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
β unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
ββ[apps/mobile/src/lib/markdownDocument.ts:169:28]
168 β visit(parser.parse(markdown));
169 β for (const edit of edits.reverse())
Β· βββββββ
170 β markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
β°ββββ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
β unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
ββ[apps/mobile/src/lib/markdownDocument.ts:223:38]
222 β visit(parser.parse(markdown));
223 β for (const lineStart of lineStarts.reverse()) {
Β· βββββββ
224 β // The header row may be a lazy line without its container markers (`>` or list indent),
β°ββββ
help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
β react(purity): Cannot call impure function during render
ββ[apps/web/src/components/CommandPalette.tsx:1996:20]
1995 β title: inferProjectTitleFromPath(destinationPath),
1996 β createdAt: new Date().toISOString(),
Β· ββββββ¬ββββ
Β· β°ββ Cannot call impure function
1997 β remoteUrl: addProjectCloneFlow.remoteUrl,
β°ββββ
help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
Found 0 errors and 362 warnings in 5400 files (5.7s, 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=__08625919-59f3-45d0-89fc-0ed337f0e1d3.__actions_cache]
Post job cleanup.
[command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /home/runner/_work/t3code/t3code --files-from manifest.txt --use-compress-program zstdmt
Sent 994310451 of 994310451 (100.0%), 2017.5 MBs/sec
Cache saved with key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef
##[end-action id=__08625919-59f3-45d0-89fc-0ed337f0e1d3.__actions_cache;outcome=success;conclusion=success;duration_ms=4825]
##[start-action display=Cache Vite+;id=__08625919-59f3-45d0-89fc-0ed337f0e1d3.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=__08625919-59f3-45d0-89fc-0ed337f0e1d3.vp_cache;outcome=success;conclusion=success;duration_ms=75]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/dd17dbf2-7c73-472f-a5f8-c32e08f70e94' 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: 201
BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 516
BLACKSMITH_CHECK_RUN_ID: 120670937783
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