GitHub check

256 KB of 614 KB loaded Download the full log (614 KB)
358 KB of earlier output not loaded
accepted") {
2026-10-25T02:26:58.7758480Z  521 β”‚ β”‚                 yield* Effect.yieldNow;
2026-10-25T02:26:58.7758626Z  522 β”‚ β”‚                 delivery = (yield* service.getWebhookDelivery({
2026-10-25T02:26:58.7758725Z  523 β”‚ β”‚                   id: task.id,
2026-10-25T02:26:58.7758901Z  524 β”‚ β”‚                   deliveryId: deliveryId!,
2026-10-25T02:26:58.7759060Z  525 β”‚ β”‚                 })).delivery;
2026-10-25T02:26:58.7759216Z  526 β”‚ ╰─▢             }
2026-10-25T02:26:58.7759333Z  527 β”‚                 assert.equal(delivery.outcome, "dispatch_failed");
2026-10-25T02:26:58.7759384Z      ╰────
2026-10-25T02:26:58.7759387Z
2026-10-25T02:26:58.7759665Z   ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7759810Z        ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12551:7]
2026-10-25T02:26:58.7759866Z  12550 β”‚
2026-10-25T02:26:58.7760003Z  12551 β”‚ const layerUnavailable: Layer.Layer<OrchestratorV2> = Layer.succeed(
2026-10-25T02:26:58.7760096Z        Β·       ────────┬───────
2026-10-25T02:26:58.7760242Z        Β·               ╰── 'layerUnavailable' is declared here
2026-10-25T02:26:58.7760311Z  12552 β”‚   OrchestratorV2,
2026-10-25T02:26:58.7760362Z        ╰────
2026-10-25T02:26:58.7760467Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7760469Z
2026-10-25T02:26:58.7760750Z   ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-25T02:26:58.7760904Z      ╭─[apps/web/src/components/settings/SettingInheritance.tsx:160:24]
2026-10-25T02:26:58.7760960Z  159 β”‚   keys,
2026-10-25T02:26:58.7761033Z  160 β”‚   overridingProjects = [],
2026-10-25T02:26:58.7761118Z      Β·                        ──
2026-10-25T02:26:58.7761191Z  161 β”‚   onClearOverrides,
2026-10-25T02:26:58.7761242Z      ╰────
2026-10-25T02:26:58.7761555Z   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-25T02:26:58.7761558Z
2026-10-25T02:26:58.7761767Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-25T02:26:58.7761899Z     ╭─[apps/web/src/lib/composerContextReferences.ts:90:40]
2026-10-25T02:26:58.7761974Z  89 β”‚   let cursor = prompt.length;
2026-10-25T02:26:58.7762078Z  90 β”‚   for (const occurrence of occurrences.reverse()) {
2026-10-25T02:26:58.7762184Z     Β·                                        ───────
2026-10-25T02:26:58.7762265Z  91 β”‚     let { start, end } = occurrence;
2026-10-25T02:26:58.7762316Z     ╰────
2026-10-25T02:26:58.7762578Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-25T02:26:58.7762584Z
2026-10-25T02:26:58.7762749Z   ⚠ react(purity): Cannot call impure function during render
2026-10-25T02:26:58.7762894Z      ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:373:47]
2026-10-25T02:26:58.7763022Z  372 β”‚   const { open, onOpenChange, onSnooze, timestampFormat } = props;
2026-10-25T02:26:58.7763173Z  373 β”‚   const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
2026-10-25T02:26:58.7763287Z      Β·                                               ─────┬────
2026-10-25T02:26:58.7763446Z      Β·                                                    ╰── Cannot call impure function
2026-10-25T02:26:58.7763508Z  374 β”‚   return (
2026-10-25T02:26:58.7763626Z      ╰────
2026-10-25T02:26:58.7763981Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T02:26:58.7764275Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T02:26:58.7764277Z
2026-10-25T02:26:58.7764442Z   ⚠ react(purity): Cannot call impure function during render
2026-10-25T02:26:58.7764587Z      ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:860:39]
2026-10-25T02:26:58.7764678Z  859 β”‚   if (snoozeGateClock.thread !== thread) {
2026-10-25T02:26:58.7764805Z  860 β”‚     setSnoozeGateClock({ thread, now: new Date().toISOString() });
2026-10-25T02:26:58.7764913Z      Β·                                       ─────┬────
2026-10-25T02:26:58.7765070Z      Β·                                            ╰── Cannot call impure function
2026-10-25T02:26:58.7765126Z  861 β”‚   }
2026-10-25T02:26:58.7765176Z      ╰────
2026-10-25T02:26:58.7765446Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T02:26:58.7765735Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T02:26:58.7765737Z
2026-10-25T02:26:58.7766019Z   ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used.
2026-10-25T02:26:58.7766134Z     ╭─[apps/web/src/lib/terminalContext.ts:56:10]
2026-10-25T02:26:58.7766186Z  55 β”‚
2026-10-25T02:26:58.7766289Z  56 β”‚ function normalizeTerminalContextSelection(
2026-10-25T02:26:58.7766398Z     Β·          ────────────────┬────────────────
2026-10-25T02:26:58.7766585Z     Β·                          ╰── 'normalizeTerminalContextSelection' is declared here
2026-10-25T02:26:58.7766672Z  57 β”‚   selection: TerminalContextSelection,
2026-10-25T02:26:58.7766725Z     ╰────
2026-10-25T02:26:58.7766825Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7766828Z
2026-10-25T02:26:58.7767028Z   ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used.
2026-10-25T02:26:58.7767189Z     ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13]
2026-10-25T02:26:58.7767275Z  24 β”‚ import * as Schema from "effect/Schema";
2026-10-25T02:26:58.7767396Z  25 β”‚ import * as HostProcess from "@t3tools/shared/HostProcess";
2026-10-25T02:26:58.7767476Z     Β·             ─────┬─────
2026-10-25T02:26:58.7767615Z     Β·                  ╰── 'HostProcess' is imported here
2026-10-25T02:26:58.7767669Z  26 β”‚
2026-10-25T02:26:58.7767717Z     ╰────
2026-10-25T02:26:58.7767814Z   help: Consider removing this import.
2026-10-25T02:26:58.7767816Z
2026-10-25T02:26:58.7768082Z   ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7768243Z      ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11]
2026-10-25T02:26:58.7768325Z  123 β”‚     const path = yield* Path.Path;
2026-10-25T02:26:58.7768438Z  124 β”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-25T02:26:58.7768590Z      Β·           ──────┬─────
2026-10-25T02:26:58.7768803Z      Β·                 ╰── 'serverConfig' is declared here
2026-10-25T02:26:58.7768943Z  125 β”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-25T02:26:58.7768993Z      ╰────
2026-10-25T02:26:58.7769095Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7769097Z
2026-10-25T02:26:58.7769365Z   ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7769528Z      ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11]
2026-10-25T02:26:58.7769640Z  124 β”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-25T02:26:58.7769778Z  125 β”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-25T02:26:58.7769866Z      Β·           ───────┬──────
2026-10-25T02:26:58.7770010Z      Β·                  ╰── 'serverSettings' is declared here
2026-10-25T02:26:58.7770143Z  126 β”‚     const gitWorkflow = yield* GitWorkflowService.GitWorkflowService;
2026-10-25T02:26:58.7770195Z      ╰────
2026-10-25T02:26:58.7770299Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7770301Z
2026-10-25T02:26:58.7770537Z   Γ— t3code(no-low-value-comments): Cut this to 4 lines or fewer: keep the constraint, drop the background.
2026-10-25T02:26:58.7770676Z      ╭─[apps/server/src/orchestration-v2/WireProjection.ts:259:1]
2026-10-25T02:26:58.7770730Z  258 β”‚
2026-10-25T02:26:58.7770858Z  259 β”‚ ╭─▢ /**
2026-10-25T02:26:58.7771063Z  260 β”‚ β”‚    * One per subscription, applied after coalescing so it only remembers records the client
2026-10-25T02:26:58.7771271Z  261 β”‚ β”‚    * received, in the snapshot or in events. A record event comes before the turn item that repeats
2026-10-25T02:26:58.7771472Z  262 β”‚ β”‚    * its body (adapters and the orchestrator emit them in that order), so the item can ship blank
2026-10-25T02:26:58.7771672Z  263 β”‚ β”‚    * and marked; so can a repeated subagent record. Emitting in the other order, or forgetting a
2026-10-25T02:26:58.7771807Z  264 β”‚ β”‚    * record, only costs bytes: the repeat ships whole.
2026-10-25T02:26:58.7771930Z  265 β”‚ ╰─▢  */
2026-10-25T02:26:58.7772023Z  266 β”‚     export function makeLiveBodyDeduper(): (
2026-10-25T02:26:58.7772076Z      ╰────
2026-10-25T02:26:58.7772078Z
2026-10-25T02:26:58.7772343Z   ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7772474Z      ╭─[apps/server/src/telemetry/AnalyticsService.ts:327:7]
2026-10-25T02:26:58.7772525Z  326 β”‚
2026-10-25T02:26:58.7772627Z  327 β”‚ const layerTest = AnalyticsService.layerTest;
2026-10-25T02:26:58.7772707Z      Β·       ────┬────
2026-10-25T02:26:58.7772839Z      Β·           ╰── 'layerTest' is declared here
2026-10-25T02:26:58.7772890Z      ╰────
2026-10-25T02:26:58.7772992Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7772994Z
2026-10-25T02:26:58.7773246Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7773466Z      ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:405:7]
2026-10-25T02:26:58.7773554Z  404 β”‚
2026-10-25T02:26:58.7773723Z  405 β”‚ const layer = Layer.effect(ThreadPullRequestServiceV2, make);
2026-10-25T02:26:58.7773793Z      Β·       ──┬──
2026-10-25T02:26:58.7773914Z      Β·         ╰── 'layer' is declared here
2026-10-25T02:26:58.7773962Z      ╰────
2026-10-25T02:26:58.7774062Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7774065Z
2026-10-25T02:26:58.7774228Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-25T02:26:58.7774345Z      ╭─[apps/server/src/processRunner.test.ts:264:14]
2026-10-25T02:26:58.7774398Z  263 β”‚
2026-10-25T02:26:58.7774499Z  264 β”‚   for (const {} of ["timeout", "success"] as const) {
2026-10-25T02:26:58.7774569Z      Β·              ──
2026-10-25T02:26:58.7774630Z  265 β”‚   }
2026-10-25T02:26:58.7774682Z      ╰────
2026-10-25T02:26:58.7774910Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-25T02:26:58.7774912Z
2026-10-25T02:26:58.7775099Z   ⚠ eslint(require-yield): This generator function does not have `yield`
2026-10-25T02:26:58.7775244Z      ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78]
2026-10-25T02:26:58.7775298Z   80 β”‚
2026-10-25T02:26:58.7775560Z   81 β”‚ ╭─▢ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* (
2026-10-25T02:26:58.7775679Z   82 β”‚ β”‚     options: AcpMcpOverAcpBridgeOptions,
2026-10-25T02:26:58.7775799Z   83 β”‚ β”‚   ): Effect.fn.Return<AcpMcpOverAcpBridge> {
2026-10-25T02:26:58.7776016Z   84 β”‚ β”‚     const fetchImplementation = options.fetchImplementation ?? fetch;
2026-10-25T02:26:58.7776149Z   85 β”‚ β”‚     const connections = new Map<string, Connection>();
2026-10-25T02:26:58.7776218Z   86 β”‚ β”‚
2026-10-25T02:26:58.7776430Z   87 β”‚ β”‚     const connectionFor = (connectionId: string): Effect.Effect<Connection, AcpMcpOverAcpError> =>
2026-10-25T02:26:58.7776530Z   88 β”‚ β”‚       Effect.suspend(() => {
2026-10-25T02:26:58.7776663Z   89 β”‚ β”‚         const connection = connections.get(connectionId);
2026-10-25T02:26:58.7776773Z   90 β”‚ β”‚         return connection === undefined
2026-10-25T02:26:58.7776980Z   91 β”‚ β”‚           ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`))
2026-10-25T02:26:58.7777095Z   92 β”‚ β”‚           : Effect.succeed(connection);
2026-10-25T02:26:58.7777172Z   93 β”‚ β”‚       });
2026-10-25T02:26:58.7777240Z   94 β”‚ β”‚
2026-10-25T02:26:58.7777326Z   95 β”‚ β”‚     const send = (
2026-10-25T02:26:58.7777423Z   96 β”‚ β”‚       connection: Connection,
2026-10-25T02:26:58.7777513Z   97 β”‚ β”‚       message: unknown,
2026-10-25T02:26:58.7777667Z   98 β”‚ β”‚     ): Effect.Effect<ReadonlyArray<unknown>, AcpMcpOverAcpError> =>
2026-10-25T02:26:58.7777781Z   99 β”‚ β”‚       connection.mutex.withPermits(1)(
2026-10-25T02:26:58.7777887Z  100 β”‚ β”‚         Effect.gen(function* () {
2026-10-25T02:26:58.7778006Z  101 β”‚ β”‚           const body = JSON.stringify(message);
2026-10-25T02:26:58.7778205Z  102 β”‚ β”‚           if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) {
2026-10-25T02:26:58.7778492Z  103 β”‚ β”‚             return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB."));
2026-10-25T02:26:58.7778570Z  104 β”‚ β”‚           }
2026-10-25T02:26:58.7778701Z  105 β”‚ β”‚           const response = yield* Effect.tryPromise({
2026-10-25T02:26:58.7778800Z  106 β”‚ β”‚             try: (signal) =>
2026-10-25T02:26:58.7778930Z  107 β”‚ β”‚               fetchImplementation(options.endpoint, {
2026-10-25T02:26:58.7779031Z  108 β”‚ β”‚                 method: "POST",
2026-10-25T02:26:58.7779121Z  109 β”‚ β”‚                 signal,
2026-10-25T02:26:58.7779215Z  110 β”‚ β”‚                 headers: {
2026-10-25T02:26:58.7779348Z  111 β”‚ β”‚                   "content-type": "application/json",
2026-10-25T02:26:58.7779490Z  112 β”‚ β”‚                   accept: "application/json, text/event-stream",
2026-10-25T02:26:58.7779622Z  113 β”‚ β”‚                   authorization: options.authorization,
2026-10-25T02:26:58.7779744Z  114 β”‚ β”‚                   ...(connection.sessionId === null
2026-10-25T02:26:58.7779835Z  115 β”‚ β”‚                     ? {}
2026-10-25T02:26:58.7779978Z  116 β”‚ β”‚                     : { "mcp-session-id": connection.sessionId }),
2026-10-25T02:26:58.7780111Z  117 β”‚ β”‚                   ...(connection.protocolVersion === null
2026-10-25T02:26:58.7780200Z  118 β”‚ β”‚                     ? {}
2026-10-25T02:26:58.7780363Z  119 β”‚ β”‚                     : { "mcp-protocol-version": connection.protocolVersion }),
2026-10-25T02:26:58.7780453Z  120 β”‚ β”‚                 },
2026-10-25T02:26:58.7780546Z  121 β”‚ β”‚                 body,
2026-10-25T02:26:58.7780627Z  122 β”‚ β”‚               }),
2026-10-25T02:26:58.7780727Z  123 β”‚ β”‚             catch: bridgeError,
2026-10-25T02:26:58.7780806Z  124 β”‚ β”‚           });
2026-10-25T02:26:58.7781015Z  125 β”‚ β”‚           connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId;
2026-10-25T02:26:58.7781113Z  126 β”‚ β”‚           if (!response.ok) {
2026-10-25T02:26:58.7781218Z  127 β”‚ β”‚             yield* Effect.promise(
2026-10-25T02:26:58.7781395Z  128 β”‚ β”‚               () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
2026-10-25T02:26:58.7781600Z  129 β”‚ β”‚             );
2026-10-25T02:26:58.7781784Z  130 β”‚ β”‚             return yield* Effect.fail(
2026-10-25T02:26:58.7781989Z  131 β”‚ β”‚               new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`),
2026-10-25T02:26:58.7782068Z  132 β”‚ β”‚             );
2026-10-25T02:26:58.7782146Z  133 β”‚ β”‚           }
2026-10-25T02:26:58.7782350Z  134 β”‚ β”‚           const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))];
2026-10-25T02:26:58.7782469Z  135 β”‚ β”‚           for (const payload of payloads) {
2026-10-25T02:26:58.7782680Z  136 β”‚ β”‚             connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion;
2026-10-25T02:26:58.7782756Z  137 β”‚ β”‚           }
2026-10-25T02:26:58.7782856Z  138 β”‚ β”‚           return payloads;
2026-10-25T02:26:58.7782978Z  139 β”‚ β”‚         }).pipe(Effect.mapError(bridgeError)),
2026-10-25T02:26:58.7783052Z  140 β”‚ β”‚       );
2026-10-25T02:26:58.7783121Z  141 β”‚ β”‚
2026-10-25T02:26:58.7783292Z  142 β”‚ β”‚     const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* (
2026-10-25T02:26:58.7783417Z  143 β”‚ β”‚       request: AcpSchema.DisconnectMcpRequest,
2026-10-25T02:26:58.7783598Z  144 β”‚ β”‚     ): Effect.fn.Return<AcpSchema.DisconnectMcpResponse, AcpMcpOverAcpError> {
2026-10-25T02:26:58.7783758Z  145 β”‚ β”‚       const connection = yield* connectionFor(request.connectionId);
2026-10-25T02:26:58.7783883Z  146 β”‚ β”‚       connections.delete(request.connectionId);
2026-10-25T02:26:58.7784006Z  147 β”‚ β”‚       const sessionId = connection.sessionId;
2026-10-25T02:26:58.7784110Z  148 β”‚ β”‚       if (sessionId !== null) {
2026-10-25T02:26:58.7784235Z  149 β”‚ β”‚         const response = yield* Effect.tryPromise({
2026-10-25T02:26:58.7784329Z  150 β”‚ β”‚           try: (signal) =>
2026-10-25T02:26:58.7784454Z  151 β”‚ β”‚             fetchImplementation(options.endpoint, {
2026-10-25T02:26:58.7784553Z  152 β”‚ β”‚               method: "DELETE",
2026-10-25T02:26:58.7784641Z  153 β”‚ β”‚               signal,
2026-10-25T02:26:58.7784733Z  154 β”‚ β”‚               headers: {
2026-10-25T02:26:58.7784861Z  155 β”‚ β”‚                 authorization: options.authorization,
2026-10-25T02:26:58.7784983Z  156 β”‚ β”‚                 "mcp-session-id": sessionId,
2026-10-25T02:26:58.7785117Z  157 β”‚ β”‚                 ...(connection.protocolVersion === null
2026-10-25T02:26:58.7785266Z  158 β”‚ β”‚                   ? {}
2026-10-25T02:26:58.7785464Z  159 β”‚ β”‚                   : { "mcp-protocol-version": connection.protocolVersion }),
2026-10-25T02:26:58.7785547Z  160 β”‚ β”‚               },
2026-10-25T02:26:58.7785627Z  161 β”‚ β”‚             }),
2026-10-25T02:26:58.7785727Z  162 β”‚ β”‚           catch: bridgeError,
2026-10-25T02:26:58.7785802Z  163 β”‚ β”‚         });
2026-10-25T02:26:58.7785969Z  164 β”‚ β”‚         if (!response.ok && response.status !== 404) {
2026-10-25T02:26:58.7786078Z  165 β”‚ β”‚           return yield* Effect.fail(
2026-10-25T02:26:58.7786267Z  166 β”‚ β”‚             new AcpMcpOverAcpError(
2026-10-25T02:26:58.7786569Z  167 β”‚ β”‚               `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`,
2026-10-25T02:26:58.7786650Z  168 β”‚ β”‚             ),
2026-10-25T02:26:58.7786728Z  169 β”‚ β”‚           );
2026-10-25T02:26:58.7786804Z  170 β”‚ β”‚         }
2026-10-25T02:26:58.7786904Z  171 β”‚ β”‚         yield* Effect.promise(
2026-10-25T02:26:58.7787079Z  172 β”‚ β”‚           () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(),
2026-10-25T02:26:58.7787156Z  173 β”‚ β”‚         );
2026-10-25T02:26:58.7787229Z  174 β”‚ β”‚       }
2026-10-25T02:26:58.7787310Z  175 β”‚ β”‚       return {};
2026-10-25T02:26:58.7787386Z  176 β”‚ β”‚     });
2026-10-25T02:26:58.7787459Z  177 β”‚ β”‚
2026-10-25T02:26:58.7787541Z  178 β”‚ β”‚     return {
2026-10-25T02:26:58.7787708Z  179 β”‚ β”‚       connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) {
2026-10-25T02:26:58.7787829Z  180 β”‚ β”‚         if (request.serverId !== "t3-code") {
2026-10-25T02:26:58.7787935Z  181 β”‚ β”‚           return yield* Effect.fail(
2026-10-25T02:26:58.7788117Z  182 β”‚ β”‚             new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`),
2026-10-25T02:26:58.7788193Z  183 β”‚ β”‚           );
2026-10-25T02:26:58.7788268Z  184 β”‚ β”‚         }
2026-10-25T02:26:58.7788393Z  185 β”‚ β”‚         if (connections.size >= MAX_CONNECTIONS) {
2026-10-25T02:26:58.7788605Z  186 β”‚ β”‚           return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections."));
2026-10-25T02:26:58.7788680Z  187 β”‚ β”‚         }
2026-10-25T02:26:58.7788834Z  188 β”‚ β”‚         const connectionId = yield* options.allocateConnectionId;
2026-10-25T02:26:58.7788951Z  189 β”‚ β”‚         connections.set(connectionId, {
2026-10-25T02:26:58.7789065Z  190 β”‚ β”‚           mutex: yield* Semaphore.make(1),
2026-10-25T02:26:58.7789159Z  191 β”‚ β”‚           sessionId: null,
2026-10-25T02:26:58.7789264Z  192 β”‚ β”‚           protocolVersion: null,
2026-10-25T02:26:58.7789361Z  193 β”‚ β”‚           nextRequestId: 0,
2026-10-25T02:26:58.7789444Z  194 β”‚ β”‚         });
2026-10-25T02:26:58.7789544Z  195 β”‚ β”‚         return { connectionId };
2026-10-25T02:26:58.7789626Z  196 β”‚ β”‚       }),
2026-10-25T02:26:58.7789798Z  197 β”‚ β”‚       message: Effect.fn("mcpOverAcpBridge.message")(function* (request) {
2026-10-25T02:26:58.7789959Z  198 β”‚ β”‚         const connection = yield* connectionFor(request.connectionId);
2026-10-25T02:26:58.7790080Z  199 β”‚ β”‚         const id = ++connection.nextRequestId;
2026-10-25T02:26:58.7790205Z  200 β”‚ β”‚         const payloads = yield* send(connection, {
2026-10-25T02:26:58.7790302Z  201 β”‚ β”‚           jsonrpc: "2.0",
2026-10-25T02:26:58.7790383Z  202 β”‚ β”‚           id,
2026-10-25T02:26:58.7790485Z  203 β”‚ β”‚           method: request.method,
2026-10-25T02:26:58.7790641Z  204 β”‚ β”‚           ...(request.params == null ? {} : { params: request.params }),
2026-10-25T02:26:58.7790718Z  205 β”‚ β”‚         });
2026-10-25T02:26:58.7790965Z  206 β”‚ β”‚         const response = payloads.find((payload) => asEnvelope(payload)?.id === id);
2026-10-25T02:26:58.7791166Z  207 β”‚ β”‚         const envelope = asEnvelope(response);
2026-10-25T02:26:58.7791265Z  208 β”‚ β”‚         if (envelope === null) {
2026-10-25T02:26:58.7791371Z  209 β”‚ β”‚           return yield* Effect.fail(
2026-10-25T02:26:58.7791553Z  210 β”‚ β”‚             new AcpMcpOverAcpError("MCP server did not return a matching response."),
2026-10-25T02:26:58.7791630Z  211 β”‚ β”‚           );
2026-10-25T02:26:58.7791703Z  212 β”‚ β”‚         }
2026-10-25T02:26:58.7791820Z  213 β”‚ β”‚         if (envelope.error !== undefined) {
2026-10-25T02:26:58.7792018Z  214 β”‚ β”‚           return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error)));
2026-10-25T02:26:58.7792094Z  215 β”‚ β”‚         }
2026-10-25T02:26:58.7792261Z  216 β”‚ β”‚         return (envelope.result ?? null) as AcpSchema.MessageMcpResponse;
2026-10-25T02:26:58.7792335Z  217 β”‚ β”‚       }),
2026-10-25T02:26:58.7792521Z  218 β”‚ β”‚       notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) {
2026-10-25T02:26:58.7792678Z  219 β”‚ β”‚         const connection = yield* connectionFor(request.connectionId);
2026-10-25T02:26:58.7792781Z  220 β”‚ β”‚         yield* send(connection, {
2026-10-25T02:26:58.7792877Z  221 β”‚ β”‚           jsonrpc: "2.0",
2026-10-25T02:26:58.7792978Z  222 β”‚ β”‚           method: request.method,
2026-10-25T02:26:58.7793139Z  223 β”‚ β”‚           ...(request.params == null ? {} : { params: request.params }),
2026-10-25T02:26:58.7793218Z  224 β”‚ β”‚         });
2026-10-25T02:26:58.7793290Z  225 β”‚ β”‚       }),
2026-10-25T02:26:58.7793374Z  226 β”‚ β”‚       disconnect,
2026-10-25T02:26:58.7793481Z  227 β”‚ β”‚       dispose: Effect.suspend(() =>
2026-10-25T02:26:58.7793575Z  228 β”‚ β”‚         Effect.forEach(
2026-10-25T02:26:58.7793677Z  229 β”‚ β”‚           [...connections.keys()],
2026-10-25T02:26:58.7793847Z  230 β”‚ β”‚           (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore),
2026-10-25T02:26:58.7793946Z  231 β”‚ β”‚           { discard: true },
2026-10-25T02:26:58.7794022Z  232 β”‚ β”‚         ),
2026-10-25T02:26:58.7794096Z  233 β”‚ β”‚       ),
2026-10-25T02:26:58.7794174Z  234 β”‚ β”‚     };
2026-10-25T02:26:58.7794302Z  235 β”‚ ╰─▢ });
2026-10-25T02:26:58.7794352Z      ╰────
2026-10-25T02:26:58.7794598Z   help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed.
2026-10-25T02:26:58.7794601Z
2026-10-25T02:26:58.7794806Z   ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used.
2026-10-25T02:26:58.7794944Z     ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10]
2026-10-25T02:26:58.7794995Z  21 β”‚
2026-10-25T02:26:58.7795151Z  22 β”‚ function summarizePayload(payload: unknown): Readonly<Record<string, unknown>> {
2026-10-25T02:26:58.7795236Z     Β·          ────────┬───────
2026-10-25T02:26:58.7795450Z     Β·                  ╰── 'summarizePayload' is declared here
2026-10-25T02:26:58.7795621Z  23 β”‚   if (payload === null) return { valueType: "null" };
2026-10-25T02:26:58.7795680Z     ╰────
2026-10-25T02:26:58.7795785Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7795787Z
2026-10-25T02:26:58.7796201Z   ⚠ 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-25T02:26:58.7796311Z     ╭─[packages/contracts/src/auth.test.ts:17:12]
2026-10-25T02:26:58.7796464Z  16 β”‚   it("decodes legacy review credentials without offering them in new grants", () => {
2026-10-25T02:26:58.7796627Z  17 β”‚     expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
2026-10-25T02:26:58.7796726Z     Β·            ────────────────────────
2026-10-25T02:26:58.7796798Z  18 β”‚       "review:write",
2026-10-25T02:26:58.7796850Z     ╰────
2026-10-25T02:26:58.7796853Z
2026-10-25T02:26:58.7797208Z   ⚠ 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-25T02:26:58.7797316Z     ╭─[packages/contracts/src/auth.test.ts:20:18]
2026-10-25T02:26:58.7797372Z  19 β”‚     ]);
2026-10-25T02:26:58.7797530Z  20 β”‚     expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
2026-10-25T02:26:58.7797636Z     Β·                  ────────────────────────
2026-10-25T02:26:58.7797764Z  21 β”‚     expect(AuthStandardClientScopes).not.toContain("review:write");
2026-10-25T02:26:58.7797814Z     ╰────
2026-10-25T02:26:58.7797816Z
2026-10-25T02:26:58.7798173Z   ⚠ 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-25T02:26:58.7798284Z     ╭─[packages/contracts/src/auth.test.ts:57:21]
2026-10-25T02:26:58.7798452Z  56 β”‚   it("ignores unknown response permissions without falling back to broader scopes", () => {
2026-10-25T02:26:58.7798574Z  57 β”‚     const session = Schema.decodeUnknownSync(AuthSessionState)({
2026-10-25T02:26:58.7798680Z     Β·                     ────────────────────────
2026-10-25T02:26:58.7798747Z  58 β”‚       authenticated: true,
2026-10-25T02:26:58.7798800Z     ╰────
2026-10-25T02:26:58.7798802Z
2026-10-25T02:26:58.7799012Z   ⚠ eslint(no-unused-vars): Identifier 'serverEnvironment' is imported but never used.
2026-10-25T02:26:58.7799141Z      ╭─[apps/web/src/components/LegacySidebar.tsx:210:40]
2026-10-25T02:26:58.7799297Z  209 β”‚ import { useClientSettings, updateClientSettings } from "~/hooks/useSettings";
2026-10-25T02:26:58.7799459Z  210 β”‚ import { primaryServerKeybindingsAtom, serverEnvironment } from "../state/server";
2026-10-25T02:26:58.7799573Z      Β·                                        ────────┬────────
2026-10-25T02:26:58.7799743Z      Β·                                                ╰── 'serverEnvironment' is imported here
2026-10-25T02:26:58.7799851Z  211 β”‚ import { appAtomRegistry } from "../rpc/atomRegistry";
2026-10-25T02:26:58.7799903Z      ╰────
2026-10-25T02:26:58.7799999Z   help: Consider removing this import.
2026-10-25T02:26:58.7800002Z
2026-10-25T02:26:58.7800254Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7800483Z      ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:388:7]
2026-10-25T02:26:58.7800586Z  383 β”‚   };
2026-10-25T02:26:58.7800686Z  384 β”‚   useEffect(() => {
2026-10-25T02:26:58.7800758Z      Β·   ────┬────
2026-10-25T02:26:58.7800886Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7800983Z  385 β”‚     if (!guidesEnabled && section === "guide") {
2026-10-25T02:26:58.7801077Z  386 β”‚       requestedSection.current = "overview";
2026-10-25T02:26:58.7801240Z  387 β”‚       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
2026-10-25T02:26:58.7801311Z  388 β”‚       setSection("overview");
2026-10-25T02:26:58.7801387Z      Β·       ─────┬────
2026-10-25T02:26:58.7801555Z      Β·            ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7801618Z  389 β”‚     }
2026-10-25T02:26:58.7801670Z      ╰────
2026-10-25T02:26:58.7802272Z   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-25T02:26:58.7802592Z   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-25T02:26:58.7802595Z
2026-10-25T02:26:58.7802798Z   ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-25T02:26:58.7802967Z      ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:390:6]
2026-10-25T02:26:58.7803065Z  385 β”‚     if (!guidesEnabled && section === "guide") {
2026-10-25T02:26:58.7803160Z  386 β”‚       requestedSection.current = "overview";
2026-10-25T02:26:58.7803242Z      Β·       ────────┬───────
2026-10-25T02:26:58.7803680Z      Β·               ╰── Missing dependency `requestedSection`. 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-25T02:26:58.7803840Z  387 β”‚       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
2026-10-25T02:26:58.7803985Z      Β·       ─────────┬─────────           ──────┬──────
2026-10-25T02:26:58.7804531Z      Β·                β”‚                          ╰── Missing dependency `scrollOffsets`. 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-25T02:26:58.7805054Z      Β·                ╰── Missing dependency `currentScrollOffset`. 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-25T02:26:58.7805128Z  388 β”‚       setSection("overview");
2026-10-25T02:26:58.7805182Z  389 β”‚     }
2026-10-25T02:26:58.7805272Z  390 β”‚   }, [guidesEnabled, section, insets.top]);
2026-10-25T02:26:58.7805382Z      Β·      ──────────────────┬─────────────────
2026-10-25T02:26:58.7805570Z      Β·                        ╰── This dependency list is missing values used by the callback
2026-10-25T02:26:58.7805654Z  391 β”‚   const tabContent = activityContent;
2026-10-25T02:26:58.7805709Z      ╰────
2026-10-25T02:26:58.7805899Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-25T02:26:58.7806239Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7806241Z
2026-10-25T02:26:58.7806425Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-25T02:26:58.7806594Z      ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70]
2026-10-25T02:26:58.7806675Z  554 β”‚           assert.deepStrictEqual(
2026-10-25T02:26:58.7806837Z  555 β”‚             (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-25T02:26:58.7806961Z      Β·                                                                      ┬
2026-10-25T02:26:58.7807122Z      Β·                                                                      ╰── '_' is declared here
2026-10-25T02:26:58.7807185Z  556 β”‚             [
2026-10-25T02:26:58.7807235Z      ╰────
2026-10-25T02:26:58.7807337Z   help: Consider removing this parameter.
2026-10-25T02:26:58.7807339Z
2026-10-25T02:26:58.7807518Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-25T02:26:58.7807689Z       ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1154:70]
2026-10-25T02:26:58.7807770Z  1153 β”‚           assert.deepStrictEqual(
2026-10-25T02:26:58.7807932Z  1154 β”‚             (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-25T02:26:58.7808057Z       Β·                                                                      ┬
2026-10-25T02:26:58.7808218Z       Β·                                                                      ╰── '_' is declared here
2026-10-25T02:26:58.7808280Z  1155 β”‚             [
2026-10-25T02:26:58.7808332Z       ╰────
2026-10-25T02:26:58.7808431Z   help: Consider removing this parameter.
2026-10-25T02:26:58.7808433Z
2026-10-25T02:26:58.7808621Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:26:58.7808784Z      ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:803:17]
2026-10-25T02:26:58.7808847Z  802 β”‚               <div
2026-10-25T02:26:58.7808959Z  803 β”‚                 key={`${index}:${check.name}:${check.url ?? ""}`}
2026-10-25T02:26:58.7809093Z      Β·                 ─────────────────────────────────────────────────
2026-10-25T02:26:58.7809319Z  804 β”‚                 className="group flex items-center gap-2 rounded-md pr-1 hover:bg-accent/60"
2026-10-25T02:26:58.7809401Z      ╰────
2026-10-25T02:26:58.7809590Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:26:58.7809593Z
2026-10-25T02:26:58.7809844Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7810001Z      ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
2026-10-25T02:26:58.7810165Z  112 β”‚   const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
2026-10-25T02:26:58.7810229Z  113 β”‚   useEffect(() => {
2026-10-25T02:26:58.7810298Z      Β·   ────┬────
2026-10-25T02:26:58.7810428Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7810596Z  114 β”‚     if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
2026-10-25T02:26:58.7810661Z  115 β”‚       return;
2026-10-25T02:26:58.7810713Z  116 β”‚     }
2026-10-25T02:26:58.7810829Z  117 β”‚     setEntry({ key: input.targetKey, location: candidate });
2026-10-25T02:26:58.7810898Z      Β·     ────┬───
2026-10-25T02:26:58.7811064Z      Β·         ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7811182Z  118 β”‚   }, [candidate, entry.key, entry.location, input.targetKey]);
2026-10-25T02:26:58.7811234Z      ╰────
2026-10-25T02:26:58.7811827Z   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-25T02:26:58.7812146Z   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-25T02:26:58.7812149Z
2026-10-25T02:26:58.7812607Z   ⚠ 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-25T02:26:58.7812754Z      ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11]
2026-10-25T02:26:58.7812883Z  132 β”‚               const monitor = yield* HostPowerMonitor.HostPowerMonitor;
2026-10-25T02:26:58.7813025Z  133 β”‚ ╭─▢           for (
2026-10-25T02:26:58.7813131Z  134 β”‚ β”‚               let attempt = 0;
2026-10-25T02:26:58.7813296Z  135 β”‚ β”‚               attempt < 100 && (yield* monitor.snapshot).onBattery !== "true";
2026-10-25T02:26:58.7813391Z  136 β”‚ β”‚               attempt += 1
2026-10-25T02:26:58.7813471Z  137 β”‚ β”‚             ) {
2026-10-25T02:26:58.7813583Z  138 β”‚ β”‚               yield* Effect.yieldNow;
2026-10-25T02:26:58.7813716Z  139 β”‚ ╰─▢           }
2026-10-25T02:26:58.7813838Z  140 β”‚               expect((yield* monitor.snapshot).onBattery).toBe("true");
2026-10-25T02:26:58.7813888Z      ╰────
2026-10-25T02:26:58.7813890Z
2026-10-25T02:26:58.7814085Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:26:58.7814301Z     ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15]
2026-10-25T02:26:58.7814409Z  71 β”‚             <Pressable
2026-10-25T02:26:58.7814507Z  72 β”‚               key={index}
2026-10-25T02:26:58.7814593Z     Β·               ───────────
2026-10-25T02:26:58.7814676Z  73 β”‚               accessibilityRole="button"
2026-10-25T02:26:58.7814724Z     ╰────
2026-10-25T02:26:58.7814868Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:26:58.7814870Z
2026-10-25T02:26:58.7815077Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-25T02:26:58.7815213Z     ╭─[packages/shared/src/composerContextLegacySend.ts:15:45]
2026-10-25T02:26:58.7815335Z  14 β”‚   const occurrences = collectComposerContextReferences(text);
2026-10-25T02:26:58.7815447Z  15 β”‚   for (const occurrence of [...occurrences].reverse()) {
2026-10-25T02:26:58.7815558Z     Β·                                             ───────
2026-10-25T02:26:58.7815668Z  16 β”‚     const record = recordsById.get(occurrence.contextId);
2026-10-25T02:26:58.7815716Z     ╰────
2026-10-25T02:26:58.7816008Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-25T02:26:58.7816011Z
2026-10-25T02:26:58.7816339Z   ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7816502Z       ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1424:7]
2026-10-25T02:26:58.7816555Z  1423 β”‚
2026-10-25T02:26:58.7816666Z  1424 β”‚ const layerCodexAppServerClientFactoryCommand = (
2026-10-25T02:26:58.7816786Z       Β·       ───────────────────┬───────────────────
2026-10-25T02:26:58.7816990Z       Β·                          ╰── 'layerCodexAppServerClientFactoryCommand' is declared here
2026-10-25T02:26:58.7817107Z  1425 β”‚   options: CodexClient.CodexAppServerClientOptions & {
2026-10-25T02:26:58.7817158Z       ╰────
2026-10-25T02:26:58.7817261Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7817264Z
2026-10-25T02:26:58.7817514Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7817673Z       ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1660:7]
2026-10-25T02:26:58.7817724Z  1659 β”‚
2026-10-25T02:26:58.7817795Z  1660 β”‚ const layer: Layer.Layer<
2026-10-25T02:26:58.7817866Z       Β·       ──┬──
2026-10-25T02:26:58.7817995Z       Β·         ╰── 'layer' is declared here
2026-10-25T02:26:58.7818089Z  1661 β”‚   ProviderAdapter.ProviderAdapterV2,
2026-10-25T02:26:58.7818139Z       ╰────
2026-10-25T02:26:58.7818240Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7818243Z
2026-10-25T02:26:58.7818493Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7818658Z      ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:641:5]
2026-10-25T02:26:58.7818710Z  636 β”‚
2026-10-25T02:26:58.7818775Z  637 β”‚   useEffect(() => {
2026-10-25T02:26:58.7818845Z      Β·   ────┬────
2026-10-25T02:26:58.7818970Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7819146Z  638 β”‚     if (pendingLaunchEntry.key === launchTargetKey) {
2026-10-25T02:26:58.7819250Z  639 β”‚       return;
2026-10-25T02:26:58.7819335Z  640 β”‚     }
2026-10-25T02:26:58.7819412Z  641 β”‚     setPendingLaunchEntry({
2026-10-25T02:26:58.7819498Z      Β·     ──────────┬──────────
2026-10-25T02:26:58.7819667Z      Β·               ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7819737Z  642 β”‚       key: launchTargetKey,
2026-10-25T02:26:58.7819787Z      ╰────
2026-10-25T02:26:58.7820379Z   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-25T02:26:58.7820701Z   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-25T02:26:58.7820706Z
2026-10-25T02:26:58.7820955Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7821119Z      ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:651:5]
2026-10-25T02:26:58.7821170Z  646 β”‚
2026-10-25T02:26:58.7821234Z  647 β”‚   useEffect(() => {
2026-10-25T02:26:58.7821304Z      Β·   ────┬────
2026-10-25T02:26:58.7821432Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7821544Z  648 β”‚     if (initialAttachGridEntry.key === launchTargetKey) {
2026-10-25T02:26:58.7821604Z  649 β”‚       return;
2026-10-25T02:26:58.7821660Z  650 β”‚     }
2026-10-25T02:26:58.7821744Z  651 β”‚     setInitialAttachGridEntry({
2026-10-25T02:26:58.7821837Z      Β·     ────────────┬────────────
2026-10-25T02:26:58.7822007Z      Β·                 ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7822076Z  652 β”‚       key: launchTargetKey,
2026-10-25T02:26:58.7822127Z      ╰────
2026-10-25T02:26:58.7822711Z   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-25T02:26:58.7823031Z   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-25T02:26:58.7823036Z
2026-10-25T02:26:58.7823286Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7823449Z      ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:744:7]
2026-10-25T02:26:58.7823500Z  741 β”‚
2026-10-25T02:26:58.7823562Z  742 β”‚   useEffect(() => {
2026-10-25T02:26:58.7823630Z      Β·   ────┬────
2026-10-25T02:26:58.7823756Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7823855Z  743 β”‚     if (!routeEnvironmentId || !routeThreadId) {
2026-10-25T02:26:58.7823923Z  744 β”‚       setLastGridSize({
2026-10-25T02:26:58.7824005Z      Β·       ───────┬───────
2026-10-25T02:26:58.7824232Z      Β·              ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7824376Z  745 β”‚         cols: DEFAULT_TERMINAL_COLS,
2026-10-25T02:26:58.7824446Z      ╰────
2026-10-25T02:26:58.7825029Z   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-25T02:26:58.7825464Z   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-25T02:26:58.7825467Z
2026-10-25T02:26:58.7825667Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:26:58.7825870Z      ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:536:24]
2026-10-25T02:26:58.7825928Z  535 β”‚     });
2026-10-25T02:26:58.7826050Z  536 β”‚   }, [terminal.buffer, terminal.buffer.length, terminalKey]);
2026-10-25T02:26:58.7826159Z      Β·                        ───────────┬──────────
2026-10-25T02:26:58.7826402Z      Β·                                   ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
2026-10-25T02:26:58.7826562Z  537 β”‚   const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
2026-10-25T02:26:58.7826612Z      ╰────
2026-10-25T02:26:58.7826901Z   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-25T02:26:58.7827215Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7827221Z
2026-10-25T02:26:58.7827417Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:26:58.7827581Z      ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:707:7]
2026-10-25T02:26:58.7827676Z  706 β”‚     sentInitialInputKeyRef.current = null;
2026-10-25T02:26:58.7827741Z  707 β”‚   }, [terminalKey]);
2026-10-25T02:26:58.7827817Z      Β·       ─────┬─────
2026-10-25T02:26:58.7827958Z      Β·            ╰── Unnecessary dependency `terminalKey`
2026-10-25T02:26:58.7828009Z  708 β”‚
2026-10-25T02:26:58.7828064Z      ╰────
2026-10-25T02:26:58.7828423Z   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-25T02:26:58.7828817Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7828820Z
2026-10-25T02:26:58.7829016Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:26:58.7829182Z      ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:798:52]
2026-10-25T02:26:58.7829237Z  797 β”‚     };
2026-10-25T02:26:58.7829412Z  798 β”‚   }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
2026-10-25T02:26:58.7829589Z      Β·                                                    ────────────┬────────────  ─────┬─────
2026-10-25T02:26:58.7829821Z      Β·                                                                β”‚                   ╰── Unnecessary dependency `terminalKey`
2026-10-25T02:26:58.7830030Z      Β·                                                                ╰── Unnecessary dependency `terminal.lifecycleVersion`
2026-10-25T02:26:58.7830080Z  799 β”‚
2026-10-25T02:26:58.7830131Z      ╰────
2026-10-25T02:26:58.7830416Z   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-25T02:26:58.7830719Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7830722Z
2026-10-25T02:26:58.7830864Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.7831034Z      ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:791:24]
2026-10-25T02:26:58.7831089Z  790 β”‚   }
2026-10-25T02:26:58.7831194Z  791 β”‚   const pasteSession = pasteSessionRef.current;
2026-10-25T02:26:58.7831305Z      Β·                        ───────────┬───────────
2026-10-25T02:26:58.7831462Z      Β·                                   ╰── Cannot access ref value during render
2026-10-25T02:26:58.7831515Z  792 β”‚
2026-10-25T02:26:58.7831567Z      ╰────
2026-10-25T02:26:58.7832026Z   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-25T02:26:58.7832315Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.7832321Z
2026-10-25T02:26:58.7832525Z   ⚠ eslint(no-unused-vars): Type 'PullRequestChecks' is imported but never used.
2026-10-25T02:26:58.7832687Z     ╭─[apps/web/src/components/pullRequest/pullRequestDetail.logic.ts:16:8]
2026-10-25T02:26:58.7832758Z  15 β”‚   type PullRequestCheck,
2026-10-25T02:26:58.7832827Z  16 β”‚   type PullRequestChecks,
2026-10-25T02:26:58.7832912Z     Β·        ────────┬────────
2026-10-25T02:26:58.7833058Z     Β·                ╰── 'PullRequestChecks' is imported here
2026-10-25T02:26:58.7833190Z  17 β”‚   type PullRequestChecksState as ContractPullRequestChecksState,
2026-10-25T02:26:58.7833241Z     ╰────
2026-10-25T02:26:58.7833337Z   help: Consider removing this import.
2026-10-25T02:26:58.7833340Z
2026-10-25T02:26:58.7833650Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7833893Z      ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7]
2026-10-25T02:26:58.7833945Z  118 β”‚
2026-10-25T02:26:58.7834008Z  119 β”‚   useEffect(() => {
2026-10-25T02:26:58.7834079Z      Β·   ────┬────
2026-10-25T02:26:58.7834204Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7834287Z  120 β”‚     if (orientationSettled) return;
2026-10-25T02:26:58.7834398Z  121 β”‚     const orientation = getNativeShowcaseOrientation();
2026-10-25T02:26:58.7834475Z  122 β”‚     if (orientation === null) {
2026-10-25T02:26:58.7834555Z  123 β”‚       setOrientationSettled(true);
2026-10-25T02:26:58.7834651Z      Β·       ──────────┬──────────
2026-10-25T02:26:58.7834821Z      Β·                 ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7834883Z  124 β”‚       return;
2026-10-25T02:26:58.7834935Z      ╰────
2026-10-25T02:26:58.7835523Z   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-25T02:26:58.7835872Z   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-25T02:26:58.7835877Z
2026-10-25T02:26:58.7836135Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7836305Z      ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:298:7]
2026-10-25T02:26:58.7836356Z  286 β”‚
2026-10-25T02:26:58.7836420Z  287 β”‚   useEffect(() => {
2026-10-25T02:26:58.7836488Z      Β·   ────┬────
2026-10-25T02:26:58.7836613Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7836671Z  288 β”‚     if (
2026-10-25T02:26:58.7836736Z  289 β”‚       scene === null ||
2026-10-25T02:26:58.7836811Z  290 β”‚       requestedScene === null ||
2026-10-25T02:26:58.7836888Z  291 β”‚       scene !== requestedScene ||
2026-10-25T02:26:58.7836953Z  292 β”‚       !hasFixture ||
2026-10-25T02:26:58.7837023Z  293 β”‚       !orientationSettled ||
2026-10-25T02:26:58.7837091Z  294 β”‚       !themeApplied ||
2026-10-25T02:26:58.7837210Z  295 β”‚       (scene === "agent-activity" && !agentActivityStaged) ||
2026-10-25T02:26:58.7837345Z  296 β”‚       !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
2026-10-25T02:26:58.7837398Z  297 β”‚     ) {
2026-10-25T02:26:58.7837468Z  298 β”‚       setReadyScene(null);
2026-10-25T02:26:58.7837545Z      Β·       ──────┬──────
2026-10-25T02:26:58.7837713Z      Β·             ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7837771Z  299 β”‚       return;
2026-10-25T02:26:58.7837824Z      ╰────
2026-10-25T02:26:58.7838411Z   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-25T02:26:58.7838793Z   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-25T02:26:58.7838828Z
2026-10-25T02:26:58.7839144Z   ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7839310Z      ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9]
2026-10-25T02:26:58.7839379Z  127 β”‚     let cancelled = false;
2026-10-25T02:26:58.7839470Z  128 β”‚     let lastOutcome: string | null = null;
2026-10-25T02:26:58.7839547Z      Β·         ─────┬─────
2026-10-25T02:26:58.7839679Z      Β·              ╰── 'lastOutcome' is declared here
2026-10-25T02:26:58.7839861Z  129 β”‚     void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
2026-10-25T02:26:58.7839912Z      ╰────
2026-10-25T02:26:58.7840016Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7840019Z
2026-10-25T02:26:58.7840255Z   Γ— t3code(no-low-value-comments): Cut this to 4 lines or fewer: keep the constraint, drop the background.
2026-10-25T02:26:58.7840397Z     ╭─[packages/shared/src/orchestrationV2DedupedBodies.ts:13:1]
2026-10-25T02:26:58.7840453Z  12 β”‚
2026-10-25T02:26:58.7840579Z  13 β”‚ ╭─▢ /**
2026-10-25T02:26:58.7840776Z  14 β”‚ β”‚    * A turn item repeats a body its record already carries: message text, checkpoint files, a
2026-10-25T02:26:58.7840977Z  15 β”‚ β”‚    * subagent's prompt and result. For clients that opt in, the server blanks the repeat and marks
2026-10-25T02:26:58.7841186Z  16 β”‚ β”‚    * the field (`textOmitted`, `filesOmitted`, `promptOmitted`, `resultOmitted`), and the client
2026-10-25T02:26:58.7841390Z  17 β”‚ β”‚    * copies the value back from the record it already holds. Only a body equal to the record's is
2026-10-25T02:26:58.7841500Z  18 β”‚ β”‚    * blanked, so the restore is exact.
2026-10-25T02:26:58.7841618Z  19 β”‚ ╰─▢  */
2026-10-25T02:26:58.7841707Z  20 β”‚     export interface DedupedBodySource {
2026-10-25T02:26:58.7841758Z     ╰────
2026-10-25T02:26:58.7841760Z
2026-10-25T02:26:58.7842013Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7842171Z     ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
2026-10-25T02:26:58.7842286Z  37 β”‚   const [initialized, setInitialized] = useState(false);
2026-10-25T02:26:58.7842356Z  38 β”‚   useLayoutEffect(() => {
2026-10-25T02:26:58.7842434Z     Β·   ───────┬───────
2026-10-25T02:26:58.7842562Z     Β·          ╰── This is the containing effect
2026-10-25T02:26:58.7842623Z  39 β”‚     reset();
2026-10-25T02:26:58.7842690Z  40 β”‚     setInitialized(true);
2026-10-25T02:26:58.7842767Z     Β·     ───────┬──────
2026-10-25T02:26:58.7842933Z     Β·            ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7842993Z  41 β”‚   }, [reset]);
2026-10-25T02:26:58.7843044Z     ╰────
2026-10-25T02:26:58.7843701Z   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-25T02:26:58.7844100Z   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-25T02:26:58.7844103Z
2026-10-25T02:26:58.7844353Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7844510Z     ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
2026-10-25T02:26:58.7844562Z  88 β”‚
2026-10-25T02:26:58.7844626Z  89 β”‚   useEffect(() => {
2026-10-25T02:26:58.7844693Z     Β·   ────┬────
2026-10-25T02:26:58.7844820Z     Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7844982Z  90 β”‚     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
2026-10-25T02:26:58.7845086Z  91 β”‚     const branchName = initialProjectRef.branch;
2026-10-25T02:26:58.7845149Z  92 β”‚     let active = true;
2026-10-25T02:26:58.7845244Z  93 β”‚     setPendingCheckouts((count) => count + 1);
2026-10-25T02:26:58.7845327Z     Β·     ─────────┬─────────
2026-10-25T02:26:58.7845493Z     Β·              ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7845643Z  94 β”‚     // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
2026-10-25T02:26:58.7845694Z     ╰────
2026-10-25T02:26:58.7846335Z   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-25T02:26:58.7846652Z   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-25T02:26:58.7846655Z
2026-10-25T02:26:58.7846835Z   ⚠ react(static-components): Cannot create components during render
2026-10-25T02:26:58.7846992Z      ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10]
2026-10-25T02:26:58.7847077Z  196 β”‚   const { onInput, onResize } = props;
2026-10-25T02:26:58.7847223Z  197 β”‚   const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView();
2026-10-25T02:26:58.7847351Z      Β·                                     ────────────────┬───────────────
2026-10-25T02:26:58.7847595Z      Β·                                                     ╰── The component is created during render here
2026-10-25T02:26:58.7847795Z  198 β”‚   const hasNativeSurface = Boolean(NativeTerminalSurfaceView);
2026-10-25T02:26:58.7847847Z  199 β”‚
2026-10-25T02:26:58.7847912Z  200 β”‚   useEffect(() => {
2026-10-25T02:26:58.7847998Z  201 β”‚     terminalDebugLog("native:surface", {
2026-10-25T02:26:58.7848084Z  202 β”‚       terminalKey: props.terminalKey,
2026-10-25T02:26:58.7848158Z  203 β”‚       native: hasNativeSurface,
2026-10-25T02:26:58.7848291Z  204 β”‚       hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(),
2026-10-25T02:26:58.7848372Z  205 β”‚       bufferLen: props.buffer.length,
2026-10-25T02:26:58.7848450Z  206 β”‚       isRunning: props.isRunning,
2026-10-25T02:26:58.7848505Z  207 β”‚     });
2026-10-25T02:26:58.7848667Z  208 β”‚   }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]);
2026-10-25T02:26:58.7848756Z  209 β”‚   const handleNativeInput = useCallback(
2026-10-25T02:26:58.7848869Z  210 β”‚     (event: NativeSyntheticEvent<TerminalInputEvent>) => {
2026-10-25T02:26:58.7848965Z  211 β”‚       if (!props.isRunning || props.readOnly) {
2026-10-25T02:26:58.7849026Z  212 β”‚         return;
2026-10-25T02:26:58.7849079Z  213 β”‚       }
2026-10-25T02:26:58.7849168Z  214 β”‚       terminalDebugLog("native:onInput", {
2026-10-25T02:26:58.7849315Z  215 β”‚         codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)),
2026-10-25T02:26:58.7849372Z  216 β”‚       });
2026-10-25T02:26:58.7849455Z  217 β”‚       onInput(event.nativeEvent.data);
2026-10-25T02:26:58.7849509Z  218 β”‚     },
2026-10-25T02:26:58.7849606Z  219 β”‚     [onInput, props.isRunning, props.readOnly],
2026-10-25T02:26:58.7849658Z  220 β”‚   );
2026-10-25T02:26:58.7849750Z  221 β”‚   const handleNativeResize = useCallback(
2026-10-25T02:26:58.7849865Z  222 β”‚     (event: NativeSyntheticEvent<TerminalResizeEvent>) => {
2026-10-25T02:26:58.7849927Z  223 β”‚       onResize({
2026-10-25T02:26:58.7850008Z  224 β”‚         cols: event.nativeEvent.cols,
2026-10-25T02:26:58.7850088Z  225 β”‚         rows: event.nativeEvent.rows,
2026-10-25T02:26:58.7850144Z  226 β”‚       });
2026-10-25T02:26:58.7850197Z  227 β”‚     },
2026-10-25T02:26:58.7850256Z  228 β”‚     [onResize],
2026-10-25T02:26:58.7850309Z  229 β”‚   );
2026-10-25T02:26:58.7850360Z  230 β”‚
2026-10-25T02:26:58.7850440Z  231 β”‚   if (NativeTerminalSurfaceView) {
2026-10-25T02:26:58.7850497Z  232 β”‚     return (
2026-10-25T02:26:58.7850574Z  233 β”‚       <View style={props.style}>
2026-10-25T02:26:58.7850652Z  234 β”‚         <NativeTerminalSurfaceView
2026-10-25T02:26:58.7850755Z      Β·          ────────────┬────────────
2026-10-25T02:26:58.7850916Z      Β·                      ╰── This component is created during render
2026-10-25T02:26:58.7851013Z  235 β”‚           appearanceScheme={themeAppearance}
2026-10-25T02:26:58.7851064Z      ╰────
2026-10-25T02:26:58.7851308Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-25T02:26:58.7851621Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-25T02:26:58.7851624Z
2026-10-25T02:26:58.7851875Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7852024Z      ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:410:5]
2026-10-25T02:26:58.7852075Z  408 β”‚
2026-10-25T02:26:58.7852206Z  409 β”‚   useEffect(() => {
2026-10-25T02:26:58.7852335Z      Β·   ────┬────
2026-10-25T02:26:58.7852485Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7852575Z  410 β”‚     setInspectorSelection((current) => {
2026-10-25T02:26:58.7852659Z      Β·     ──────────┬──────────
2026-10-25T02:26:58.7852828Z      Β·               ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7852929Z  411 β”‚       if (props.renderInspector === undefined) {
2026-10-25T02:26:58.7852979Z      ╰────
2026-10-25T02:26:58.7853570Z   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-25T02:26:58.7853888Z   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-25T02:26:58.7853890Z
2026-10-25T02:26:58.7854102Z   ⚠ react(no-unstable-nested-components): Do not define components during render.
2026-10-25T02:26:58.7854253Z      ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:538:24]
2026-10-25T02:26:58.7854410Z  537 β”‚       const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
2026-10-25T02:26:58.7854573Z  538 β”‚ ╭─▢   const GitInspector = () => (
2026-10-25T02:26:58.7854668Z  539 β”‚ β”‚       <GitOverviewSheet
2026-10-25T02:26:58.7854791Z  540 β”‚ β”‚         headerInset={inspectorHeaderInset}
2026-10-25T02:26:58.7854898Z  541 β”‚ β”‚         presentation="inspector"
2026-10-25T02:26:58.7855073Z  542 β”‚ β”‚         route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
2026-10-25T02:26:58.7855146Z  543 β”‚ β”‚       />
2026-10-25T02:26:58.7855273Z  544 β”‚ ╰─▢   );
2026-10-25T02:26:58.7855351Z  545 β”‚       const FilesInspector = () =>
2026-10-25T02:26:58.7855401Z      ╰────
2026-10-25T02:26:58.7855615Z   help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-25T02:26:58.7855618Z
2026-10-25T02:26:58.7855859Z   ⚠ react(no-unstable-nested-components): Do not define components during render.
2026-10-25T02:26:58.7856023Z      ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:545:26]
2026-10-25T02:26:58.7856083Z  544 β”‚       );
2026-10-25T02:26:58.7856244Z  545 β”‚ ╭─▢   const FilesInspector = () =>
2026-10-25T02:26:58.7856393Z  546 β”‚ β”‚       selectedThread !== null && selectedThreadCwd !== null ? (
2026-10-25T02:26:58.7856501Z  547 β”‚ β”‚         <ThreadFileNavigatorPane
2026-10-25T02:26:58.7856605Z  548 β”‚ β”‚           cwd={selectedThreadCwd}
2026-10-25T02:26:58.7856741Z  549 β”‚ β”‚           environmentId={selectedThread.environmentId}
2026-10-25T02:26:58.7856861Z  550 β”‚ β”‚           headerInset={inspectorHeaderInset}
2026-10-25T02:26:58.7857007Z  551 β”‚ β”‚           projectName={selectedThreadProject?.title ?? "Files"}
2026-10-25T02:26:58.7857229Z  552 β”‚ β”‚           selectedPath={null}
2026-10-25T02:26:58.7857436Z  553 β”‚ β”‚           onSelectFile={handleSelectInspectorFile}
2026-10-25T02:26:58.7857512Z  554 β”‚ β”‚         />
2026-10-25T02:26:58.7857647Z  555 β”‚ ╰─▢     ) : null;
2026-10-25T02:26:58.7857797Z  556 β”‚       const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
2026-10-25T02:26:58.7857845Z      ╰────
2026-10-25T02:26:58.7858059Z   help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-25T02:26:58.7858061Z
2026-10-25T02:26:58.7858317Z   ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts.
2026-10-25T02:26:58.7858462Z     ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14]
2026-10-25T02:26:58.7858614Z  11 β”‚       addEventListener(_type: string, listener: (event: { data: string }) => void) {
2026-10-25T02:26:58.7858689Z  12 β”‚         this.onmessage = listener;
2026-10-25T02:26:58.7858768Z     Β·              ─────────
2026-10-25T02:26:58.7858822Z  13 β”‚       }
2026-10-25T02:26:58.7858872Z     ╰────
2026-10-25T02:26:58.7859186Z   help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on<event>` replaces any previously registered handler.
2026-10-25T02:26:58.7859189Z
2026-10-25T02:26:58.7859392Z   ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-25T02:26:58.7859533Z     ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9]
2026-10-25T02:26:58.7859600Z  15 β”‚       constructor() {
2026-10-25T02:26:58.7859669Z  16 β”‚         source = this;
2026-10-25T02:26:58.7859742Z     Β·         ──────
2026-10-25T02:26:58.7859796Z  17 β”‚       }
2026-10-25T02:26:58.7859846Z     ╰────
2026-10-25T02:26:58.7860112Z   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-25T02:26:58.7860114Z
2026-10-25T02:26:58.7860295Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-25T02:26:58.7860400Z      ╭─[packages/shared/src/qrCode.ts:458:44]
2026-10-25T02:26:58.7860462Z  457 β”‚   ): Array<byte> {
2026-10-25T02:26:58.7860568Z  458 β”‚     let result: Array<byte> = divisor.map((_) => 0);
2026-10-25T02:26:58.7860667Z      Β·                                            ┬
2026-10-25T02:26:58.7860815Z      Β·                                            ╰── '_' is declared here
2026-10-25T02:26:58.7860886Z  459 β”‚     for (const b of data) {
2026-10-25T02:26:58.7860936Z      ╰────
2026-10-25T02:26:58.7861038Z   help: Consider removing this parameter.
2026-10-25T02:26:58.7861041Z
2026-10-25T02:26:58.7861287Z   ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used.
2026-10-25T02:26:58.7861464Z      ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:956:10]
2026-10-25T02:26:58.7861514Z  955 β”‚
2026-10-25T02:26:58.7861624Z  956 β”‚ function layerClaudeAgentSdkReplayQueryRunner(
2026-10-25T02:26:58.7861735Z      Β·          ──────────────────┬─────────────────
2026-10-25T02:26:58.7861930Z      Β·                            ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here
2026-10-25T02:26:58.7862096Z  957 β”‚   transcript: ClaudeAgentSdkReplayTranscript,
2026-10-25T02:26:58.7862181Z      ╰────
2026-10-25T02:26:58.7862327Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7862329Z
2026-10-25T02:26:58.7862580Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7862749Z        ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10520:7]
2026-10-25T02:26:58.7862802Z  10519 β”‚
2026-10-25T02:26:58.7862874Z  10520 β”‚ const layer: Layer.Layer<
2026-10-25T02:26:58.7862944Z        Β·       ──┬──
2026-10-25T02:26:58.7863067Z        Β·         ╰── 'layer' is declared here
2026-10-25T02:26:58.7863160Z  10521 β”‚   ProviderAdapter.ProviderAdapterV2,
2026-10-25T02:26:58.7863213Z        ╰────
2026-10-25T02:26:58.7863320Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7863325Z
2026-10-25T02:26:58.7863489Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-25T02:26:58.7863624Z      ╭─[apps/server/src/process/externalLauncher.test.ts:183:12]
2026-10-25T02:26:58.7863676Z  182 β”‚
2026-10-25T02:26:58.7863775Z  183 β”‚ for (const {} of ["darwin", "linux"] as const) {
2026-10-25T02:26:58.7863844Z      Β·            ──
2026-10-25T02:26:58.7863894Z  184 β”‚ }
2026-10-25T02:26:58.7863944Z      ╰────
2026-10-25T02:26:58.7864169Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-25T02:26:58.7864171Z
2026-10-25T02:26:58.7864332Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-25T02:26:58.7864471Z      ╭─[apps/server/src/process/externalLauncher.test.ts:186:12]
2026-10-25T02:26:58.7864524Z  185 β”‚
2026-10-25T02:26:58.7864588Z  186 β”‚ for (const {} of [
2026-10-25T02:26:58.7864656Z      Β·            ──
2026-10-25T02:26:58.7864744Z  187 β”‚   { kind: "browser", folderVerb: "none" },
2026-10-25T02:26:58.7864794Z      ╰────
2026-10-25T02:26:58.7865016Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-25T02:26:58.7865019Z
2026-10-25T02:26:58.7865183Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-25T02:26:58.7865526Z      ╭─[apps/server/src/process/externalLauncher.test.ts:308:12]
2026-10-25T02:26:58.7865577Z  307 β”‚
2026-10-25T02:26:58.7865702Z  308 β”‚ for (const {} of ["rejected", "spawn-error", "stalled"] as const) {
2026-10-25T02:26:58.7865775Z      Β·            ──
2026-10-25T02:26:58.7865864Z  309 β”‚ }
2026-10-25T02:26:58.7865915Z      ╰────
2026-10-25T02:26:58.7866137Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-25T02:26:58.7866139Z
2026-10-25T02:26:58.7866299Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-25T02:26:58.7866430Z      ╭─[apps/server/src/process/externalLauncher.test.ts:311:12]
2026-10-25T02:26:58.7866481Z  310 β”‚
2026-10-25T02:26:58.7866545Z  311 β”‚ for (const {} of [
2026-10-25T02:26:58.7866612Z      Β·            ──
2026-10-25T02:26:58.7866664Z  312 β”‚   {
2026-10-25T02:26:58.7866714Z      ╰────
2026-10-25T02:26:58.7867008Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-25T02:26:58.7867048Z
2026-10-25T02:26:58.7867362Z   ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-25T02:26:58.7867529Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:2143:15]
2026-10-25T02:26:58.7867595Z  2142 β”‚       assert.equal(
2026-10-25T02:26:58.7867744Z  2143 β”‚         items.filter((item) => item.type === "assistant_message").at(-1)?.text,
2026-10-25T02:26:58.7867824Z       Β·               ──────
2026-10-25T02:26:58.7867899Z  2144 β”‚         "authoritative answer",
2026-10-25T02:26:58.7867953Z       ╰────
2026-10-25T02:26:58.7868121Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-25T02:26:58.7868123Z
2026-10-25T02:26:58.7868594Z   ⚠ 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-25T02:26:58.7868764Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:4245:7]
2026-10-25T02:26:58.7868941Z  4244 β”‚           const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped);
2026-10-25T02:26:58.7869144Z  4245 β”‚ ╭─▢       while (!responseLifecycle.includes("failed")) {
2026-10-25T02:26:58.7869252Z  4246 β”‚ β”‚           yield* Effect.yieldNow;
2026-10-25T02:26:58.7869383Z  4247 β”‚ ╰─▢       }
2026-10-25T02:26:58.7869502Z  4248 β”‚           const responseExit = yield* Fiber.join(responseFiber);
2026-10-25T02:26:58.7869561Z       ╰────
2026-10-25T02:26:58.7869566Z
2026-10-25T02:26:58.7870022Z   ⚠ 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-25T02:26:58.7870187Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6355:9]
2026-10-25T02:26:58.7870274Z  6354 β”‚               .pipe(Effect.forkScoped);
2026-10-25T02:26:58.7870457Z  6355 β”‚ ╭─▢         while (promptGates.length < 1) {
2026-10-25T02:26:58.7870566Z  6356 β”‚ β”‚             yield* Effect.yieldNow;
2026-10-25T02:26:58.7870699Z  6357 β”‚ ╰─▢         }
2026-10-25T02:26:58.7870872Z  6358 β”‚             assert.isDefined(sessionUpdateHandler, "session update handler must be wired");
2026-10-25T02:26:58.7870925Z       ╰────
2026-10-25T02:26:58.7870927Z
2026-10-25T02:26:58.7871393Z   ⚠ 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-25T02:26:58.7871556Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6490:9]
2026-10-25T02:26:58.7871643Z  6489 β”‚               .pipe(Effect.forkScoped);
2026-10-25T02:26:58.7871821Z  6490 β”‚ ╭─▢         while (promptGates.length < 2) {
2026-10-25T02:26:58.7871929Z  6491 β”‚ β”‚             yield* Effect.yieldNow;
2026-10-25T02:26:58.7872121Z  6492 β”‚ ╰─▢         }
2026-10-25T02:26:58.7872378Z  6493 β”‚             if (sessionUpdateHandler === undefined || capturedMutation.current === null) {
2026-10-25T02:26:58.7872427Z       ╰────
2026-10-25T02:26:58.7872431Z
2026-10-25T02:26:58.7872882Z   ⚠ 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-25T02:26:58.7873048Z      ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7]
2026-10-25T02:26:58.7873149Z  565 β”‚           let afterSequence = created[0]!.sequence;
2026-10-25T02:26:58.7873337Z  566 β”‚ ╭─▢       for (let index = 1; index <= 32; index += 1) {
2026-10-25T02:26:58.7873441Z  567 β”‚ β”‚           const nextEvent = {
2026-10-25T02:26:58.7873600Z  568 β”‚ β”‚             id: EventId.make(`event:foundation-stream-race:${index}`),
2026-10-25T02:26:58.7873730Z  569 β”‚ β”‚             type: "thread.metadata-updated" as const,
2026-10-25T02:26:58.7873819Z  570 β”‚ β”‚             threadId,
2026-10-25T02:26:58.7873921Z  571 β”‚ β”‚             providerInstanceId,
2026-10-25T02:26:58.7874021Z  572 β”‚ β”‚             occurredAt: now,
2026-10-25T02:26:58.7874166Z  573 β”‚ β”‚             payload: { ...thread, title: `Race update ${index}` },
2026-10-25T02:26:58.7874291Z  574 β”‚ β”‚           } satisfies OrchestrationV2DomainEvent;
2026-10-25T02:26:58.7874402Z  575 β”‚ β”‚           const reader = yield* eventSink
2026-10-25T02:26:58.7874528Z  576 β”‚ β”‚             .stream({ threadId, afterSequence })
2026-10-25T02:26:58.7874660Z  577 β”‚ β”‚             .pipe(Stream.runHead, Effect.forkChild);
2026-10-25T02:26:58.7874764Z  578 β”‚ β”‚           yield* Effect.yieldNow;
2026-10-25T02:26:58.7874923Z  579 β”‚ β”‚           const written = yield* eventSink.write({ events: [nextEvent] });
2026-10-25T02:26:58.7875049Z  580 β”‚ β”‚           const received = yield* Fiber.join(reader);
2026-10-25T02:26:58.7875163Z  581 β”‚ β”‚           if (Option.isNone(received)) {
2026-10-25T02:26:58.7875360Z  582 β”‚ β”‚             return yield* Effect.die("The event stream ended before delivering the live event.");
2026-10-25T02:26:58.7875438Z  583 β”‚ β”‚           }
2026-10-25T02:26:58.7875595Z  584 β”‚ β”‚           assert.equal(received.value.sequence, written[0]?.sequence);
2026-10-25T02:26:58.7875744Z  585 β”‚ β”‚           assert.equal(received.value.event.id, nextEvent.id);
2026-10-25T02:26:58.7875906Z  586 β”‚ β”‚           afterSequence = received.value.sequence;
2026-10-25T02:26:58.7876042Z  587 β”‚ ╰─▢       }
2026-10-25T02:26:58.7876100Z  588 β”‚         }),
2026-10-25T02:26:58.7876155Z      ╰────
2026-10-25T02:26:58.7876157Z
2026-10-25T02:26:58.7876609Z   ⚠ 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-25T02:26:58.7876781Z       ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2324:9]
2026-10-25T02:26:58.7876856Z  2323 β”‚             let settled = false;
2026-10-25T02:26:58.7877076Z  2324 β”‚ ╭─▢         while (!settled) {
2026-10-25T02:26:58.7877316Z  2325 β”‚ β”‚             settled = (yield* outbox.listByCommandId(commandId)).every(
2026-10-25T02:26:58.7877448Z  2326 β”‚ β”‚               (effect) => effect.status === "succeeded",
2026-10-25T02:26:58.7877529Z  2327 β”‚ β”‚             );
2026-10-25T02:26:58.7877652Z  2328 β”‚ β”‚             if (!settled) yield* Effect.yieldNow;
2026-10-25T02:26:58.7877785Z  2329 β”‚ ╰─▢         }
2026-10-25T02:26:58.7877901Z  2330 β”‚           }).pipe(Effect.provide(layerWorker), Effect.scoped);
2026-10-25T02:26:58.7877952Z       ╰────
2026-10-25T02:26:58.7877954Z
2026-10-25T02:26:58.7878179Z   ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-25T02:26:58.7878304Z      ╭─[apps/server/src/terminal/Manager.test.ts:731:31]
2026-10-25T02:26:58.7878360Z  730 β”‚       );
2026-10-25T02:26:58.7878529Z  731 β”‚       const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot;
2026-10-25T02:26:58.7878624Z      Β·                               ──────
2026-10-25T02:26:58.7878736Z  732 β”‚       expect(snapshot?.history).toBe("aaπŸ˜€\rEND");
2026-10-25T02:26:58.7878788Z      ╰────
2026-10-25T02:26:58.7878957Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-25T02:26:58.7878959Z
2026-10-25T02:26:58.7879152Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:26:58.7879331Z     ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:84:15]
2026-10-25T02:26:58.7879399Z  83 β”‚             <li
2026-10-25T02:26:58.7879487Z  84 β”‚               key={`${index}:${check.name}`}
2026-10-25T02:26:58.7879596Z     Β·               ──────────────────────────────
2026-10-25T02:26:58.7879744Z  85 β”‚               className="col-span-full grid grid-cols-subgrid items-center text-xs"
2026-10-25T02:26:58.7879795Z     ╰────
2026-10-25T02:26:58.7879941Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:26:58.7879944Z
2026-10-25T02:26:58.7880142Z   ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used.
2026-10-25T02:26:58.7880235Z     ╭─[apps/web/src/types.ts:22:3]
2026-10-25T02:26:58.7880306Z  21 β”‚   EnvironmentThreadShell,
2026-10-25T02:26:58.7880372Z  22 β”‚   ThreadRunSummary,
2026-10-25T02:26:58.7880512Z     Β·   ────────┬───────
2026-10-25T02:26:58.7880731Z     Β·           ╰── 'ThreadRunSummary' is imported here
2026-10-25T02:26:58.7880803Z  23 β”‚   ThreadRuntimeSummary,
2026-10-25T02:26:58.7880853Z     ╰────
2026-10-25T02:26:58.7880949Z   help: Consider removing this import.
2026-10-25T02:26:58.7880952Z
2026-10-25T02:26:58.7881162Z   ⚠ react(no-unstable-nested-components): Do not define components during render.
2026-10-25T02:26:58.7881263Z       ╭─[apps/mobile/src/Stack.tsx:1062:21]
2026-10-25T02:26:58.7881327Z  1061 β”‚     <Navigator
2026-10-25T02:26:58.7881455Z  1062 β”‚       screenLayout={(props) => <GuardedScreenLayout {...props} />}
2026-10-25T02:26:58.7881592Z       Β·                     ─────────────────────────────────────────────
2026-10-25T02:26:58.7881674Z  1063 β”‚       screenOptions={({ route }) =>
2026-10-25T02:26:58.7881733Z       ╰────
2026-10-25T02:26:58.7882091Z   help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true.
2026-10-25T02:26:58.7882096Z
2026-10-25T02:26:58.7882547Z   ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-25T02:26:58.7882673Z      ╭─[packages/effect-acp/src/errors.test.ts:129:28]
2026-10-25T02:26:58.7882765Z  128 β”‚       const secret = "acp-summary-secret";
2026-10-25T02:26:58.7882875Z  129 β”‚       const cause = yield* Schema.decodeUnknownEffect(
2026-10-25T02:26:58.7882988Z      Β·                            ──────────────────────────
2026-10-25T02:26:58.7883064Z  130 β”‚         Schema.Struct({
2026-10-25T02:26:58.7883119Z      ╰────
2026-10-25T02:26:58.7883122Z
2026-10-25T02:26:58.7883387Z   ⚠ eslint(no-unused-vars): Variable 'navigation' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7883551Z     ╭─[apps/mobile/src/features/workspace/WorkspaceSidebarTabs.ios.tsx:32:9]
2026-10-25T02:26:58.7883697Z  31 β”‚   const tabs = [...visibleNavigationTabs(order, hidden), "settings" as const];
2026-10-25T02:26:58.7883779Z  32 β”‚   const navigation = useNavigation();
2026-10-25T02:26:58.7883855Z     Β·         ─────┬────
2026-10-25T02:26:58.7883987Z     Β·              ╰── 'navigation' is declared here
2026-10-25T02:26:58.7884080Z  33 β”‚   const selectTab = useSelectWorkspaceTab();
2026-10-25T02:26:58.7884131Z     ╰────
2026-10-25T02:26:58.7884241Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7884246Z
2026-10-25T02:26:58.7884499Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7884684Z      ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
2026-10-25T02:26:58.7884739Z  104 β”‚
2026-10-25T02:26:58.7884804Z  105 β”‚   useEffect(() => {
2026-10-25T02:26:58.7884877Z      Β·   ────┬────
2026-10-25T02:26:58.7885004Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7885083Z  106 β”‚     clearReviewCommentTarget();
2026-10-25T02:26:58.7885179Z  107 β”‚     setPendingNativeCommentSelection(null);
2026-10-25T02:26:58.7885280Z      Β·     ────────────────┬───────────────
2026-10-25T02:26:58.7885534Z      Β·                     ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7885676Z  108 β”‚   }, [selectedSection?.id]);
2026-10-25T02:26:58.7885754Z      ╰────
2026-10-25T02:26:58.7886389Z   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-25T02:26:58.7886707Z   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-25T02:26:58.7886710Z
2026-10-25T02:26:58.7886966Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7887150Z      ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
2026-10-25T02:26:58.7887204Z  109 β”‚
2026-10-25T02:26:58.7887267Z  110 β”‚   useEffect(() => {
2026-10-25T02:26:58.7887336Z      Β·   ────┬────
2026-10-25T02:26:58.7887463Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7887551Z  111 β”‚     if (activeCommentTarget === null) {
2026-10-25T02:26:58.7887649Z  112 β”‚       setPendingNativeCommentSelection(null);
2026-10-25T02:26:58.7887756Z      Β·       ────────────────┬───────────────
2026-10-25T02:26:58.7887934Z      Β·                       ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7887990Z  113 β”‚     }
2026-10-25T02:26:58.7888039Z      ╰────
2026-10-25T02:26:58.7888632Z   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-25T02:26:58.7888952Z   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-25T02:26:58.7888954Z
2026-10-25T02:26:58.7889153Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:26:58.7889337Z      ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
2026-10-25T02:26:58.7889433Z  107 β”‚     setPendingNativeCommentSelection(null);
2026-10-25T02:26:58.7889512Z  108 β”‚   }, [selectedSection?.id]);
2026-10-25T02:26:58.7889601Z      Β·       ─────────┬─────────
2026-10-25T02:26:58.7889760Z      Β·                ╰── Unnecessary dependency `selectedSection?.id`
2026-10-25T02:26:58.7889810Z  109 β”‚
2026-10-25T02:26:58.7889862Z      ╰────
2026-10-25T02:26:58.7890154Z   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-25T02:26:58.7890459Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7890462Z
2026-10-25T02:26:58.7890690Z   ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-25T02:26:58.7890920Z      ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:262:9]
2026-10-25T02:26:58.7891028Z  261 β”‚ ): boolean {
2026-10-25T02:26:58.7891215Z  262 β”‚   const labels = entry.labels.map((label) => label.name.trim().toLowerCase());
2026-10-25T02:26:58.7891374Z      Β·         ─────────────────────────────────────────────────────────────────────
2026-10-25T02:26:58.7891518Z  263 β”‚   const holds = (label: string) => labels.includes(label.trim().toLowerCase());
2026-10-25T02:26:58.7891571Z      ╰────
2026-10-25T02:26:58.7891649Z   help: Switch to `Set`
2026-10-25T02:26:58.7891652Z
2026-10-25T02:26:58.7892020Z   ⚠ 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-25T02:26:58.7892136Z       ╭─[packages/effect-acp/src/client.ts:1270:11]
2026-10-25T02:26:58.7892289Z  1269 β”‚         extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
2026-10-25T02:26:58.7892464Z  1270 β”‚           Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
2026-10-25T02:26:58.7892569Z       Β·           ──────────────────────────
2026-10-25T02:26:58.7892713Z  1271 β”‚             Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
2026-10-25T02:26:58.7892763Z       ╰────
2026-10-25T02:26:58.7892766Z
2026-10-25T02:26:58.7893218Z   ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-25T02:26:58.7893343Z      ╭─[packages/effect-acp/src/protocol.test.ts:500:31]
2026-10-25T02:26:58.7893396Z  499 β”‚
2026-10-25T02:26:58.7893513Z  500 β”‚       const response = yield* Schema.decodeUnknownEffect(
2026-10-25T02:26:58.7893633Z      Β·                               ──────────────────────────
2026-10-25T02:26:58.7893741Z  501 β”‚         Schema.fromJsonString(JsonRpcErrorResponse),
2026-10-25T02:26:58.7893792Z      ╰────
2026-10-25T02:26:58.7893795Z
2026-10-25T02:26:58.7894045Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7894218Z     ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:59:5]
2026-10-25T02:26:58.7894271Z  49 β”‚
2026-10-25T02:26:58.7894338Z  50 β”‚   useEffect(() => {
2026-10-25T02:26:58.7894406Z     Β·   ────┬────
2026-10-25T02:26:58.7894532Z     Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7894688Z  51 β”‚     traceDiffHighlight("viewport-reset", {
2026-10-25T02:26:58.7894841Z  52 β”‚       reset: diffHighlightTraceId(resetKey),
2026-10-25T02:26:58.7894922Z  53 β”‚       enabled,
2026-10-25T02:26:58.7894989Z  54 β”‚       rows: rows.length,
2026-10-25T02:26:58.7895045Z  55 β”‚     });
2026-10-25T02:26:58.7895135Z  56 β”‚     const previousRange = scheduler.reset();
2026-10-25T02:26:58.7895229Z  57 β”‚     highlightedRowIdsRef.current = new Set();
2026-10-25T02:26:58.7895315Z  58 β”‚     pendingPatchesRef.current = [];
2026-10-25T02:26:58.7895424Z  59 β”‚     setViewport({ scope: viewportScope, range: null });
2026-10-25T02:26:58.7895499Z     Β·     ─────┬─────
2026-10-25T02:26:58.7895664Z     Β·          ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7895778Z  60 β”‚     setTokensPatchJson(createEmptyTokenPatch(resetKey));
2026-10-25T02:26:58.7895844Z     ╰────
2026-10-25T02:26:58.7896486Z   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-25T02:26:58.7896804Z   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-25T02:26:58.7896808Z
2026-10-25T02:26:58.7896998Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:26:58.7897148Z      ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
2026-10-25T02:26:58.7897255Z  222 β”‚               ? snippetTokens.map((line, lineIndex) => (
2026-10-25T02:26:58.7897354Z  223 β”‚                   <NativeText key={lineIndex}>
2026-10-25T02:26:58.7897460Z      Β·                               ───────────────
2026-10-25T02:26:58.7897554Z  224 β”‚                     {lineIndex > 0 ? "\n" : ""}
2026-10-25T02:26:58.7897608Z      ╰────
2026-10-25T02:26:58.7897757Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:26:58.7897760Z
2026-10-25T02:26:58.7897948Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:26:58.7898096Z      ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25]
2026-10-25T02:26:58.7898172Z  226 β”‚                       <NativeText
2026-10-25T02:26:58.7898257Z  227 β”‚                         key={tokenIndex}
2026-10-25T02:26:58.7898358Z      Β·                         ────────────────
2026-10-25T02:26:58.7898438Z  228 β”‚                         style={{
2026-10-25T02:26:58.7898492Z      ╰────
2026-10-25T02:26:58.7898636Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:26:58.7898638Z
2026-10-25T02:26:58.7898918Z   ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-25T02:26:58.7899084Z      ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:469:19]
2026-10-25T02:26:58.7899146Z  468 β”‚   onFilters,
2026-10-25T02:26:58.7899215Z  469 β”‚   authorOptions = [],
2026-10-25T02:26:58.7899289Z      Β·                   ──
2026-10-25T02:26:58.7899357Z  470 β”‚   labelOptions = [],
2026-10-25T02:26:58.7899409Z      ╰────
2026-10-25T02:26:58.7899790Z   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-25T02:26:58.7899822Z
2026-10-25T02:26:58.7900150Z   ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-25T02:26:58.7900314Z      ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:470:18]
2026-10-25T02:26:58.7900381Z  469 β”‚   authorOptions = [],
2026-10-25T02:26:58.7900449Z  470 β”‚   labelOptions = [],
2026-10-25T02:26:58.7900527Z      Β·                  ──
2026-10-25T02:26:58.7900591Z  471 β”‚   optionScope,
2026-10-25T02:26:58.7900643Z      ╰────
2026-10-25T02:26:58.7900953Z   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-25T02:26:58.7900956Z
2026-10-25T02:26:58.7901413Z   ⚠ 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-25T02:26:58.7901539Z     ╭─[packages/contracts/src/baseSchemas.test.ts:39:9]
2026-10-25T02:26:58.7901606Z  38 β”‚       JSON.stringify(
2026-10-25T02:26:58.7901724Z  39 β”‚         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
2026-10-25T02:26:58.7901823Z     Β·         ────────────────────────
2026-10-25T02:26:58.7901887Z  40 β”‚           { name: "a" },
2026-10-25T02:26:58.7901939Z     ╰────
2026-10-25T02:26:58.7901941Z
2026-10-25T02:26:58.7902139Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:26:58.7902303Z      ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33]
2026-10-25T02:26:58.7902400Z  113 β”‚     return () => cancelAnimationFrame(frame);
2026-10-25T02:26:58.7902497Z  114 β”‚   }, [restoreSearch, tabActive, bottomSearch]);
2026-10-25T02:26:58.7902603Z      Β·                                 ──────┬─────
2026-10-25T02:26:58.7902771Z      Β·                                       ╰── Unnecessary dependency `bottomSearch`
2026-10-25T02:26:58.7902873Z  115 β”‚   const composeButton = nativeToolbarCompose ? (
2026-10-25T02:26:58.7902924Z      ╰────
2026-10-25T02:26:58.7903218Z   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-25T02:26:58.7903532Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7903537Z
2026-10-25T02:26:58.7903737Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:26:58.7903869Z      ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7]
2026-10-25T02:26:58.7903953Z  453 β”‚     showAuxiliaryPane("inspector");
2026-10-25T02:26:58.7904061Z  454 β”‚   }, [environmentId, showAuxiliaryPane, threadId]);
2026-10-25T02:26:58.7904204Z      Β·       ──────┬──────                     ────┬───
2026-10-25T02:26:58.7904399Z      Β·             β”‚                               ╰── Unnecessary dependency `threadId`
2026-10-25T02:26:58.7904549Z      Β·             ╰── Unnecessary dependency `environmentId`
2026-10-25T02:26:58.7904610Z  455 β”‚   const {
2026-10-25T02:26:58.7904725Z      ╰────
2026-10-25T02:26:58.7905093Z   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-25T02:26:58.7905531Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7905534Z
2026-10-25T02:26:58.7905725Z   ⚠ react(static-components): Cannot create components during render
2026-10-25T02:26:58.7905892Z      ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:722:20]
2026-10-25T02:26:58.7906050Z  489 β”‚   // Expo may return null before registration or in older binaries; use the fallback.
2026-10-25T02:26:58.7906174Z  490 β”‚   const NativeReviewDiffView = resolveNativeReviewDiffView();
2026-10-25T02:26:58.7906299Z      Β·                                ─────────────┬─────────────
2026-10-25T02:26:58.7906480Z      Β·                                             ╰── The component is created during render here
2026-10-25T02:26:58.7906632Z  491 β”‚   const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
2026-10-25T02:26:58.7906750Z  492 β”‚   const showcasedReviewDrawRef = useRef<string | null>(null);
2026-10-25T02:26:58.7906882Z  493 β”‚   const [isPullRefreshing, setIsPullRefreshing] = useState(false);
2026-10-25T02:26:58.7906976Z  494 β”‚   const handlePullToRefresh = async () => {
2026-10-25T02:26:58.7907054Z  495 β”‚     setIsPullRefreshing(true);
2026-10-25T02:26:58.7907137Z  496 β”‚     await refreshSelectedSection();
2026-10-25T02:26:58.7907213Z  497 β”‚     setIsPullRefreshing(false);
2026-10-25T02:26:58.7907268Z  498 β”‚   };
2026-10-25T02:26:58.7907416Z  499 β”‚   const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
2026-10-25T02:26:58.7907557Z  500 β”‚   const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
2026-10-25T02:26:58.7907663Z  501 β”‚   const fileVisibility = useReviewFileVisibility({
2026-10-25T02:26:58.7907751Z  502 β”‚     threadKey: reviewCache.threadKey,
2026-10-25T02:26:58.7907842Z  503 β”‚     sectionId: selectedSection?.id ?? null,
2026-10-25T02:26:58.7907908Z  504 β”‚     files: reviewFiles,
2026-10-25T02:26:58.7908010Z  505 β”‚     cachedExpandedFileIds: selectedSection?.id
2026-10-25T02:26:58.7908140Z  506 β”‚       ? reviewCache.expandedFileIdsBySection[selectedSection.id]
2026-10-25T02:26:58.7908206Z  507 β”‚       : undefined,
2026-10-25T02:26:58.7908298Z  508 β”‚     cachedViewedFileIds: selectedSection?.id
2026-10-25T02:26:58.7908424Z  509 β”‚       ? reviewCache.viewedFileIdsBySection[selectedSection.id]
2026-10-25T02:26:58.7908487Z  510 β”‚       : undefined,
2026-10-25T02:26:58.7908549Z  511 β”‚   });
2026-10-25T02:26:58.7908739Z  512 β”‚   const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
2026-10-25T02:26:58.7908870Z  513 β”‚   const commentSelection = useReviewCommentSelectionController({
2026-10-25T02:26:58.7908934Z  514 β”‚     environmentId,
2026-10-25T02:26:58.7908995Z  515 β”‚     threadId,
2026-10-25T02:26:58.7909058Z  516 β”‚     selectedSection,
2026-10-25T02:26:58.7909129Z  517 β”‚     nativeReviewDiffData,
2026-10-25T02:26:58.7909184Z  518 β”‚   });
2026-10-25T02:26:58.7909289Z  519 β”‚   const nativeBridge = useNativeReviewDiffBridge({
2026-10-25T02:26:58.7909373Z  520 β”‚     threadKey: reviewCache.threadKey,
2026-10-25T02:26:58.7909461Z  521 β”‚     sectionId: selectedSection?.id ?? null,
2026-10-25T02:26:58.7909540Z  522 β”‚     diff: selectedSection?.diff,
2026-10-25T02:26:58.7909697Z  523 β”‚     data: nativeReviewDiffData,
2026-10-25T02:26:58.7909818Z  524 β”‚     collapsedFileIds,
2026-10-25T02:26:58.7909916Z  525 β”‚     viewedFileIds,
2026-10-25T02:26:58.7910031Z  526 β”‚     selectedRowIds: commentSelection.selectedRowIds,
2026-10-25T02:26:58.7910126Z  527 β”‚     canHighlight: parsedDiff.kind === "files",
2026-10-25T02:26:58.7910181Z  528 β”‚   });
2026-10-25T02:26:58.7910254Z  529 β”‚   const showcaseReviewKey =
2026-10-25T02:26:58.7911898Z  530 β”‚     SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
2026-10-25T02:26:58.7912109Z  531 β”‚       ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
2026-10-25T02:26:58.7912170Z  532 β”‚       : null;
2026-10-25T02:26:58.7912335Z  533 β”‚   const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
2026-10-25T02:26:58.7912411Z  534 β”‚     nativeBridge.onDebug(event);
2026-10-25T02:26:58.7912474Z  535 β”‚     if (
2026-10-25T02:26:58.7912554Z  536 β”‚       showcaseReviewKey === null ||
2026-10-25T02:26:58.7912674Z  537 β”‚       showcasedReviewDrawRef.current === showcaseReviewKey ||
2026-10-25T02:26:58.7912784Z  538 β”‚       !isNativeReviewDiffDrawEvent(event.nativeEvent)
2026-10-25T02:26:58.7912838Z  539 β”‚     ) {
2026-10-25T02:26:58.7912897Z  540 β”‚       return;
2026-10-25T02:26:58.7912950Z  541 β”‚     }
2026-10-25T02:26:58.7913061Z  542 β”‚     showcasedReviewDrawRef.current = showcaseReviewKey;
2026-10-25T02:26:58.7913221Z  543 β”‚     reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
2026-10-25T02:26:58.7913274Z  544 β”‚   };
2026-10-25T02:26:58.7913325Z  545 β”‚
2026-10-25T02:26:58.7913442Z  546 β”‚   const handleSelectFile = async (fileId: string | null) => {
2026-10-25T02:26:58.7913520Z  547 β”‚     loadVisibleFile(fileId, true);
2026-10-25T02:26:58.7913613Z  548 β”‚     commentSelection.clearSelection();
2026-10-25T02:26:58.7913735Z  549 β”‚     if (fileId !== null && collapsedFileIds.includes(fileId)) {
2026-10-25T02:26:58.7913813Z  550 β”‚       toggleExpandedFile(fileId);
2026-10-25T02:26:58.7913865Z  551 β”‚     }
2026-10-25T02:26:58.7913975Z  552 β”‚     const nativeView = nativeReviewDiffViewRef.current;
2026-10-25T02:26:58.7914045Z  553 β”‚     if (!nativeView) return;
2026-10-25T02:26:58.7914136Z  554 β”‚     const result = await settlePromise(() =>
2026-10-25T02:26:58.7914308Z  555 β”‚       fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
2026-10-25T02:26:58.7914362Z  556 β”‚     );
2026-10-25T02:26:58.7914450Z  557 β”‚     if (AsyncResult.isFailure(result)) {
2026-10-25T02:26:58.7914626Z  558 β”‚       console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
2026-10-25T02:26:58.7914680Z  559 β”‚     }
2026-10-25T02:26:58.7914737Z  560 β”‚   };
2026-10-25T02:26:58.7914820Z  561 β”‚   const handleVisibleFileChange = (
2026-10-25T02:26:58.7914948Z  562 β”‚     event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
2026-10-25T02:26:58.7915008Z  563 β”‚   ) => {
2026-10-25T02:26:58.7915116Z  564 β”‚     loadVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-25T02:26:58.7915282Z  565 β”‚     reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-25T02:26:58.7915334Z  566 β”‚   };
2026-10-25T02:26:58.7915412Z  567 β”‚   const renderInspector = () => (
2026-10-25T02:26:58.7915480Z  568 β”‚     <ReviewFileNavigator
2026-10-25T02:26:58.7915560Z  569 β”‚       ref={reviewFileNavigatorRef}
2026-10-25T02:26:58.7915647Z  570 β”‚       files={nativeReviewDiffData.files}
2026-10-25T02:26:58.7915721Z  571 β”‚       headerInset={insets.top}
2026-10-25T02:26:58.7915811Z  572 β”‚       sectionId={selectedSection?.id ?? null}
2026-10-25T02:26:58.7916054Z  573 β”‚       onSelectFile={(fileId) => void handleSelectFile(fileId)}
2026-10-25T02:26:58.7916146Z  574 β”‚     />
2026-10-25T02:26:58.7916230Z  575 β”‚   );
2026-10-25T02:26:58.7916299Z  576 β”‚
2026-10-25T02:26:58.7916480Z  577 β”‚   const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
2026-10-25T02:26:58.7916564Z  578 β”‚     const { fileId } = event.nativeEvent;
2026-10-25T02:26:58.7916627Z  579 β”‚     if (fileId) {
2026-10-25T02:26:58.7916707Z  580 β”‚       loadVisibleFile(fileId, true);
2026-10-25T02:26:58.7916785Z  581 β”‚       toggleExpandedFile(fileId);
2026-10-25T02:26:58.7916836Z  582 β”‚     }
2026-10-25T02:26:58.7916889Z  583 β”‚   };
2026-10-25T02:26:58.7916940Z  584 β”‚
2026-10-25T02:26:58.7917027Z  585 β”‚   const handleNativeToggleViewedFile = (
2026-10-25T02:26:58.7917145Z  586 β”‚     event: NativeSyntheticEvent<{ readonly fileId?: string }>,
2026-10-25T02:26:58.7917205Z  587 β”‚   ) => {
2026-10-25T02:26:58.7917293Z  588 β”‚     const { fileId } = event.nativeEvent;
2026-10-25T02:26:58.7917352Z  589 β”‚     if (fileId) {
2026-10-25T02:26:58.7917427Z  590 β”‚       toggleViewedFile(fileId);
2026-10-25T02:26:58.7917480Z  591 β”‚     }
2026-10-25T02:26:58.7917533Z  592 β”‚   };
2026-10-25T02:26:58.7917584Z  593 β”‚
2026-10-25T02:26:58.7917655Z  594 β”‚   const parsedDiffNotice =
2026-10-25T02:26:58.7917813Z  595 β”‚     parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
2026-10-25T02:26:58.7917933Z  596 β”‚   const hasCachedSelectedDiff = selectedSection?.diff != null;
2026-10-25T02:26:58.7918085Z  597 β”‚   const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
2026-10-25T02:26:58.7918204Z  598 β”‚   const sectionMenu = buildReviewSectionMenu(reviewSections);
2026-10-25T02:26:58.7918366Z  599 β”‚   const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
2026-10-25T02:26:58.7918478Z  600 β”‚     hasEnvironmentPresentation: environment.isReady,
2026-10-25T02:26:58.7918577Z  601 β”‚     isEnvironmentConnected: isEnvironmentReady,
2026-10-25T02:26:58.7918648Z  602 β”‚     hasCachedSelectedDiff,
2026-10-25T02:26:58.7918713Z  603 β”‚     hasAnyCachedDiff,
2026-10-25T02:26:58.7918766Z  604 β”‚   });
2026-10-25T02:26:58.7918852Z  605 β”‚   const handleRetryEnvironment = () => {
2026-10-25T02:26:58.7918939Z  606 β”‚     void retryEnvironment(environmentId);
2026-10-25T02:26:58.7918992Z  607 β”‚   };
2026-10-25T02:26:58.7919074Z  608 β”‚   const handleReturnToThread = () => {
2026-10-25T02:26:58.7919151Z  609 β”‚     if (navigation.canGoBack()) {
2026-10-25T02:26:58.7919221Z  610 β”‚       navigation.goBack();
2026-10-25T02:26:58.7919281Z  611 β”‚       return;
2026-10-25T02:26:58.7919332Z  612 β”‚     }
2026-10-25T02:26:58.7919417Z  613 β”‚     navigation.navigate("Thread", {
2026-10-25T02:26:58.7919509Z  614 β”‚       environmentId: String(environmentId),
2026-10-25T02:26:58.7919584Z  615 β”‚       threadId: String(threadId),
2026-10-25T02:26:58.7919637Z  616 β”‚     });
2026-10-25T02:26:58.7919689Z  617 β”‚   };
2026-10-25T02:26:58.7919765Z  618 β”‚   const androidHeaderSubtitle = [
2026-10-25T02:26:58.7919837Z  619 β”‚     selectedSection?.title,
2026-10-25T02:26:58.7919917Z  620 β”‚     headerDiffSummary.additions,
2026-10-25T02:26:58.7919994Z  621 β”‚     headerDiffSummary.deletions,
2026-10-25T02:26:58.7920046Z  622 β”‚   ]
2026-10-25T02:26:58.7920150Z  623 β”‚     .filter((part): part is string => Boolean(part))
2026-10-25T02:26:58.7920212Z  624 β”‚     .join(" Β· ");
2026-10-25T02:26:58.7920263Z  625 β”‚
2026-10-25T02:26:58.7920341Z  626 β”‚   const showChangedFilesPane =
2026-10-25T02:26:58.7920479Z  627 β”‚     !showConnectionNotice &&
2026-10-25T02:26:58.7920607Z  628 β”‚     selectedSection !== null &&
2026-10-25T02:26:58.7920713Z  629 β”‚     parsedDiff.kind === "files" &&
2026-10-25T02:26:58.7920792Z  630 β”‚     NativeReviewDiffView !== null;
2026-10-25T02:26:58.7920960Z  631 β”‚   useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
2026-10-25T02:26:58.7921130Z  632 β”‚   const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
2026-10-25T02:26:58.7921183Z  633 β”‚
2026-10-25T02:26:58.7921254Z  634 β”‚   const listHeader = (() => {
2026-10-25T02:26:58.7921336Z  635 β”‚     const children: ReactElement[] = [];
2026-10-25T02:26:58.7921387Z  636 β”‚
2026-10-25T02:26:58.7921449Z  637 β”‚     if (error) {
2026-10-25T02:26:58.7921514Z  638 β”‚       children.push(
2026-10-25T02:26:58.7921574Z  639 β”‚         <View
2026-10-25T02:26:58.7921644Z  640 β”‚           key="review-error"
2026-10-25T02:26:58.7921713Z  641 β”‚           className={cn(
2026-10-25T02:26:58.7921795Z  642 β”‚             "bg-card px-4 py-3",
2026-10-25T02:26:58.7921945Z  643 β”‚             Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
2026-10-25T02:26:58.7922004Z  644 β”‚           )}
2026-10-25T02:26:58.7922060Z  645 β”‚         >
2026-10-25T02:26:58.7922220Z  646 β”‚           <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
2026-10-25T02:26:58.7922373Z  647 β”‚           <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
2026-10-25T02:26:58.7922433Z  648 β”‚         </View>,
2026-10-25T02:26:58.7922489Z  649 β”‚       );
2026-10-25T02:26:58.7922542Z  650 β”‚     }
2026-10-25T02:26:58.7922594Z  651 β”‚
2026-10-25T02:26:58.7922665Z  652 β”‚     if (parsedDiffNotice) {
2026-10-25T02:26:58.7922826Z  653 β”‚       children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
2026-10-25T02:26:58.7922879Z  654 β”‚     }
2026-10-25T02:26:58.7922929Z  655 β”‚
2026-10-25T02:26:58.7923004Z  656 β”‚     if (children.length === 0) {
2026-10-25T02:26:58.7923068Z  657 β”‚       return null;
2026-10-25T02:26:58.7923119Z  658 β”‚     }
2026-10-25T02:26:58.7923170Z  659 β”‚
2026-10-25T02:26:58.7923239Z  660 β”‚     return <>{children}</>;
2026-10-25T02:26:58.7923292Z  661 β”‚   })();
2026-10-25T02:26:58.7923360Z  662 β”‚   const headerSubtitle = [
2026-10-25T02:26:58.7923438Z  663 β”‚     headerDiffSummary.additions,
2026-10-25T02:26:58.7923515Z  664 β”‚     headerDiffSummary.deletions,
2026-10-25T02:26:58.7923596Z  665 β”‚     pendingReviewCommentCount > 0
2026-10-25T02:26:58.7923764Z  666 β”‚       ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
2026-10-25T02:26:58.7923824Z  667 β”‚       : null,
2026-10-25T02:26:58.7923875Z  668 β”‚   ]
2026-10-25T02:26:58.7923943Z  669 β”‚     .filter(Boolean)
2026-10-25T02:26:58.7924009Z  670 β”‚     .join(" Β· ");
2026-10-25T02:26:58.7924142Z  671 β”‚   const headerTitleText = selectedSection?.title ?? "Review changes";
2026-10-25T02:26:58.7924193Z  672 β”‚
2026-10-25T02:26:58.7924250Z  673 β”‚   return (
2026-10-25T02:26:58.7924303Z  674 β”‚     <>
2026-10-25T02:26:58.7924367Z  675 β”‚       <ReviewHeader
2026-10-25T02:26:58.7924449Z  676 β”‚         environmentId={environmentId}
2026-10-25T02:26:58.7924517Z  677 β”‚         threadId={threadId}
2026-10-25T02:26:58.7924590Z  678 β”‚         title={headerTitleText}
2026-10-25T02:26:58.7924664Z  679 β”‚         subtitle={headerSubtitle}
2026-10-25T02:26:58.7924762Z  680 β”‚         androidSubtitle={androidHeaderSubtitle}
2026-10-25T02:26:58.7924833Z  681 β”‚         iconColor={headerIcon}
2026-10-25T02:26:58.7924926Z  682 β”‚         selectedThreadCwd={selectedThreadCwd}
2026-10-25T02:26:58.7925072Z  683 β”‚         sectionMenu={sectionMenu}
2026-10-25T02:26:58.7925227Z  684 β”‚         selectedSection={selectedSection}
2026-10-25T02:26:58.7925339Z  685 β”‚         showSectionToolbar={showSectionToolbar}
2026-10-25T02:26:58.7925450Z  686 β”‚         showChangedFilesToggle={showChangedFilesToggle}
2026-10-25T02:26:58.7925534Z  687 β”‚         onRefresh={handlePullToRefresh}
2026-10-25T02:26:58.7925617Z  688 β”‚         onSelectSection={selectSection}
2026-10-25T02:26:58.7925709Z  689 β”‚         onReturnToThread={handleReturnToThread}
2026-10-25T02:26:58.7925764Z  690 β”‚       />
2026-10-25T02:26:58.7925815Z  691 β”‚
2026-10-25T02:26:58.7925915Z  692 β”‚       <ScreenContent>
2026-10-25T02:26:58.7926036Z  693 β”‚         <View className="flex-1 bg-sheet android:bg-sheet-solid">
2026-10-25T02:26:58.7926115Z  694 β”‚           {showConnectionNotice ? (
2026-10-25T02:26:58.7926260Z  695 β”‚             <View className="flex-1" style={{ paddingTop: topContentInset }}>
2026-10-25T02:26:58.7926350Z  696 β”‚               <EnvironmentConnectionNotice
2026-10-25T02:26:58.7926521Z  697 β”‚                 environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
2026-10-25T02:26:58.7926591Z  698 β”‚                 connection={
2026-10-25T02:26:58.7926695Z  699 β”‚                   environment.presentation?.connection ?? {
2026-10-25T02:26:58.7926775Z  700 β”‚                     phase: "available",
2026-10-25T02:26:58.7926846Z  701 β”‚                     error: null,
2026-10-25T02:26:58.7926920Z  702 β”‚                     traceId: null,
2026-10-25T02:26:58.7926983Z  703 β”‚                   }
2026-10-25T02:26:58.7927041Z  704 β”‚                 }
2026-10-25T02:26:58.7927120Z  705 β”‚                 resourceName="review"
2026-10-25T02:26:58.7927216Z  706 β”‚                 onRetry={handleRetryEnvironment}
2026-10-25T02:26:58.7927280Z  707 β”‚               />
2026-10-25T02:26:58.7927342Z  708 β”‚             </View>
2026-10-25T02:26:58.7927496Z  709 β”‚           ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
2026-10-25T02:26:58.7927557Z  710 β”‚             <View
2026-10-25T02:26:58.7927630Z  711 β”‚               className="flex-1"
2026-10-25T02:26:58.7927692Z  712 β”‚               style={{
2026-10-25T02:26:58.7927808Z  713 β”‚                 backgroundColor: nativeBridge.theme.background,
2026-10-25T02:26:58.7927867Z  714 β”‚               }}
2026-10-25T02:26:58.7927926Z  715 β”‚             >
2026-10-25T02:26:58.7927985Z  716 β”‚               <View
2026-10-25T02:26:58.7928070Z  717 β”‚                 className="min-w-0 flex-1"
2026-10-25T02:26:58.7928207Z  718 β”‚                 style={listHeader ? { paddingTop: topContentInset } : undefined}
2026-10-25T02:26:58.7928265Z  719 β”‚               >
2026-10-25T02:26:58.7928393Z  720 β”‚                 {listHeader}
2026-10-25T02:26:58.7928732Z  721 β”‚                 <View className="min-w-0 flex-1" collapsable={false}>
2026-10-25T02:26:58.7928838Z  722 β”‚                   <NativeReviewDiffView
2026-10-25T02:26:58.7928944Z      Β·                    ──────────┬─────────
2026-10-25T02:26:58.7929109Z      Β·                              ╰── This component is created during render
2026-10-25T02:26:58.7929189Z  723 β”‚                     collapsable={false}
2026-10-25T02:26:58.7929241Z      ╰────
2026-10-25T02:26:58.7929486Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-25T02:26:58.7929807Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-25T02:26:58.7929812Z
2026-10-25T02:26:58.7930092Z   ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-25T02:26:58.7930224Z      ╭─[apps/server/src/provider/AntigravityAuth.ts:303:20]
2026-10-25T02:26:58.7930278Z  302 β”‚     },
2026-10-25T02:26:58.7930356Z  303 β”‚     (effect, flow, stopSessions) =>
2026-10-25T02:26:58.7930447Z      Β·                    ──────┬─────
2026-10-25T02:26:58.7930591Z      Β·                          ╰── 'stopSessions' is declared here
2026-10-25T02:26:58.7930654Z  304 β”‚       effect.pipe(
2026-10-25T02:26:58.7930703Z      ╰────
2026-10-25T02:26:58.7930805Z   help: Consider removing this parameter.
2026-10-25T02:26:58.7930807Z
2026-10-25T02:26:58.7931041Z   ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-25T02:26:58.7931178Z      ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13]
2026-10-25T02:26:58.7931296Z  984 β”‚           const changedBeforeDecline = draftChangedSinceSend();
2026-10-25T02:26:58.7931530Z  985 β”‚ ╭─▢       const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
2026-10-25T02:26:58.7931649Z  986 β”‚ β”‚           (approval) => approval.requestId,
2026-10-25T02:26:58.7931781Z  987 β”‚ ╰─▢       );
2026-10-25T02:26:58.7931919Z  988 β”‚           const approvalResponding = approvalsToDecline.some((approval) =>
2026-10-25T02:26:58.7931968Z      ╰────
2026-10-25T02:26:58.7932043Z   help: Switch to `Set`
2026-10-25T02:26:58.7932046Z
2026-10-25T02:26:58.7932501Z   ⚠ 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-25T02:26:58.7932639Z      ╭─[packages/contracts/src/composerContext.test.ts:181:18]
2026-10-25T02:26:58.7932769Z  180 β”‚   it("sends a message without the records the wire cannot carry", () => {
2026-10-25T02:26:58.7932945Z  181 β”‚     const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
2026-10-25T02:26:58.7933050Z      Β·                  ────────────────────────
2026-10-25T02:26:58.7933112Z  182 β”‚       version: 1,
2026-10-25T02:26:58.7933160Z      ╰────
2026-10-25T02:26:58.7933163Z
2026-10-25T02:26:58.7933462Z   Γ— t3code(no-low-value-comments): Cut this to 4 lines or fewer: keep the constraint, drop the background.
2026-10-25T02:26:58.7933660Z      ╭─[packages/contracts/src/orchestrationV2.ts:746:1]
2026-10-25T02:26:58.7933714Z  745 β”‚
2026-10-25T02:26:58.7933837Z  746 β”‚ ╭─▢ /**
2026-10-25T02:26:58.7934052Z  747 β”‚ β”‚    * Wire-only. Set for clients that opted in with `acceptDedupedBodies` or `dedupeBodies=1` when the
2026-10-25T02:26:58.7934252Z  748 β”‚ β”‚    * marked field was blanked because the client already holds the same value: in the record it
2026-10-25T02:26:58.7934405Z  749 β”‚ β”‚    * received earlier on the same response or stream. Restore with
2026-10-25T02:26:58.7934616Z  750 β”‚ β”‚    * `@t3tools/shared/orchestrationV2DedupedBodies` before use; never store or forward a marked
2026-10-25T02:26:58.7934822Z  751 β”‚ β”‚    * value. Clients that opted in restore only these fields, so blanking another field needs a new
2026-10-25T02:26:58.7934904Z  752 β”‚ β”‚    * opt-in.
2026-10-25T02:26:58.7935026Z  753 β”‚ ╰─▢  */
2026-10-25T02:26:58.7935159Z  754 β”‚     const DedupedBodyMarker = Schema.optionalKey(Schema.Literal(true));
2026-10-25T02:26:58.7935208Z      ╰────
2026-10-25T02:26:58.7935211Z
2026-10-25T02:26:58.7935410Z   ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-25T02:26:58.7935513Z      ╭─[packages/contracts/src/rpc.ts:302:8]
2026-10-25T02:26:58.7935579Z  301 β”‚ } from "./device.ts";
2026-10-25T02:26:58.7935668Z  302 β”‚ import {} from "./previewAutomation.ts";
2026-10-25T02:26:58.7935736Z      Β·        ──
2026-10-25T02:26:58.7935794Z  303 β”‚ import {
2026-10-25T02:26:58.7935885Z      ╰────
2026-10-25T02:26:58.7935975Z   help: Remove empty braces
2026-10-25T02:26:58.7935977Z
2026-10-25T02:26:58.7936243Z   ⚠ eslint(no-unused-vars): Variable 'navigation' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7936406Z     ╭─[apps/mobile/src/features/workspace/WorkspaceSectionToolbar.tsx:23:9]
2026-10-25T02:26:58.7936499Z  22 β”‚   const selectTab = useSelectWorkspaceTab();
2026-10-25T02:26:58.7936578Z  23 β”‚   const navigation = useNavigation();
2026-10-25T02:26:58.7936653Z     Β·         ─────┬────
2026-10-25T02:26:58.7936783Z     Β·              ╰── 'navigation' is declared here
2026-10-25T02:26:58.7936870Z  24 β”‚   const selected = selectedNavigationTab(
2026-10-25T02:26:58.7936918Z     ╰────
2026-10-25T02:26:58.7937028Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7937033Z
2026-10-25T02:26:58.7937285Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7937422Z      ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-25T02:26:58.7937473Z  150 β”‚
2026-10-25T02:26:58.7937537Z  151 β”‚   useEffect(() => {
2026-10-25T02:26:58.7937607Z      Β·   ────┬────
2026-10-25T02:26:58.7937732Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7937813Z  152 β”‚     if (!controlledSelectedPath) {
2026-10-25T02:26:58.7937871Z  153 β”‚       return;
2026-10-25T02:26:58.7937924Z  154 β”‚     }
2026-10-25T02:26:58.7938003Z  155 β”‚     setExpandedPaths((current) => {
2026-10-25T02:26:58.7938080Z      Β·     ────────┬───────
2026-10-25T02:26:58.7938314Z      Β·             ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7938513Z  156 β”‚       const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-25T02:26:58.7938562Z      ╰────
2026-10-25T02:26:58.7939151Z   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-25T02:26:58.7939469Z   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-25T02:26:58.7939472Z
2026-10-25T02:26:58.7939673Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:26:58.7939818Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-25T02:26:58.7939912Z  256 β”‚     return () => cancelAnimationFrame(frame);
2026-10-25T02:26:58.7939989Z  257 β”‚   }, [props.path, targetIndex]);
2026-10-25T02:26:58.7940062Z      Β·       ─────┬────
2026-10-25T02:26:58.7940204Z      Β·            ╰── Unnecessary dependency `props.path`
2026-10-25T02:26:58.7940257Z  258 β”‚
2026-10-25T02:26:58.7940305Z      ╰────
2026-10-25T02:26:58.7940591Z   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-25T02:26:58.7940908Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7940913Z
2026-10-25T02:26:58.7941101Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:26:58.7941246Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:289:23]
2026-10-25T02:26:58.7941316Z  288 β”‚                     <SourceText
2026-10-25T02:26:58.7941414Z  289 β”‚                       key={`${index}:${tokenIndex}`}
2026-10-25T02:26:58.7941530Z      Β·                       ──────────────────────────────
2026-10-25T02:26:58.7941599Z  290 β”‚                       style={{
2026-10-25T02:26:58.7941647Z      ╰────
2026-10-25T02:26:58.7941791Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:26:58.7941794Z
2026-10-25T02:26:58.7941988Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:26:58.7942133Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:305:27]
2026-10-25T02:26:58.7942195Z  304 β”‚             return (
2026-10-25T02:26:58.7942278Z  305 β”‚               <SourceText key={index}>
2026-10-25T02:26:58.7942380Z      Β·                           ───────────
2026-10-25T02:26:58.7942445Z  306 β”‚                 {body}
2026-10-25T02:26:58.7942496Z      ╰────
2026-10-25T02:26:58.7942642Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:26:58.7942644Z
2026-10-25T02:26:58.7942809Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-25T02:26:58.7942952Z      ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:460:14]
2026-10-25T02:26:58.7943003Z  459 β”‚
2026-10-25T02:26:58.7943177Z  460 β”‚   for (const {} of ["direct", "wrapper"] as const) {
2026-10-25T02:26:58.7943315Z      Β·              ──
2026-10-25T02:26:58.7943387Z  461 β”‚   }
2026-10-25T02:26:58.7943435Z      ╰────
2026-10-25T02:26:58.7943662Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-25T02:26:58.7943665Z
2026-10-25T02:26:58.7943863Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:26:58.7944020Z      ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:156:7]
2026-10-25T02:26:58.7944073Z  155 β”‚     }
2026-10-25T02:26:58.7944142Z  156 β”‚   }, [wrappedRender]);
2026-10-25T02:26:58.7944221Z      Β·       ──────┬──────
2026-10-25T02:26:58.7944368Z      Β·             ╰── Unnecessary dependency `wrappedRender`
2026-10-25T02:26:58.7944424Z  157 β”‚
2026-10-25T02:26:58.7944477Z      ╰────
2026-10-25T02:26:58.7944764Z   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-25T02:26:58.7945073Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7945075Z
2026-10-25T02:26:58.7945611Z   ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-25T02:26:58.7945773Z      ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:825:42]
2026-10-25T02:26:58.7945827Z  824 β”‚     >
2026-10-25T02:26:58.7945992Z  825 β”‚       <AdaptiveWorkspaceContext.Provider value={contextValue}>
2026-10-25T02:26:58.7946115Z      Β·                                          ────────────────────
2026-10-25T02:26:58.7946216Z  826 β”‚         <WindowHingeContext value={windowHinge}>
2026-10-25T02:26:58.7946266Z      ╰────
2026-10-25T02:26:58.7946485Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-25T02:26:58.7946622Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-25T02:26:58.7946625Z
2026-10-25T02:26:58.7946801Z   ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T02:26:58.7946983Z      ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:121:34]
2026-10-25T02:26:58.7947050Z  120 β”‚     return [...commands];
2026-10-25T02:26:58.7947185Z  121 β”‚   }, [activeThreadRef, pathname, registrationVersion, navigation]);
2026-10-25T02:26:58.7947297Z      Β·                                  ─────────┬─────────
2026-10-25T02:26:58.7947477Z      Β·                                           ╰── Unnecessary dependency `registrationVersion`
2026-10-25T02:26:58.7947528Z  122 β”‚
2026-10-25T02:26:58.7947578Z      ╰────
2026-10-25T02:26:58.7947889Z   help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-25T02:26:58.7948198Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7948200Z
2026-10-25T02:26:58.7948355Z   ⚠ react(immutability): This value cannot be modified
2026-10-25T02:26:58.7948595Z     ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:39:5]
2026-10-25T02:26:58.7948689Z  32 β”‚
2026-10-25T02:26:58.7948873Z  33 β”‚   const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0);
2026-10-25T02:26:58.7948961Z     Β·         ────────┬────────
2026-10-25T02:26:58.7949104Z     Β·                 ╰── `inspectorProgress` originates here
2026-10-25T02:26:58.7949198Z  34 β”‚   const { renderedInspectorWidth } = props;
2026-10-25T02:26:58.7949326Z  35 β”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-25T02:26:58.7949377Z  36 β”‚
2026-10-25T02:26:58.7949458Z  37 β”‚   const onClosed = props.onClosed;
2026-10-25T02:26:58.7949522Z  38 β”‚   useEffect(() => {
2026-10-25T02:26:58.7949609Z  39 β”‚     inspectorProgress.value = withTiming(
2026-10-25T02:26:58.7949689Z     Β·     ────────┬────────
2026-10-25T02:26:58.7949840Z     Β·             ╰── `inspectorProgress` cannot be modified
2026-10-25T02:26:58.7949917Z  40 β”‚       inspectorVisible ? 1 : 0,
2026-10-25T02:26:58.7949968Z     ╰────
2026-10-25T02:26:58.7950230Z   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-25T02:26:58.7950532Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:26:58.7950535Z
2026-10-25T02:26:58.7950686Z   ⚠ react(immutability): This value cannot be modified
2026-10-25T02:26:58.7950840Z     ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:64:7]
2026-10-25T02:26:58.7950931Z  34 β”‚   const { renderedInspectorWidth } = props;
2026-10-25T02:26:58.7951069Z  35 β”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-25T02:26:58.7951160Z     Β·         ──────────┬─────────
2026-10-25T02:26:58.7951309Z     Β·                   ╰── `renderedContentWidth` originates here
2026-10-25T02:26:58.7951360Z  36 β”‚
2026-10-25T02:26:58.7951440Z  37 β”‚   const onClosed = props.onClosed;
2026-10-25T02:26:58.7951503Z  38 β”‚   useEffect(() => {
2026-10-25T02:26:58.7951589Z  39 β”‚     inspectorProgress.value = withTiming(
2026-10-25T02:26:58.7951665Z  40 β”‚       inspectorVisible ? 1 : 0,
2026-10-25T02:26:58.7951735Z  41 β”‚       WORKSPACE_PANE_TIMING,
2026-10-25T02:26:58.7951800Z  42 β”‚       (finished) => {
2026-10-25T02:26:58.7951936Z  43 β”‚         if (finished === true && !inspectorVisible && onClosed !== undefined) {
2026-10-25T02:26:58.7952008Z  44 β”‚           runOnJS(onClosed)();
2026-10-25T02:26:58.7952125Z  45 β”‚         }
2026-10-25T02:26:58.7952223Z  46 β”‚       },
2026-10-25T02:26:58.7952306Z  47 β”‚     );
2026-10-25T02:26:58.7952444Z  48 β”‚     const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
2026-10-25T02:26:58.7952521Z  49 β”‚     renderedInspectorWidth.set(
2026-10-25T02:26:58.7952661Z  50 β”‚       resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
2026-10-25T02:26:58.7952715Z  51 β”‚     );
2026-10-25T02:26:58.7952768Z  52 β”‚   }, [
2026-10-25T02:26:58.7952836Z  53 β”‚     inspectorProgress,
2026-10-25T02:26:58.7952898Z  54 β”‚     inspectorVisible,
2026-10-25T02:26:58.7952960Z  55 β”‚     inspectorWidth,
2026-10-25T02:26:58.7953020Z  56 β”‚     onClosed,
2026-10-25T02:26:58.7953090Z  57 β”‚     renderedInspectorWidth,
2026-10-25T02:26:58.7953148Z  58 β”‚     resizing,
2026-10-25T02:26:58.7953201Z  59 β”‚   ]);
2026-10-25T02:26:58.7953252Z  60 β”‚
2026-10-25T02:26:58.7953320Z  61 β”‚   useEffect(() => {
2026-10-25T02:26:58.7953412Z  62 β”‚     const targetWidth = inspectorWidth ?? 0;
2026-10-25T02:26:58.7953497Z  63 β”‚     if (!inspectorVisible || resizing) {
2026-10-25T02:26:58.7953592Z  64 β”‚       renderedContentWidth.value = targetWidth;
2026-10-25T02:26:58.7953677Z     Β·       ──────────┬─────────
2026-10-25T02:26:58.7953831Z     Β·                 ╰── `renderedContentWidth` cannot be modified
2026-10-25T02:26:58.7953895Z  65 β”‚       return;
2026-10-25T02:26:58.7953946Z     ╰────
2026-10-25T02:26:58.7954206Z   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-25T02:26:58.7954513Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:26:58.7954518Z
2026-10-25T02:26:58.7954743Z   ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression
2026-10-25T02:26:58.7954867Z     ╭─[packages/shared/src/serverSettings.test.ts:35:7]
2026-10-25T02:26:58.7955046Z  34 β”‚     const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) =>
2026-10-25T02:26:58.7955137Z  35 β”‚       instanceId === configured ? true : false,
2026-10-25T02:26:58.7955253Z     Β·       ────────────────────────────────────────
2026-10-25T02:26:58.7955307Z  36 β”‚     );
2026-10-25T02:26:58.7955357Z     ╰────
2026-10-25T02:26:58.7955450Z   help: Remove this ternary operator
2026-10-25T02:26:58.7955453Z
2026-10-25T02:26:58.7955676Z   ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-25T02:26:58.7955807Z      ╭─[scripts/lib/cli-external-packages.test.ts:104:11]
2026-10-25T02:26:58.7955908Z  103 β”‚         const declared = {
2026-10-25T02:26:58.7956006Z  104 β”‚           ...(manifest.dependencies ?? {}),
2026-10-25T02:26:58.7956115Z      Β·           ────────────────────────────────
2026-10-25T02:26:58.7956218Z  105 β”‚           ...(manifest.optionalDependencies ?? {}),
2026-10-25T02:26:58.7956272Z      ╰────
2026-10-25T02:26:58.7956532Z   help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
2026-10-25T02:26:58.7956536Z
2026-10-25T02:26:58.7956752Z   ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-25T02:26:58.7956878Z      ╭─[scripts/lib/cli-external-packages.test.ts:105:11]
2026-10-25T02:26:58.7957027Z  104 β”‚           ...(manifest.dependencies ?? {}),
2026-10-25T02:26:58.7957189Z  105 β”‚           ...(manifest.optionalDependencies ?? {}),
2026-10-25T02:26:58.7957322Z      Β·           ────────────────────────────────────────
2026-10-25T02:26:58.7957418Z  106 β”‚           ...(manifest.peerDependencies ?? {}),
2026-10-25T02:26:58.7957468Z      ╰────
2026-10-25T02:26:58.7957726Z   help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
2026-10-25T02:26:58.7957729Z
2026-10-25T02:26:58.7957942Z   ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-25T02:26:58.7958067Z      ╭─[scripts/lib/cli-external-packages.test.ts:106:11]
2026-10-25T02:26:58.7958167Z  105 β”‚           ...(manifest.optionalDependencies ?? {}),
2026-10-25T02:26:58.7958267Z  106 β”‚           ...(manifest.peerDependencies ?? {}),
2026-10-25T02:26:58.7958380Z      Β·           ────────────────────────────────────
2026-10-25T02:26:58.7958439Z  107 β”‚         };
2026-10-25T02:26:58.7958490Z      ╰────
2026-10-25T02:26:58.7958747Z   help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback.
2026-10-25T02:26:58.7958750Z
2026-10-25T02:26:58.7959209Z   ⚠ 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-25T02:26:58.7959387Z      ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:222:5]
2026-10-25T02:26:58.7959463Z  221 β”‚         let idlePasses = 0;
2026-10-25T02:26:58.7959608Z  222 β”‚ ╭─▢     for (;;) {
2026-10-25T02:26:58.7959742Z  223 β”‚ β”‚         yield* Effect.promise(() => Promise.resolve());
2026-10-25T02:26:58.7959882Z  224 β”‚ β”‚         const pending = backgroundRuntime.pending.shift();
2026-10-25T02:26:58.7959977Z  225 β”‚ β”‚         if (!pending) {
2026-10-25T02:26:58.7960068Z  226 β”‚ β”‚           idlePasses++;
2026-10-25T02:26:58.7960172Z  227 β”‚ β”‚           if (idlePasses >= 3) {
2026-10-25T02:26:58.7960254Z  228 β”‚ β”‚             return;
2026-10-25T02:26:58.7960332Z  229 β”‚ β”‚           }
2026-10-25T02:26:58.7960415Z  230 β”‚ β”‚           continue;
2026-10-25T02:26:58.7960490Z  231 β”‚ β”‚         }
2026-10-25T02:26:58.7960586Z  232 β”‚ β”‚         idlePasses = 0;
2026-10-25T02:26:58.7960702Z  233 β”‚ β”‚         const exit = yield* Effect.exit(
2026-10-25T02:26:58.7960909Z  234 β”‚ β”‚           pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
2026-10-25T02:26:58.7960986Z  235 β”‚ β”‚         );
2026-10-25T02:26:58.7961090Z  236 β”‚ β”‚         yield* Effect.sync(() => {
2026-10-25T02:26:58.7961192Z  237 β”‚ β”‚           pending.resolve(exit);
2026-10-25T02:26:58.7961269Z  238 β”‚ β”‚         });
2026-10-25T02:26:58.7961400Z  239 β”‚ ╰─▢     }
2026-10-25T02:26:58.7961456Z  240 β”‚       },
2026-10-25T02:26:58.7961507Z      ╰────
2026-10-25T02:26:58.7961510Z
2026-10-25T02:26:58.7961743Z   ⚠ eslint(no-control-regex): Unexpected control character
2026-10-25T02:26:58.7962014Z      ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46]
2026-10-25T02:26:58.7962151Z  219 β”‚               <Text selectable className="font-mono text-sm text-foreground">
2026-10-25T02:26:58.7962287Z  220 β”‚                 {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")}
2026-10-25T02:26:58.7962395Z      Β·                                              ──┬─
2026-10-25T02:26:58.7962559Z      Β·                                                ╰── 'U+001B' is a control character.
2026-10-25T02:26:58.7962622Z  221 β”‚               </Text>
2026-10-25T02:26:58.7962673Z      ╰────
2026-10-25T02:26:58.7962903Z   help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression.
2026-10-25T02:26:58.7962911Z
2026-10-25T02:26:58.7963337Z   ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) 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-25T02:26:58.7963483Z      ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:260:20]
2026-10-25T02:26:58.7963563Z  259 β”‚       ...(update._meta !== undefined
2026-10-25T02:26:58.7963726Z  260 β”‚         ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null }
2026-10-25T02:26:58.7963813Z      Β·                    ─────────
2026-10-25T02:26:58.7963876Z  261 β”‚         : {}),
2026-10-25T02:26:58.7963926Z      ╰────
2026-10-25T02:26:58.7963928Z
2026-10-25T02:26:58.7964262Z   ⚠ 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-25T02:26:58.7964382Z     ╭─[packages/effect-acp/src/schema.test.ts:18:12]
2026-10-25T02:26:58.7964541Z  17 β”‚     const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
2026-10-25T02:26:58.7964660Z  18 β”‚     expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
2026-10-25T02:26:58.7964736Z     Β·            ─────────
2026-10-25T02:26:58.7964794Z  19 β”‚     expect(
2026-10-25T02:26:58.7964845Z     ╰────
2026-10-25T02:26:58.7964848Z
2026-10-25T02:26:58.7965172Z   ⚠ 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-25T02:26:58.7965288Z     ╭─[packages/effect-acp/src/schema.test.ts:20:7]
2026-10-25T02:26:58.7965346Z  19 β”‚     expect(
2026-10-25T02:26:58.7965515Z  20 β”‚       Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
2026-10-25T02:26:58.7965589Z     Β·       ─────────
2026-10-25T02:26:58.7965652Z  21 β”‚     ).toBe(true);
2026-10-25T02:26:58.7965704Z     ╰────
2026-10-25T02:26:58.7965707Z
2026-10-25T02:26:58.7966010Z   ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7966118Z     ╭─[packages/shared/src/model.test.ts:36:7]
2026-10-25T02:26:58.7966169Z  35 β”‚
2026-10-25T02:26:58.7966297Z  36 β”‚ const claudeCaps: ModelCapabilities = createModelCapabilities({
2026-10-25T02:26:58.7966369Z     Β·       ─────┬────
2026-10-25T02:26:58.7966501Z     Β·            ╰── 'claudeCaps' is declared here
2026-10-25T02:26:58.7966631Z  37 β”‚   optionDescriptors: [
2026-10-25T02:26:58.7966711Z     ╰────
2026-10-25T02:26:58.7966861Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7966864Z
2026-10-25T02:26:58.7967042Z   ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used.
2026-10-25T02:26:58.7967176Z     ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18]
2026-10-25T02:26:58.7967261Z  14 β”‚ import * as Layer from "effect/Layer";
2026-10-25T02:26:58.7967352Z  15 β”‚ import type * as Scope from "effect/Scope";
2026-10-25T02:26:58.7967429Z     Β·                  ──┬──
2026-10-25T02:26:58.7967560Z     Β·                    ╰── 'Scope' is imported here
2026-10-25T02:26:58.7967645Z  16 β”‚ import * as Stream from "effect/Stream";
2026-10-25T02:26:58.7967695Z     ╰────
2026-10-25T02:26:58.7967796Z   help: Consider removing this import.
2026-10-25T02:26:58.7967802Z
2026-10-25T02:26:58.7968052Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7968237Z      ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10]
2026-10-25T02:26:58.7968289Z  117 β”‚
2026-10-25T02:26:58.7968355Z  118 β”‚   useEffect(() => {
2026-10-25T02:26:58.7968424Z      Β·   ────┬────
2026-10-25T02:26:58.7968551Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7968631Z  119 β”‚     void refreshNotifications();
2026-10-25T02:26:58.7968720Z      Β·          ──────────┬─────────
2026-10-25T02:26:58.7968892Z      Β·                    ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7969037Z  120 β”‚     const subscription = AppState.addEventListener("change", (state) => {
2026-10-25T02:26:58.7969091Z      ╰────
2026-10-25T02:26:58.7969679Z   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-25T02:26:58.7969995Z   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-25T02:26:58.7969998Z
2026-10-25T02:26:58.7970247Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:26:58.7970432Z      ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7]
2026-10-25T02:26:58.7970486Z  125 β”‚
2026-10-25T02:26:58.7970550Z  126 β”‚   useEffect(() => {
2026-10-25T02:26:58.7970619Z      Β·   ────┬────
2026-10-25T02:26:58.7970745Z      Β·       ╰── This is the containing effect
2026-10-25T02:26:58.7970811Z  127 β”‚     if (!isLoaded) {
2026-10-25T02:26:58.7970901Z  128 β”‚       setLiveActivityStatus("checking");
2026-10-25T02:26:58.7970989Z      Β·       ──────────┬──────────
2026-10-25T02:26:58.7971157Z      Β·                 ╰── Avoid calling setState() directly within an effect
2026-10-25T02:26:58.7971217Z  129 β”‚       return;
2026-10-25T02:26:58.7971270Z      ╰────
2026-10-25T02:26:58.7971922Z   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-25T02:26:58.7972321Z   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-25T02:26:58.7972324Z
2026-10-25T02:26:58.7972530Z   ⚠ eslint(no-unused-vars): Type 'ScheduledTaskDraft' is imported but never used.
2026-10-25T02:26:58.7972685Z     ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:10:8]
2026-10-25T02:26:58.7972766Z   9 β”‚   hasScheduledTaskDraftChanges,
2026-10-25T02:26:58.7972836Z  10 β”‚   type ScheduledTaskDraft,
2026-10-25T02:26:58.7972922Z     Β·        ─────────┬────────
2026-10-25T02:26:58.7973075Z     Β·                 ╰── 'ScheduledTaskDraft' is imported here
2026-10-25T02:26:58.7973153Z  11 β”‚ } from "./scheduledTaskDraft";
2026-10-25T02:26:58.7973202Z     ╰────
2026-10-25T02:26:58.7973299Z   help: Consider removing this import.
2026-10-25T02:26:58.7973302Z
2026-10-25T02:26:58.7973478Z   ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T02:26:58.7973635Z     ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:81:85]
2026-10-25T02:26:58.7973734Z  80 β”‚   const startEditor = startScheduledTaskEditor;
2026-10-25T02:26:58.7973911Z  81 β”‚   const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
2026-10-25T02:26:58.7974053Z     Β·                                                                                     ─────┬─────
2026-10-25T02:26:58.7974258Z     Β·                                                                                          ╰── Unnecessary dependency `startEditor`
2026-10-25T02:26:58.7974336Z  82 β”‚   const readEditor = useCallback(
2026-10-25T02:26:58.7974387Z     ╰────
2026-10-25T02:26:58.7974696Z   help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-25T02:26:58.7975003Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7975006Z
2026-10-25T02:26:58.7975182Z   ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T02:26:58.7975335Z      ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:102:7]
2026-10-25T02:26:58.7975458Z  101 β”‚       setEditor,
2026-10-25T02:26:58.7975570Z  102 β”‚       startEditor,
2026-10-25T02:26:58.7975672Z      Β·       ─────┬─────
2026-10-25T02:26:58.7975811Z      Β·            ╰── Unnecessary dependency `startEditor`
2026-10-25T02:26:58.7975909Z  103 β”‚       hasChanges,
2026-10-25T02:26:58.7975969Z      ╰────
2026-10-25T02:26:58.7976271Z   help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-25T02:26:58.7976574Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7976579Z
2026-10-25T02:26:58.7977046Z   ⚠ 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-25T02:26:58.7977180Z     ╭─[apps/server/src/project/ProjectService.test.ts:94:3]
2026-10-25T02:26:58.7977235Z  93 β”‚     ) {
2026-10-25T02:26:58.7977430Z  94 β”‚ ╭─▢   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-25T02:26:58.7977599Z  95 β”‚ β”‚       const project = Option.getOrThrow(yield* service.getById(projectId));
2026-10-25T02:26:58.7977718Z  96 β”‚ β”‚       if (predicate(project)) return project;
2026-10-25T02:26:58.7977819Z  97 β”‚ β”‚       yield* Effect.yieldNow;
2026-10-25T02:26:58.7977941Z  98 β”‚ ╰─▢   }
2026-10-25T02:26:58.7978092Z  99 β”‚       return yield* Effect.die(`Project ${projectId} was not enriched in time.`);
2026-10-25T02:26:58.7978144Z     ╰────
2026-10-25T02:26:58.7978147Z
2026-10-25T02:26:58.7978600Z   ⚠ 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-25T02:26:58.7978755Z     ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3]
2026-10-25T02:26:58.7978808Z  27 β”‚     ) {
2026-10-25T02:26:58.7979001Z  28 β”‚ ╭─▢   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-25T02:26:58.7979142Z  29 β”‚ β”‚       const available = yield* service.peek(workspaceRoot);
2026-10-25T02:26:58.7979270Z  30 β”‚ β”‚       if (predicate(available)) return available;
2026-10-25T02:26:58.7979370Z  31 β”‚ β”‚       yield* Effect.yieldNow;
2026-10-25T02:26:58.7979490Z  32 β”‚ ╰─▢   }
2026-10-25T02:26:58.7979664Z  33 β”‚       return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`);
2026-10-25T02:26:58.7979713Z     ╰────
2026-10-25T02:26:58.7979715Z
2026-10-25T02:26:58.7979898Z   ⚠ react(capitalized-calls): Capitalized function called without JSX
2026-10-25T02:26:58.7980011Z    ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15]
2026-10-25T02:26:58.7980069Z  7 β”‚     () =>
2026-10-25T02:26:58.7980133Z  8 β”‚       Gesture.Hover()
2026-10-25T02:26:58.7980209Z    Β·               ──┬──
2026-10-25T02:26:58.7980410Z    Β·                 ╰── `Hover` may be a component
2026-10-25T02:26:58.7980535Z  9 β”‚         .manualActivation(true)
2026-10-25T02:26:58.7980608Z    ╰────
2026-10-25T02:26:58.7980885Z   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-25T02:26:58.7981326Z   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-25T02:26:58.7981328Z
2026-10-25T02:26:58.7981598Z   ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.7981743Z     ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:57:9]
2026-10-25T02:26:58.7981797Z  56 β”‚ ) {
2026-10-25T02:26:58.7981965Z  57 β”‚   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
2026-10-25T02:26:58.7982047Z     Β·         ──────┬──────
2026-10-25T02:26:58.7982184Z     Β·               ╰── 'useDragRegion' is declared here
2026-10-25T02:26:58.7982273Z  58 β”‚   const isInline = props.mode === "inline";
2026-10-25T02:26:58.7982322Z     ╰────
2026-10-25T02:26:58.7982426Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7982429Z
2026-10-25T02:26:58.7982592Z   ⚠ react(purity): Cannot call impure function during render
2026-10-25T02:26:58.7982737Z      ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58]
2026-10-25T02:26:58.7982847Z  177 β”‚   if (snoozeClockState.shell !== activeThreadShell) {
2026-10-25T02:26:58.7983009Z  178 β”‚     setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() });
2026-10-25T02:26:58.7983135Z      Β·                                                          ─────┬────
2026-10-25T02:26:58.7983301Z      Β·                                                               ╰── Cannot call impure function
2026-10-25T02:26:58.7983355Z  179 β”‚   }
2026-10-25T02:26:58.7983403Z      ╰────
2026-10-25T02:26:58.7983677Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T02:26:58.7983969Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T02:26:58.7983971Z
2026-10-25T02:26:58.7984433Z   ⚠ 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-25T02:26:58.7984562Z       ╭─[apps/server/src/usage/UsageService.test.ts:2613:7]
2026-10-25T02:26:58.7984657Z  2612 β”‚           let orphanedAt: number | undefined;
2026-10-25T02:26:58.7984883Z  2613 β”‚ ╭─▢       for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
2026-10-25T02:26:58.7985003Z  2614 β”‚ β”‚           const tasks: Array<() => void> = [];
2026-10-25T02:26:58.7985152Z  2615 β”‚ β”‚           const dispatcher: Scheduler.SchedulerDispatcher = {
2026-10-25T02:26:58.7985369Z  2616 β”‚ β”‚             scheduleTask: (task) => tasks.push(task),
2026-10-25T02:26:58.7985542Z  2617 β”‚ β”‚             flush: () => {
2026-10-25T02:26:58.7985750Z  2618 β”‚ β”‚               let task: (() => void) | undefined;
2026-10-25T02:26:58.7985965Z  2619 β”‚ β”‚               while ((task = tasks.shift()) !== undefined) task();
2026-10-25T02:26:58.7986047Z  2620 β”‚ β”‚             },
2026-10-25T02:26:58.7986128Z  2621 β”‚ β”‚           };
2026-10-25T02:26:58.7986200Z  2622 β”‚ β”‚
2026-10-25T02:26:58.7986359Z  2623 β”‚ β”‚           let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
2026-10-25T02:26:58.7986463Z  2624 β”‚ β”‚           let requestChecks = 0;
2026-10-25T02:26:58.7986593Z  2625 β”‚ β”‚           const scheduler: Scheduler.Scheduler = {
2026-10-25T02:26:58.7986701Z  2626 β”‚ β”‚             executionMode: "async",
2026-10-25T02:26:58.7986826Z  2627 β”‚ β”‚             makeDispatcher: () => dispatcher,
2026-10-25T02:26:58.7986937Z  2628 β”‚ β”‚             shouldYield: (fiber) => {
2026-10-25T02:26:58.7987070Z  2629 β”‚ β”‚               if (fiber !== requestFiber) return false;
2026-10-25T02:26:58.7987176Z  2630 β”‚ β”‚               requestChecks += 1;
2026-10-25T02:26:58.7987317Z  2631 β”‚ β”‚               if (requestChecks !== interruptAt) return false;
2026-10-25T02:26:58.7987430Z  2632 β”‚ β”‚               fiber.interruptUnsafe();
2026-10-25T02:26:58.7987529Z  2633 β”‚ β”‚               return true;
2026-10-25T02:26:58.7987612Z  2634 β”‚ β”‚             },
2026-10-25T02:26:58.7987695Z  2635 β”‚ β”‚           };
2026-10-25T02:26:58.7987763Z  2636 β”‚ β”‚
2026-10-25T02:26:58.7987889Z  2637 β”‚ β”‚           const input: UsageSummaryInput = {
2026-10-25T02:26:58.7987985Z  2638 β”‚ β”‚             ...WINDOW,
2026-10-25T02:26:58.7988112Z  2639 β”‚ β”‚             sinceDay: UsageDay.make("2026-09-01"),
2026-10-25T02:26:58.7988299Z  2640 β”‚ β”‚             untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
2026-10-25T02:26:58.7988379Z  2641 β”‚ β”‚           };
2026-10-25T02:26:58.7988491Z  2642 β”‚ β”‚           const first = yield* service
2026-10-25T02:26:58.7988595Z  2643 β”‚ β”‚             .readSummary(input)
2026-10-25T02:26:58.7988681Z  2644 β”‚ β”‚             .pipe(
2026-10-25T02:26:58.7988778Z  2645 β”‚ β”‚               Effect.exit,
2026-10-25T02:26:58.7988939Z  2646 β”‚ β”‚               Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-25T02:26:58.7989043Z  2647 β”‚ β”‚               Effect.forkChild,
2026-10-25T02:26:58.7989121Z  2648 β”‚ β”‚             );
2026-10-25T02:26:58.7989224Z  2649 β”‚ β”‚           requestFiber = first;
2026-10-25T02:26:58.7989331Z  2650 β”‚ β”‚           yield* Effect.yieldNow;
2026-10-25T02:26:58.7989434Z  2651 β”‚ β”‚           dispatcher.flush();
2026-10-25T02:26:58.7989501Z  2652 β”‚ β”‚
2026-10-25T02:26:58.7989651Z  2653 β”‚ β”‚           const second = yield* service.readSummary(input).pipe(
2026-10-25T02:26:58.7989749Z  2654 β”‚ β”‚             Effect.match({
2026-10-25T02:26:58.7989873Z  2655 β”‚ β”‚               onFailure: (error) => error.reason,
2026-10-25T02:26:58.7990132Z  2656 β”‚ β”‚               onSuccess: () => "success" as const,
2026-10-25T02:26:58.7990270Z  2657 β”‚ β”‚             }),
2026-10-25T02:26:58.7990447Z  2658 β”‚ β”‚             Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-25T02:26:58.7990549Z  2659 β”‚ β”‚             Effect.forkChild,
2026-10-25T02:26:58.7990629Z  2660 β”‚ β”‚           );
2026-10-25T02:26:58.7990731Z  2661 β”‚ β”‚           yield* Effect.yieldNow;
2026-10-25T02:26:58.7990830Z  2662 β”‚ β”‚           dispatcher.flush();
2026-10-25T02:26:58.7990954Z  2663 β”‚ β”‚           const secondExit = second.pollUnsafe();
2026-10-25T02:26:58.7991070Z  2664 β”‚ β”‚           if (secondExit === undefined) {
2026-10-25T02:26:58.7991182Z  2665 β”‚ β”‚             second.interruptUnsafe();
2026-10-25T02:26:58.7991300Z  2666 β”‚ β”‚             orphanedAt = interruptAt;
2026-10-25T02:26:58.7991389Z  2667 β”‚ β”‚             break;
2026-10-25T02:26:58.7991468Z  2668 β”‚ β”‚           }
2026-10-25T02:26:58.7991584Z  2669 β”‚ β”‚           if (Exit.isFailure(secondExit)) {
2026-10-25T02:26:58.7991739Z  2670 β”‚ β”‚             assert.fail("the matching request fiber was interrupted");
2026-10-25T02:26:58.7991818Z  2671 β”‚ β”‚           }
2026-10-25T02:26:58.7991967Z  2672 β”‚ β”‚           assert.strictEqual(secondExit.value, "invalidWindow");
2026-10-25T02:26:58.7992099Z  2673 β”‚ ╰─▢       }
2026-10-25T02:26:58.7992153Z  2674 β”‚
2026-10-25T02:26:58.7992207Z       ╰────
2026-10-25T02:26:58.7992210Z
2026-10-25T02:26:58.7992570Z   ⚠ 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-25T02:26:58.7992706Z       ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34]
2026-10-25T02:26:58.7992839Z  1785 β”‚           const stat = branch.files!.find((file) => file.path === path)!;
2026-10-25T02:26:58.7992983Z  1786 β”‚           const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({
2026-10-25T02:26:58.7993097Z       Β·                                  ───────────────────
2026-10-25T02:26:58.7993159Z  1787 β”‚             cwd,
2026-10-25T02:26:58.7993212Z       ╰────
2026-10-25T02:26:58.7993214Z
2026-10-25T02:26:58.7993439Z   ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used.
2026-10-25T02:26:58.7993605Z       ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1387:10]
2026-10-25T02:26:58.7993661Z  1386 β”‚
2026-10-25T02:26:58.7993746Z  1387 β”‚ function assertUserMessagesExclude(
2026-10-25T02:26:58.7993848Z       Β·          ────────────┬────────────
2026-10-25T02:26:58.7994011Z       Β·                      ╰── 'assertUserMessagesExclude' is declared here
2026-10-25T02:26:58.7994118Z  1388 β”‚   projection: OrchestrationV2ThreadProjection,
2026-10-25T02:26:58.7994170Z       ╰────
2026-10-25T02:26:58.7994274Z   help: Consider removing this declaration.
2026-10-25T02:26:58.7994276Z
2026-10-25T02:26:58.7994511Z   ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret.
2026-10-25T02:26:58.7994634Z      ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:498:11]
2026-10-25T02:26:58.7994795Z  497 β”‚         GIT_DIAGNOSTIC_LINE_PATTERN.test(line) ||
2026-10-25T02:26:58.7995017Z  498 β”‚         (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)),
2026-10-25T02:26:58.7995103Z      Β·           ───────────────
2026-10-25T02:26:58.7995157Z  499 β”‚     )
2026-10-25T02:26:58.7995207Z      ╰────
2026-10-25T02:26:58.7995359Z   help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`.
2026-10-25T02:26:58.7995362Z
2026-10-25T02:26:58.7995564Z   ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-25T02:26:58.7995701Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:229:6]
2026-10-25T02:26:58.7995873Z  225 β”‚     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-25T02:26:58.7996004Z  226 β”‚       nativeEventSnapshotsRef.current,
2026-10-25T02:26:58.7996100Z      Β·       ───────────┬───────────
2026-10-25T02:26:58.7996557Z      Β·                  ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:26:58.7996629Z  227 β”‚       mostRecentEventCount,
2026-10-25T02:26:58.7996685Z  228 β”‚     );
2026-10-25T02:26:58.7996809Z  229 β”‚   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-25T02:26:58.7996941Z      Β·      ──────────────────────────┬──────────────────────────
2026-10-25T02:26:58.7997134Z      Β·                                ╰── This dependency list is missing values used by the callback
2026-10-25T02:26:58.7997217Z  230 β”‚   const assumedValue = props.value;
2026-10-25T02:26:58.7997268Z      ╰────
2026-10-25T02:26:58.7997439Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-25T02:26:58.7997751Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.7997755Z
2026-10-25T02:26:58.7997964Z   ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T02:26:58.7998100Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:235:7]
2026-10-25T02:26:58.7998242Z  234 β”‚     nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-25T02:26:58.7998332Z  235 β”‚       nativeEventSnapshotsRef.current,
2026-10-25T02:26:58.7998420Z      Β·       ───────────┬───────────
2026-10-25T02:26:58.7998930Z      Β·                  ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:26:58.7999052Z  236 β”‚       controlledEventCount,
2026-10-25T02:26:58.7999147Z  237 β”‚       assumedValue,
2026-10-25T02:26:58.7999201Z  238 β”‚     );
2026-10-25T02:26:58.7999357Z  239 β”‚   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-25T02:26:58.7999491Z      Β·                                                         ───────────┬──────────
2026-10-25T02:26:58.7999695Z      Β·                                                                    ╰── Unnecessary dependency `controlledDocumentJson`
2026-10-25T02:26:58.7999785Z  240 β”‚   const acceptNativeEvent = useCallback(
2026-10-25T02:26:58.7999836Z      ╰────
2026-10-25T02:26:58.8000254Z   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-25T02:26:58.8000568Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.8000570Z
2026-10-25T02:26:58.8000713Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8000846Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29]
2026-10-25T02:26:58.8000969Z  161 β”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:26:58.8001080Z  162 β”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:26:58.8001198Z      Β·                             ─────────────┬────────────
2026-10-25T02:26:58.8001364Z      Β·                                          ╰── Cannot access ref value during render
2026-10-25T02:26:58.8001424Z  163 β”‚     });
2026-10-25T02:26:58.8001474Z      ╰────
2026-10-25T02:26:58.8001935Z   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-25T02:26:58.8002223Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8002227Z
2026-10-25T02:26:58.8002368Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8002508Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29]
2026-10-25T02:26:58.8002630Z  161 β”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:26:58.8002740Z  162 β”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:26:58.8002853Z      Β·                             ─────────────┬────────────
2026-10-25T02:26:58.8003056Z      Β·                                          ╰── Passing a ref to a function may read its value during render
2026-10-25T02:26:58.8003112Z  163 β”‚     });
2026-10-25T02:26:58.8003163Z      ╰────
2026-10-25T02:26:58.8003616Z   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-25T02:26:58.8004052Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8004116Z
2026-10-25T02:26:58.8004331Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8004479Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:23]
2026-10-25T02:26:58.8004536Z  163 β”‚     });
2026-10-25T02:26:58.8004624Z  164 β”‚     confirmedTokensRef.current = tokens;
2026-10-25T02:26:58.8004746Z      Β·     ─────────┬────────────┬───
2026-10-25T02:26:58.8004932Z      Β·              β”‚            ╰── Cannot update ref value during render
2026-10-25T02:26:58.8005045Z      Β·              ╰── This value is a ref
2026-10-25T02:26:58.8005115Z  165 β”‚     return JSON.stringify(
2026-10-25T02:26:58.8005173Z      ╰────
2026-10-25T02:26:58.8005632Z   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-25T02:26:58.8005966Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8005968Z
2026-10-25T02:26:58.8006110Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8006242Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:206:5]
2026-10-25T02:26:58.8006312Z  205 β”‚     mostRecentEventCount,
2026-10-25T02:26:58.8006399Z  206 β”‚     nativeEventSnapshotsRef.current,
2026-10-25T02:26:58.8006505Z      Β·     ───────────────┬───────────────
2026-10-25T02:26:58.8006691Z      Β·                    ╰── Passing a ref to a function may read its value during render
2026-10-25T02:26:58.8006745Z  207 β”‚   );
2026-10-25T02:26:58.8006795Z      ╰────
2026-10-25T02:26:58.8007253Z   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-25T02:26:58.8007537Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8007539Z
2026-10-25T02:26:58.8007680Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8007816Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:212:5]
2026-10-25T02:26:58.8007888Z  211 β”‚     mostRecentEventCount,
2026-10-25T02:26:58.8007974Z  212 β”‚     nativeEventSnapshotsRef.current,
2026-10-25T02:26:58.8008078Z      Β·     ───────────────┬───────────────
2026-10-25T02:26:58.8008261Z      Β·                    ╰── Passing a ref to a function may read its value during render
2026-10-25T02:26:58.8008316Z  213 β”‚   );
2026-10-25T02:26:58.8008365Z      ╰────
2026-10-25T02:26:58.8008817Z   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-25T02:26:58.8009161Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8009190Z
2026-10-25T02:26:58.8009423Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-25T02:26:58.8009557Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:197:6]
2026-10-25T02:26:58.8009676Z  161 β”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:26:58.8009787Z  162 β”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:26:58.8009895Z      Β·                             ─────────┬────────
2026-10-25T02:26:58.8010352Z      Β·                                      ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:26:58.8010412Z  163 β”‚     });
2026-10-25T02:26:58.8010502Z  164 β”‚     confirmedTokensRef.current = tokens;
2026-10-25T02:26:58.8010572Z  165 β”‚     return JSON.stringify(
2026-10-25T02:26:58.8010737Z  166 β”‚       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-25T02:26:58.8010803Z  167 β”‚         const record =
2026-10-25T02:26:58.8010882Z  168 β”‚           token.type === "context"
2026-10-25T02:26:58.8011046Z  169 β”‚             ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-25T02:26:58.8011112Z  170 β”‚             : undefined;
2026-10-25T02:26:58.8011217Z  171 β”‚         const presentation = contextChipPresentation(
2026-10-25T02:26:58.8011327Z  172 β”‚           token.type === "context" ? token.kind : token.type,
2026-10-25T02:26:58.8011391Z  173 β”‚           record,
2026-10-25T02:26:58.8011451Z  174 β”‚         );
2026-10-25T02:26:58.8011539Z  175 β”‚         const icon = contextChipIcon(
2026-10-25T02:26:58.8011608Z  176 β”‚           presentation,
2026-10-25T02:26:58.8011749Z  177 β”‚           token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-25T02:26:58.8011806Z  178 β”‚         );
2026-10-25T02:26:58.8011867Z  179 β”‚         return {
2026-10-25T02:26:58.8011936Z  180 β”‚           type: token.type,
2026-10-25T02:26:58.8012010Z  181 β”‚           source: token.source,
2026-10-25T02:26:58.8012081Z  182 β”‚           start: token.start,
2026-10-25T02:26:58.8012145Z  183 β”‚           end: token.end,
2026-10-25T02:26:58.8012292Z  184 β”‚           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-25T02:26:58.8012353Z  185 β”‚           label:
2026-10-25T02:26:58.8012432Z  186 β”‚             token.type === "skill"
2026-10-25T02:26:58.8012536Z  187 β”‚               ? (skillLabels.get(token.value) ?? token.value)
2026-10-25T02:26:58.8012623Z  188 β”‚               : token.type === "context"
2026-10-25T02:26:58.8012859Z  189 β”‚                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " Β· unavailable"}`
2026-10-25T02:26:58.8012941Z  190 β”‚                 : basename(token.value),
2026-10-25T02:26:58.8013080Z  191 β”‚           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-25T02:26:58.8013175Z  192 β”‚           iconUri: contextChipIconUri(icon),
2026-10-25T02:26:58.8013263Z  193 β”‚           tintsIcon: icon.kind === "chip",
2026-10-25T02:26:58.8013321Z  194 β”‚         };
2026-10-25T02:26:58.8013376Z  195 β”‚       }),
2026-10-25T02:26:58.8013431Z  196 β”‚     );
2026-10-25T02:26:58.8013562Z  197 β”‚   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-25T02:26:58.8013781Z      Β·      ───────────────────────────────┬───────────────────────────────
2026-10-25T02:26:58.8014064Z      Β·                                     ╰── This dependency list is missing values used by the callback
2026-10-25T02:26:58.8014204Z  198 β”‚   // Every render resolves against the snapshot history, so a render whose
2026-10-25T02:26:58.8014256Z      ╰────
2026-10-25T02:26:58.8014461Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-25T02:26:58.8014769Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.8014771Z
2026-10-25T02:26:58.8014955Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-25T02:26:58.8015086Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:257:5]
2026-10-25T02:26:58.8015220Z  249 β”‚       mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-25T02:26:58.8015322Z  250 β”‚       nativeEventSnapshotsRef.current.push({
2026-10-25T02:26:58.8015410Z      Β·       ───────────┬───────────
2026-10-25T02:26:58.8015874Z      Β·                  ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:26:58.8016000Z  251 β”‚         eventCount: acknowledgedEventCount,
2026-10-25T02:26:58.8016061Z  252 β”‚         value,
2026-10-25T02:26:58.8016138Z  253 β”‚         selection: nextSelection,
2026-10-25T02:26:58.8016197Z  254 β”‚       });
2026-10-25T02:26:58.8016280Z  255 β”‚       return acknowledgedEventCount;
2026-10-25T02:26:58.8016334Z  256 β”‚     },
2026-10-25T02:26:58.8016392Z  257 β”‚     [],
2026-10-25T02:26:58.8016464Z      Β·     ─┬
2026-10-25T02:26:58.8016642Z      Β·      ╰── This dependency list is missing values used by the callback
2026-10-25T02:26:58.8016694Z  258 β”‚   );
2026-10-25T02:26:58.8016746Z      ╰────
2026-10-25T02:26:58.8016948Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-25T02:26:58.8017257Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.8017260Z
2026-10-25T02:26:58.8017450Z   ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used.
2026-10-25T02:26:58.8017590Z     ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10]
2026-10-25T02:26:58.8017788Z  16 β”‚ import type { NativeSyntheticEvent, ViewProps } from "react-native";
2026-10-25T02:26:58.8017981Z  17 β”‚ import { Image, Platform, StyleSheet } from "react-native";
2026-10-25T02:26:58.8018056Z     Β·          ──┬──
2026-10-25T02:26:58.8018178Z     Β·            ╰── 'Image' is imported here
2026-10-25T02:26:58.8018234Z  18 β”‚
2026-10-25T02:26:58.8018287Z     ╰────
2026-10-25T02:26:58.8018383Z   help: Consider removing this import.
2026-10-25T02:26:58.8018386Z
2026-10-25T02:26:58.8018582Z   ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-25T02:26:58.8018724Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:227:6]
2026-10-25T02:26:58.8018887Z  223 β”‚     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-25T02:26:58.8018982Z  224 β”‚       nativeEventSnapshotsRef.current,
2026-10-25T02:26:58.8019073Z      Β·       ───────────┬───────────
2026-10-25T02:26:58.8019519Z      Β·                  ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:26:58.8019591Z  225 β”‚       mostRecentEventCount,
2026-10-25T02:26:58.8019645Z  226 β”‚     );
2026-10-25T02:26:58.8019765Z  227 β”‚   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-25T02:26:58.8019895Z      Β·      ──────────────────────────┬──────────────────────────
2026-10-25T02:26:58.8020088Z      Β·                                ╰── This dependency list is missing values used by the callback
2026-10-25T02:26:58.8020178Z  228 β”‚   const assumedValue = props.value;
2026-10-25T02:26:58.8020231Z      ╰────
2026-10-25T02:26:58.8020398Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-25T02:26:58.8020706Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.8020708Z
2026-10-25T02:26:58.8020918Z   ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T02:26:58.8021058Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:233:7]
2026-10-25T02:26:58.8021198Z  232 β”‚     nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-25T02:26:58.8021286Z  233 β”‚       nativeEventSnapshotsRef.current,
2026-10-25T02:26:58.8021376Z      Β·       ───────────┬───────────
2026-10-25T02:26:58.8021832Z      Β·                  ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:26:58.8021905Z  234 β”‚       controlledEventCount,
2026-10-25T02:26:58.8021969Z  235 β”‚       assumedValue,
2026-10-25T02:26:58.8022023Z  236 β”‚     );
2026-10-25T02:26:58.8022179Z  237 β”‚   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-25T02:26:58.8022312Z      Β·                                                         ───────────┬──────────
2026-10-25T02:26:58.8022515Z      Β·                                                                    ╰── Unnecessary dependency `controlledDocumentJson`
2026-10-25T02:26:58.8022670Z  238 β”‚   const acceptNativeEvent = useCallback(
2026-10-25T02:26:58.8022756Z      ╰────
2026-10-25T02:26:58.8023217Z   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-25T02:26:58.8023524Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.8023527Z
2026-10-25T02:26:58.8023671Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8023814Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29]
2026-10-25T02:26:58.8023937Z  159 β”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:26:58.8024050Z  160 β”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:26:58.8024169Z      Β·                             ─────────────┬────────────
2026-10-25T02:26:58.8024333Z      Β·                                          ╰── Cannot access ref value during render
2026-10-25T02:26:58.8024389Z  161 β”‚     });
2026-10-25T02:26:58.8024440Z      ╰────
2026-10-25T02:26:58.8024900Z   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-25T02:26:58.8025259Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8025263Z
2026-10-25T02:26:58.8025414Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8025560Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29]
2026-10-25T02:26:58.8025679Z  159 β”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:26:58.8025789Z  160 β”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:26:58.8025963Z      Β·                             ─────────────┬────────────
2026-10-25T02:26:58.8026167Z      Β·                                          ╰── Passing a ref to a function may read its value during render
2026-10-25T02:26:58.8026222Z  161 β”‚     });
2026-10-25T02:26:58.8026274Z      ╰────
2026-10-25T02:26:58.8026734Z   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-25T02:26:58.8027024Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8027026Z
2026-10-25T02:26:58.8027169Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8027308Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:23]
2026-10-25T02:26:58.8027365Z  161 β”‚     });
2026-10-25T02:26:58.8027455Z  162 β”‚     confirmedTokensRef.current = tokens;
2026-10-25T02:26:58.8027578Z      Β·     ─────────┬────────────┬───
2026-10-25T02:26:58.8027762Z      Β·              β”‚            ╰── Cannot update ref value during render
2026-10-25T02:26:58.8027952Z      Β·              ╰── This value is a ref
2026-10-25T02:26:58.8028076Z  163 β”‚     return JSON.stringify(
2026-10-25T02:26:58.8028156Z      ╰────
2026-10-25T02:26:58.8028619Z   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-25T02:26:58.8028911Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8028914Z
2026-10-25T02:26:58.8029057Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8029198Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:204:5]
2026-10-25T02:26:58.8029273Z  203 β”‚     mostRecentEventCount,
2026-10-25T02:26:58.8029361Z  204 β”‚     nativeEventSnapshotsRef.current,
2026-10-25T02:26:58.8029464Z      Β·     ───────────────┬───────────────
2026-10-25T02:26:58.8029649Z      Β·                    ╰── Passing a ref to a function may read its value during render
2026-10-25T02:26:58.8029704Z  205 β”‚   );
2026-10-25T02:26:58.8029753Z      ╰────
2026-10-25T02:26:58.8030209Z   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-25T02:26:58.8030496Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8030498Z
2026-10-25T02:26:58.8030645Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8030787Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:210:5]
2026-10-25T02:26:58.8030854Z  209 β”‚     mostRecentEventCount,
2026-10-25T02:26:58.8030943Z  210 β”‚     nativeEventSnapshotsRef.current,
2026-10-25T02:26:58.8031045Z      Β·     ───────────────┬───────────────
2026-10-25T02:26:58.8031232Z      Β·                    ╰── Passing a ref to a function may read its value during render
2026-10-25T02:26:58.8031287Z  211 β”‚   );
2026-10-25T02:26:58.8031338Z      ╰────
2026-10-25T02:26:58.8031795Z   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-25T02:26:58.8032088Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8032093Z
2026-10-25T02:26:58.8032275Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-25T02:26:58.8032414Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:195:6]
2026-10-25T02:26:58.8032536Z  159 β”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:26:58.8032649Z  160 β”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:26:58.8032758Z      Β·                             ─────────┬────────
2026-10-25T02:26:58.8033275Z      Β·                                      ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:26:58.8033376Z  161 β”‚     });
2026-10-25T02:26:58.8033501Z  162 β”‚     confirmedTokensRef.current = tokens;
2026-10-25T02:26:58.8033574Z  163 β”‚     return JSON.stringify(
2026-10-25T02:26:58.8033735Z  164 β”‚       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-25T02:26:58.8033803Z  165 β”‚         const record =
2026-10-25T02:26:58.8033884Z  166 β”‚           token.type === "context"
2026-10-25T02:26:58.8034045Z  167 β”‚             ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-25T02:26:58.8034113Z  168 β”‚             : undefined;
2026-10-25T02:26:58.8034222Z  169 β”‚         const presentation = contextChipPresentation(
2026-10-25T02:26:58.8034331Z  170 β”‚           token.type === "context" ? token.kind : token.type,
2026-10-25T02:26:58.8034398Z  171 β”‚           record,
2026-10-25T02:26:58.8034457Z  172 β”‚         );
2026-10-25T02:26:58.8034543Z  173 β”‚         const icon = contextChipIcon(
2026-10-25T02:26:58.8034612Z  174 β”‚           presentation,
2026-10-25T02:26:58.8034753Z  175 β”‚           token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-25T02:26:58.8034809Z  176 β”‚         );
2026-10-25T02:26:58.8034872Z  177 β”‚         return {
2026-10-25T02:26:58.8034943Z  178 β”‚           type: token.type,
2026-10-25T02:26:58.8035016Z  179 β”‚           source: token.source,
2026-10-25T02:26:58.8035089Z  180 β”‚           start: token.start,
2026-10-25T02:26:58.8035154Z  181 β”‚           end: token.end,
2026-10-25T02:26:58.8035302Z  182 β”‚           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-25T02:26:58.8035362Z  183 β”‚           label:
2026-10-25T02:26:58.8035445Z  184 β”‚             token.type === "skill"
2026-10-25T02:26:58.8035555Z  185 β”‚               ? (skillLabels.get(token.value) ?? token.value)
2026-10-25T02:26:58.8035639Z  186 β”‚               : token.type === "context"
2026-10-25T02:26:58.8035901Z  187 β”‚                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " Β· unavailable"}`
2026-10-25T02:26:58.8035992Z  188 β”‚                 : basename(token.value),
2026-10-25T02:26:58.8036137Z  189 β”‚           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-25T02:26:58.8036229Z  190 β”‚           iconUri: contextChipIconUri(icon),
2026-10-25T02:26:58.8036316Z  191 β”‚           tintsIcon: icon.kind === "chip",
2026-10-25T02:26:58.8036375Z  192 β”‚         };
2026-10-25T02:26:58.8036434Z  193 β”‚       }),
2026-10-25T02:26:58.8036490Z  194 β”‚     );
2026-10-25T02:26:58.8036623Z  195 β”‚   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-25T02:26:58.8036774Z      Β·      ───────────────────────────────┬───────────────────────────────
2026-10-25T02:26:58.8036975Z      Β·                                     ╰── This dependency list is missing values used by the callback
2026-10-25T02:26:58.8037113Z  196 β”‚   // Every render resolves against the snapshot history, so a render whose
2026-10-25T02:26:58.8037163Z      ╰────
2026-10-25T02:26:58.8037367Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-25T02:26:58.8037677Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.8037679Z
2026-10-25T02:26:58.8037925Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-25T02:26:58.8038145Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:255:5]
2026-10-25T02:26:58.8038272Z  247 β”‚       mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-25T02:26:58.8038372Z  248 β”‚       nativeEventSnapshotsRef.current.push({
2026-10-25T02:26:58.8038468Z      Β·       ───────────┬───────────
2026-10-25T02:26:58.8038917Z      Β·                  ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:26:58.8039006Z  249 β”‚         eventCount: acknowledgedEventCount,
2026-10-25T02:26:58.8039069Z  250 β”‚         value,
2026-10-25T02:26:58.8039148Z  251 β”‚         selection: nextSelection,
2026-10-25T02:26:58.8039213Z  252 β”‚       });
2026-10-25T02:26:58.8039297Z  253 β”‚       return acknowledgedEventCount;
2026-10-25T02:26:58.8039354Z  254 β”‚     },
2026-10-25T02:26:58.8039409Z  255 β”‚     [],
2026-10-25T02:26:58.8039476Z      Β·     ─┬
2026-10-25T02:26:58.8039653Z      Β·      ╰── This dependency list is missing values used by the callback
2026-10-25T02:26:58.8039708Z  256 β”‚   );
2026-10-25T02:26:58.8039760Z      ╰────
2026-10-25T02:26:58.8039965Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-25T02:26:58.8040271Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:26:58.8040273Z
2026-10-25T02:26:58.8040639Z   ⚠ 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-25T02:26:58.8040768Z      ╭─[apps/server/src/auth/RpcAuthorization.ts:238:17]
2026-10-25T02:26:58.8040904Z  237 β”‚ const requiredScopesForSettingsUpdate = (payload: unknown) => {
2026-10-25T02:26:58.8041035Z  238 β”‚   const input = Schema.decodeUnknownSync(SettingsUpdate)(payload);
2026-10-25T02:26:58.8041138Z      Β·                 ────────────────────────
2026-10-25T02:26:58.8041276Z  239 β”‚   const scopes = requiredScopesForServerSettingsPatch(input.patch);
2026-10-25T02:26:58.8041328Z      ╰────
2026-10-25T02:26:58.8041331Z
2026-10-25T02:26:58.8041688Z   ⚠ 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-25T02:26:58.8041873Z      ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26]
2026-10-25T02:26:58.8042039Z  255 β”‚   if (method === WS_METHODS.assetsCreateUrl) {
2026-10-25T02:26:58.8042202Z  256 β”‚     const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload);
2026-10-25T02:26:58.8042317Z      Β·                          ────────────────────────
2026-10-25T02:26:58.8042376Z  257 β”‚     return [
2026-10-25T02:26:58.8042429Z      ╰────
2026-10-25T02:26:58.8042432Z
2026-10-25T02:26:58.8042629Z   ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used.
2026-10-25T02:26:58.8042734Z     ╭─[apps/server/src/auth/http.ts:28:10]
2026-10-25T02:26:58.8042820Z  27 β”‚ import * as Schema from "effect/Schema";
2026-10-25T02:26:58.8042912Z  28 β”‚ import { identity } from "effect/Function";
2026-10-25T02:26:58.8042988Z     Β·          ────┬───
2026-10-25T02:26:58.8043125Z     Β·              ╰── 'identity' is imported here
2026-10-25T02:26:58.8043211Z  29 β”‚ import * as Layer from "effect/Layer";
2026-10-25T02:26:58.8043265Z     ╰────
2026-10-25T02:26:58.8043362Z   help: Consider removing this import.
2026-10-25T02:26:58.8043364Z
2026-10-25T02:26:58.8043590Z   ⚠ unicorn(no-useless-spread): Using a spread operator here creates a new array unnecessarily.
2026-10-25T02:26:58.8043725Z     ╭─[apps/mobile/src/native/native-layout-metrics.tsx:43:27]
2026-10-25T02:26:58.8043795Z  42 β”‚     latestMetrics = next;
2026-10-25T02:26:58.8043908Z  43 β”‚     for (const settle of [...metricsWaiters]) settle(next);
2026-10-25T02:26:58.8043992Z     Β·                           ───
2026-10-25T02:26:58.8044056Z  44 β”‚     setMetrics(next);
2026-10-25T02:26:58.8044111Z     ╰────
2026-10-25T02:26:58.8044302Z   help: `for…of` can iterate over iterable, it's unnecessary to convert to an array.
2026-10-25T02:26:58.8044307Z
2026-10-25T02:26:58.8044504Z   ⚠ eslint(no-unused-vars): Identifier 'FormSheet' is imported but never used.
2026-10-25T02:26:58.8044652Z     ╭─[apps/mobile/src/native/createV5StackNavigator.ios.tsx:26:10]
2026-10-25T02:26:58.8044753Z  25 β”‚ import { StyleSheet, View } from "react-native";
2026-10-25T02:26:58.8044867Z  26 β”‚ import { FormSheet, Stack } from "react-native-screens";
2026-10-25T02:26:58.8044944Z     Β·          ────┬────
2026-10-25T02:26:58.8045076Z     Β·              ╰── 'FormSheet' is imported here
2026-10-25T02:26:58.8045224Z  27 β”‚ import { NativeScrollEdgeEffectsContext } from "./NativeScrollViewMarker";
2026-10-25T02:26:58.8045278Z     ╰────
2026-10-25T02:26:58.8045380Z   help: Consider removing this import.
2026-10-25T02:26:58.8045385Z
2026-10-25T02:26:58.8045615Z   ⚠ eslint(no-unused-vars): Identifier 'nativeWorkspacePopAction' is imported but never used.
2026-10-25T02:26:58.8045759Z     ╭─[apps/mobile/src/native/createV5StackNavigator.ios.tsx:33:3]
2026-10-25T02:26:58.8045870Z  32 β”‚   nativeStackPopAction,
2026-10-25T02:26:58.8045946Z  33 β”‚   nativeWorkspacePopAction,
2026-10-25T02:26:58.8046035Z     Β·   ────────────┬───────────
2026-10-25T02:26:58.8046193Z     Β·               ╰── 'nativeWorkspacePopAction' is imported here
2026-10-25T02:26:58.8046269Z  34 β”‚   nativeWorkspacePopCount,
2026-10-25T02:26:58.8046321Z     ╰────
2026-10-25T02:26:58.8046416Z   help: Consider removing this import.
2026-10-25T02:26:58.8046419Z
2026-10-25T02:26:58.8046701Z   ⚠ eslint(no-unused-vars): Identifier 'nativeWorkspacePopCount' is imported but never used.
2026-10-25T02:26:58.8046934Z     ╭─[apps/mobile/src/native/createV5StackNavigator.ios.tsx:34:3]
2026-10-25T02:26:58.8047009Z  33 β”‚   nativeWorkspacePopAction,
2026-10-25T02:26:58.8047079Z  34 β”‚   nativeWorkspacePopCount,
2026-10-25T02:26:58.8047164Z     Β·   ───────────┬───────────
2026-10-25T02:26:58.8047322Z     Β·              ╰── 'nativeWorkspacePopCount' is imported here
2026-10-25T02:26:58.8047402Z  35 β”‚   partitionStackPresentations,
2026-10-25T02:26:58.8047456Z     ╰────
2026-10-25T02:26:58.8047548Z   help: Consider removing this import.
2026-10-25T02:26:58.8047551Z
2026-10-25T02:26:58.8047694Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8047820Z      ╭─[apps/mobile/src/native/StackHeader.tsx:202:9]
2026-10-25T02:26:58.8047887Z  201 β”‚         "options",
2026-10-25T02:26:58.8047979Z  202 β”‚         latestOptionFunctionsRef.current,
2026-10-25T02:26:58.8048090Z      Β·         ────────────────┬───────────────
2026-10-25T02:26:58.8048281Z      Β·                         ╰── Passing a ref to a function may read its value during render
2026-10-25T02:26:58.8048377Z  203 β”‚         optionFunctionWrappersRef.current,
2026-10-25T02:26:58.8048428Z      ╰────
2026-10-25T02:26:58.8048894Z   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-25T02:26:58.8049191Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8049197Z
2026-10-25T02:26:58.8049342Z   ⚠ react(refs): Cannot access refs during render
2026-10-25T02:26:58.8049458Z      ╭─[apps/mobile/src/native/StackHeader.tsx:203:9]
2026-10-25T02:26:58.8049550Z  202 β”‚         latestOptionFunctionsRef.current,
2026-10-25T02:26:58.8049645Z  203 β”‚         optionFunctionWrappersRef.current,
2026-10-25T02:26:58.8049752Z      Β·         ────────────────┬────────────────
2026-10-25T02:26:58.8049941Z      Β·                         ╰── Passing a ref to a function may read its value during render
2026-10-25T02:26:58.8050032Z  204 β”‚       ) as NativeStackNavigationOptions)
2026-10-25T02:26:58.8050085Z      ╰────
2026-10-25T02:26:58.8050549Z   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-25T02:26:58.8050840Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:26:58.8050843Z
2026-10-25T02:26:58.8051210Z   ⚠ 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-25T02:26:58.8051337Z      ╭─[apps/server/src/assets/AssetAccess.test.ts:975:35]
2026-10-25T02:26:58.8051486Z  974 β”‚       // Every client and server release spells the resource this way on the wire.
2026-10-25T02:26:58.8051704Z  975 β”‚       const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({
2026-10-25T02:26:58.8051908Z      Β·                                   ──────────────────────────
2026-10-25T02:26:58.8052020Z  976 β”‚         resource: { _tag: "github-media", cwd: "/repo", url },
2026-10-25T02:26:58.8052072Z      ╰────
2026-10-25T02:26:58.8052074Z
2026-10-25T02:26:58.8052515Z   ⚠ 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-25T02:26:58.8052647Z       ╭─[apps/server/src/assets/AssetAccess.test.ts:1012:32]
2026-10-25T02:26:58.8052782Z  1011 β”‚         expect(error._tag).toBe("AssetGitHubMediaUrlValidationError");
2026-10-25T02:26:58.8052969Z  1012 β”‚         const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error);
2026-10-25T02:26:58.8053089Z       Β·                                ───────────────────
2026-10-25T02:26:58.8053183Z  1013 β”‚         expect(encoded).not.toContain(url);
2026-10-25T02:26:58.8053236Z       ╰────
2026-10-25T02:26:58.8053239Z
2026-10-25T02:26:58.8053400Z   ⚠ eslint(no-empty-pattern): Empty array binding pattern
2026-10-25T02:26:58.8053556Z       ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1436:12]
2026-10-25T02:26:58.8053612Z  1435 β”‚
2026-10-25T02:26:58.8053680Z  1436 β”‚ for (const [] of [
2026-10-25T02:26:58.8053752Z       Β·            ──
2026-10-25T02:26:58.8053824Z  1437 β”‚   ["github", "github.com"],
2026-10-25T02:26:58.8053875Z       ╰────
2026-10-25T02:26:58.8054150Z   help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.
2026-10-25T02:26:58.8054162Z
2026-10-25T02:26:58.8054423Z   ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:26:58.8054543Z      ╭─[apps/server/src/usage/UsageService.ts:162:7]
2026-10-25T02:26:58.8054595Z  161 β”‚
2026-10-25T02:26:58.8054676Z  162 β”‚ const layerTest = Layer.succeed(
2026-10-25T02:26:58.8054748Z      Β·       ────┬────
2026-10-25T02:26:58.8054882Z      Β·           ╰── 'layerTest' is declared here
2026-10-25T02:26:58.8054948Z  163 β”‚   UsageService,
2026-10-25T02:26:58.8054999Z      ╰────
2026-10-25T02:26:58.8055102Z   help: Consider removing this declaration.
2026-10-25T02:26:58.8055105Z
2026-10-25T02:26:58.8055270Z   ⚠ react(purity): Cannot call impure function during render
2026-10-25T02:26:58.8055459Z       ╭─[apps/web/src/components/CommandPalette.tsx:2048:20]
2026-10-25T02:26:58.8055654Z  2047 β”‚         title: inferProjectTitleFromPath(destinationPath),
2026-10-25T02:26:58.8055748Z  2048 β”‚         createdAt: new Date().toISOString(),
2026-10-25T02:26:58.8055870Z       Β·                    ─────┬────
2026-10-25T02:26:58.8056025Z       Β·                         ╰── Cannot call impure function
2026-10-25T02:26:58.8056133Z  2049 β”‚         remoteUrl: addProjectCloneFlow.remoteUrl,
2026-10-25T02:26:58.8056184Z       ╰────
2026-10-25T02:26:58.8056460Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T02:26:58.8056756Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T02:26:58.8056761Z
2026-10-25T02:26:58.8056844Z Found 3 errors and 377 warnings in 5539 files (4.9s, 8 threads)
2026-10-25T02:26:58.8064866Z ##[error]Process completed with exit code 1.
2026-10-25T02:26:58.8134575Z Post job cleanup.
2026-10-25T02:26:58.8147741Z ##[start-action display=Cache full pnpm store;id=__5a90bdd6-2b8a-4139-a4ea-06b1c8342ce4.__actions_cache]
2026-10-25T02:26:58.8148668Z ##[end-action id=__5a90bdd6-2b8a-4139-a4ea-06b1c8342ce4.__actions_cache;outcome=skipped;conclusion=skipped;duration_ms=0]
2026-10-25T02:26:58.8149307Z ##[start-action display=Cache Vite+;id=__5a90bdd6-2b8a-4139-a4ea-06b1c8342ce4.vp_cache]
2026-10-25T02:26:58.8150006Z ##[end-action id=__5a90bdd6-2b8a-4139-a4ea-06b1c8342ce4.vp_cache;outcome=skipped;conclusion=skipped;duration_ms=0]
2026-10-25T02:26:58.8179003Z Post job cleanup.
2026-10-25T02:26:58.8588614Z [command]/usr/local/bin/git version
2026-10-25T02:26:58.8636214Z git version 2.55.0
2026-10-25T02:26:58.8653020Z Temporarily overriding HOME='/home/runner/_work/_temp/6d009772-005b-49e7-826a-2e9a1afdd4ed' before making global git config changes
2026-10-25T02:26:58.8653174Z Adding repository directory to the temporary git global config as a safe directory
2026-10-25T02:26:58.8655817Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-25T02:26:58.8675760Z Removing SSH command configuration
2026-10-25T02:26:58.8678836Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-25T02:26:58.8699502Z [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-25T02:26:58.8821029Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-25T02:26:58.8837819Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-25T02:26:58.8871696Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-25T02:26:58.8892018Z ##[group]Run '/job_completed.sh'
2026-10-25T02:26:58.8902124Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-25T02:26:58.8902170Z env:
2026-10-25T02:26:58.8902233Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 156
2026-10-25T02:26:58.8902289Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 382
2026-10-25T02:26:58.8902339Z   BLACKSMITH_CHECK_RUN_ID: 121052657821
2026-10-25T02:26:58.8902394Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-25T02:26:58.8902448Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-25T02:26:58.8902501Z ##[endgroup]
2026-10-25T02:26:58.8978964Z Docker container cache not activated, skipping hash computation.
2026-10-25T02:26:58.9236547Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-25T02:26:58.9281251Z Cleaning up orphan processes