GitHub check

256 KB of 604 KB loaded Download the full log (604 KB)
348 KB of earlier output not loaded
4T15:12:30.4095300Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4095509Z      ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T15:12:30.4095596Z  173 โ”‚     return endRequest;
2026-10-24T15:12:30.4095707Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4096352Z   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.
2026-10-24T15:12:30.4096713Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T15:12:30.4096717Z
2026-10-24T15:12:30.4096950Z   โš  eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used.
2026-10-24T15:12:30.4097146Z     โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13]
2026-10-24T15:12:30.4097283Z  24 โ”‚ import * as Schema from "effect/Schema";
2026-10-24T15:12:30.4097514Z  25 โ”‚ import * as HostProcess from "@t3tools/shared/HostProcess";
2026-10-24T15:12:30.4097636Z     ยท             โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4097789Z     ยท                  โ•ฐโ”€โ”€ 'HostProcess' is imported here
2026-10-24T15:12:30.4097903Z  26 โ”‚
2026-10-24T15:12:30.4097989Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4098121Z   help: Consider removing this import.
2026-10-24T15:12:30.4098124Z
2026-10-24T15:12:30.4098415Z   โš  eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4098623Z      โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11]
2026-10-24T15:12:30.4098751Z  123 โ”‚     const path = yield* Path.Path;
2026-10-24T15:12:30.4098905Z  124 โ”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-24T15:12:30.4099022Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4099236Z      ยท                 โ•ฐโ”€โ”€ 'serverConfig' is declared here
2026-10-24T15:12:30.4099464Z  125 โ”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-24T15:12:30.4099549Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4099693Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4099696Z
2026-10-24T15:12:30.4099988Z   โš  eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4100192Z      โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11]
2026-10-24T15:12:30.4100418Z  124 โ”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-24T15:12:30.4100596Z  125 โ”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-24T15:12:30.4100698Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4100877Z      ยท                  โ•ฐโ”€โ”€ 'serverSettings' is declared here
2026-10-24T15:12:30.4101071Z  126 โ”‚     const gitWorkflow = yield* GitWorkflowService.GitWorkflowService;
2026-10-24T15:12:30.4101157Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4101300Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4101303Z
2026-10-24T15:12:30.4101611Z   โš  eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4101793Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:218:7]
2026-10-24T15:12:30.4101891Z  217 โ”‚
2026-10-24T15:12:30.4102078Z  218 โ”‚ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect<void> =>
2026-10-24T15:12:30.4102185Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4102374Z      ยท                 โ•ฐโ”€โ”€ 'revokeActiveMcpThread' is declared here
2026-10-24T15:12:30.4102619Z  219 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void;
2026-10-24T15:12:30.4102708Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4102828Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4102831Z
2026-10-24T15:12:30.4103178Z   โš  eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4103341Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:221:7]
2026-10-24T15:12:30.4103514Z  220 โ”‚
2026-10-24T15:12:30.4103710Z  221 โ”‚ const revokeAllActiveMcpCredentials = (): Effect.Effect<void> =>
2026-10-24T15:12:30.4103830Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4104044Z      ยท                     โ•ฐโ”€โ”€ 'revokeAllActiveMcpCredentials' is declared here
2026-10-24T15:12:30.4104274Z  222 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void;
2026-10-24T15:12:30.4104364Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4104482Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4104485Z
2026-10-24T15:12:30.4104788Z   โš  eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4104967Z      โ•ญโ”€[apps/server/src/orchestration-v2/EffectWorker.ts:914:7]
2026-10-24T15:12:30.4105066Z  913 โ”‚
2026-10-24T15:12:30.4105270Z  914 โ”‚ const layerDaemon: Layer.Layer<never, never, OrchestrationEffectWorkerV2> = Layer.effectDiscard(
2026-10-24T15:12:30.4105384Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4105604Z      ยท            โ•ฐโ”€โ”€ 'layerDaemon' is declared here
2026-10-24T15:12:30.4105785Z  915 โ”‚   runDaemon.pipe(Effect.forkScoped),
2026-10-24T15:12:30.4105852Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4105994Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4105996Z
2026-10-24T15:12:30.4106191Z   โš  eslint(no-new): Do not use 'new' for side effects.
2026-10-24T15:12:30.4106434Z      โ•ญโ”€[apps/server/src/mcp/McpToolAccess.test.ts:168:3]
2026-10-24T15:12:30.4106594Z  167 โ”‚   // @ts-expect-error a declaration constructed directly
2026-10-24T15:12:30.4106706Z  168 โ”‚   new McpToolAccess.Declaration(unchecked);
2026-10-24T15:12:30.4106837Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4106994Z  169 โ”‚   // @ts-expect-error a handlers layer built outside McpToolAccess
2026-10-24T15:12:30.4107100Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4107283Z   help: Assign the result of 'new' to a variable or compare it to a reference.
2026-10-24T15:12:30.4107289Z
2026-10-24T15:12:30.4107509Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T15:12:30.4107684Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
2026-10-24T15:12:30.4107884Z  120 โ”‚   const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
2026-10-24T15:12:30.4107998Z  121 โ”‚   const dispatch = vi.fn((_: unknown) =>
2026-10-24T15:12:30.4108115Z      ยท                           โ”ฌ
2026-10-24T15:12:30.4108284Z      ยท                           โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T15:12:30.4108411Z  122 โ”‚     (options.dispatchGate ?? Effect.void).pipe(
2026-10-24T15:12:30.4108491Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4108637Z   help: Consider removing this parameter.
2026-10-24T15:12:30.4108646Z
2026-10-24T15:12:30.4108871Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T15:12:30.4109131Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
2026-10-24T15:12:30.4109229Z  133 โ”‚   );
2026-10-24T15:12:30.4109359Z  134 โ”‚   const listLocalBranchNames = vi.fn((_: string) =>
2026-10-24T15:12:30.4109492Z      ยท                                       โ”ฌ
2026-10-24T15:12:30.4109670Z      ยท                                       โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T15:12:30.4109765Z  135 โ”‚     Effect.succeed(
2026-10-24T15:12:30.4109843Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4109984Z   help: Consider removing this parameter.
2026-10-24T15:12:30.4109987Z
2026-10-24T15:12:30.4110264Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T15:12:30.4110466Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
2026-10-24T15:12:30.4110531Z  177 โ”‚   });
2026-10-24T15:12:30.4110689Z  178 โ”‚   const sendToThread = vi.fn((_: unknown) => {
2026-10-24T15:12:30.4110812Z      ยท                               โ”ฌ
2026-10-24T15:12:30.4110980Z      ยท                               โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T15:12:30.4111097Z  179 โ”‚     switch (options.continuation ?? "queued") {
2026-10-24T15:12:30.4111185Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4111332Z   help: Consider removing this parameter.
2026-10-24T15:12:30.4111334Z
2026-10-24T15:12:30.4111631Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T15:12:30.4111781Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
2026-10-24T15:12:30.4111868Z  202 โ”‚   );
2026-10-24T15:12:30.4112030Z  203 โ”‚   const removeWorktree = vi.fn((_: unknown) =>
2026-10-24T15:12:30.4112156Z      ยท                                 โ”ฌ
2026-10-24T15:12:30.4112309Z      ยท                                 โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T15:12:30.4112425Z  204 โ”‚     options.removeWorktreeFails
2026-10-24T15:12:30.4112514Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4112657Z   help: Consider removing this parameter.
2026-10-24T15:12:30.4112660Z
2026-10-24T15:12:30.4112857Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T15:12:30.4113023Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
2026-10-24T15:12:30.4113110Z  207 โ”‚   );
2026-10-24T15:12:30.4113263Z  208 โ”‚   const deleteLocalBranch = vi.fn((_: unknown) =>
2026-10-24T15:12:30.4113397Z      ยท                                    โ”ฌ
2026-10-24T15:12:30.4113584Z      ยท                                    โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T15:12:30.4113709Z  209 โ”‚     options.deleteLocalBranchFails
2026-10-24T15:12:30.4113798Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4113941Z   help: Consider removing this parameter.
2026-10-24T15:12:30.4113944Z
2026-10-24T15:12:30.4114222Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T15:12:30.4114392Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
2026-10-24T15:12:30.4114478Z  212 โ”‚   );
2026-10-24T15:12:30.4114649Z  213 โ”‚   const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
2026-10-24T15:12:30.4114764Z      ยท                                          โ”ฌ
2026-10-24T15:12:30.4114950Z      ยท                                          โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T15:12:30.4115077Z  214 โ”‚     options.fetchWorktreeBaseFails
2026-10-24T15:12:30.4115166Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4115287Z   help: Consider removing this parameter.
2026-10-24T15:12:30.4115290Z
2026-10-24T15:12:30.4115505Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T15:12:30.4115679Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
2026-10-24T15:12:30.4115759Z  253 โ”‚   );
2026-10-24T15:12:30.4115880Z  254 โ”‚   const localStatus = vi.fn((_: unknown) =>
2026-10-24T15:12:30.4116013Z      ยท                              โ”ฌ
2026-10-24T15:12:30.4116187Z      ยท                              โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T15:12:30.4116349Z  255 โ”‚     Effect.succeed({
2026-10-24T15:12:30.4116441Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4116669Z   help: Consider removing this parameter.
2026-10-24T15:12:30.4116672Z
2026-10-24T15:12:30.4116892Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T15:12:30.4117058Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
2026-10-24T15:12:30.4117139Z  263 โ”‚   );
2026-10-24T15:12:30.4117319Z  264 โ”‚   const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
2026-10-24T15:12:30.4117459Z      ยท                                โ”ฌ
2026-10-24T15:12:30.4117628Z      ยท                                โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T15:12:30.4117810Z  265 โ”‚   const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
2026-10-24T15:12:30.4117870Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4118035Z   help: Consider removing this parameter.
2026-10-24T15:12:30.4118041Z
2026-10-24T15:12:30.4118336Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T15:12:30.4118504Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
2026-10-24T15:12:30.4118575Z  57 โ”‚
2026-10-24T15:12:30.4118682Z  58 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4118800Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4118964Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T15:12:30.4119075Z  59 โ”‚     const controller = new AbortController();
2026-10-24T15:12:30.4123363Z  60 โ”‚     setLoadState("pending");
2026-10-24T15:12:30.4123461Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4123684Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T15:12:30.4123857Z  61 โ”‚     // A renewed signature is used on Retry, not as a reason to reset the native player.
2026-10-24T15:12:30.4123910Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4124522Z   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.
2026-10-24T15:12:30.4124856Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T15:12:30.4124859Z
2026-10-24T15:12:30.4125066Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T15:12:30.4125207Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
2026-10-24T15:12:30.4125293Z  70 โ”‚     return () => controller.abort();
2026-10-24T15:12:30.4125390Z  71 โ”‚   }, [player, props.playRequested, attempt]);
2026-10-24T15:12:30.4125568Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4125800Z     ยท          โ”‚             โ”‚              โ•ฐโ”€โ”€ Unnecessary dependency `attempt`
2026-10-24T15:12:30.4126004Z     ยท          โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `props.playRequested`
2026-10-24T15:12:30.4126144Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `player_0`
2026-10-24T15:12:30.4126198Z  72 โ”‚
2026-10-24T15:12:30.4126250Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4126634Z   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
2026-10-24T15:12:30.4127068Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4127071Z
2026-10-24T15:12:30.4127261Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T15:12:30.4127420Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27]
2026-10-24T15:12:30.4127593Z  601 โ”‚   const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
2026-10-24T15:12:30.4127673Z  602 โ”‚   const gesture = Gesture.Pan()
2026-10-24T15:12:30.4127760Z      ยท                           โ”€โ”ฌโ”€
2026-10-24T15:12:30.4127909Z      ยท                            โ•ฐโ”€โ”€ `Pan` may be a component
2026-10-24T15:12:30.4127989Z  603 โ”‚     .enabled(!props.disabled)
2026-10-24T15:12:30.4128044Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4128322Z   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
2026-10-24T15:12:30.4128777Z   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
2026-10-24T15:12:30.4128780Z
2026-10-24T15:12:30.4128949Z   โš  eslint(no-empty-pattern): Empty array binding pattern
2026-10-24T15:12:30.4129109Z       โ•ญโ”€[apps/server/src/pullRequest/PullRequestService.test.ts:1437:12]
2026-10-24T15:12:30.4129169Z  1436 โ”‚
2026-10-24T15:12:30.4129240Z  1437 โ”‚ for (const [] of [
2026-10-24T15:12:30.4129314Z       ยท            โ”€โ”€
2026-10-24T15:12:30.4129386Z  1438 โ”‚   ["github", "github.com"],
2026-10-24T15:12:30.4129440Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4129719Z   help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.
2026-10-24T15:12:30.4129722Z
2026-10-24T15:12:30.4130100Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T15:12:30.4130251Z      โ•ญโ”€[apps/mobile/src/components/ComposerContextSheet.tsx:272:25]
2026-10-24T15:12:30.4130361Z  271 โ”‚                 {record.elements?.map((element, index) => (
2026-10-24T15:12:30.4130534Z  272 โ”‚                   <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
2026-10-24T15:12:30.4130696Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4130774Z  273 โ”‚                     <ContextField
2026-10-24T15:12:30.4130827Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4130974Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T15:12:30.4130977Z
2026-10-24T15:12:30.4131239Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T15:12:30.4131389Z     โ•ญโ”€[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
2026-10-24T15:12:30.4131551Z  28 โ”‚   const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
2026-10-24T15:12:30.4131618Z  29 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4131690Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4131903Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T15:12:30.4132073Z  30 โ”‚     if (snapshot && snapshot !== live) setHeld({ key, snapshot });
2026-10-24T15:12:30.4132180Z     ยท                                        โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4132375Z     ยท                                           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T15:12:30.4132448Z  31 โ”‚   }, [key, live, snapshot]);
2026-10-24T15:12:30.4132501Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4133108Z   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.
2026-10-24T15:12:30.4133438Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T15:12:30.4133445Z
2026-10-24T15:12:30.4133691Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T15:12:30.4133837Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
2026-10-24T15:12:30.4133941Z  772 โ”‚     if (settingsSheetPresentation.isActive) {
2026-10-24T15:12:30.4134072Z  773 โ”‚       settingsRoutePresentation.present(settingsRouteSession);
2026-10-24T15:12:30.4134167Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4134344Z      ยท                   โ•ฐโ”€โ”€ Missing dependency `settingsRoutePresentation`
2026-10-24T15:12:30.4134401Z  774 โ”‚     }
2026-10-24T15:12:30.4134612Z  775 โ”‚   }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
2026-10-24T15:12:30.4134726Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4135012Z      ยท                       โ•ฐโ”€โ”€ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
2026-10-24T15:12:30.4135068Z  776 โ”‚
2026-10-24T15:12:30.4135120Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4135544Z   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
2026-10-24T15:12:30.4135862Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4135865Z
2026-10-24T15:12:30.4136030Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4136176Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5]
2026-10-24T15:12:30.4136337Z  387 โ”‚     typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
2026-10-24T15:12:30.4136472Z  388 โ”‚   const animatedBorderRadius = useSharedValue(targetBorderRadius);
2026-10-24T15:12:30.4136565Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4136722Z      ยท                   โ•ฐโ”€โ”€ `animatedBorderRadius` originates here
2026-10-24T15:12:30.4136880Z  389 โ”‚   const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
2026-10-24T15:12:30.4136949Z  390 โ”‚   useLayoutEffect(() => {
2026-10-24T15:12:30.4137052Z  391 โ”‚     animatedBorderRadius.value = shouldAnimate
2026-10-24T15:12:30.4137196Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4137388Z      ยท               โ•ฐโ”€โ”€ `animatedBorderRadius` cannot be modified
2026-10-24T15:12:30.4137478Z  392 โ”‚       ? withTiming(targetBorderRadius, {
2026-10-24T15:12:30.4137532Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4137801Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T15:12:30.4138111Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4138114Z
2026-10-24T15:12:30.4138369Z   โš  eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used.
2026-10-24T15:12:30.4138558Z      โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10]
2026-10-24T15:12:30.4138616Z  959 โ”‚
2026-10-24T15:12:30.4138726Z  960 โ”‚ function layerClaudeAgentSdkReplayQueryRunner(
2026-10-24T15:12:30.4138842Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4139043Z      ยท                            โ•ฐโ”€โ”€ 'layerClaudeAgentSdkReplayQueryRunner' is declared here
2026-10-24T15:12:30.4139146Z  961 โ”‚   transcript: ClaudeAgentSdkReplayTranscript,
2026-10-24T15:12:30.4139199Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4139303Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4139307Z
2026-10-24T15:12:30.4139565Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T15:12:30.4139715Z      โ•ญโ”€[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-24T15:12:30.4139774Z  150 โ”‚
2026-10-24T15:12:30.4139841Z  151 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4139912Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4140043Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T15:12:30.4140129Z  152 โ”‚     if (!controlledSelectedPath) {
2026-10-24T15:12:30.4140193Z  153 โ”‚       return;
2026-10-24T15:12:30.4140248Z  154 โ”‚     }
2026-10-24T15:12:30.4140335Z  155 โ”‚     setExpandedPaths((current) => {
2026-10-24T15:12:30.4140417Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4140587Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T15:12:30.4140713Z  156 โ”‚       const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-24T15:12:30.4140765Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4141425Z   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.
2026-10-24T15:12:30.4141780Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T15:12:30.4141783Z
2026-10-24T15:12:30.4142001Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T15:12:30.4142175Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7]
2026-10-24T15:12:30.4142255Z  248 โ”‚       mountedRef.current = false;
2026-10-24T15:12:30.4142333Z  249 โ”‚       flow.setBranchQuery("");
2026-10-24T15:12:30.4142407Z      ยท       โ”€โ”€โ”ฌโ”€
2026-10-24T15:12:30.4142539Z      ยท         โ•ฐโ”€โ”€ Missing dependency `flow`
2026-10-24T15:12:30.4142598Z  250 โ”‚     };
2026-10-24T15:12:30.4142671Z  251 โ”‚   }, [flow.setBranchQuery]);
2026-10-24T15:12:30.4142758Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4142964Z      ยท                โ•ฐโ”€โ”€ Overly precise dependency `flow.setBranchQuery`, use `flow` instead
2026-10-24T15:12:30.4143019Z  252 โ”‚
2026-10-24T15:12:30.4143072Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4143495Z   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
2026-10-24T15:12:30.4143837Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4143843Z
2026-10-24T15:12:30.4144046Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T15:12:30.4144194Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-24T15:12:30.4144292Z  256 โ”‚     return () => cancelAnimationFrame(frame);
2026-10-24T15:12:30.4144371Z  257 โ”‚   }, [props.path, targetIndex]);
2026-10-24T15:12:30.4144448Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4144594Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `props.path`
2026-10-24T15:12:30.4144648Z  258 โ”‚
2026-10-24T15:12:30.4144699Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4145001Z   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
2026-10-24T15:12:30.4145317Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4145320Z
2026-10-24T15:12:30.4145516Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T15:12:30.4145666Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-24T15:12:30.4145739Z  292 โ”‚                     <SourceText
2026-10-24T15:12:30.4145841Z  293 โ”‚                       key={`${index}:${tokenIndex}`}
2026-10-24T15:12:30.4145960Z      ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4146031Z  294 โ”‚                       style={{
2026-10-24T15:12:30.4146083Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4146291Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T15:12:30.4146329Z
2026-10-24T15:12:30.4146526Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T15:12:30.4146674Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-24T15:12:30.4146740Z  308 โ”‚             return (
2026-10-24T15:12:30.4146871Z  309 โ”‚               <SourceText key={index}>
2026-10-24T15:12:30.4146973Z      ยท                           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4147039Z  310 โ”‚                 {body}
2026-10-24T15:12:30.4147090Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4147237Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T15:12:30.4147240Z
2026-10-24T15:12:30.4147505Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T15:12:30.4147669Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T15:12:30.4147732Z  259 โ”‚     .join("|");
2026-10-24T15:12:30.4147797Z  260 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4147869Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4148000Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T15:12:30.4148080Z  261 โ”‚     stop();
2026-10-24T15:12:30.4148150Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-24T15:12:30.4148317Z      ยท       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T15:12:30.4148384Z  262 โ”‚   }, [orderVersion]);
2026-10-24T15:12:30.4148435Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4149045Z   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.
2026-10-24T15:12:30.4149375Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T15:12:30.4149378Z
2026-10-24T15:12:30.4149597Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T15:12:30.4149758Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T15:12:30.4149822Z  260 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4149883Z  261 โ”‚     stop();
2026-10-24T15:12:30.4149951Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-24T15:12:30.4150083Z      ยท       โ•ฐโ”€โ”€ Missing dependency `stop`
2026-10-24T15:12:30.4150151Z  262 โ”‚   }, [orderVersion]);
2026-10-24T15:12:30.4150231Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4150379Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `orderVersion`
2026-10-24T15:12:30.4150440Z  263 โ”‚   useEffect(
2026-10-24T15:12:30.4150493Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4150914Z   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
2026-10-24T15:12:30.4151228Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4151231Z
2026-10-24T15:12:30.4151435Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4151624Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
2026-10-24T15:12:30.4151703Z  95 โ”‚   const latest = useRef(props);
2026-10-24T15:12:30.4151774Z  96 โ”‚   latest.current = props;
2026-10-24T15:12:30.4151880Z     ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4152059Z     ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T15:12:30.4152174Z     ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-24T15:12:30.4152243Z  97 โ”‚   const gesture = useMemo(
2026-10-24T15:12:30.4152296Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4152774Z   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
2026-10-24T15:12:30.4153071Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4153074Z
2026-10-24T15:12:30.4153221Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4153382Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
2026-10-24T15:12:30.4153450Z  103 โ”‚         .runOnJS(true)
2026-10-24T15:12:30.4153571Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T15:12:30.4153690Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4153893Z      ยท                                 โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T15:12:30.4154035Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T15:12:30.4154089Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4154565Z   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
2026-10-24T15:12:30.4154859Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4154862Z
2026-10-24T15:12:30.4155007Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4155169Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
2026-10-24T15:12:30.4155271Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T15:12:30.4155405Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T15:12:30.4155550Z      ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4155764Z      ยท                                             โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T15:12:30.4155888Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T15:12:30.4155941Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4156410Z   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
2026-10-24T15:12:30.4156760Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4156794Z
2026-10-24T15:12:30.4156938Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4157097Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
2026-10-24T15:12:30.4157227Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T15:12:30.4157350Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T15:12:30.4157492Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4157698Z      ยท                                          โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T15:12:30.4157831Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T15:12:30.4157888Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4158357Z   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
2026-10-24T15:12:30.4158648Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4158650Z
2026-10-24T15:12:30.4158793Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4158954Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
2026-10-24T15:12:30.4159077Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T15:12:30.4159205Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T15:12:30.4159345Z      ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4159555Z      ยท                                            โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T15:12:30.4159626Z  108 โ”‚     [props.disabled],
2026-10-24T15:12:30.4159678Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4160145Z   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
2026-10-24T15:12:30.4160439Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4160495Z
2026-10-24T15:12:30.4160670Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4160830Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
2026-10-24T15:12:30.4160945Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-24T15:12:30.4161050Z  249 โ”‚   latest.current = { rows, planners, moveThread };
2026-10-24T15:12:30.4161157Z      ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4161339Z      ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T15:12:30.4161455Z      ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-24T15:12:30.4161508Z  250 โ”‚
2026-10-24T15:12:30.4161560Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4162038Z   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
2026-10-24T15:12:30.4162334Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4162336Z
2026-10-24T15:12:30.4162481Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4162640Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
2026-10-24T15:12:30.4162760Z  246 โ”‚   const [preview, setPreview] = useState<Drag | null>(null);
2026-10-24T15:12:30.4162875Z  247 โ”‚   const translateY = useRef(new Animated.Value(0)).current;
2026-10-24T15:12:30.4163007Z      ยท                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4163179Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4163292Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-24T15:12:30.4163344Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4163836Z   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
2026-10-24T15:12:30.4164127Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4164130Z
2026-10-24T15:12:30.4164298Z   โš  react(purity): Cannot call impure function during render
2026-10-24T15:12:30.4164464Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
2026-10-24T15:12:30.4164534Z  323 โ”‚     update(0);
2026-10-24T15:12:30.4164616Z  324 โ”‚     let last = performance.now();
2026-10-24T15:12:30.4164712Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4164854Z      ยท                        โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T15:12:30.4164924Z  325 โ”‚     const tick = () => {
2026-10-24T15:12:30.4164976Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4165276Z   help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T15:12:30.4165572Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T15:12:30.4165575Z
2026-10-24T15:12:30.4165825Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T15:12:30.4166016Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
2026-10-24T15:12:30.4166077Z   98 โ”‚     () =>
2026-10-24T15:12:30.4166143Z   99 โ”‚       Gesture.Pan()
2026-10-24T15:12:30.4166219Z      ยท               โ”€โ”ฌโ”€
2026-10-24T15:12:30.4166351Z      ยท                โ•ฐโ”€โ”€ `Pan` may be a component
2026-10-24T15:12:30.4166431Z  100 โ”‚         .enabled(!props.disabled)
2026-10-24T15:12:30.4166483Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4166760Z   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
2026-10-24T15:12:30.4167212Z   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
2026-10-24T15:12:30.4167218Z
2026-10-24T15:12:30.4167406Z   โš  react(memo-dependencies): Found missing memoization dependencies
2026-10-24T15:12:30.4167564Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
2026-10-24T15:12:30.4167632Z  103 โ”‚         .runOnJS(true)
2026-10-24T15:12:30.4167733Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T15:12:30.4167822Z      ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4168262Z      ยท                           โ•ฐโ”€โ”€ 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
2026-10-24T15:12:30.4168399Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T15:12:30.4168523Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T15:12:30.4168647Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T15:12:30.4168716Z  108 โ”‚     [props.disabled],
2026-10-24T15:12:30.4168797Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4168985Z      ยท             โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T15:12:30.4169041Z  109 โ”‚   );
2026-10-24T15:12:30.4169092Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4169300Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T15:12:30.4169619Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4169625Z
2026-10-24T15:12:30.4169853Z   โš  unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T15:12:30.4170095Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15]
2026-10-24T15:12:30.4170162Z  1997 โ”‚       assert.equal(
2026-10-24T15:12:30.4170311Z  1998 โ”‚         items.filter((item) => item.type === "assistant_message").at(-1)?.text,
2026-10-24T15:12:30.4170391Z       ยท               โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4170469Z  1999 โ”‚         "authoritative answer",
2026-10-24T15:12:30.4170522Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4170694Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T15:12:30.4170697Z
2026-10-24T15:12:30.4171238Z   โš  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.
2026-10-24T15:12:30.4171451Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7]
2026-10-24T15:12:30.4171633Z  3950 โ”‚           const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped);
2026-10-24T15:12:30.4171843Z  3951 โ”‚ โ•ญโ”€โ–ถ       while (!responseLifecycle.includes("failed")) {
2026-10-24T15:12:30.4171954Z  3952 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4172089Z  3953 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4172218Z  3954 โ”‚           const responseExit = yield* Fiber.join(responseFiber);
2026-10-24T15:12:30.4172273Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4172275Z
2026-10-24T15:12:30.4172744Z   โš  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.
2026-10-24T15:12:30.4172913Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9]
2026-10-24T15:12:30.4173004Z  6061 โ”‚               .pipe(Effect.forkScoped);
2026-10-24T15:12:30.4173189Z  6062 โ”‚ โ•ญโ”€โ–ถ         while (promptGates.length < 1) {
2026-10-24T15:12:30.4173299Z  6063 โ”‚ โ”‚             yield* Effect.yieldNow;
2026-10-24T15:12:30.4173442Z  6064 โ”‚ โ•ฐโ”€โ–ถ         }
2026-10-24T15:12:30.4173640Z  6065 โ”‚             assert.isDefined(sessionUpdateHandler, "session update handler must be wired");
2026-10-24T15:12:30.4173692Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4173695Z
2026-10-24T15:12:30.4174156Z   โš  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.
2026-10-24T15:12:30.4174323Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9]
2026-10-24T15:12:30.4174411Z  6196 โ”‚               .pipe(Effect.forkScoped);
2026-10-24T15:12:30.4174593Z  6197 โ”‚ โ•ญโ”€โ–ถ         while (promptGates.length < 2) {
2026-10-24T15:12:30.4174701Z  6198 โ”‚ โ”‚             yield* Effect.yieldNow;
2026-10-24T15:12:30.4174840Z  6199 โ”‚ โ•ฐโ”€โ–ถ         }
2026-10-24T15:12:30.4175012Z  6200 โ”‚             if (sessionUpdateHandler === undefined || capturedMutation.current === null) {
2026-10-24T15:12:30.4175065Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4175067Z
2026-10-24T15:12:30.4175532Z   โš  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.
2026-10-24T15:12:30.4175682Z      โ•ญโ”€[apps/server/src/background/HostPowerMonitor.test.ts:133:11]
2026-10-24T15:12:30.4175816Z  132 โ”‚               const monitor = yield* HostPowerMonitor.HostPowerMonitor;
2026-10-24T15:12:30.4175960Z  133 โ”‚ โ•ญโ”€โ–ถ           for (
2026-10-24T15:12:30.4176118Z  134 โ”‚ โ”‚               let attempt = 0;
2026-10-24T15:12:30.4176319Z  135 โ”‚ โ”‚               attempt < 100 && (yield* monitor.snapshot).onBattery !== "true";
2026-10-24T15:12:30.4176418Z  136 โ”‚ โ”‚               attempt += 1
2026-10-24T15:12:30.4176502Z  137 โ”‚ โ”‚             ) {
2026-10-24T15:12:30.4176612Z  138 โ”‚ โ”‚               yield* Effect.yieldNow;
2026-10-24T15:12:30.4176745Z  139 โ”‚ โ•ฐโ”€โ–ถ           }
2026-10-24T15:12:30.4176869Z  140 โ”‚               expect((yield* monitor.snapshot).onBattery).toBe("true");
2026-10-24T15:12:30.4176921Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4176924Z
2026-10-24T15:12:30.4177188Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4177362Z        โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7]
2026-10-24T15:12:30.4177421Z  10577 โ”‚
2026-10-24T15:12:30.4177495Z  10578 โ”‚ const layer: Layer.Layer<
2026-10-24T15:12:30.4177568Z        ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4177695Z        ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T15:12:30.4177790Z  10579 โ”‚   ProviderAdapter.ProviderAdapterV2,
2026-10-24T15:12:30.4177843Z        โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4177948Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4177951Z
2026-10-24T15:12:30.4178096Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4178256Z      โ•ญโ”€[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39]
2026-10-24T15:12:30.4178311Z  276 โ”‚
2026-10-24T15:12:30.4178498Z  277 โ”‚ โ•ญโ”€โ–ถ   return createElement(RawNativeView, {
2026-10-24T15:12:30.4178595Z  278 โ”‚ โ”‚       ...nativeProps,
2026-10-24T15:12:30.4178739Z  279 โ”‚ โ”‚       refreshEnabled: props.onPullToRefresh !== undefined,
2026-10-24T15:12:30.4178833Z  280 โ”‚ โ”‚       ref: nativeRef,
2026-10-24T15:12:30.4178962Z  281 โ”‚ โ”œโ”€โ–ถ   });
2026-10-24T15:12:30.4179202Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T15:12:30.4179257Z  282 โ”‚     }
2026-10-24T15:12:30.4179309Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4179786Z   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
2026-10-24T15:12:30.4180080Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4180083Z
2026-10-24T15:12:30.4180459Z   โš  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.
2026-10-24T15:12:30.4180588Z      โ•ญโ”€[apps/server/src/assets/AssetAccess.test.ts:975:35]
2026-10-24T15:12:30.4180737Z  974 โ”‚       // Every client and server release spells the resource this way on the wire.
2026-10-24T15:12:30.4180892Z  975 โ”‚       const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({
2026-10-24T15:12:30.4181070Z      ยท                                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4181224Z  976 โ”‚         resource: { _tag: "github-media", cwd: "/repo", url },
2026-10-24T15:12:30.4181277Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4181279Z
2026-10-24T15:12:30.4181735Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T15:12:30.4181866Z       โ•ญโ”€[apps/server/src/assets/AssetAccess.test.ts:1012:32]
2026-10-24T15:12:30.4182005Z  1011 โ”‚         expect(error._tag).toBe("AssetGitHubMediaUrlValidationError");
2026-10-24T15:12:30.4182193Z  1012 โ”‚         const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error);
2026-10-24T15:12:30.4182315Z       ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4182414Z  1013 โ”‚         expect(encoded).not.toContain(url);
2026-10-24T15:12:30.4182467Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4182470Z
2026-10-24T15:12:30.4182806Z   โš  eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4182971Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7]
2026-10-24T15:12:30.4183025Z  1443 โ”‚
2026-10-24T15:12:30.4183141Z  1444 โ”‚ const layerCodexAppServerClientFactoryCommand = (
2026-10-24T15:12:30.4183258Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4183466Z       ยท                          โ•ฐโ”€โ”€ 'layerCodexAppServerClientFactoryCommand' is declared here
2026-10-24T15:12:30.4183629Z  1445 โ”‚   options: CodexClient.CodexAppServerClientOptions & {
2026-10-24T15:12:30.4183686Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4183788Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4183790Z
2026-10-24T15:12:30.4184049Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4184211Z       โ•ญโ”€[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7]
2026-10-24T15:12:30.4184266Z  1679 โ”‚
2026-10-24T15:12:30.4184336Z  1680 โ”‚ const layer: Layer.Layer<
2026-10-24T15:12:30.4184407Z       ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4184535Z       ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T15:12:30.4184629Z  1681 โ”‚   ProviderAdapter.ProviderAdapterV2,
2026-10-24T15:12:30.4184680Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4184840Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4184874Z
2026-10-24T15:12:30.4185345Z   โš  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.
2026-10-24T15:12:30.4185530Z      โ•ญโ”€[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
2026-10-24T15:12:30.4185602Z  520 โ”‚                 })).delivery;
2026-10-24T15:12:30.4185797Z  521 โ”‚ โ•ญโ”€โ–ถ             while (delivery.outcome === "accepted") {
2026-10-24T15:12:30.4185913Z  522 โ”‚ โ”‚                 yield* Effect.yieldNow;
2026-10-24T15:12:30.4186061Z  523 โ”‚ โ”‚                 delivery = (yield* service.getWebhookDelivery({
2026-10-24T15:12:30.4186169Z  524 โ”‚ โ”‚                   id: task.id,
2026-10-24T15:12:30.4186288Z  525 โ”‚ โ”‚                   deliveryId: deliveryId!,
2026-10-24T15:12:30.4186387Z  526 โ”‚ โ”‚                 })).delivery;
2026-10-24T15:12:30.4186524Z  527 โ”‚ โ•ฐโ”€โ–ถ             }
2026-10-24T15:12:30.4186641Z  528 โ”‚                 assert.equal(delivery.outcome, "dispatch_failed");
2026-10-24T15:12:30.4186694Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4186697Z
2026-10-24T15:12:30.4186855Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4187012Z     โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5]
2026-10-24T15:12:30.4187065Z  83 โ”‚
2026-10-24T15:12:30.4187158Z  84 โ”‚   const cardCoverage = props.cardCoverage;
2026-10-24T15:12:30.4187239Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4187382Z     ยท               โ•ฐโ”€โ”€ `cardCoverage` originates here
2026-10-24T15:12:30.4187465Z  85 โ”‚   const barHeightRef = useRef(0);
2026-10-24T15:12:30.4187543Z  86 โ”‚   const cardHeightRef = useRef(0);
2026-10-24T15:12:30.4187628Z  87 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T15:12:30.4187721Z  88 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T15:12:30.4187788Z  89 โ”‚     if (!cardCoverage) {
2026-10-24T15:12:30.4187848Z  90 โ”‚       return;
2026-10-24T15:12:30.4187902Z  91 โ”‚     }
2026-10-24T15:12:30.4188069Z  92 โ”‚     // The card resizes with the keyboard every frame, so easing each sample would leave the
2026-10-24T15:12:30.4188170Z  93 โ”‚     // feed inset and floating controls trailing it.
2026-10-24T15:12:30.4188328Z  94 โ”‚     cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T15:12:30.4188411Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4188552Z     ยท           โ•ฐโ”€โ”€ `cardCoverage` cannot be modified
2026-10-24T15:12:30.4188619Z  95 โ”‚   }, [cardCoverage]);
2026-10-24T15:12:30.4188671Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4188972Z   help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state
2026-10-24T15:12:30.4189282Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4189284Z
2026-10-24T15:12:30.4189443Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4189599Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7]
2026-10-24T15:12:30.4189738Z   86 โ”‚   const cardHeightRef = useRef(0);
2026-10-24T15:12:30.4189859Z   87 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T15:12:30.4189937Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4190071Z      ยท              โ•ฐโ”€โ”€ `cardHeight` originates here
2026-10-24T15:12:30.4190167Z   88 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T15:12:30.4190235Z   89 โ”‚     if (!cardCoverage) {
2026-10-24T15:12:30.4190297Z   90 โ”‚       return;
2026-10-24T15:12:30.4190350Z   91 โ”‚     }
2026-10-24T15:12:30.4190515Z   92 โ”‚     // The card resizes with the keyboard every frame, so easing each sample would leave the
2026-10-24T15:12:30.4190616Z   93 โ”‚     // feed inset and floating controls trailing it.
2026-10-24T15:12:30.4190773Z   94 โ”‚     cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T15:12:30.4190838Z   95 โ”‚   }, [cardCoverage]);
2026-10-24T15:12:30.4190927Z   96 โ”‚   const handleBarLayout = useCallback(
2026-10-24T15:12:30.4191014Z   97 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T15:12:30.4191135Z   98 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T15:12:30.4191201Z   99 โ”‚       notifyCoverage();
2026-10-24T15:12:30.4191257Z  100 โ”‚     },
2026-10-24T15:12:30.4191324Z  101 โ”‚     [notifyCoverage],
2026-10-24T15:12:30.4191377Z  102 โ”‚   );
2026-10-24T15:12:30.4191462Z  103 โ”‚   const handleCardLayout = useCallback(
2026-10-24T15:12:30.4191544Z  104 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T15:12:30.4191669Z  105 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T15:12:30.4191783Z  106 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T15:12:30.4191859Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4192005Z      ยท            โ•ฐโ”€โ”€ `cardHeight` cannot be modified
2026-10-24T15:12:30.4192076Z  107 โ”‚       notifyCoverage();
2026-10-24T15:12:30.4192128Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4192395Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T15:12:30.4192703Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4192705Z
2026-10-24T15:12:30.4192907Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T15:12:30.4193064Z     โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5]
2026-10-24T15:12:30.4193149Z  87 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T15:12:30.4193245Z  88 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T15:12:30.4193352Z     ยท                                      โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4193628Z     ยท                                         โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T15:12:30.4193694Z  89 โ”‚     if (!cardCoverage) {
2026-10-24T15:12:30.4193754Z  90 โ”‚       return;
2026-10-24T15:12:30.4193809Z  91 โ”‚     }
2026-10-24T15:12:30.4193974Z  92 โ”‚     // The card resizes with the keyboard every frame, so easing each sample would leave the
2026-10-24T15:12:30.4194074Z  93 โ”‚     // feed inset and floating controls trailing it.
2026-10-24T15:12:30.4194231Z  94 โ”‚     cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T15:12:30.4194307Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4194509Z     ยท           โ•ฐโ”€โ”€ This modifies `cardCoverage`
2026-10-24T15:12:30.4194610Z  95 โ”‚   }, [cardCoverage]);
2026-10-24T15:12:30.4194662Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4195005Z   help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T15:12:30.4195310Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4195313Z
2026-10-24T15:12:30.4195513Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T15:12:30.4195667Z     โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5]
2026-10-24T15:12:30.4195768Z  93 โ”‚     // feed inset and floating controls trailing it.
2026-10-24T15:12:30.4195929Z  94 โ”‚     cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T15:12:30.4196006Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4196136Z     ยท           โ•ฐโ”€โ”€ This modifies `cardCoverage`
2026-10-24T15:12:30.4196201Z  95 โ”‚   }, [cardCoverage]);
2026-10-24T15:12:30.4196286Z  96 โ”‚   const handleBarLayout = useCallback(
2026-10-24T15:12:30.4196367Z  97 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T15:12:30.4196472Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4196697Z     ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T15:12:30.4196818Z  98 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T15:12:30.4196871Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4197215Z   help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T15:12:30.4197523Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4197526Z
2026-10-24T15:12:30.4197724Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T15:12:30.4197882Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7]
2026-10-24T15:12:30.4197970Z  103 โ”‚   const handleCardLayout = useCallback(
2026-10-24T15:12:30.4198051Z  104 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T15:12:30.4198158Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4198386Z      ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardHeight` after render
2026-10-24T15:12:30.4198516Z  105 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T15:12:30.4198629Z  106 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T15:12:30.4198706Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4198836Z      ยท            โ•ฐโ”€โ”€ This modifies `cardHeight`
2026-10-24T15:12:30.4198904Z  107 โ”‚       notifyCoverage();
2026-10-24T15:12:30.4198955Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4199292Z   help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T15:12:30.4199659Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4199699Z
2026-10-24T15:12:30.4199929Z   โš  eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used.
2026-10-24T15:12:30.4200095Z       โ•ญโ”€[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10]
2026-10-24T15:12:30.4200147Z  1397 โ”‚
2026-10-24T15:12:30.4200235Z  1398 โ”‚ function assertUserMessagesExclude(
2026-10-24T15:12:30.4200339Z       ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4200508Z       ยท                      โ•ฐโ”€โ”€ 'assertUserMessagesExclude' is declared here
2026-10-24T15:12:30.4200617Z  1399 โ”‚   projection: OrchestrationV2ThreadProjection,
2026-10-24T15:12:30.4200670Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4200773Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4200776Z
2026-10-24T15:12:30.4200991Z   โš  eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
2026-10-24T15:12:30.4201121Z     โ•ญโ”€[apps/server/src/scheduledTasks/Schedule.ts:79:10]
2026-10-24T15:12:30.4201175Z  78 โ”‚
2026-10-24T15:12:30.4201312Z  79 โ”‚ function describeSchedule(schedule: ScheduledTaskSchedule): string {
2026-10-24T15:12:30.4201398Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4201545Z     ยท                  โ•ฐโ”€โ”€ 'describeSchedule' is declared here
2026-10-24T15:12:30.4201653Z  80 โ”‚   if (schedule.type === "webhook") return "On webhook";
2026-10-24T15:12:30.4201705Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4201807Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4201809Z
2026-10-24T15:12:30.4202075Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T15:12:30.4202232Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
2026-10-24T15:12:30.4202285Z  55 โ”‚
2026-10-24T15:12:30.4202352Z  56 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4202422Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4202551Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T15:12:30.4202620Z  57 โ”‚     setDecodedSize(null);
2026-10-24T15:12:30.4202698Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4202866Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T15:12:30.4202935Z  58 โ”‚   }, [props.sourceKey]);
2026-10-24T15:12:30.4202986Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4203622Z   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.
2026-10-24T15:12:30.4203949Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T15:12:30.4203953Z
2026-10-24T15:12:30.4204212Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T15:12:30.4204364Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
2026-10-24T15:12:30.4204417Z  59 โ”‚
2026-10-24T15:12:30.4204482Z  60 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4204550Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4204732Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T15:12:30.4204923Z  61 โ”‚     setFailedUri(null);
2026-10-24T15:12:30.4204999Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4205165Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T15:12:30.4205232Z  62 โ”‚   }, [props.uri]);
2026-10-24T15:12:30.4205284Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4205889Z   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.
2026-10-24T15:12:30.4206216Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T15:12:30.4206224Z
2026-10-24T15:12:30.4206440Z   โš  eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-24T15:12:30.4206591Z    โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
2026-10-24T15:12:30.4206716Z  6 โ”‚ import { parse, SvgAst, type JsxAST } from "react-native-svg";
2026-10-24T15:12:30.4206894Z  7 โ”‚ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
2026-10-24T15:12:30.4206981Z    ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4207131Z    ยท                  โ•ฐโ”€โ”€ 'ActivityIndicator' is imported here
2026-10-24T15:12:30.4207183Z  8 โ”‚
2026-10-24T15:12:30.4207236Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4207334Z   help: Consider removing this import.
2026-10-24T15:12:30.4207337Z
2026-10-24T15:12:30.4207543Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T15:12:30.4207697Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
2026-10-24T15:12:30.4207765Z  57 โ”‚     setDecodedSize(null);
2026-10-24T15:12:30.4207833Z  58 โ”‚   }, [props.sourceKey]);
2026-10-24T15:12:30.4207914Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4208067Z     ยท              โ•ฐโ”€โ”€ Unnecessary dependency `props.sourceKey`
2026-10-24T15:12:30.4208119Z  59 โ”‚
2026-10-24T15:12:30.4208169Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4208464Z   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
2026-10-24T15:12:30.4208829Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4208866Z
2026-10-24T15:12:30.4209069Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T15:12:30.4209218Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
2026-10-24T15:12:30.4209286Z  61 โ”‚     setFailedUri(null);
2026-10-24T15:12:30.4209351Z  62 โ”‚   }, [props.uri]);
2026-10-24T15:12:30.4209426Z     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4209566Z     ยท           โ•ฐโ”€โ”€ Unnecessary dependency `props.uri`
2026-10-24T15:12:30.4209618Z  63 โ”‚
2026-10-24T15:12:30.4209669Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4210094Z   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
2026-10-24T15:12:30.4210413Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4210423Z
2026-10-24T15:12:30.4210616Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T15:12:30.4210785Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17]
2026-10-24T15:12:30.4210849Z  817 โ”‚               <div
2026-10-24T15:12:30.4210963Z  818 โ”‚                 key={`${index}:${check.name}:${check.url ?? ""}`}
2026-10-24T15:12:30.4211103Z      ยท                 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4211272Z  819 โ”‚                 className="group flex items-center gap-2 rounded-md pr-1 hover:bg-accent/60"
2026-10-24T15:12:30.4211324Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4211478Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T15:12:30.4211485Z
2026-10-24T15:12:30.4211652Z   โš  react(purity): Cannot call impure function during render
2026-10-24T15:12:30.4211789Z      โ•ญโ”€[apps/web/src/components/CustomSnoozeDialog.tsx:140:58]
2026-10-24T15:12:30.4211926Z  139 โ”‚                             {...(weekStartsOn === undefined ? {} : { weekStartsOn })}
2026-10-24T15:12:30.4212073Z  140 โ”‚                             disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }}
2026-10-24T15:12:30.4212194Z      ยท                                                          โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4212369Z      ยท                                                               โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T15:12:30.4212474Z  141 โ”‚                             onSelect={(selected) => {
2026-10-24T15:12:30.4212530Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4212809Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T15:12:30.4213107Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T15:12:30.4213110Z
2026-10-24T15:12:30.4213396Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T15:12:30.4213588Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19]
2026-10-24T15:12:30.4213651Z  472 โ”‚   onFilters,
2026-10-24T15:12:30.4213718Z  473 โ”‚   authorOptions = [],
2026-10-24T15:12:30.4213865Z      ยท                   โ”€โ”€
2026-10-24T15:12:30.4213972Z  474 โ”‚   labelOptions = [],
2026-10-24T15:12:30.4214023Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4214340Z   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.
2026-10-24T15:12:30.4214343Z
2026-10-24T15:12:30.4214626Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T15:12:30.4214795Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18]
2026-10-24T15:12:30.4214863Z  473 โ”‚   authorOptions = [],
2026-10-24T15:12:30.4214928Z  474 โ”‚   labelOptions = [],
2026-10-24T15:12:30.4215005Z      ยท                  โ”€โ”€
2026-10-24T15:12:30.4215070Z  475 โ”‚   optionScope,
2026-10-24T15:12:30.4215122Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4215445Z   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.
2026-10-24T15:12:30.4215453Z
2026-10-24T15:12:30.4215713Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4215845Z       โ•ญโ”€[packages/provider-pi/src/server/adapter.ts:3405:7]
2026-10-24T15:12:30.4215899Z  3404 โ”‚
2026-10-24T15:12:30.4216089Z  3405 โ”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
2026-10-24T15:12:30.4216161Z       ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4216289Z       ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T15:12:30.4216355Z  3406 โ”‚   Layer.effect(
2026-10-24T15:12:30.4216408Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4216516Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4216522Z
2026-10-24T15:12:30.4216689Z   โš  react(purity): Cannot call impure function during render
2026-10-24T15:12:30.4216812Z      โ•ญโ”€[apps/web/src/hooks/useThreadActions.ts:821:56]
2026-10-24T15:12:30.4216918Z  820 โ”‚     const resolved = resolveThreadTarget(target);
2026-10-24T15:12:30.4217076Z  821 โ”‚     if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
2026-10-24T15:12:30.4217200Z      ยท                                                        โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4217370Z      ยท                                                             โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T15:12:30.4217452Z  822 โ”‚       return AsyncResult.failure(
2026-10-24T15:12:30.4217503Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4217789Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T15:12:30.4218090Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T15:12:30.4218093Z
2026-10-24T15:12:30.4218259Z   โš  react(purity): Cannot call impure function during render
2026-10-24T15:12:30.4218380Z      โ•ญโ”€[apps/web/src/hooks/useThreadActions.ts:709:46]
2026-10-24T15:12:30.4218451Z  708 โ”‚     const wokeAt = resolved
2026-10-24T15:12:30.4218585Z  709 โ”‚       ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
2026-10-24T15:12:30.4218698Z      ยท                                              โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4218920Z      ยท                                                   โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T15:12:30.4219010Z  710 โ”‚       : null;
2026-10-24T15:12:30.4219061Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4219336Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T15:12:30.4219630Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T15:12:30.4219632Z
2026-10-24T15:12:30.4219831Z   โš  eslint(no-unused-vars): Identifier 'Duration' is imported but never used.
2026-10-24T15:12:30.4219967Z     โ•ญโ”€[packages/provider-pi/src/server/adapter.test.ts:24:13]
2026-10-24T15:12:30.4220064Z  23 โ”‚ import * as Deferred from "effect/Deferred";
2026-10-24T15:12:30.4220162Z  24 โ”‚ import * as Duration from "effect/Duration";
2026-10-24T15:12:30.4220243Z     ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4220378Z     ยท                 โ•ฐโ”€โ”€ 'Duration' is imported here
2026-10-24T15:12:30.4220467Z  25 โ”‚ import * as Effect from "effect/Effect";
2026-10-24T15:12:30.4220520Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4220618Z   help: Consider removing this import.
2026-10-24T15:12:30.4220621Z
2026-10-24T15:12:30.4220789Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T15:12:30.4220982Z     โ•ญโ”€[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
2026-10-24T15:12:30.4221035Z  52 โ”‚
2026-10-24T15:12:30.4221100Z  53 โ”‚   for (const {} of [
2026-10-24T15:12:30.4221173Z     ยท              โ”€โ”€
2026-10-24T15:12:30.4221246Z  54 โ”‚     { healthy: true },
2026-10-24T15:12:30.4221300Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4221530Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T15:12:30.4221533Z
2026-10-24T15:12:30.4221746Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T15:12:30.4221880Z     โ•ญโ”€[apps/web/src/lib/composerContextReferences.ts:90:40]
2026-10-24T15:12:30.4221955Z  89 โ”‚   let cursor = prompt.length;
2026-10-24T15:12:30.4222062Z  90 โ”‚   for (const occurrence of occurrences.reverse()) {
2026-10-24T15:12:30.4222168Z     ยท                                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4222248Z  91 โ”‚     let { start, end } = occurrence;
2026-10-24T15:12:30.4222300Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4222570Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T15:12:30.4222577Z
2026-10-24T15:12:30.4222852Z   โš  eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4223001Z     โ•ญโ”€[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
2026-10-24T15:12:30.4223055Z  60 โ”‚ ) {
2026-10-24T15:12:30.4223226Z  61 โ”‚   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
2026-10-24T15:12:30.4223305Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4223448Z     ยท               โ•ฐโ”€โ”€ 'useDragRegion' is declared here
2026-10-24T15:12:30.4223563Z  62 โ”‚   const isInline = props.mode === "inline";
2026-10-24T15:12:30.4223617Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4223774Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4223811Z
2026-10-24T15:12:30.4224070Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4224212Z       โ•ญโ”€[packages/provider-opencode/src/server/adapter.ts:3755:7]
2026-10-24T15:12:30.4224266Z  3754 โ”‚
2026-10-24T15:12:30.4224465Z  3755 โ”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, OpenCodeAdapterV2DriverEnv> =
2026-10-24T15:12:30.4224538Z       ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4224664Z       ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T15:12:30.4224731Z  3756 โ”‚   Layer.effect(
2026-10-24T15:12:30.4224783Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4224886Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4224888Z
2026-10-24T15:12:30.4225370Z   โš  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.
2026-10-24T15:12:30.4225522Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:169:7]
2026-10-24T15:12:30.4225585Z  168 โ”‚           });
2026-10-24T15:12:30.4225785Z  169 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-24T15:12:30.4225980Z  170 โ”‚ โ”‚           if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break;
2026-10-24T15:12:30.4226088Z  171 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4226221Z  172 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4226282Z  173 โ”‚
2026-10-24T15:12:30.4226339Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4226342Z
2026-10-24T15:12:30.4226812Z   โš  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.
2026-10-24T15:12:30.4226960Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:178:7]
2026-10-24T15:12:30.4227071Z  177 โ”‚           yield* Deferred.succeed(releaseSave, undefined);
2026-10-24T15:12:30.4227268Z  178 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-24T15:12:30.4227403Z  179 โ”‚ โ”‚           if ((yield* Ref.get(saved)).length > 0) break;
2026-10-24T15:12:30.4227512Z  180 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4227643Z  181 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4227698Z  182 โ”‚
2026-10-24T15:12:30.4227749Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4227752Z
2026-10-24T15:12:30.4228214Z   โš  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.
2026-10-24T15:12:30.4228361Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:307:7]
2026-10-24T15:12:30.4228488Z  306 โ”‚           yield* Deferred.succeed(releaseUnenrichedSave, undefined);
2026-10-24T15:12:30.4228680Z  307 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-24T15:12:30.4228859Z  308 โ”‚ โ”‚           const values = yield* Ref.get(saved);
2026-10-24T15:12:30.4229086Z  309 โ”‚ โ”‚           if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) {
2026-10-24T15:12:30.4229173Z  310 โ”‚ โ”‚             break;
2026-10-24T15:12:30.4229253Z  311 โ”‚ โ”‚           }
2026-10-24T15:12:30.4229358Z  312 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4229491Z  313 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4229544Z  314 โ”‚
2026-10-24T15:12:30.4229596Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4229598Z
2026-10-24T15:12:30.4229802Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T15:12:30.4229934Z    โ•ญโ”€[packages/client-runtime/src/state/usageAccess.ts:3:8]
2026-10-24T15:12:30.4230014Z  2 โ”‚   AuthDiagnosticsReadScope,
2026-10-24T15:12:30.4230088Z  3 โ”‚   type AuthSessionState,
2026-10-24T15:12:30.4230173Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4230321Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T15:12:30.4230390Z  4 โ”‚   sessionGrantsScope,
2026-10-24T15:12:30.4230441Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4230540Z   help: Consider removing this import.
2026-10-24T15:12:30.4230543Z
2026-10-24T15:12:30.4230789Z   โš  eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used.
2026-10-24T15:12:30.4230901Z     โ•ญโ”€[apps/web/src/lib/terminalContext.ts:56:10]
2026-10-24T15:12:30.4230954Z  55 โ”‚
2026-10-24T15:12:30.4231053Z  56 โ”‚ function normalizeTerminalContextSelection(
2026-10-24T15:12:30.4231170Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4231363Z     ยท                          โ•ฐโ”€โ”€ 'normalizeTerminalContextSelection' is declared here
2026-10-24T15:12:30.4231451Z  57 โ”‚   selection: TerminalContextSelection,
2026-10-24T15:12:30.4231502Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4231605Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4231607Z
2026-10-24T15:12:30.4231818Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T15:12:30.4231943Z      โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:259:28]
2026-10-24T15:12:30.4232045Z  258 โ”‚   visit(parser.parse(markdown), false, false);
2026-10-24T15:12:30.4232129Z  259 โ”‚   for (const edit of edits.reverse())
2026-10-24T15:12:30.4232227Z      ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4232445Z  260 โ”‚     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T15:12:30.4232533Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4232798Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T15:12:30.4232801Z
2026-10-24T15:12:30.4233011Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T15:12:30.4233133Z      โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:290:28]
2026-10-24T15:12:30.4233215Z  289 โ”‚   visit(parser.parse(markdown));
2026-10-24T15:12:30.4233298Z  290 โ”‚   for (const edit of edits.reverse())
2026-10-24T15:12:30.4233393Z      ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4233573Z  291 โ”‚     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T15:12:30.4233633Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4233896Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T15:12:30.4233899Z
2026-10-24T15:12:30.4234109Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T15:12:30.4234230Z      โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:344:38]
2026-10-24T15:12:30.4234311Z  343 โ”‚   visit(parser.parse(markdown));
2026-10-24T15:12:30.4234415Z  344 โ”‚   for (const lineStart of lineStarts.reverse()) {
2026-10-24T15:12:30.4234519Z      ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4234682Z  345 โ”‚     // The header row may be a lazy line without its container markers (`>` or list indent),
2026-10-24T15:12:30.4234735Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4235005Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T15:12:30.4235012Z
2026-10-24T15:12:30.4235220Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T15:12:30.4235346Z     โ•ญโ”€[apps/web/src/lib/announce.browser.test.ts:41:46]
2026-10-24T15:12:30.4235398Z  40 โ”‚
2026-10-24T15:12:30.4235507Z  41 โ”‚     expect(regionTexts()).toEqual([...first].reverse());
2026-10-24T15:12:30.4235618Z     ยท                                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4235714Z  42 โ”‚     expect(regionTexts()).toContain("Claude");
2026-10-24T15:12:30.4235765Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4236031Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T15:12:30.4236036Z
2026-10-24T15:12:30.4236236Z   โš  eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used.
2026-10-24T15:12:30.4236376Z    โ•ญโ”€[packages/client-runtime/src/state/sharedSettings.ts:2:3]
2026-10-24T15:12:30.4236438Z  1 โ”‚ import type {
2026-10-24T15:12:30.4236503Z  2 โ”‚   EnvironmentId,
2026-10-24T15:12:30.4236579Z    ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4236717Z    ยท         โ•ฐโ”€โ”€ 'EnvironmentId' is imported here
2026-10-24T15:12:30.4236802Z  3 โ”‚   ExecutionEnvironmentCapabilities,
2026-10-24T15:12:30.4236854Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4236952Z   help: Consider removing this import.
2026-10-24T15:12:30.4236955Z
2026-10-24T15:12:30.4237250Z   โš  unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-24T15:12:30.4237447Z      โ•ญโ”€[apps/web/src/components/pullRequest/pullRequestList.logic.ts:262:9]
2026-10-24T15:12:30.4237508Z  261 โ”‚ ): boolean {
2026-10-24T15:12:30.4237661Z  262 โ”‚   const labels = entry.labels.map((label) => label.name.trim().toLowerCase());
2026-10-24T15:12:30.4237827Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4237974Z  263 โ”‚   const holds = (label: string) => labels.includes(label.trim().toLowerCase());
2026-10-24T15:12:30.4238026Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4238103Z   help: Switch to `Set`
2026-10-24T15:12:30.4238106Z
2026-10-24T15:12:30.4238374Z   โš  eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4238513Z      โ•ญโ”€[apps/server/src/telemetry/AnalyticsService.ts:340:7]
2026-10-24T15:12:30.4238571Z  339 โ”‚
2026-10-24T15:12:30.4238674Z  340 โ”‚ const layerTest = AnalyticsService.layerTest;
2026-10-24T15:12:30.4238751Z      ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4238884Z      ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
2026-10-24T15:12:30.4238936Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4239040Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4239043Z
2026-10-24T15:12:30.4239231Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T15:12:30.4239346Z    โ•ญโ”€[apps/mobile/src/lib/useHoverGesture.ts:8:15]
2026-10-24T15:12:30.4239403Z  7 โ”‚     () =>
2026-10-24T15:12:30.4239470Z  8 โ”‚       Gesture.Hover()
2026-10-24T15:12:30.4239545Z    ยท               โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4239686Z    ยท                 โ•ฐโ”€โ”€ `Hover` may be a component
2026-10-24T15:12:30.4239763Z  9 โ”‚         .manualActivation(true)
2026-10-24T15:12:30.4239814Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4240098Z   help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
2026-10-24T15:12:30.4240549Z   note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T15:12:30.4240552Z
2026-10-24T15:12:30.4240784Z   โš  unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-24T15:12:30.4240922Z      โ•ญโ”€[apps/web/src/components/chat/useComposerSend.ts:985:13]
2026-10-24T15:12:30.4241049Z  984 โ”‚           const changedBeforeDecline = draftChangedSinceSend();
2026-10-24T15:12:30.4241295Z  985 โ”‚ โ•ญโ”€โ–ถ       const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
2026-10-24T15:12:30.4241415Z  986 โ”‚ โ”‚           (approval) => approval.requestId,
2026-10-24T15:12:30.4241548Z  987 โ”‚ โ•ฐโ”€โ–ถ       );
2026-10-24T15:12:30.4241687Z  988 โ”‚           const approvalResponding = approvalsToDecline.some((approval) =>
2026-10-24T15:12:30.4241739Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4241814Z   help: Switch to `Set`
2026-10-24T15:12:30.4241818Z
2026-10-24T15:12:30.4242028Z   โš  eslint(no-unused-vars): Function 'summarizePayload' is declared but never used.
2026-10-24T15:12:30.4242222Z     โ•ญโ”€[packages/provider-acp/src/server/nativeLogging.ts:22:10]
2026-10-24T15:12:30.4242307Z  21 โ”‚
2026-10-24T15:12:30.4242463Z  22 โ”‚ function summarizePayload(payload: unknown): Readonly<Record<string, unknown>> {
2026-10-24T15:12:30.4242550Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4242700Z     ยท                  โ•ฐโ”€โ”€ 'summarizePayload' is declared here
2026-10-24T15:12:30.4242806Z  23 โ”‚   if (payload === null) return { valueType: "null" };
2026-10-24T15:12:30.4242858Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4242960Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4242962Z
2026-10-24T15:12:30.4243220Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4243344Z      โ•ญโ”€[apps/server/src/serverRuntimeStartup.ts:728:7]
2026-10-24T15:12:30.4243404Z  727 โ”‚
2026-10-24T15:12:30.4243486Z  728 โ”‚ const layer = layerWithOptions();
2026-10-24T15:12:30.4243579Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4243704Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T15:12:30.4243756Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4243856Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4243859Z
2026-10-24T15:12:30.4244050Z   โš  eslint(require-yield): This generator function does not have `yield`
2026-10-24T15:12:30.4244195Z      โ•ญโ”€[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78]
2026-10-24T15:12:30.4244252Z   80 โ”‚
2026-10-24T15:12:30.4244524Z   81 โ”‚ โ•ญโ”€โ–ถ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* (
2026-10-24T15:12:30.4244650Z   82 โ”‚ โ”‚     options: AcpMcpOverAcpBridgeOptions,
2026-10-24T15:12:30.4244776Z   83 โ”‚ โ”‚   ): Effect.fn.Return<AcpMcpOverAcpBridge> {
2026-10-24T15:12:30.4244945Z   84 โ”‚ โ”‚     const fetchImplementation = options.fetchImplementation ?? fetch;
2026-10-24T15:12:30.4245078Z   85 โ”‚ โ”‚     const connections = new Map<string, Connection>();
2026-10-24T15:12:30.4245148Z   86 โ”‚ โ”‚
2026-10-24T15:12:30.4245363Z   87 โ”‚ โ”‚     const connectionFor = (connectionId: string): Effect.Effect<Connection, AcpMcpOverAcpError> =>
2026-10-24T15:12:30.4245464Z   88 โ”‚ โ”‚       Effect.suspend(() => {
2026-10-24T15:12:30.4245598Z   89 โ”‚ โ”‚         const connection = connections.get(connectionId);
2026-10-24T15:12:30.4245709Z   90 โ”‚ โ”‚         return connection === undefined
2026-10-24T15:12:30.4245930Z   91 โ”‚ โ”‚           ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`))
2026-10-24T15:12:30.4246044Z   92 โ”‚ โ”‚           : Effect.succeed(connection);
2026-10-24T15:12:30.4246119Z   93 โ”‚ โ”‚       });
2026-10-24T15:12:30.4246188Z   94 โ”‚ โ”‚
2026-10-24T15:12:30.4246275Z   95 โ”‚ โ”‚     const send = (
2026-10-24T15:12:30.4246378Z   96 โ”‚ โ”‚       connection: Connection,
2026-10-24T15:12:30.4246469Z   97 โ”‚ โ”‚       message: unknown,
2026-10-24T15:12:30.4246627Z   98 โ”‚ โ”‚     ): Effect.Effect<ReadonlyArray<unknown>, AcpMcpOverAcpError> =>
2026-10-24T15:12:30.4246742Z   99 โ”‚ โ”‚       connection.mutex.withPermits(1)(
2026-10-24T15:12:30.4246848Z  100 โ”‚ โ”‚         Effect.gen(function* () {
2026-10-24T15:12:30.4247028Z  101 โ”‚ โ”‚           const body = JSON.stringify(message);
2026-10-24T15:12:30.4247203Z  102 โ”‚ โ”‚           if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) {
2026-10-24T15:12:30.4247419Z  103 โ”‚ โ”‚             return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB."));
2026-10-24T15:12:30.4247497Z  104 โ”‚ โ”‚           }
2026-10-24T15:12:30.4247630Z  105 โ”‚ โ”‚           const response = yield* Effect.tryPromise({
2026-10-24T15:12:30.4247728Z  106 โ”‚ โ”‚             try: (signal) =>
2026-10-24T15:12:30.4247861Z  107 โ”‚ โ”‚               fetchImplementation(options.endpoint, {
2026-10-24T15:12:30.4247962Z  108 โ”‚ โ”‚                 method: "POST",
2026-10-24T15:12:30.4248055Z  109 โ”‚ โ”‚                 signal,
2026-10-24T15:12:30.4248156Z  110 โ”‚ โ”‚                 headers: {
2026-10-24T15:12:30.4248287Z  111 โ”‚ โ”‚                   "content-type": "application/json",
2026-10-24T15:12:30.4248431Z  112 โ”‚ โ”‚                   accept: "application/json, text/event-stream",
2026-10-24T15:12:30.4248563Z  113 โ”‚ โ”‚                   authorization: options.authorization,
2026-10-24T15:12:30.4248689Z  114 โ”‚ โ”‚                   ...(connection.sessionId === null
2026-10-24T15:12:30.4248782Z  115 โ”‚ โ”‚                     ? {}
2026-10-24T15:12:30.4248925Z  116 โ”‚ โ”‚                     : { "mcp-session-id": connection.sessionId }),
2026-10-24T15:12:30.4249059Z  117 โ”‚ โ”‚                   ...(connection.protocolVersion === null
2026-10-24T15:12:30.4249155Z  118 โ”‚ โ”‚                     ? {}
2026-10-24T15:12:30.4249324Z  119 โ”‚ โ”‚                     : { "mcp-protocol-version": connection.protocolVersion }),
2026-10-24T15:12:30.4249411Z  120 โ”‚ โ”‚                 },
2026-10-24T15:12:30.4249502Z  121 โ”‚ โ”‚                 body,
2026-10-24T15:12:30.4249585Z  122 โ”‚ โ”‚               }),
2026-10-24T15:12:30.4249687Z  123 โ”‚ โ”‚             catch: bridgeError,
2026-10-24T15:12:30.4249767Z  124 โ”‚ โ”‚           });
2026-10-24T15:12:30.4250057Z  125 โ”‚ โ”‚           connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId;
2026-10-24T15:12:30.4250156Z  126 โ”‚ โ”‚           if (!response.ok) {
2026-10-24T15:12:30.4250264Z  127 โ”‚ โ”‚             yield* Effect.promise(
2026-10-24T15:12:30.4250455Z  128 โ”‚ โ”‚               () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
2026-10-24T15:12:30.4250540Z  129 โ”‚ โ”‚             );
2026-10-24T15:12:30.4250650Z  130 โ”‚ โ”‚             return yield* Effect.fail(
2026-10-24T15:12:30.4250863Z  131 โ”‚ โ”‚               new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`),
2026-10-24T15:12:30.4250946Z  132 โ”‚ โ”‚             );
2026-10-24T15:12:30.4251025Z  133 โ”‚ โ”‚           }
2026-10-24T15:12:30.4251236Z  134 โ”‚ โ”‚           const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))];
2026-10-24T15:12:30.4251356Z  135 โ”‚ โ”‚           for (const payload of payloads) {
2026-10-24T15:12:30.4251648Z  136 โ”‚ โ”‚             connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion;
2026-10-24T15:12:30.4251774Z  137 โ”‚ โ”‚           }
2026-10-24T15:12:30.4251874Z  138 โ”‚ โ”‚           return payloads;
2026-10-24T15:12:30.4251996Z  139 โ”‚ โ”‚         }).pipe(Effect.mapError(bridgeError)),
2026-10-24T15:12:30.4252072Z  140 โ”‚ โ”‚       );
2026-10-24T15:12:30.4252142Z  141 โ”‚ โ”‚
2026-10-24T15:12:30.4252318Z  142 โ”‚ โ”‚     const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* (
2026-10-24T15:12:30.4252442Z  143 โ”‚ โ”‚       request: AcpSchema.DisconnectMcpRequest,
2026-10-24T15:12:30.4252628Z  144 โ”‚ โ”‚     ): Effect.fn.Return<AcpSchema.DisconnectMcpResponse, AcpMcpOverAcpError> {
2026-10-24T15:12:30.4252797Z  145 โ”‚ โ”‚       const connection = yield* connectionFor(request.connectionId);
2026-10-24T15:12:30.4252927Z  146 โ”‚ โ”‚       connections.delete(request.connectionId);
2026-10-24T15:12:30.4253050Z  147 โ”‚ โ”‚       const sessionId = connection.sessionId;
2026-10-24T15:12:30.4253152Z  148 โ”‚ โ”‚       if (sessionId !== null) {
2026-10-24T15:12:30.4253285Z  149 โ”‚ โ”‚         const response = yield* Effect.tryPromise({
2026-10-24T15:12:30.4253381Z  150 โ”‚ โ”‚           try: (signal) =>
2026-10-24T15:12:30.4253510Z  151 โ”‚ โ”‚             fetchImplementation(options.endpoint, {
2026-10-24T15:12:30.4253638Z  152 โ”‚ โ”‚               method: "DELETE",
2026-10-24T15:12:30.4253728Z  153 โ”‚ โ”‚               signal,
2026-10-24T15:12:30.4253823Z  154 โ”‚ โ”‚               headers: {
2026-10-24T15:12:30.4253958Z  155 โ”‚ โ”‚                 authorization: options.authorization,
2026-10-24T15:12:30.4254081Z  156 โ”‚ โ”‚                 "mcp-session-id": sessionId,
2026-10-24T15:12:30.4254215Z  157 โ”‚ โ”‚                 ...(connection.protocolVersion === null
2026-10-24T15:12:30.4254307Z  158 โ”‚ โ”‚                   ? {}
2026-10-24T15:12:30.4254470Z  159 โ”‚ โ”‚                   : { "mcp-protocol-version": connection.protocolVersion }),
2026-10-24T15:12:30.4254556Z  160 โ”‚ โ”‚               },
2026-10-24T15:12:30.4254639Z  161 โ”‚ โ”‚             }),
2026-10-24T15:12:30.4254740Z  162 โ”‚ โ”‚           catch: bridgeError,
2026-10-24T15:12:30.4254817Z  163 โ”‚ โ”‚         });
2026-10-24T15:12:30.4254951Z  164 โ”‚ โ”‚         if (!response.ok && response.status !== 404) {
2026-10-24T15:12:30.4255069Z  165 โ”‚ โ”‚           return yield* Effect.fail(
2026-10-24T15:12:30.4255182Z  166 โ”‚ โ”‚             new AcpMcpOverAcpError(
2026-10-24T15:12:30.4255366Z  167 โ”‚ โ”‚               `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`,
2026-10-24T15:12:30.4255447Z  168 โ”‚ โ”‚             ),
2026-10-24T15:12:30.4255526Z  169 โ”‚ โ”‚           );
2026-10-24T15:12:30.4255603Z  170 โ”‚ โ”‚         }
2026-10-24T15:12:30.4255706Z  171 โ”‚ โ”‚         yield* Effect.promise(
2026-10-24T15:12:30.4255885Z  172 โ”‚ โ”‚           () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
2026-10-24T15:12:30.4255964Z  173 โ”‚ โ”‚         );
2026-10-24T15:12:30.4256041Z  174 โ”‚ โ”‚       }
2026-10-24T15:12:30.4256186Z  175 โ”‚ โ”‚       return {};
2026-10-24T15:12:30.4256294Z  176 โ”‚ โ”‚     });
2026-10-24T15:12:30.4256363Z  177 โ”‚ โ”‚
2026-10-24T15:12:30.4256442Z  178 โ”‚ โ”‚     return {
2026-10-24T15:12:30.4256614Z  179 โ”‚ โ”‚       connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) {
2026-10-24T15:12:30.4256736Z  180 โ”‚ โ”‚         if (request.serverId !== "t3-code") {
2026-10-24T15:12:30.4256845Z  181 โ”‚ โ”‚           return yield* Effect.fail(
2026-10-24T15:12:30.4257031Z  182 โ”‚ โ”‚             new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`),
2026-10-24T15:12:30.4257108Z  183 โ”‚ โ”‚           );
2026-10-24T15:12:30.4257185Z  184 โ”‚ โ”‚         }
2026-10-24T15:12:30.4257320Z  185 โ”‚ โ”‚         if (connections.size >= MAX_CONNECTIONS) {
2026-10-24T15:12:30.4257532Z  186 โ”‚ โ”‚           return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections."));
2026-10-24T15:12:30.4257607Z  187 โ”‚ โ”‚         }
2026-10-24T15:12:30.4257762Z  188 โ”‚ โ”‚         const connectionId = yield* options.allocateConnectionId;
2026-10-24T15:12:30.4257877Z  189 โ”‚ โ”‚         connections.set(connectionId, {
2026-10-24T15:12:30.4257995Z  190 โ”‚ โ”‚           mutex: yield* Semaphore.make(1),
2026-10-24T15:12:30.4258093Z  191 โ”‚ โ”‚           sessionId: null,
2026-10-24T15:12:30.4258199Z  192 โ”‚ โ”‚           protocolVersion: null,
2026-10-24T15:12:30.4258299Z  193 โ”‚ โ”‚           nextRequestId: 0,
2026-10-24T15:12:30.4258377Z  194 โ”‚ โ”‚         });
2026-10-24T15:12:30.4258486Z  195 โ”‚ โ”‚         return { connectionId };
2026-10-24T15:12:30.4258564Z  196 โ”‚ โ”‚       }),
2026-10-24T15:12:30.4258738Z  197 โ”‚ โ”‚       message: Effect.fn("mcpOverAcpBridge.message")(function* (request) {
2026-10-24T15:12:30.4258901Z  198 โ”‚ โ”‚         const connection = yield* connectionFor(request.connectionId);
2026-10-24T15:12:30.4259025Z  199 โ”‚ โ”‚         const id = ++connection.nextRequestId;
2026-10-24T15:12:30.4259151Z  200 โ”‚ โ”‚         const payloads = yield* send(connection, {
2026-10-24T15:12:30.4259249Z  201 โ”‚ โ”‚           jsonrpc: "2.0",
2026-10-24T15:12:30.4259330Z  202 โ”‚ โ”‚           id,
2026-10-24T15:12:30.4259434Z  203 โ”‚ โ”‚           method: request.method,
2026-10-24T15:12:30.4259650Z  204 โ”‚ โ”‚           ...(request.params == null ? {} : { params: request.params }),
2026-10-24T15:12:30.4259764Z  205 โ”‚ โ”‚         });
2026-10-24T15:12:30.4259951Z  206 โ”‚ โ”‚         const response = payloads.find((payload) => asEnvelope(payload)?.id === id);
2026-10-24T15:12:30.4260073Z  207 โ”‚ โ”‚         const envelope = asEnvelope(response);
2026-10-24T15:12:30.4260173Z  208 โ”‚ โ”‚         if (envelope === null) {
2026-10-24T15:12:30.4260282Z  209 โ”‚ โ”‚           return yield* Effect.fail(
2026-10-24T15:12:30.4260468Z  210 โ”‚ โ”‚             new AcpMcpOverAcpError("MCP server did not return a matching response."),
2026-10-24T15:12:30.4260547Z  211 โ”‚ โ”‚           );
2026-10-24T15:12:30.4260621Z  212 โ”‚ โ”‚         }
2026-10-24T15:12:30.4260744Z  213 โ”‚ โ”‚         if (envelope.error !== undefined) {
2026-10-24T15:12:30.4260943Z  214 โ”‚ โ”‚           return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error)));
2026-10-24T15:12:30.4261018Z  215 โ”‚ โ”‚         }
2026-10-24T15:12:30.4261189Z  216 โ”‚ โ”‚         return (envelope.result ?? null) as AcpSchema.MessageMcpResponse;
2026-10-24T15:12:30.4261263Z  217 โ”‚ โ”‚       }),
2026-10-24T15:12:30.4261456Z  218 โ”‚ โ”‚       notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) {
2026-10-24T15:12:30.4261618Z  219 โ”‚ โ”‚         const connection = yield* connectionFor(request.connectionId);
2026-10-24T15:12:30.4261721Z  220 โ”‚ โ”‚         yield* send(connection, {
2026-10-24T15:12:30.4261818Z  221 โ”‚ โ”‚           jsonrpc: "2.0",
2026-10-24T15:12:30.4261927Z  222 โ”‚ โ”‚           method: request.method,
2026-10-24T15:12:30.4262091Z  223 โ”‚ โ”‚           ...(request.params == null ? {} : { params: request.params }),
2026-10-24T15:12:30.4262168Z  224 โ”‚ โ”‚         });
2026-10-24T15:12:30.4262244Z  225 โ”‚ โ”‚       }),
2026-10-24T15:12:30.4262330Z  226 โ”‚ โ”‚       disconnect,
2026-10-24T15:12:30.4262439Z  227 โ”‚ โ”‚       dispose: Effect.suspend(() =>
2026-10-24T15:12:30.4262536Z  228 โ”‚ โ”‚         Effect.forEach(
2026-10-24T15:12:30.4262641Z  229 โ”‚ โ”‚           [...connections.keys()],
2026-10-24T15:12:30.4262813Z  230 โ”‚ โ”‚           (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore),
2026-10-24T15:12:30.4262913Z  231 โ”‚ โ”‚           { discard: true },
2026-10-24T15:12:30.4262995Z  232 โ”‚ โ”‚         ),
2026-10-24T15:12:30.4263074Z  233 โ”‚ โ”‚       ),
2026-10-24T15:12:30.4263148Z  234 โ”‚ โ”‚     };
2026-10-24T15:12:30.4263276Z  235 โ”‚ โ•ฐโ”€โ–ถ });
2026-10-24T15:12:30.4263329Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4263635Z   help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed.
2026-10-24T15:12:30.4263638Z
2026-10-24T15:12:30.4264113Z   โš  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.
2026-10-24T15:12:30.4264273Z     โ•ญโ”€[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3]
2026-10-24T15:12:30.4264386Z  27 โ”‚     ) {
2026-10-24T15:12:30.4264618Z  28 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T15:12:30.4264763Z  29 โ”‚ โ”‚       const available = yield* service.peek(workspaceRoot);
2026-10-24T15:12:30.4264890Z  30 โ”‚ โ”‚       if (predicate(available)) return available;
2026-10-24T15:12:30.4264990Z  31 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T15:12:30.4265111Z  32 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T15:12:30.4265291Z  33 โ”‚       return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`);
2026-10-24T15:12:30.4265344Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4265347Z
2026-10-24T15:12:30.4265822Z   โš  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.
2026-10-24T15:12:30.4265960Z     โ•ญโ”€[apps/server/src/project/ProjectService.test.ts:94:3]
2026-10-24T15:12:30.4266015Z  93 โ”‚     ) {
2026-10-24T15:12:30.4266214Z  94 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T15:12:30.4266388Z  95 โ”‚ โ”‚       const project = Option.getOrThrow(yield* service.getById(projectId));
2026-10-24T15:12:30.4266509Z  96 โ”‚ โ”‚       if (predicate(project)) return project;
2026-10-24T15:12:30.4266606Z  97 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T15:12:30.4266731Z  98 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T15:12:30.4266888Z  99 โ”‚       return yield* Effect.die(`Project ${projectId} was not enriched in time.`);
2026-10-24T15:12:30.4266944Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4266947Z
2026-10-24T15:12:30.4267410Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T15:12:30.4267549Z      โ•ญโ”€[packages/contracts/src/composerContext.test.ts:181:18]
2026-10-24T15:12:30.4267683Z  180 โ”‚   it("sends a message without the records the wire cannot carry", () => {
2026-10-24T15:12:30.4267865Z  181 โ”‚     const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
2026-10-24T15:12:30.4267976Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4268040Z  182 โ”‚       version: 1,
2026-10-24T15:12:30.4268092Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4268102Z
2026-10-24T15:12:30.4268389Z   โš  eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4268534Z        โ•ญโ”€[apps/server/src/orchestration-v2/Orchestrator.ts:12380:7]
2026-10-24T15:12:30.4268589Z  12379 โ”‚
2026-10-24T15:12:30.4268729Z  12380 โ”‚ const layerUnavailable: Layer.Layer<OrchestratorV2> = Layer.succeed(
2026-10-24T15:12:30.4268815Z        ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4268967Z        ยท               โ•ฐโ”€โ”€ 'layerUnavailable' is declared here
2026-10-24T15:12:30.4269036Z  12381 โ”‚   OrchestratorV2,
2026-10-24T15:12:30.4269092Z        โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4269199Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4269202Z
2026-10-24T15:12:30.4269463Z   โš  unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-24T15:12:30.4269608Z      โ•ญโ”€[packages/contracts/src/rpc.ts:297:8]
2026-10-24T15:12:30.4269677Z  296 โ”‚ } from "./device.ts";
2026-10-24T15:12:30.4269772Z  297 โ”‚ import {} from "./previewAutomation.ts";
2026-10-24T15:12:30.4269842Z      ยท        โ”€โ”€
2026-10-24T15:12:30.4269901Z  298 โ”‚ import {
2026-10-24T15:12:30.4269953Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4270034Z   help: Remove empty braces
2026-10-24T15:12:30.4270037Z
2026-10-24T15:12:30.4270182Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4270336Z      โ•ญโ”€[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27]
2026-10-24T15:12:30.4270397Z  493 โ”‚         >
2026-10-24T15:12:30.4270477Z  494 โ”‚           {props.children(close)}
2026-10-24T15:12:30.4270575Z      ยท                           โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4270736Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4270816Z  495 โ”‚         </ReanimatedSwipeable>
2026-10-24T15:12:30.4270866Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4271340Z   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
2026-10-24T15:12:30.4271634Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4271637Z
2026-10-24T15:12:30.4271832Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T15:12:30.4271983Z     โ•ญโ”€[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-24T15:12:30.4272077Z  35 โ”‚       <T3SourceTextRunNativeComponent
2026-10-24T15:12:30.4272141Z  36 โ”‚         key={index}
2026-10-24T15:12:30.4272219Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4272293Z  37 โ”‚         style={flattenedStyle}
2026-10-24T15:12:30.4272345Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4272490Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T15:12:30.4272494Z
2026-10-24T15:12:30.4272722Z   โš  eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used.
2026-10-24T15:12:30.4272851Z     โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:15:8]
2026-10-24T15:12:30.4272922Z  14 โ”‚   threadSearchMatchKey,
2026-10-24T15:12:30.4273015Z  15 โ”‚   type EnvironmentThreadSearchMatch,
2026-10-24T15:12:30.4273123Z     ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4273301Z     ยท                      โ•ฐโ”€โ”€ 'EnvironmentThreadSearchMatch' is imported here
2026-10-24T15:12:30.4273410Z  16 โ”‚ } from "@t3tools/client-runtime/state/thread-search";
2026-10-24T15:12:30.4273462Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4273588Z   help: Consider removing this import.
2026-10-24T15:12:30.4273592Z
2026-10-24T15:12:30.4273792Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T15:12:30.4273923Z      โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:527:25]
2026-10-24T15:12:30.4274055Z  526 โ”‚     // range) the boundary string is identical and the chain would die.
2026-10-24T15:12:30.4274145Z  527 โ”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-24T15:12:30.4274303Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4274502Z      ยท                                โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-24T15:12:30.4274640Z  528 โ”‚   const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase();
2026-10-24T15:12:30.4274690Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4274994Z   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
2026-10-24T15:12:30.4275309Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4275312Z
2026-10-24T15:12:30.4275482Z   โš  react(purity): Cannot call impure function during render
2026-10-24T15:12:30.4275615Z      โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:518:53]
2026-10-24T15:12:30.4275706Z  517 โ”‚     if (Number.isNaN(wakeAtMs)) return;
2026-10-24T15:12:30.4275869Z  518 โ”‚     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-24T15:12:30.4275992Z      ยท                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4276160Z      ยท                                                          โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T15:12:30.4276238Z  519 โ”‚     const id = setTimeout(() => {
2026-10-24T15:12:30.4276290Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4276579Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T15:12:30.4276882Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T15:12:30.4276888Z
2026-10-24T15:12:30.4277082Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T15:12:30.4277256Z     โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15]
2026-10-24T15:12:30.4277319Z  87 โ”‚             <li
2026-10-24T15:12:30.4277408Z  88 โ”‚               key={`${index}:${check.name}`}
2026-10-24T15:12:30.4277518Z     ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4277669Z  89 โ”‚               className="col-span-full grid grid-cols-subgrid items-center text-xs"
2026-10-24T15:12:30.4277721Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4277867Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T15:12:30.4277870Z
2026-10-24T15:12:30.4278137Z   โš  unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts.
2026-10-24T15:12:30.4278285Z     โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:12:14]
2026-10-24T15:12:30.4278439Z  11 โ”‚       addEventListener(_type: string, listener: (event: { data: string }) => void) {
2026-10-24T15:12:30.4278518Z  12 โ”‚         this.onmessage = listener;
2026-10-24T15:12:30.4278599Z     ยท              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4278655Z  13 โ”‚       }
2026-10-24T15:12:30.4278707Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4279027Z   help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on<event>` replaces any previously registered handler.
2026-10-24T15:12:30.4279030Z
2026-10-24T15:12:30.4279236Z   โš  typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-24T15:12:30.4279514Z     โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:16:9]
2026-10-24T15:12:30.4279626Z  15 โ”‚       constructor() {
2026-10-24T15:12:30.4279692Z  16 โ”‚         source = this;
2026-10-24T15:12:30.4279764Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4279819Z  17 โ”‚       }
2026-10-24T15:12:30.4279871Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4280147Z   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.
2026-10-24T15:12:30.4280150Z
2026-10-24T15:12:30.4280611Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T15:12:30.4280742Z     โ•ญโ”€[packages/contracts/src/baseSchemas.test.ts:39:9]
2026-10-24T15:12:30.4280811Z  38 โ”‚       JSON.stringify(
2026-10-24T15:12:30.4280930Z  39 โ”‚         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
2026-10-24T15:12:30.4281027Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4281093Z  40 โ”‚           { name: "a" },
2026-10-24T15:12:30.4281144Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4281147Z
2026-10-24T15:12:30.4281307Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4281479Z     โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5]
2026-10-24T15:12:30.4281535Z  90 โ”‚ }) {
2026-10-24T15:12:30.4281647Z  91 โ”‚   const rotation = useSharedValue(props.hidden ? 1 : 0);
2026-10-24T15:12:30.4281721Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4281861Z     ยท             โ•ฐโ”€โ”€ `rotation` originates here
2026-10-24T15:12:30.4281933Z  92 โ”‚   useLayoutEffect(() => {
2026-10-24T15:12:30.4282075Z  93 โ”‚     rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
2026-10-24T15:12:30.4282146Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4282278Z     ยท         โ•ฐโ”€โ”€ `rotation` cannot be modified
2026-10-24T15:12:30.4282353Z  94 โ”‚   }, [props.hidden, rotation]);
2026-10-24T15:12:30.4282406Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4282674Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T15:12:30.4282986Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4282988Z
2026-10-24T15:12:30.4283204Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4283408Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5]
2026-10-24T15:12:30.4283503Z  266 โ”‚   const variant = props.variant ?? "plain";
2026-10-24T15:12:30.4283667Z  267 โ”‚   const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
2026-10-24T15:12:30.4283757Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4283906Z      ยท                 โ•ฐโ”€โ”€ `loadingVisibility` originates here
2026-10-24T15:12:30.4283976Z  268 โ”‚   useLayoutEffect(() => {
2026-10-24T15:12:30.4284135Z  269 โ”‚     loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
2026-10-24T15:12:30.4284218Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4284366Z      ยท             โ•ฐโ”€โ”€ `loadingVisibility` cannot be modified
2026-10-24T15:12:30.4284467Z  270 โ”‚   }, [loadingVisibility, props.loading]);
2026-10-24T15:12:30.4284523Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4284790Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T15:12:30.4285099Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4285103Z
2026-10-24T15:12:30.4285259Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4285429Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5]
2026-10-24T15:12:30.4285485Z  325 โ”‚ }) {
2026-10-24T15:12:30.4285648Z  326 โ”‚   const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
2026-10-24T15:12:30.4285741Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4285897Z      ยท                  โ•ฐโ”€โ”€ `recordingVisibility` originates here
2026-10-24T15:12:30.4285967Z  327 โ”‚   useLayoutEffect(() => {
2026-10-24T15:12:30.4286156Z  328 โ”‚     recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
2026-10-24T15:12:30.4286241Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4286397Z      ยท              โ•ฐโ”€โ”€ `recordingVisibility` cannot be modified
2026-10-24T15:12:30.4286489Z  329 โ”‚   }, [props.phase, recordingVisibility]);
2026-10-24T15:12:30.4286541Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4286805Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T15:12:30.4287116Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4287123Z
2026-10-24T15:12:30.4287595Z   โš  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.
2026-10-24T15:12:30.4287732Z      โ•ญโ”€[packages/client-runtime/src/rpc/session.test.ts:226:3]
2026-10-24T15:12:30.4287789Z  225 โ”‚     ) {
2026-10-24T15:12:30.4287996Z  226 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T15:12:30.4288111Z  227 โ”‚ โ”‚       const socket = sockets[index];
2026-10-24T15:12:30.4288202Z  228 โ”‚ โ”‚       if (socket) {
2026-10-24T15:12:30.4288361Z  229 โ”‚ โ”‚         return socket;
2026-10-24T15:12:30.4288464Z  230 โ”‚ โ”‚       }
2026-10-24T15:12:30.4288568Z  231 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T15:12:30.4288696Z  232 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T15:12:30.4288871Z  233 โ”‚       return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket."));
2026-10-24T15:12:30.4288924Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4288926Z
2026-10-24T15:12:30.4289394Z   โš  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.
2026-10-24T15:12:30.4289529Z      โ•ญโ”€[packages/client-runtime/src/rpc/session.test.ts:240:3]
2026-10-24T15:12:30.4289592Z  239 โ”‚     ) {
2026-10-24T15:12:30.4289797Z  240 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T15:12:30.4290215Z  241 โ”‚ โ”‚       const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index];
2026-10-24T15:12:30.4290308Z  242 โ”‚ โ”‚       if (request) {
2026-10-24T15:12:30.4292032Z  243 โ”‚ โ”‚         return request;
2026-10-24T15:12:30.4292112Z  244 โ”‚ โ”‚       }
2026-10-24T15:12:30.4292216Z  245 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T15:12:30.4292342Z  246 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T15:12:30.4292511Z  247 โ”‚       return yield* Effect.die(new Error("Expected the RPC protocol to send a request."));
2026-10-24T15:12:30.4292562Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4292574Z
2026-10-24T15:12:30.4292728Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4292897Z     โ•ญโ”€[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
2026-10-24T15:12:30.4292980Z  26 โ”‚   const latestInput = useRef(input);
2026-10-24T15:12:30.4293056Z  27 โ”‚   latestInput.current = input;
2026-10-24T15:12:30.4293169Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4293355Z     ยท        โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T15:12:30.4293470Z     ยท        โ•ฐโ”€โ”€ This value is a ref
2026-10-24T15:12:30.4293576Z  28 โ”‚   const mounted = useRef(true);
2026-10-24T15:12:30.4293627Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4294107Z   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
2026-10-24T15:12:30.4294407Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4294410Z
2026-10-24T15:12:30.4294567Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4294733Z     โ•ญโ”€[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
2026-10-24T15:12:30.4294838Z  65 โ”‚   const [expanded, setExpanded] = useState(false);
2026-10-24T15:12:30.4294922Z  66 โ”‚   const progress = useSharedValue(0);
2026-10-24T15:12:30.4294996Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4295217Z     ยท             โ•ฐโ”€โ”€ `progress` originates here
2026-10-24T15:12:30.4295323Z  67 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4295447Z  68 โ”‚     progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
2026-10-24T15:12:30.4295518Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4295650Z     ยท         โ•ฐโ”€โ”€ `progress` cannot be modified
2026-10-24T15:12:30.4295722Z  69 โ”‚   }, [expanded, progress]);
2026-10-24T15:12:30.4295774Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4296042Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T15:12:30.4296349Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4296354Z
2026-10-24T15:12:30.4296826Z   โš  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.
2026-10-24T15:12:30.4296965Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:131:9]
2026-10-24T15:12:30.4297027Z  130 โ”‚           ) {
2026-10-24T15:12:30.4297239Z  131 โ”‚ โ•ญโ”€โ–ถ         for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T15:12:30.4297363Z  132 โ”‚ โ”‚             if (subscriptions.length >= count) {
2026-10-24T15:12:30.4297454Z  133 โ”‚ โ”‚               return;
2026-10-24T15:12:30.4297536Z  134 โ”‚ โ”‚             }
2026-10-24T15:12:30.4297644Z  135 โ”‚ โ”‚             yield* Effect.yieldNow;
2026-10-24T15:12:30.4297783Z  136 โ”‚ โ•ฐโ”€โ–ถ         }
2026-10-24T15:12:30.4297952Z  137 โ”‚             return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`));
2026-10-24T15:12:30.4298005Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4298007Z
2026-10-24T15:12:30.4298471Z   โš  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.
2026-10-24T15:12:30.4298604Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:252:7]
2026-10-24T15:12:30.4298766Z  251 โ”‚           yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient)));
2026-10-24T15:12:30.4299027Z  252 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) {
2026-10-24T15:12:30.4299136Z  253 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4299269Z  254 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4299392Z  255 โ”‚           yield* SubscriptionRef.set(activeSession, Option.none());
2026-10-24T15:12:30.4299444Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4299447Z
2026-10-24T15:12:30.4299910Z   โš  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.
2026-10-24T15:12:30.4300040Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:258:7]
2026-10-24T15:12:30.4300096Z  257 โ”‚
2026-10-24T15:12:30.4300404Z  258 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-24T15:12:30.4300542Z  259 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4300672Z  260 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4300778Z  261 โ”‚           yield* Fiber.interrupt(subscriptionFiber);
2026-10-24T15:12:30.4300829Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4300832Z
2026-10-24T15:12:30.4301293Z   โš  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.
2026-10-24T15:12:30.4301422Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:322:7]
2026-10-24T15:12:30.4301483Z  321 โ”‚           );
2026-10-24T15:12:30.4301742Z  322 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) {
2026-10-24T15:12:30.4301849Z  323 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4301978Z  324 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4302032Z  325 โ”‚
2026-10-24T15:12:30.4302083Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4302087Z
2026-10-24T15:12:30.4302550Z   โš  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.
2026-10-24T15:12:30.4302681Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:330:7]
2026-10-24T15:12:30.4302849Z  329 โ”‚           yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient)));
2026-10-24T15:12:30.4303101Z  330 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-24T15:12:30.4303204Z  331 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4303334Z  332 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4303438Z  333 โ”‚           yield* Fiber.interrupt(subscriptionFiber);
2026-10-24T15:12:30.4303490Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4303492Z
2026-10-24T15:12:30.4303676Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4303838Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
2026-10-24T15:12:30.4303996Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T15:12:30.4304124Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T15:12:30.4304250Z      ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4304425Z      ยท                                                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4304543Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T15:12:30.4304594Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4305065Z   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
2026-10-24T15:12:30.4305414Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4305473Z
2026-10-24T15:12:30.4305617Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4305775Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
2026-10-24T15:12:30.4305829Z  125 โ”‚
2026-10-24T15:12:30.4305935Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T15:12:30.4306024Z      ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4306175Z      ยท                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4306279Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T15:12:30.4306329Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4306803Z   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
2026-10-24T15:12:30.4307097Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4307100Z
2026-10-24T15:12:30.4307243Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4307399Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
2026-10-24T15:12:30.4307451Z  125 โ”‚
2026-10-24T15:12:30.4307557Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T15:12:30.4307644Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4307795Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4307901Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T15:12:30.4307955Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4308423Z   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
2026-10-24T15:12:30.4308715Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4308718Z
2026-10-24T15:12:30.4308859Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4309015Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
2026-10-24T15:12:30.4309067Z  125 โ”‚
2026-10-24T15:12:30.4309173Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T15:12:30.4309290Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4309461Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4309562Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T15:12:30.4309614Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4310079Z   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
2026-10-24T15:12:30.4310367Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4310371Z
2026-10-24T15:12:30.4310566Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4310758Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
2026-10-24T15:12:30.4310810Z  125 โ”‚
2026-10-24T15:12:30.4310915Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T15:12:30.4311026Z      ยท                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4311193Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4311293Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T15:12:30.4311344Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4311817Z   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
2026-10-24T15:12:30.4312110Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4312112Z
2026-10-24T15:12:30.4312254Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4312410Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-24T15:12:30.4312521Z  126 โ”‚       if (!sessionRef.current || !recorderRef.current) {
2026-10-24T15:12:30.4312713Z  127 โ”‚ โ•ญโ”€โ–ถ     const recorder = createLazyVoiceRecorder({
2026-10-24T15:12:30.4312890Z  128 โ”‚ โ”‚         create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T15:12:30.4313015Z  129 โ”‚ โ”‚         onStatus: (status: RecordingStatus) => {
2026-10-24T15:12:30.4313174Z  130 โ”‚ โ”‚           sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T15:12:30.4313295Z  131 โ”‚ โ”‚             isFinished: status.isFinished,
2026-10-24T15:12:30.4313472Z  132 โ”‚ โ”‚             hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T15:12:30.4313605Z  133 โ”‚ โ”‚             error: status.error,
2026-10-24T15:12:30.4313702Z  134 โ”‚ โ”‚             url: status.url,
2026-10-24T15:12:30.4313782Z  135 โ”‚ โ”‚           });
2026-10-24T15:12:30.4313860Z  136 โ”‚ โ”‚         },
2026-10-24T15:12:30.4314058Z  137 โ”‚ โ”‚         // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T15:12:30.4314166Z  138 โ”‚ โ”‚         selectInput: (inputs) => {
2026-10-24T15:12:30.4314382Z  139 โ”‚ โ”‚           const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T15:12:30.4314560Z  140 โ”‚ โ”‚           if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T15:12:30.4314728Z  141 โ”‚ โ”‚           const known = microphoneOrder(preferences.value.microphones);
2026-10-24T15:12:30.4314867Z  142 โ”‚ โ”‚           const order = rememberMicrophones(known, inputs);
2026-10-24T15:12:30.4314967Z  143 โ”‚ โ”‚           if (order !== known) {
2026-10-24T15:12:30.4315107Z  144 โ”‚ โ”‚             registry.set(updateMobilePreferencesAtom, {
2026-10-24T15:12:30.4315221Z  145 โ”‚ โ”‚               transform: (current) => ({
2026-10-24T15:12:30.4315427Z  146 โ”‚ โ”‚                 microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T15:12:30.4315519Z  147 โ”‚ โ”‚               }),
2026-10-24T15:12:30.4315603Z  148 โ”‚ โ”‚             });
2026-10-24T15:12:30.4315682Z  149 โ”‚ โ”‚           }
2026-10-24T15:12:30.4315822Z  150 โ”‚ โ”‚           return preferredMicrophoneInput(inputs, order);
2026-10-24T15:12:30.4315899Z  151 โ”‚ โ”‚         },
2026-10-24T15:12:30.4316030Z  152 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T15:12:30.4316268Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T15:12:30.4316354Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T15:12:30.4316406Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4316881Z   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
2026-10-24T15:12:30.4317176Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4317178Z
2026-10-24T15:12:30.4317322Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4317482Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-24T15:12:30.4317538Z  152 โ”‚     });
2026-10-24T15:12:30.4317619Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T15:12:30.4317732Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4317922Z      ยท          โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T15:12:30.4318042Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T15:12:30.4318145Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T15:12:30.4318197Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4318665Z   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
2026-10-24T15:12:30.4318956Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4318958Z
2026-10-24T15:12:30.4319100Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4319310Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-24T15:12:30.4319430Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T15:12:30.4319626Z  154 โ”‚ โ•ญโ”€โ–ถ     sessionRef.current = new VoiceInputSession({
2026-10-24T15:12:30.4319713Z  155 โ”‚ โ”‚         recorder,
2026-10-24T15:12:30.4319842Z  156 โ”‚ โ”‚         getTranscriber: getLocalVoiceTranscriber,
2026-10-24T15:12:30.4319959Z  157 โ”‚ โ”‚         requestPermission: async () => {
2026-10-24T15:12:30.4320125Z  158 โ”‚ โ”‚           const permission = await requestRecordingPermissionsAsync();
2026-10-24T15:12:30.4320319Z  159 โ”‚ โ”‚           return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T15:12:30.4320395Z  160 โ”‚ โ”‚         },
2026-10-24T15:12:30.4320542Z  161 โ”‚ โ”‚         configureRecording: configureVoiceRecordingAudio,
2026-10-24T15:12:30.4320680Z  162 โ”‚ โ”‚         releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T15:12:30.4320815Z  163 โ”‚ โ”‚         deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T15:12:30.4320927Z  164 โ”‚ โ”‚         onStateChange: (nextState) =>
2026-10-24T15:12:30.4321017Z  165 โ”‚ โ”‚           setState({
2026-10-24T15:12:30.4321117Z  166 โ”‚ โ”‚             state: nextState,
2026-10-24T15:12:30.4321253Z  167 โ”‚ โ”‚             ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T15:12:30.4321381Z  168 โ”‚ โ”‚             label: sessionRef.current?.label ?? null,
2026-10-24T15:12:30.4321461Z  169 โ”‚ โ”‚           }),
2026-10-24T15:12:30.4321596Z  170 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T15:12:30.4321799Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4321855Z  171 โ”‚       }
2026-10-24T15:12:30.4321906Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4322375Z   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
2026-10-24T15:12:30.4322665Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4322667Z
2026-10-24T15:12:30.4322811Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4322972Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-24T15:12:30.4323059Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T15:12:30.4323161Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T15:12:30.4323273Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4323455Z      ยท          โ”‚        โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T15:12:30.4323592Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T15:12:30.4323656Z  155 โ”‚       recorder,
2026-10-24T15:12:30.4323707Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4324228Z   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
2026-10-24T15:12:30.4324558Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4324560Z
2026-10-24T15:12:30.4324705Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4324861Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-24T15:12:30.4324947Z  184 โ”‚     return () => subscription.remove();
2026-10-24T15:12:30.4325012Z  185 โ”‚   }, [controller]);
2026-10-24T15:12:30.4325089Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4325235Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4325288Z  186 โ”‚
2026-10-24T15:12:30.4325338Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4325811Z   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
2026-10-24T15:12:30.4326105Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4326108Z
2026-10-24T15:12:30.4326249Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4326403Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-24T15:12:30.4326490Z  184 โ”‚     return () => subscription.remove();
2026-10-24T15:12:30.4326554Z  185 โ”‚   }, [controller]);
2026-10-24T15:12:30.4326631Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4326778Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4326835Z  186 โ”‚
2026-10-24T15:12:30.4326886Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4327349Z   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
2026-10-24T15:12:30.4327639Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4327642Z
2026-10-24T15:12:30.4327783Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4327939Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-24T15:12:30.4327999Z  191 โ”‚     },
2026-10-24T15:12:30.4328074Z  192 โ”‚     [controller, recorder],
2026-10-24T15:12:30.4328149Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4328292Z      ยท           โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4328346Z  193 โ”‚   );
2026-10-24T15:12:30.4328397Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4328866Z   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
2026-10-24T15:12:30.4329160Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4329163Z
2026-10-24T15:12:30.4329357Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4329549Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-24T15:12:30.4329639Z  174 โ”‚   const controller = session.controller;
2026-10-24T15:12:30.4329726Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T15:12:30.4329830Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4330074Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4330128Z  176 โ”‚
2026-10-24T15:12:30.4330177Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4330643Z   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
2026-10-24T15:12:30.4330938Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4330945Z
2026-10-24T15:12:30.4331087Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4331244Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-24T15:12:30.4331300Z  191 โ”‚     },
2026-10-24T15:12:30.4331371Z  192 โ”‚     [controller, recorder],
2026-10-24T15:12:30.4331460Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4331605Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4331660Z  193 โ”‚   );
2026-10-24T15:12:30.4331712Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4332185Z   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
2026-10-24T15:12:30.4332476Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4332479Z
2026-10-24T15:12:30.4332618Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4332775Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-24T15:12:30.4332867Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T15:12:30.4332976Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T15:12:30.4333063Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4333223Z      ยท                         โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4333278Z  247 โ”‚
2026-10-24T15:12:30.4333328Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4333822Z   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
2026-10-24T15:12:30.4334111Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4334114Z
2026-10-24T15:12:30.4334255Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4334411Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-24T15:12:30.4334570Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T15:12:30.4334721Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T15:12:30.4334851Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4335011Z      ยท                              โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4335064Z  247 โ”‚
2026-10-24T15:12:30.4335114Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4335580Z   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
2026-10-24T15:12:30.4335870Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4335877Z
2026-10-24T15:12:30.4336022Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4336178Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-24T15:12:30.4336245Z  260 โ”‚     setOwnerFocused,
2026-10-24T15:12:30.4336305Z  261 โ”‚     session,
2026-10-24T15:12:30.4336377Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4336514Z      ยท        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4336573Z  262 โ”‚     stop,
2026-10-24T15:12:30.4336624Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4337090Z   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
2026-10-24T15:12:30.4337384Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4337389Z
2026-10-24T15:12:30.4337530Z   โš  react(refs): Cannot access refs during render
2026-10-24T15:12:30.4337687Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-24T15:12:30.4337741Z  250 โ”‚
2026-10-24T15:12:30.4337881Z  251 โ”‚ โ•ญโ”€โ–ถ   return {
2026-10-24T15:12:30.4338094Z  252 โ”‚ โ”‚       isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-24T15:12:30.4338175Z  253 โ”‚ โ”‚       state,
2026-10-24T15:12:30.4338264Z  254 โ”‚ โ”‚       audioLevels,
2026-10-24T15:12:30.4338365Z  255 โ”‚ โ”‚       elapsedSeconds,
2026-10-24T15:12:30.4338496Z  256 โ”‚ โ”‚       isBusy: voiceInputBlocksSubmission(state),
2026-10-24T15:12:30.4338578Z  257 โ”‚ โ”‚       ownerKey,
2026-10-24T15:12:30.4338657Z  258 โ”‚ โ”‚       label,
2026-10-24T15:12:30.4338746Z  259 โ”‚ โ”‚       focusedOwners,
2026-10-24T15:12:30.4338839Z  260 โ”‚ โ”‚       setOwnerFocused,
2026-10-24T15:12:30.4338920Z  261 โ”‚ โ”‚       session,
2026-10-24T15:12:30.4338998Z  262 โ”‚ โ”‚       stop,
2026-10-24T15:12:30.4339077Z  263 โ”‚ โ”‚       cancel,
2026-10-24T15:12:30.4339204Z  264 โ”‚ โ”œโ”€โ–ถ   };
2026-10-24T15:12:30.4339461Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T15:12:30.4339552Z  265 โ”‚     }
2026-10-24T15:12:30.4339603Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4340070Z   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
2026-10-24T15:12:30.4340359Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T15:12:30.4340362Z
2026-10-24T15:12:30.4340521Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4340680Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T15:12:30.4340843Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T15:12:30.4340968Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T15:12:30.4341048Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4341184Z      ยท              โ•ฐโ”€โ”€ `audioLevels` originates here
2026-10-24T15:12:30.4341302Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T15:12:30.4341447Z  124 โ”‚   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-24T15:12:30.4341500Z  125 โ”‚
2026-10-24T15:12:30.4341604Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T15:12:30.4341705Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T15:12:30.4341843Z  128 โ”‚       create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T15:12:30.4341938Z  129 โ”‚       onStatus: (status: RecordingStatus) => {
2026-10-24T15:12:30.4342066Z  130 โ”‚         sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T15:12:30.4342154Z  131 โ”‚           isFinished: status.isFinished,
2026-10-24T15:12:30.4342295Z  132 โ”‚           hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T15:12:30.4342369Z  133 โ”‚           error: status.error,
2026-10-24T15:12:30.4342437Z  134 โ”‚           url: status.url,
2026-10-24T15:12:30.4342495Z  135 โ”‚         });
2026-10-24T15:12:30.4342550Z  136 โ”‚       },
2026-10-24T15:12:30.4342716Z  137 โ”‚       // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T15:12:30.4342794Z  138 โ”‚       selectInput: (inputs) => {
2026-10-24T15:12:30.4342917Z  139 โ”‚         const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T15:12:30.4343028Z  140 โ”‚         if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T15:12:30.4343226Z  141 โ”‚         const known = microphoneOrder(preferences.value.microphones);
2026-10-24T15:12:30.4343365Z  142 โ”‚         const order = rememberMicrophones(known, inputs);
2026-10-24T15:12:30.4343437Z  143 โ”‚         if (order !== known) {
2026-10-24T15:12:30.4343589Z  144 โ”‚           registry.set(updateMobilePreferencesAtom, {
2026-10-24T15:12:30.4343673Z  145 โ”‚             transform: (current) => ({
2026-10-24T15:12:30.4343846Z  146 โ”‚               microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T15:12:30.4343907Z  147 โ”‚             }),
2026-10-24T15:12:30.4343967Z  148 โ”‚           });
2026-10-24T15:12:30.4344025Z  149 โ”‚         }
2026-10-24T15:12:30.4344134Z  150 โ”‚         return preferredMicrophoneInput(inputs, order);
2026-10-24T15:12:30.4344191Z  151 โ”‚       },
2026-10-24T15:12:30.4344244Z  152 โ”‚     });
2026-10-24T15:12:30.4344326Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T15:12:30.4344434Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T15:12:30.4344498Z  155 โ”‚       recorder,
2026-10-24T15:12:30.4344597Z  156 โ”‚       getTranscriber: getLocalVoiceTranscriber,
2026-10-24T15:12:30.4344681Z  157 โ”‚       requestPermission: async () => {
2026-10-24T15:12:30.4344813Z  158 โ”‚         const permission = await requestRecordingPermissionsAsync();
2026-10-24T15:12:30.4344968Z  159 โ”‚         return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T15:12:30.4345024Z  160 โ”‚       },
2026-10-24T15:12:30.4345132Z  161 โ”‚       configureRecording: configureVoiceRecordingAudio,
2026-10-24T15:12:30.4345239Z  162 โ”‚       releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T15:12:30.4345341Z  163 โ”‚       deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T15:12:30.4345422Z  164 โ”‚       onStateChange: (nextState) =>
2026-10-24T15:12:30.4345492Z  165 โ”‚         setState({
2026-10-24T15:12:30.4345564Z  166 โ”‚           state: nextState,
2026-10-24T15:12:30.4345668Z  167 โ”‚           ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T15:12:30.4345766Z  168 โ”‚           label: sessionRef.current?.label ?? null,
2026-10-24T15:12:30.4345824Z  169 โ”‚         }),
2026-10-24T15:12:30.4345879Z  170 โ”‚     });
2026-10-24T15:12:30.4345931Z  171 โ”‚   }
2026-10-24T15:12:30.4345983Z  172 โ”‚
2026-10-24T15:12:30.4346068Z  173 โ”‚   const session = sessionRef.current;
2026-10-24T15:12:30.4346155Z  174 โ”‚   const controller = session.controller;
2026-10-24T15:12:30.4346240Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T15:12:30.4346292Z  176 โ”‚
2026-10-24T15:12:30.4346357Z  177 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4346506Z  178 โ”‚     const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-24T15:12:30.4346652Z  179 โ”‚       // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-24T15:12:30.4346796Z  180 โ”‚       // real background state cancels preparation; recorder status handles
2026-10-24T15:12:30.4346899Z  181 โ”‚       // calls and route interruptions during capture.
2026-10-24T15:12:30.4347035Z  182 โ”‚       if (nextState === "background") controller.appMovedToBackground();
2026-10-24T15:12:30.4347090Z  183 โ”‚     });
2026-10-24T15:12:30.4347175Z  184 โ”‚     return () => subscription.remove();
2026-10-24T15:12:30.4347243Z  185 โ”‚   }, [controller]);
2026-10-24T15:12:30.4347294Z  186 โ”‚
2026-10-24T15:12:30.4347354Z  187 โ”‚   useEffect(
2026-10-24T15:12:30.4347416Z  188 โ”‚     () => () => {
2026-10-24T15:12:30.4347487Z  189 โ”‚       controller.dispose();
2026-10-24T15:12:30.4347553Z  190 โ”‚       recorder.release();
2026-10-24T15:12:30.4347609Z  191 โ”‚     },
2026-10-24T15:12:30.4347738Z  192 โ”‚     [controller, recorder],
2026-10-24T15:12:30.4347831Z  193 โ”‚   );
2026-10-24T15:12:30.4347882Z  194 โ”‚
2026-10-24T15:12:30.4347946Z  195 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4348038Z  196 โ”‚     if (state.phase !== "recording") return;
2026-10-24T15:12:30.4348090Z  197 โ”‚
2026-10-24T15:12:30.4348236Z  198 โ”‚     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-24T15:12:30.4348341Z  199 โ”‚     const activation = activateKeepAwakeAsync(tag);
2026-10-24T15:12:30.4348424Z  200 โ”‚     void activation.catch(() => {});
2026-10-24T15:12:30.4348487Z  201 โ”‚     return () => {
2026-10-24T15:12:30.4348636Z  202 โ”‚       // Release after activation settles, even if the recording ends immediately.
2026-10-24T15:12:30.4348774Z  203 โ”‚       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-24T15:12:30.4348829Z  204 โ”‚     };
2026-10-24T15:12:30.4348915Z  205 โ”‚   }, [keepAwakeId, state.phase]);
2026-10-24T15:12:30.4348969Z  206 โ”‚
2026-10-24T15:12:30.4349031Z  207 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4349163Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T15:12:30.4349214Z  209 โ”‚
2026-10-24T15:12:30.4349334Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T15:12:30.4349490Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T15:12:30.4349593Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T15:12:30.4349670Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4349810Z      ยท            โ•ฐโ”€โ”€ `audioLevels` cannot be modified
2026-10-24T15:12:30.4349865Z  213 โ”‚     }
2026-10-24T15:12:30.4349917Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4350192Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T15:12:30.4350503Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4350506Z
2026-10-24T15:12:30.4350708Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T15:12:30.4350867Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T15:12:30.4350920Z  206 โ”‚
2026-10-24T15:12:30.4350982Z  207 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4351060Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4351280Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-24T15:12:30.4351422Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T15:12:30.4351477Z  209 โ”‚
2026-10-24T15:12:30.4351596Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T15:12:30.4351749Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T15:12:30.4351851Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T15:12:30.4351927Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4352060Z      ยท            โ•ฐโ”€โ”€ This modifies `audioLevels`
2026-10-24T15:12:30.4352115Z  213 โ”‚     }
2026-10-24T15:12:30.4352166Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4352507Z   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
2026-10-24T15:12:30.4352875Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4352984Z
2026-10-24T15:12:30.4353355Z   โš  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.
2026-10-24T15:12:30.4353469Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:17:12]
2026-10-24T15:12:30.4353674Z  16 โ”‚   it("decodes legacy review credentials without offering them in new grants", () => {
2026-10-24T15:12:30.4353842Z  17 โ”‚     expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
2026-10-24T15:12:30.4353944Z     ยท            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4354011Z  18 โ”‚       "review:write",
2026-10-24T15:12:30.4354063Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4354065Z
2026-10-24T15:12:30.4354437Z   โš  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.
2026-10-24T15:12:30.4354552Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:20:18]
2026-10-24T15:12:30.4354608Z  19 โ”‚     ]);
2026-10-24T15:12:30.4354771Z  20 โ”‚     expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
2026-10-24T15:12:30.4354876Z     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4355007Z  21 โ”‚     expect(AuthStandardClientScopes).not.toContain("review:write");
2026-10-24T15:12:30.4355058Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4355061Z
2026-10-24T15:12:30.4355430Z   โš  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.
2026-10-24T15:12:30.4355542Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:58:21]
2026-10-24T15:12:30.4355712Z  57 โ”‚   it("ignores unknown response permissions without falling back to broader scopes", () => {
2026-10-24T15:12:30.4355836Z  58 โ”‚     const session = Schema.decodeUnknownSync(AuthSessionState)({
2026-10-24T15:12:30.4355944Z     ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4356012Z  59 โ”‚       authenticated: true,
2026-10-24T15:12:30.4356065Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4356067Z
2026-10-24T15:12:30.4356270Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T15:12:30.4356432Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7]
2026-10-24T15:12:30.4356487Z  154 โ”‚     }
2026-10-24T15:12:30.4356561Z  155 โ”‚   }, [wrappedRender]);
2026-10-24T15:12:30.4356645Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4356795Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `wrappedRender`
2026-10-24T15:12:30.4356847Z  156 โ”‚
2026-10-24T15:12:30.4356897Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4357193Z   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
2026-10-24T15:12:30.4357507Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4357510Z
2026-10-24T15:12:30.4357754Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T15:12:30.4357971Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42]
2026-10-24T15:12:30.4358058Z  799 โ”‚     >
2026-10-24T15:12:30.4358184Z  800 โ”‚       <AdaptiveWorkspaceContext.Provider value={contextValue}>
2026-10-24T15:12:30.4358307Z      ยท                                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4358406Z  801 โ”‚         <WindowHingeContext value={windowHinge}>
2026-10-24T15:12:30.4358457Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4358685Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T15:12:30.4358824Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T15:12:30.4358827Z
2026-10-24T15:12:30.4358995Z   โš  react(purity): Cannot call impure function during render
2026-10-24T15:12:30.4359132Z       โ•ญโ”€[apps/web/src/components/CommandPalette.tsx:2037:20]
2026-10-24T15:12:30.4359254Z  2036 โ”‚         title: inferProjectTitleFromPath(destinationPath),
2026-10-24T15:12:30.4359347Z  2037 โ”‚         createdAt: new Date().toISOString(),
2026-10-24T15:12:30.4359438Z       ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4359581Z       ยท                         โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T15:12:30.4359689Z  2038 โ”‚         remoteUrl: addProjectCloneFlow.remoteUrl,
2026-10-24T15:12:30.4359742Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4360024Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T15:12:30.4360321Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T15:12:30.4360324Z
2026-10-24T15:12:30.4360486Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4360649Z     โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5]
2026-10-24T15:12:30.4360703Z  35 โ”‚
2026-10-24T15:12:30.4360840Z  36 โ”‚   const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0);
2026-10-24T15:12:30.4360926Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4361073Z     ยท                 โ•ฐโ”€โ”€ `inspectorProgress` originates here
2026-10-24T15:12:30.4361168Z  37 โ”‚   const { renderedInspectorWidth } = props;
2026-10-24T15:12:30.4361298Z  38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-24T15:12:30.4361350Z  39 โ”‚
2026-10-24T15:12:30.4361430Z  40 โ”‚   const onClosed = props.onClosed;
2026-10-24T15:12:30.4361496Z  41 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4361591Z  42 โ”‚     inspectorProgress.value = withTiming(
2026-10-24T15:12:30.4361678Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4361828Z     ยท             โ•ฐโ”€โ”€ `inspectorProgress` cannot be modified
2026-10-24T15:12:30.4361905Z  43 โ”‚       inspectorVisible ? 1 : 0,
2026-10-24T15:12:30.4361955Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4362224Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T15:12:30.4362531Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4362533Z
2026-10-24T15:12:30.4362688Z   โš  react(immutability): This value cannot be modified
2026-10-24T15:12:30.4362906Z     โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7]
2026-10-24T15:12:30.4363032Z  37 โ”‚   const { renderedInspectorWidth } = props;
2026-10-24T15:12:30.4363162Z  38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-24T15:12:30.4363252Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4363405Z     ยท                   โ•ฐโ”€โ”€ `renderedContentWidth` originates here
2026-10-24T15:12:30.4363457Z  39 โ”‚
2026-10-24T15:12:30.4363535Z  40 โ”‚   const onClosed = props.onClosed;
2026-10-24T15:12:30.4363626Z  41 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4363713Z  42 โ”‚     inspectorProgress.value = withTiming(
2026-10-24T15:12:30.4363790Z  43 โ”‚       inspectorVisible ? 1 : 0,
2026-10-24T15:12:30.4363860Z  44 โ”‚       WORKSPACE_PANE_TIMING,
2026-10-24T15:12:30.4363925Z  45 โ”‚       (finished) => {
2026-10-24T15:12:30.4364070Z  46 โ”‚         if (finished === true && !inspectorVisible && onClosed !== undefined) {
2026-10-24T15:12:30.4364147Z  47 โ”‚           runOnJS(onClosed)();
2026-10-24T15:12:30.4364203Z  48 โ”‚         }
2026-10-24T15:12:30.4364258Z  49 โ”‚       },
2026-10-24T15:12:30.4364311Z  50 โ”‚     );
2026-10-24T15:12:30.4364442Z  51 โ”‚     const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
2026-10-24T15:12:30.4364520Z  52 โ”‚     renderedInspectorWidth.set(
2026-10-24T15:12:30.4364662Z  53 โ”‚       resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
2026-10-24T15:12:30.4364715Z  54 โ”‚     );
2026-10-24T15:12:30.4364768Z  55 โ”‚   }, [
2026-10-24T15:12:30.4364836Z  56 โ”‚     inspectorProgress,
2026-10-24T15:12:30.4364902Z  57 โ”‚     inspectorVisible,
2026-10-24T15:12:30.4364963Z  58 โ”‚     inspectorWidth,
2026-10-24T15:12:30.4365022Z  59 โ”‚     onClosed,
2026-10-24T15:12:30.4365101Z  60 โ”‚     renderedInspectorWidth,
2026-10-24T15:12:30.4365161Z  61 โ”‚     resizing,
2026-10-24T15:12:30.4365215Z  62 โ”‚   ]);
2026-10-24T15:12:30.4365266Z  63 โ”‚
2026-10-24T15:12:30.4365328Z  64 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4365418Z  65 โ”‚     const targetWidth = inspectorWidth ?? 0;
2026-10-24T15:12:30.4365504Z  66 โ”‚     if (!inspectorVisible || resizing) {
2026-10-24T15:12:30.4365602Z  67 โ”‚       renderedContentWidth.value = targetWidth;
2026-10-24T15:12:30.4365689Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4365849Z     ยท                 โ•ฐโ”€โ”€ `renderedContentWidth` cannot be modified
2026-10-24T15:12:30.4365908Z  68 โ”‚       return;
2026-10-24T15:12:30.4365960Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4366226Z   help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed
2026-10-24T15:12:30.4366589Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T15:12:30.4366626Z
2026-10-24T15:12:30.4366909Z   โš  eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4367066Z     โ•ญโ”€[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
2026-10-24T15:12:30.4367118Z  14 โ”‚
2026-10-24T15:12:30.4367189Z  15 โ”‚ const legacyCredentials = {
2026-10-24T15:12:30.4367273Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4367418Z     ยท               โ•ฐโ”€โ”€ 'legacyCredentials' is declared here
2026-10-24T15:12:30.4367485Z  16 โ”‚   version: 1 as const,
2026-10-24T15:12:30.4367534Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4367646Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4367653Z
2026-10-24T15:12:30.4367933Z   โš  eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-24T15:12:30.4368065Z      โ•ญโ”€[packages/provider-cursor/src/server/auth.ts:249:20]
2026-10-24T15:12:30.4368120Z  248 โ”‚     },
2026-10-24T15:12:30.4368201Z  249 โ”‚     (effect, flow, stopSessions) =>
2026-10-24T15:12:30.4368294Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4368442Z      ยท                          โ•ฐโ”€โ”€ 'stopSessions' is declared here
2026-10-24T15:12:30.4368506Z  250 โ”‚       effect.pipe(
2026-10-24T15:12:30.4368556Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4368658Z   help: Consider removing this parameter.
2026-10-24T15:12:30.4368661Z
2026-10-24T15:12:30.4368875Z   โš  eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used.
2026-10-24T15:12:30.4369027Z      โ•ญโ”€[packages/client-runtime/src/work-log/presentation.ts:237:10]
2026-10-24T15:12:30.4369079Z  236 โ”‚
2026-10-24T15:12:30.4369197Z  237 โ”‚ function nonEmptyString(value: unknown): string | null {
2026-10-24T15:12:30.4369281Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4369424Z      ยท                 โ•ฐโ”€โ”€ 'nonEmptyString' is declared here
2026-10-24T15:12:30.4369566Z  238 โ”‚   return typeof value === "string" && value.trim().length > 0 ? value : null;
2026-10-24T15:12:30.4369618Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4369721Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4369724Z
2026-10-24T15:12:30.4370061Z   โš  unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret.
2026-10-24T15:12:30.4370187Z      โ•ญโ”€[apps/server/src/vcs/GitVcsDriverCore.ts:517:11]
2026-10-24T15:12:30.4370288Z  516 โ”‚         GIT_DIAGNOSTIC_LINE_PATTERN.test(line) ||
2026-10-24T15:12:30.4370425Z  517 โ”‚         (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)),
2026-10-24T15:12:30.4370511Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4370565Z  518 โ”‚     )
2026-10-24T15:12:30.4370616Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4370770Z   help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`.
2026-10-24T15:12:30.4370773Z
2026-10-24T15:12:30.4370976Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T15:12:30.4371139Z    โ•ญโ”€[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
2026-10-24T15:12:30.4371286Z  3 โ”‚   AuthProvidersManageScope,
2026-10-24T15:12:30.4371395Z  4 โ”‚   type AuthSessionState,
2026-10-24T15:12:30.4371477Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4371623Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T15:12:30.4371690Z  5 โ”‚   type EnvironmentId,
2026-10-24T15:12:30.4371742Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4371840Z   help: Consider removing this import.
2026-10-24T15:12:30.4371842Z
2026-10-24T15:12:30.4372200Z   โš  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.
2026-10-24T15:12:30.4372339Z       โ•ญโ”€[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34]
2026-10-24T15:12:30.4372481Z  1785 โ”‚           const stat = branch.files!.find((file) => file.path === path)!;
2026-10-24T15:12:30.4372632Z  1786 โ”‚           const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({
2026-10-24T15:12:30.4372748Z       ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4372811Z  1787 โ”‚             cwd,
2026-10-24T15:12:30.4372863Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4372866Z
2026-10-24T15:12:30.4373123Z   โš  eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used.
2026-10-24T15:12:30.4373273Z       โ•ญโ”€[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10]
2026-10-24T15:12:30.4373326Z  1619 โ”‚
2026-10-24T15:12:30.4373535Z  1620 โ”‚ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean {
2026-10-24T15:12:30.4373683Z       ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4373893Z       ยท                            โ•ฐโ”€โ”€ 'promptResponseHasMissingXAiStopReason' is declared here
2026-10-24T15:12:30.4373975Z  1621 โ”‚   const meta = response._meta;
2026-10-24T15:12:30.4374027Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4374130Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4374133Z
2026-10-24T15:12:30.4374390Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4374518Z      โ•ญโ”€[packages/provider-grok/src/server/adapter.ts:408:7]
2026-10-24T15:12:30.4374573Z  407 โ”‚
2026-10-24T15:12:30.4374643Z  408 โ”‚ const layer: Layer.Layer<
2026-10-24T15:12:30.4374713Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4374835Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T15:12:30.4374932Z  409 โ”‚   ProviderAdapter.ProviderAdapterV2,
2026-10-24T15:12:30.4374987Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4375089Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4375091Z
2026-10-24T15:12:30.4375289Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T15:12:30.4375403Z     โ•ญโ”€[apps/mobile/src/state/thread-order.ts:29:7]
2026-10-24T15:12:30.4375478Z  28 โ”‚     getPendingThreadOrder();
2026-10-24T15:12:30.4375558Z  29 โ”‚   }, [nowMinute, snoozeWakeTick]);
2026-10-24T15:12:30.4375679Z     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4375870Z     ยท           โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-24T15:12:30.4376010Z     ยท           โ•ฐโ”€โ”€ Unnecessary dependency `nowMinute`
2026-10-24T15:12:30.4376133Z  30 โ”‚   return pending;
2026-10-24T15:12:30.4376222Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4376519Z   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
2026-10-24T15:12:30.4376834Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T15:12:30.4376837Z
2026-10-24T15:12:30.4377097Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T15:12:30.4377225Z     โ•ญโ”€[apps/mobile/src/state/use-vcs-action-state.ts:86:5]
2026-10-24T15:12:30.4377333Z  83 โ”‚   const [nowMs, setNowMs] = useState(() => Date.now());
2026-10-24T15:12:30.4377397Z  84 โ”‚   useEffect(() => {
2026-10-24T15:12:30.4377473Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4377608Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T15:12:30.4377694Z  85 โ”‚     if (!actionState.isRunning) return;
2026-10-24T15:12:30.4377762Z  86 โ”‚     setNowMs(Date.now());
2026-10-24T15:12:30.4377831Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4377997Z     ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T15:12:30.4378122Z  87 โ”‚     const interval = setInterval(() => setNowMs(Date.now()), 1000);
2026-10-24T15:12:30.4378173Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4378789Z   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.
2026-10-24T15:12:30.4379119Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect
2026-10-24T15:12:30.4379122Z
2026-10-24T15:12:30.4379326Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T15:12:30.4379455Z    โ•ญโ”€[packages/client-runtime/src/state/filesystem.ts:3:8]
2026-10-24T15:12:30.4379526Z  2 โ”‚   AuthFilesystemReadScope,
2026-10-24T15:12:30.4379595Z  3 โ”‚   type AuthSessionState,
2026-10-24T15:12:30.4379680Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4379824Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T15:12:30.4379899Z  4 โ”‚   type FilesystemBrowseEntry,
2026-10-24T15:12:30.4379955Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4380057Z   help: Consider removing this import.
2026-10-24T15:12:30.4380059Z
2026-10-24T15:12:30.4380245Z   โš  oxc(no-accumulating-spread): Do not spread accumulators in loops
2026-10-24T15:12:30.4380369Z      โ•ญโ”€[packages/client-runtime/src/state/shell.ts:189:5]
2026-10-24T15:12:30.4380480Z  186 โ”‚     let waiting = yield* Ref.get(awaitingCompletion);
2026-10-24T15:12:30.4380548Z  187 โ”‚     let next = initial;
2026-10-24T15:12:30.4380617Z      ยท         โ”€โ”€โ”ฌโ”€
2026-10-24T15:12:30.4380738Z      ยท           โ•ฐโ”€โ”€ From this accumulator
2026-10-24T15:12:30.4380818Z  188 โ”‚     let receivedSnapshot = false;
2026-10-24T15:12:30.4380894Z  189 โ”‚     for (const item of items) {
2026-10-24T15:12:30.4380962Z      ยท     โ”€โ”ฌโ”€
2026-10-24T15:12:30.4381121Z      ยท      โ•ฐโ”€โ”€ For this loop
2026-10-24T15:12:30.4381243Z  190 โ”‚       if (item.kind === "synchronized") {
2026-10-24T15:12:30.4381309Z  191 โ”‚         waiting = false;
2026-10-24T15:12:30.4381399Z  192 โ”‚         if (Option.isSome(next.snapshot)) {
2026-10-24T15:12:30.4381517Z  193 โ”‚           next = { ...next, status: "live", error: Option.none() };
2026-10-24T15:12:30.4381603Z      ยท                    โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T15:12:30.4381734Z      ยท                       โ•ฐโ”€โ”€ From this spread
2026-10-24T15:12:30.4381792Z  194 โ”‚         }
2026-10-24T15:12:30.4381843Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4382000Z   help: Consider using `Object.assign()` to mutate the accumulator instead.
2026-10-24T15:12:30.4382156Z   note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-24T15:12:30.4382158Z
2026-10-24T15:12:30.4382640Z   โš  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.
2026-10-24T15:12:30.4382797Z       โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1680:7]
2026-10-24T15:12:30.4382889Z  1679 โ”‚           yield* harness.replaceSession;
2026-10-24T15:12:30.4383104Z  1680 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T15:12:30.4383258Z  1681 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
2026-10-24T15:12:30.4383345Z  1682 โ”‚ โ”‚             break;
2026-10-24T15:12:30.4383425Z  1683 โ”‚ โ”‚           }
2026-10-24T15:12:30.4383539Z  1684 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4383707Z  1685 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4383782Z  1686 โ”‚           yield* Queue.offer(
2026-10-24T15:12:30.4383834Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4383837Z
2026-10-24T15:12:30.4384313Z   โš  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.
2026-10-24T15:12:30.4384467Z       โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1789:7]
2026-10-24T15:12:30.4384556Z  1788 โ”‚           yield* harness.replaceSession;
2026-10-24T15:12:30.4384764Z  1789 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T15:12:30.4384931Z  1790 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
2026-10-24T15:12:30.4385039Z  1791 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4385172Z  1792 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4385301Z  1793 โ”‚           expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
2026-10-24T15:12:30.4385354Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4385357Z
2026-10-24T15:12:30.4385696Z   โš  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.
2026-10-24T15:12:30.4385842Z     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:50:18]
2026-10-24T15:12:30.4386004Z  49 โ”‚   for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) {
2026-10-24T15:12:30.4386227Z  50 โ”‚     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
2026-10-24T15:12:30.4386344Z     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4386523Z  51 โ”‚     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
2026-10-24T15:12:30.4386573Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4386576Z
2026-10-24T15:12:30.4386909Z   โš  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.
2026-10-24T15:12:30.4387053Z     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:51:18]
2026-10-24T15:12:30.4387221Z  50 โ”‚     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
2026-10-24T15:12:30.4387401Z  51 โ”‚     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
2026-10-24T15:12:30.4387490Z     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4387544Z  52 โ”‚   }
2026-10-24T15:12:30.4387595Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4387598Z
2026-10-24T15:12:30.4387927Z   โš  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.
2026-10-24T15:12:30.4388068Z     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:55:5]
2026-10-24T15:12:30.4388132Z  54 โ”‚   assert.equal(
2026-10-24T15:12:30.4388303Z  55 โ”‚     Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"),
2026-10-24T15:12:30.4388373Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4388432Z  56 โ”‚     true,
2026-10-24T15:12:30.4388483Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4388486Z
2026-10-24T15:12:30.4388823Z   โš  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.
2026-10-24T15:12:30.4388968Z     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:59:5]
2026-10-24T15:12:30.4389029Z  58 โ”‚   assert.equal(
2026-10-24T15:12:30.4389211Z  59 โ”‚     Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"),
2026-10-24T15:12:30.4389282Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4389339Z  60 โ”‚     true,
2026-10-24T15:12:30.4389388Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4389391Z
2026-10-24T15:12:30.4389721Z   โš  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.
2026-10-24T15:12:30.4389922Z      โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:103:16]
2026-10-24T15:12:30.4390010Z  102 โ”‚
2026-10-24T15:12:30.4390176Z  103 โ”‚   assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true);
2026-10-24T15:12:30.4390261Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4390315Z  104 โ”‚ });
2026-10-24T15:12:30.4390367Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4390369Z
2026-10-24T15:12:30.4390558Z   โš  eslint(no-unused-vars): Identifier 'Arr' is imported but never used.
2026-10-24T15:12:30.4390691Z    โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:4:13]
2026-10-24T15:12:30.4390809Z  3 โ”‚ import type { EnvironmentThreadShell } from "./models.ts";
2026-10-24T15:12:30.4390890Z  4 โ”‚ import * as Arr from "effect/Array";
2026-10-24T15:12:30.4390961Z    ยท             โ”€โ”ฌโ”€
2026-10-24T15:12:30.4391085Z    ยท              โ•ฐโ”€โ”€ 'Arr' is imported here
2026-10-24T15:12:30.4391176Z  5 โ”‚ import * as Order from "effect/Order";
2026-10-24T15:12:30.4391232Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4391330Z   help: Consider removing this import.
2026-10-24T15:12:30.4391332Z
2026-10-24T15:12:30.4391524Z   โš  eslint(no-unused-vars): Identifier 'Order' is imported but never used.
2026-10-24T15:12:30.4391655Z    โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:5:13]
2026-10-24T15:12:30.4391736Z  4 โ”‚ import * as Arr from "effect/Array";
2026-10-24T15:12:30.4391816Z  5 โ”‚ import * as Order from "effect/Order";
2026-10-24T15:12:30.4391890Z    ยท             โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T15:12:30.4392020Z    ยท               โ•ฐโ”€โ”€ 'Order' is imported here
2026-10-24T15:12:30.4392073Z  6 โ”‚
2026-10-24T15:12:30.4392122Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4392226Z   help: Consider removing this import.
2026-10-24T15:12:30.4392235Z
2026-10-24T15:12:30.4392520Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T15:12:30.4392677Z      โ•ญโ”€[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
2026-10-24T15:12:30.4392733Z  162 โ”‚   keys,
2026-10-24T15:12:30.4392805Z  163 โ”‚   overridingProjects = [],
2026-10-24T15:12:30.4392888Z      ยท                        โ”€โ”€
2026-10-24T15:12:30.4392955Z  164 โ”‚   onClearOverrides,
2026-10-24T15:12:30.4393006Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4393328Z   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.
2026-10-24T15:12:30.4393330Z
2026-10-24T15:12:30.4393564Z   โš  typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-24T15:12:30.4393693Z     โ•ญโ”€[apps/web/src/contextMenuFallback.test.ts:38:9]
2026-10-24T15:12:30.4393759Z  37 โ”‚   get isConnected() {
2026-10-24T15:12:30.4393851Z  38 โ”‚     let current: FakeElement | null = this;
2026-10-24T15:12:30.4393924Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4393996Z  39 โ”‚     while (current?.parent) {
2026-10-24T15:12:30.4394046Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4394321Z   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.
2026-10-24T15:12:30.4394323Z
2026-10-24T15:12:30.4394965Z   โš  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.
2026-10-24T15:12:30.4395160Z      โ•ญโ”€[packages/client-runtime/src/connection/supervisor.test.ts:135:3]
2026-10-24T15:12:30.4395275Z  134 โ”‚       let lastState = yield* SubscriptionRef.get(state);
2026-10-24T15:12:30.4395492Z  135 โ”‚ โ•ญโ”€โ–ถ   for (let iteration = 0; iteration < 100; iteration += 1) {
2026-10-24T15:12:30.4395629Z  136 โ”‚ โ”‚       lastState = yield* SubscriptionRef.get(state);
2026-10-24T15:12:30.4395735Z  137 โ”‚ โ”‚       if (predicate(lastState)) {
2026-10-24T15:12:30.4395834Z  138 โ”‚ โ”‚         return lastState;
2026-10-24T15:12:30.4395907Z  139 โ”‚ โ”‚       }
2026-10-24T15:12:30.4396009Z  140 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T15:12:30.4396142Z  141 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T15:12:30.4396221Z  142 โ”‚       return yield* Effect.die(
2026-10-24T15:12:30.4396271Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4396274Z
2026-10-24T15:12:30.4396543Z   โš  eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-24T15:12:30.4396660Z      โ•ญโ”€[apps/server/src/usage/UsageService.ts:169:7]
2026-10-24T15:12:30.4396714Z  168 โ”‚
2026-10-24T15:12:30.4396791Z  169 โ”‚ const layerTest = Layer.succeed(
2026-10-24T15:12:30.4396866Z      ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4396999Z      ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
2026-10-24T15:12:30.4397063Z  170 โ”‚   UsageService,
2026-10-24T15:12:30.4397114Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4397219Z   help: Consider removing this declaration.
2026-10-24T15:12:30.4397221Z
2026-10-24T15:12:30.4397692Z   โš  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.
2026-10-24T15:12:30.4397827Z       โ•ญโ”€[apps/server/src/usage/UsageService.test.ts:2615:7]
2026-10-24T15:12:30.4397926Z  2614 โ”‚           let orphanedAt: number | undefined;
2026-10-24T15:12:30.4398155Z  2615 โ”‚ โ•ญโ”€โ–ถ       for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
2026-10-24T15:12:30.4398278Z  2616 โ”‚ โ”‚           const tasks: Array<() => void> = [];
2026-10-24T15:12:30.4398427Z  2617 โ”‚ โ”‚           const dispatcher: Scheduler.SchedulerDispatcher = {
2026-10-24T15:12:30.4398563Z  2618 โ”‚ โ”‚             scheduleTask: (task) => tasks.push(task),
2026-10-24T15:12:30.4398665Z  2619 โ”‚ โ”‚             flush: () => {
2026-10-24T15:12:30.4398788Z  2620 โ”‚ โ”‚               let task: (() => void) | undefined;
2026-10-24T15:12:30.4398935Z  2621 โ”‚ โ”‚               while ((task = tasks.shift()) !== undefined) task();
2026-10-24T15:12:30.4399018Z  2622 โ”‚ โ”‚             },
2026-10-24T15:12:30.4399098Z  2623 โ”‚ โ”‚           };
2026-10-24T15:12:30.4399168Z  2624 โ”‚ โ”‚
2026-10-24T15:12:30.4399328Z  2625 โ”‚ โ”‚           let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
2026-10-24T15:12:30.4399434Z  2626 โ”‚ โ”‚           let requestChecks = 0;
2026-10-24T15:12:30.4399563Z  2627 โ”‚ โ”‚           const scheduler: Scheduler.Scheduler = {
2026-10-24T15:12:30.4399730Z  2628 โ”‚ โ”‚             executionMode: "async",
2026-10-24T15:12:30.4399885Z  2629 โ”‚ โ”‚             makeDispatcher: () => dispatcher,
2026-10-24T15:12:30.4399996Z  2630 โ”‚ โ”‚             shouldYield: (fiber) => {
2026-10-24T15:12:30.4400128Z  2631 โ”‚ โ”‚               if (fiber !== requestFiber) return false;
2026-10-24T15:12:30.4400234Z  2632 โ”‚ โ”‚               requestChecks += 1;
2026-10-24T15:12:30.4400377Z  2633 โ”‚ โ”‚               if (requestChecks !== interruptAt) return false;
2026-10-24T15:12:30.4400492Z  2634 โ”‚ โ”‚               fiber.interruptUnsafe();
2026-10-24T15:12:30.4400589Z  2635 โ”‚ โ”‚               return true;
2026-10-24T15:12:30.4400671Z  2636 โ”‚ โ”‚             },
2026-10-24T15:12:30.4400751Z  2637 โ”‚ โ”‚           };
2026-10-24T15:12:30.4400826Z  2638 โ”‚ โ”‚
2026-10-24T15:12:30.4400950Z  2639 โ”‚ โ”‚           const input: UsageSummaryInput = {
2026-10-24T15:12:30.4401044Z  2640 โ”‚ โ”‚             ...WINDOW,
2026-10-24T15:12:30.4401173Z  2641 โ”‚ โ”‚             sinceDay: UsageDay.make("2026-09-01"),
2026-10-24T15:12:30.4401366Z  2642 โ”‚ โ”‚             untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
2026-10-24T15:12:30.4401445Z  2643 โ”‚ โ”‚           };
2026-10-24T15:12:30.4401557Z  2644 โ”‚ โ”‚           const first = yield* service
2026-10-24T15:12:30.4401662Z  2645 โ”‚ โ”‚             .readSummary(input)
2026-10-24T15:12:30.4401750Z  2646 โ”‚ โ”‚             .pipe(
2026-10-24T15:12:30.4401846Z  2647 โ”‚ โ”‚               Effect.exit,
2026-10-24T15:12:30.4402012Z  2648 โ”‚ โ”‚               Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-24T15:12:30.4402120Z  2649 โ”‚ โ”‚               Effect.forkChild,
2026-10-24T15:12:30.4402201Z  2650 โ”‚ โ”‚             );
2026-10-24T15:12:30.4402303Z  2651 โ”‚ โ”‚           requestFiber = first;
2026-10-24T15:12:30.4402409Z  2652 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4402511Z  2653 โ”‚ โ”‚           dispatcher.flush();
2026-10-24T15:12:30.4402580Z  2654 โ”‚ โ”‚
2026-10-24T15:12:30.4402730Z  2655 โ”‚ โ”‚           const second = yield* service.readSummary(input).pipe(
2026-10-24T15:12:30.4402829Z  2656 โ”‚ โ”‚             Effect.match({
2026-10-24T15:12:30.4402958Z  2657 โ”‚ โ”‚               onFailure: (error) => error.reason,
2026-10-24T15:12:30.4403086Z  2658 โ”‚ โ”‚               onSuccess: () => "success" as const,
2026-10-24T15:12:30.4403169Z  2659 โ”‚ โ”‚             }),
2026-10-24T15:12:30.4403325Z  2660 โ”‚ โ”‚             Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-24T15:12:30.4403427Z  2661 โ”‚ โ”‚             Effect.forkChild,
2026-10-24T15:12:30.4403507Z  2662 โ”‚ โ”‚           );
2026-10-24T15:12:30.4403639Z  2663 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T15:12:30.4403740Z  2664 โ”‚ โ”‚           dispatcher.flush();
2026-10-24T15:12:30.4403868Z  2665 โ”‚ โ”‚           const secondExit = second.pollUnsafe();
2026-10-24T15:12:30.4403983Z  2666 โ”‚ โ”‚           if (secondExit === undefined) {
2026-10-24T15:12:30.4404153Z  2667 โ”‚ โ”‚             second.interruptUnsafe();
2026-10-24T15:12:30.4404293Z  2668 โ”‚ โ”‚             orphanedAt = interruptAt;
2026-10-24T15:12:30.4404380Z  2669 โ”‚ โ”‚             break;
2026-10-24T15:12:30.4404459Z  2670 โ”‚ โ”‚           }
2026-10-24T15:12:30.4404579Z  2671 โ”‚ โ”‚           if (Exit.isFailure(secondExit)) {
2026-10-24T15:12:30.4404736Z  2672 โ”‚ โ”‚             assert.fail("the matching request fiber was interrupted");
2026-10-24T15:12:30.4404815Z  2673 โ”‚ โ”‚           }
2026-10-24T15:12:30.4404966Z  2674 โ”‚ โ”‚           assert.strictEqual(secondExit.value, "invalidWindow");
2026-10-24T15:12:30.4405101Z  2675 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T15:12:30.4405156Z  2676 โ”‚
2026-10-24T15:12:30.4405208Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4405217Z
2026-10-24T15:12:30.4405401Z   โš  unicorn(no-new-array): Do not use `new Array(singleArgument)`.
2026-10-24T15:12:30.4405521Z      โ•ญโ”€[apps/web/src/terminal/ghostty/core.ts:194:19]
2026-10-24T15:12:30.4405643Z  193 โ”‚     const count = Math.min(CHUNK_SIZE, graphemeLength - start);
2026-10-24T15:12:30.4405733Z  194 โ”‚     const codes = new Array<number>(count);
2026-10-24T15:12:30.4405841Z      ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4405943Z  195 โ”‚     for (let index = 0; index < count; index += 1) {
2026-10-24T15:12:30.4405994Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T15:12:30.4406421Z   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]`.
2026-10-24T15:12:30.4406430Z
2026-10-24T15:12:30.4406518Z Found 0 errors and 367 warnings in 5477 files (5.2s, 8 threads)
2026-10-24T15:12:30.4868830Z Post job cleanup.
2026-10-24T15:12:30.5547350Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-24T15:12:30.5642417Z Post job cleanup.
2026-10-24T15:12:30.5655606Z ##[start-action display=Cache full pnpm store;id=__aa3ca0c3-306a-4350-8da6-7264c814c0ff.__actions_cache]
2026-10-24T15:12:30.5992794Z Post job cleanup.
2026-10-24T15:12:30.6635678Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074, not saving cache.
2026-10-24T15:12:30.6675347Z ##[end-action id=__aa3ca0c3-306a-4350-8da6-7264c814c0ff.__actions_cache;outcome=success;conclusion=success;duration_ms=101]
2026-10-24T15:12:30.6677132Z ##[start-action display=Cache Vite+;id=__aa3ca0c3-306a-4350-8da6-7264c814c0ff.vp_cache]
2026-10-24T15:12:30.6698236Z Post job cleanup.
2026-10-24T15:12:30.7302655Z 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.
2026-10-24T15:12:30.7341570Z ##[end-action id=__aa3ca0c3-306a-4350-8da6-7264c814c0ff.vp_cache;outcome=success;conclusion=success;duration_ms=66]
2026-10-24T15:12:30.7377937Z Post job cleanup.
2026-10-24T15:12:30.7816312Z [command]/usr/local/bin/git version
2026-10-24T15:12:30.7849078Z git version 2.55.0
2026-10-24T15:12:30.7869256Z Temporarily overriding HOME='/home/runner/_work/_temp/2dad3bf7-8444-4f44-b205-abacdfaae8af' before making global git config changes
2026-10-24T15:12:30.7869894Z Adding repository directory to the temporary git global config as a safe directory
2026-10-24T15:12:30.7872861Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-24T15:12:30.7896896Z Removing SSH command configuration
2026-10-24T15:12:30.7900167Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-24T15:12:30.7924870Z [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' || :"
2026-10-24T15:12:30.8066042Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-24T15:12:30.8121591Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-24T15:12:30.8162878Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-24T15:12:30.8190050Z ##[group]Run '/job_completed.sh'
2026-10-24T15:12:30.8203016Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-24T15:12:30.8203192Z env:
2026-10-24T15:12:30.8203306Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 173
2026-10-24T15:12:30.8203460Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 386
2026-10-24T15:12:30.8203641Z   BLACKSMITH_CHECK_RUN_ID: 120907262757
2026-10-24T15:12:30.8203784Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-24T15:12:30.8203936Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-24T15:12:30.8204072Z ##[endgroup]
2026-10-24T15:12:30.8290421Z Docker container cache not activated, skipping hash computation.
2026-10-24T15:12:30.8592695Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-24T15:12:30.8636418Z Cleaning up orphan processes