GitHub check

256 KB of 603 KB loaded Download the full log (603 KB)
347 KB of earlier output not loaded
25.1949544Z     ╰────
2026-10-24T19:50:25.1950155Z   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-24T19:50:25.1950487Z   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-24T19:50:25.1950493Z
2026-10-24T19:50:25.1950697Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.1950874Z     ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7]
2026-10-24T19:50:25.1950954Z  62 │     return () => scheduler.cancel();
2026-10-24T19:50:25.1951054Z  63 │   }, [enabled, resetKey, rows.length, scheduler]);
2026-10-24T19:50:25.1951181Z     ·       ───┬───            ─────┬─────
2026-10-24T19:50:25.1951377Z     ·          │                    ╰── Unnecessary dependency `rows.length`
2026-10-24T19:50:25.1951523Z     ·          ╰── Unnecessary dependency `enabled`
2026-10-24T19:50:25.1951579Z  64 │
2026-10-24T19:50:25.1951628Z     ╰────
2026-10-24T19:50:25.1951928Z   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-24T19:50:25.1952242Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.1952245Z
2026-10-24T19:50:25.1952522Z   ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.1952661Z      ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7]
2026-10-24T19:50:25.1952712Z  913 │
2026-10-24T19:50:25.1952958Z  914 │ const layerDaemon: Layer.Layer<never, never, OrchestrationEffectWorkerV2> = Layer.effectDiscard(
2026-10-24T19:50:25.1953073Z      ·       ─────┬─────
2026-10-24T19:50:25.1953210Z      ·            ╰── 'layerDaemon' is declared here
2026-10-24T19:50:25.1953296Z  915 │   runDaemon.pipe(Effect.forkScoped),
2026-10-24T19:50:25.1953347Z      ╰────
2026-10-24T19:50:25.1953452Z   help: Consider removing this declaration.
2026-10-24T19:50:25.1953455Z
2026-10-24T19:50:25.1953717Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.1953928Z      ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
2026-10-24T19:50:25.1953980Z  104 │
2026-10-24T19:50:25.1954045Z  105 │   useEffect(() => {
2026-10-24T19:50:25.1954117Z      ·   ────┬────
2026-10-24T19:50:25.1954253Z      ·       ╰── This is the containing effect
2026-10-24T19:50:25.1954336Z  106 │     clearReviewCommentTarget();
2026-10-24T19:50:25.1954434Z  107 │     setPendingNativeCommentSelection(null);
2026-10-24T19:50:25.1954541Z      ·     ────────────────┬───────────────
2026-10-24T19:50:25.1954721Z      ·                     ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.1954794Z  108 │   }, [selectedSection?.id]);
2026-10-24T19:50:25.1954846Z      ╰────
2026-10-24T19:50:25.1955465Z   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-24T19:50:25.1955795Z   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-24T19:50:25.1955800Z
2026-10-24T19:50:25.1956061Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.1956249Z      ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
2026-10-24T19:50:25.1956302Z  109 │
2026-10-24T19:50:25.1956365Z  110 │   useEffect(() => {
2026-10-24T19:50:25.1956435Z      ·   ────┬────
2026-10-24T19:50:25.1956565Z      ·       ╰── This is the containing effect
2026-10-24T19:50:25.1956653Z  111 │     if (activeCommentTarget === null) {
2026-10-24T19:50:25.1956760Z  112 │       setPendingNativeCommentSelection(null);
2026-10-24T19:50:25.1956871Z      ·       ────────────────┬───────────────
2026-10-24T19:50:25.1957050Z      ·                       ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.1957105Z  113 │     }
2026-10-24T19:50:25.1957157Z      ╰────
2026-10-24T19:50:25.1957767Z   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-24T19:50:25.1958091Z   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-24T19:50:25.1958093Z
2026-10-24T19:50:25.1958352Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.1958573Z      ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
2026-10-24T19:50:25.1958670Z  107 │     setPendingNativeCommentSelection(null);
2026-10-24T19:50:25.1958741Z  108 │   }, [selectedSection?.id]);
2026-10-24T19:50:25.1958828Z      ·       ─────────┬─────────
2026-10-24T19:50:25.1958991Z      ·                ╰── Unnecessary dependency `selectedSection?.id`
2026-10-24T19:50:25.1959043Z  109 │
2026-10-24T19:50:25.1959092Z      ╰────
2026-10-24T19:50:25.1959393Z   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-24T19:50:25.1959713Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.1959719Z
2026-10-24T19:50:25.1959980Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.1960149Z      ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7]
2026-10-24T19:50:25.1960201Z  100 │
2026-10-24T19:50:25.1960265Z  101 │   useEffect(() => {
2026-10-24T19:50:25.1960335Z      ·   ────┬────
2026-10-24T19:50:25.1960463Z      ·       ╰── This is the containing effect
2026-10-24T19:50:25.1960567Z  102 │     if (!target || selectedLines.length === 0) {
2026-10-24T19:50:25.1960652Z  103 │       setHighlightedLinesById({});
2026-10-24T19:50:25.1960748Z      ·       ───────────┬───────────
2026-10-24T19:50:25.1960925Z      ·                  ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.1960987Z  104 │       return;
2026-10-24T19:50:25.1961039Z      ╰────
2026-10-24T19:50:25.1961652Z   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-24T19:50:25.1961979Z   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-24T19:50:25.1961981Z
2026-10-24T19:50:25.1962202Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T19:50:25.1962428Z     ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
2026-10-24T19:50:25.1962480Z  52 │
2026-10-24T19:50:25.1962545Z  53 │   for (const {} of [
2026-10-24T19:50:25.1962614Z     ·              ──
2026-10-24T19:50:25.1962681Z  54 │     { healthy: true },
2026-10-24T19:50:25.1962732Z     ╰────
2026-10-24T19:50:25.1962967Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T19:50:25.1962970Z
2026-10-24T19:50:25.1963229Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.1963377Z     ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55]
2026-10-24T19:50:25.1963434Z  61 │   }, []);
2026-10-24T19:50:25.1963505Z  62 │   useEffect(() => {
2026-10-24T19:50:25.1963580Z     ·   ────┬────
2026-10-24T19:50:25.1963710Z     ·       ╰── This is the containing effect
2026-10-24T19:50:25.1963861Z  63 │     if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl);
2026-10-24T19:50:25.1964007Z     ·                                                       ───────┬──────
2026-10-24T19:50:25.1964221Z     ·                                                              ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.1964298Z  64 │   }, [playbackUrl, resolvedUrl]);
2026-10-24T19:50:25.1964349Z     ╰────
2026-10-24T19:50:25.1964963Z   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-24T19:50:25.1965297Z   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-24T19:50:25.1965299Z
2026-10-24T19:50:25.1965497Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T19:50:25.1965649Z      ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
2026-10-24T19:50:25.1965759Z  222 │               ? snippetTokens.map((line, lineIndex) => (
2026-10-24T19:50:25.1965854Z  223 │                   <NativeText key={lineIndex}>
2026-10-24T19:50:25.1965962Z      ·                               ───────────────
2026-10-24T19:50:25.1966059Z  224 │                     {lineIndex > 0 ? "\n" : ""}
2026-10-24T19:50:25.1966113Z      ╰────
2026-10-24T19:50:25.1966262Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T19:50:25.1966265Z
2026-10-24T19:50:25.1966514Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T19:50:25.1966664Z      ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25]
2026-10-24T19:50:25.1966739Z  226 │                       <NativeText
2026-10-24T19:50:25.1966822Z  227 │                         key={tokenIndex}
2026-10-24T19:50:25.1966927Z      ·                         ────────────────
2026-10-24T19:50:25.1966998Z  228 │                         style={{
2026-10-24T19:50:25.1967049Z      ╰────
2026-10-24T19:50:25.1967266Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T19:50:25.1967314Z
2026-10-24T19:50:25.1967574Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.1967708Z     ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5]
2026-10-24T19:50:25.1967812Z  66 │   const { id: attachmentId, fileUri } = attachment;
2026-10-24T19:50:25.1967877Z  67 │   useEffect(() => {
2026-10-24T19:50:25.1967947Z     ·   ────┬────
2026-10-24T19:50:25.1968076Z     ·       ╰── This is the containing effect
2026-10-24T19:50:25.1968140Z  68 │     setUri(null);
2026-10-24T19:50:25.1968208Z     ·     ───┬──
2026-10-24T19:50:25.1968374Z     ·        ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.1968436Z  69 │     setError(null);
2026-10-24T19:50:25.1968493Z     ╰────
2026-10-24T19:50:25.1969107Z   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-24T19:50:25.1969431Z   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-24T19:50:25.1969433Z
2026-10-24T19:50:25.1969637Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.1969772Z     ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7]
2026-10-24T19:50:25.1969827Z  90 │     };
2026-10-24T19:50:25.1969905Z  91 │   }, [attachmentId, fileUri]);
2026-10-24T19:50:25.1970026Z     ·       ──────┬─────  ───┬───
2026-10-24T19:50:25.1970211Z     ·             │          ╰── Unnecessary dependency `fileUri`
2026-10-24T19:50:25.1970360Z     ·             ╰── Unnecessary dependency `attachmentId`
2026-10-24T19:50:25.1970494Z  92 │   const mimeType = videoMimeType(attachment) ?? attachment.mimeType;
2026-10-24T19:50:25.1970546Z     ╰────
2026-10-24T19:50:25.1970844Z   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-24T19:50:25.1971159Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.1971167Z
2026-10-24T19:50:25.1971388Z   ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T19:50:25.1971529Z      ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34]
2026-10-24T19:50:25.1971593Z  212 │   useEffect(() => {
2026-10-24T19:50:25.1971705Z  213 │     if (!isFocused && hasSource) props.onRequestClose();
2026-10-24T19:50:25.1971804Z      ·                                  ──┬──
2026-10-24T19:50:25.1971958Z      ·                                    ╰── Missing dependency `props`
2026-10-24T19:50:25.1972064Z  214 │   }, [isFocused, hasSource, props.onRequestClose]);
2026-10-24T19:50:25.1972174Z      ·                             ──────────┬─────────
2026-10-24T19:50:25.1972466Z      ·                                       ╰── Overly precise dependency `props.onRequestClose`, use `props` instead
2026-10-24T19:50:25.1972574Z  215 │   const { source } = props;
2026-10-24T19:50:25.1972625Z      ╰────
2026-10-24T19:50:25.1973059Z   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-24T19:50:25.1973376Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.1973379Z
2026-10-24T19:50:25.1973548Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T19:50:25.1973671Z      ╭─[apps/web/src/hooks/useThreadActions.ts:821:56]
2026-10-24T19:50:25.1973780Z  820 │     const resolved = resolveThreadTarget(target);
2026-10-24T19:50:25.1973975Z  821 │     if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
2026-10-24T19:50:25.1974099Z      ·                                                        ─────┬────
2026-10-24T19:50:25.1974270Z      ·                                                             ╰── Cannot call impure function
2026-10-24T19:50:25.1974350Z  822 │       return AsyncResult.failure(
2026-10-24T19:50:25.1974400Z      ╰────
2026-10-24T19:50:25.1974682Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T19:50:25.1974980Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T19:50:25.1974988Z
2026-10-24T19:50:25.1975160Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T19:50:25.1975280Z      ╭─[apps/web/src/hooks/useThreadActions.ts:709:46]
2026-10-24T19:50:25.1975352Z  708 │     const wokeAt = resolved
2026-10-24T19:50:25.1975487Z  709 │       ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
2026-10-24T19:50:25.1975599Z      ·                                              ─────┬────
2026-10-24T19:50:25.1975761Z      ·                                                   ╰── Cannot call impure function
2026-10-24T19:50:25.1975821Z  710 │       : null;
2026-10-24T19:50:25.1975872Z      ╰────
2026-10-24T19:50:25.1976151Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T19:50:25.1976453Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T19:50:25.1976458Z
2026-10-24T19:50:25.1976718Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.1976853Z     ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
2026-10-24T19:50:25.1976906Z  57 │
2026-10-24T19:50:25.1976971Z  58 │   useEffect(() => {
2026-10-24T19:50:25.1977041Z     ·   ────┬────
2026-10-24T19:50:25.1977171Z     ·       ╰── This is the containing effect
2026-10-24T19:50:25.1977267Z  59 │     const controller = new AbortController();
2026-10-24T19:50:25.1977340Z  60 │     setLoadState("pending");
2026-10-24T19:50:25.1977471Z     ·     ──────┬─────
2026-10-24T19:50:25.1977671Z     ·           ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.1977833Z  61 │     // A renewed signature is used on Retry, not as a reason to reset the native player.
2026-10-24T19:50:25.1977885Z     ╰────
2026-10-24T19:50:25.1978494Z   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-24T19:50:25.1978818Z   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-24T19:50:25.1978821Z
2026-10-24T19:50:25.1979030Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.1979167Z     ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
2026-10-24T19:50:25.1979249Z  70 │     return () => controller.abort();
2026-10-24T19:50:25.1979344Z  71 │   }, [player, props.playRequested, attempt]);
2026-10-24T19:50:25.1979520Z     ·       ───┬──  ─────────┬─────────  ───┬───
2026-10-24T19:50:25.1979753Z     ·          │             │              ╰── Unnecessary dependency `attempt`
2026-10-24T19:50:25.1979960Z     ·          │             ╰── Unnecessary dependency `props.playRequested`
2026-10-24T19:50:25.1980107Z     ·          ╰── Unnecessary dependency `player_0`
2026-10-24T19:50:25.1980163Z  72 │
2026-10-24T19:50:25.1980214Z     ╰────
2026-10-24T19:50:25.1980514Z   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-24T19:50:25.1980835Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.1980838Z
2026-10-24T19:50:25.1981036Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T19:50:25.1981193Z      ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:272:25]
2026-10-24T19:50:25.1981309Z  271 │                 {record.elements?.map((element, index) => (
2026-10-24T19:50:25.1981489Z  272 │                   <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
2026-10-24T19:50:25.1981651Z      ·                         ───────────────────────────────────────────────────────
2026-10-24T19:50:25.1981732Z  273 │                     <ContextField
2026-10-24T19:50:25.1981789Z      ╰────
2026-10-24T19:50:25.1981943Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T19:50:25.1981946Z
2026-10-24T19:50:25.1982214Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.1982364Z       ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7]
2026-10-24T19:50:25.1982424Z  3754 │
2026-10-24T19:50:25.1982632Z  3755 │ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, OpenCodeAdapterV2DriverEnv> =
2026-10-24T19:50:25.1982764Z       ·       ──┬──
2026-10-24T19:50:25.1982934Z       ·         ╰── 'layer' is declared here
2026-10-24T19:50:25.1983008Z  3756 │   Layer.effect(
2026-10-24T19:50:25.1983068Z       ╰────
2026-10-24T19:50:25.1983174Z   help: Consider removing this declaration.
2026-10-24T19:50:25.1983183Z
2026-10-24T19:50:25.1983389Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.1983523Z     ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6]
2026-10-24T19:50:25.1983586Z  81 │     },
2026-10-24T19:50:25.1983649Z  82 │     [draftKey],
2026-10-24T19:50:25.1983727Z     ·      ────┬───
2026-10-24T19:50:25.1983872Z     ·          ╰── Unnecessary dependency `draftKey`
2026-10-24T19:50:25.1983956Z  83 │   );
2026-10-24T19:50:25.1984009Z     ╰────
2026-10-24T19:50:25.1984323Z   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-24T19:50:25.1984650Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.1984653Z
2026-10-24T19:50:25.1984919Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.1985059Z      ╭─[apps/mobile/src/components/ProjectFavicon.tsx:172:5]
2026-10-24T19:50:25.1985253Z  167 │   const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
2026-10-24T19:50:25.1985331Z  168 │   useLayoutEffect(() => {
2026-10-24T19:50:25.1985420Z      ·   ───────┬───────
2026-10-24T19:50:25.1985561Z      ·          ╰── This is the containing effect
2026-10-24T19:50:25.1985669Z  169 │     if (faviconRequest === null) return;
2026-10-24T19:50:25.1985728Z  170 │
2026-10-24T19:50:25.1985865Z  171 │     const endRequest = beginProjectFaviconRequest(faviconRequest);
2026-10-24T19:50:25.1985966Z  172 │     setActiveFaviconRequest(faviconRequest);
2026-10-24T19:50:25.1986059Z      ·     ───────────┬───────────
2026-10-24T19:50:25.1986258Z      ·                ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.1986403Z  173 │     return endRequest;
2026-10-24T19:50:25.1986481Z      ╰────
2026-10-24T19:50:25.1987300Z   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-24T19:50:25.1987702Z   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-24T19:50:25.1987705Z
2026-10-24T19:50:25.1987991Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.1988220Z      ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:333:7]
2026-10-24T19:50:25.1988294Z  328 │   };
2026-10-24T19:50:25.1988400Z  329 │   useEffect(() => {
2026-10-24T19:50:25.1988507Z      ·   ────┬────
2026-10-24T19:50:25.1988680Z      ·       ╰── This is the containing effect
2026-10-24T19:50:25.1988807Z  330 │     if (!guidesEnabled && section === "guide") {
2026-10-24T19:50:25.1988944Z  331 │       requestedSection.current = "overview";
2026-10-24T19:50:25.1989146Z  332 │       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
2026-10-24T19:50:25.1989244Z  333 │       setSection("overview");
2026-10-24T19:50:25.1989373Z      ·       ─────┬────
2026-10-24T19:50:25.1989561Z      ·            ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.1989655Z  334 │     }
2026-10-24T19:50:25.1989741Z      ╰────
2026-10-24T19:50:25.1990395Z   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-24T19:50:25.1990861Z   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-24T19:50:25.1990888Z
2026-10-24T19:50:25.1991110Z   ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T19:50:25.1991321Z      ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:6]
2026-10-24T19:50:25.1991447Z  330 │     if (!guidesEnabled && section === "guide") {
2026-10-24T19:50:25.1991594Z  331 │       requestedSection.current = "overview";
2026-10-24T19:50:25.1991699Z      ·       ────────┬───────
2026-10-24T19:50:25.1992195Z      ·               ╰── 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-24T19:50:25.1992399Z  332 │       currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
2026-10-24T19:50:25.1992589Z      ·       ─────────┬─────────           ──────┬──────
2026-10-24T19:50:25.1993147Z      ·                │                          ╰── 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-24T19:50:25.1993676Z      ·                ╰── 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-24T19:50:25.1993817Z  333 │       setSection("overview");
2026-10-24T19:50:25.1993922Z  334 │     }
2026-10-24T19:50:25.1994065Z  335 │   }, [guidesEnabled, section, insets.top]);
2026-10-24T19:50:25.1994195Z      ·      ──────────────────┬─────────────────
2026-10-24T19:50:25.1994426Z      ·                        ╰── This dependency list is missing values used by the callback
2026-10-24T19:50:25.1994551Z  336 │   const tabContent = activityContent;
2026-10-24T19:50:25.1994753Z      ╰────
2026-10-24T19:50:25.1994948Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T19:50:25.1995312Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.1995320Z
2026-10-24T19:50:25.1995562Z   ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T19:50:25.1995765Z      ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:877:6]
2026-10-24T19:50:25.1995876Z  860 │     if (
2026-10-24T19:50:25.1996008Z  861 │       lastSelection.current.path === route.params.path &&
2026-10-24T19:50:25.1996125Z      ·       ──────┬──────
2026-10-24T19:50:25.1996607Z      ·             ╰── Missing dependency `lastSelection`. 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-24T19:50:25.1996774Z  862 │       lastSelection.current.id === route.params.fileSelectionId
2026-10-24T19:50:25.1996868Z  863 │     )
2026-10-24T19:50:25.1996951Z  864 │       return;
2026-10-24T19:50:25.1997169Z  865 │     lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId };
2026-10-24T19:50:25.1997332Z  866 │     if (route.params.focus) navigation.setParams({ focus: undefined });
2026-10-24T19:50:25.1997472Z  867 │     setJumpPath(route.params.path);
2026-10-24T19:50:25.1997561Z  868 │     setSelectedRowId(null);
2026-10-24T19:50:25.1997679Z  869 │     jumpStarted.current = false;
2026-10-24T19:50:25.1997970Z  870 │     const file = data.files.find((entry) => entry.path === route.params.path);
2026-10-24T19:50:25.1998112Z  871 │     if (!file || !nativeView.current) return;
2026-10-24T19:50:25.1998225Z      ·                   ─────┬────
2026-10-24T19:50:25.1998714Z      ·                        ╰── Missing dependency `nativeView`. 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-24T19:50:25.1998882Z  872 │     setCollapsedIds((ids) => ids.filter((id) => id !== file.id));
2026-10-24T19:50:25.1998985Z  873 │     jumpStarted.current = true;
2026-10-24T19:50:25.1999153Z  874 │     void nativeView.current.scrollToFile(file.id, false).catch(() => {
2026-10-24T19:50:25.1999277Z  875 │       jumpStarted.current = false;
2026-10-24T19:50:25.1999375Z  876 │     });
2026-10-24T19:50:25.1999605Z  877 │   }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]);
2026-10-24T19:50:25.1999823Z      ·      ──────────────────────────────────────────────┬──────────────────────────────────────────────
2026-10-24T19:50:25.2000164Z      ·                                                    ╰── This dependency list is missing values used by the callback
2026-10-24T19:50:25.2000350Z  878 │   const appliedFilter = useRef(filter.hideTestFiles);
2026-10-24T19:50:25.2000435Z      ╰────
2026-10-24T19:50:25.2000631Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T19:50:25.2000983Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2000987Z
2026-10-24T19:50:25.2001180Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2001438Z     ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36]
2026-10-24T19:50:25.2001653Z  53 │         const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
2026-10-24T19:50:25.2001845Z  54 │ ╭─▶     children = cloneElement(child, {
2026-10-24T19:50:25.2002014Z  55 │ │         onTouchStart: (event) => {
2026-10-24T19:50:25.2002208Z  56 │ │           // Reset for a new touch, not onPressIn, which also fires when a
2026-10-24T19:50:25.2002400Z  57 │ │           // finger moves out of the row and back during the same gesture.
2026-10-24T19:50:25.2002553Z  58 │ │           menuPress.current.isPreparing = false;
2026-10-24T19:50:25.2002755Z  59 │ │           menuPress.current.suppressPress = menuPress.current.isOpen;
2026-10-24T19:50:25.2002907Z  60 │ │           pendingPress.current = null;
2026-10-24T19:50:25.2003061Z  61 │ │           child.props.onTouchStart?.(event);
2026-10-24T19:50:25.2003171Z  62 │ │         },
2026-10-24T19:50:25.2003291Z  63 │ │         onPress: (event) => {
2026-10-24T19:50:25.2003522Z  64 │ │           // Accessibility clicks have no touch identifier and must not inherit
2026-10-24T19:50:25.2003693Z  65 │ │           // cancellation from a previous physical gesture.
2026-10-24T19:50:25.2003917Z  66 │ │           const isTouch = typeof event.nativeEvent.identifier === "number";
2026-10-24T19:50:25.2004128Z  67 │ │           if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
2026-10-24T19:50:25.2004251Z  68 │ │             return;
2026-10-24T19:50:25.2004371Z  69 │ │           }
2026-10-24T19:50:25.2004644Z  70 │ │           if (isTouch && menuPress.current.isPreparing) {
2026-10-24T19:50:25.2004860Z  71 │ │             // A release can arrive between native menu preparation and display.
2026-10-24T19:50:25.2005037Z  72 │ │             // Let UIKit's display/cancel callback decide this press's outcome.
2026-10-24T19:50:25.2005193Z  73 │ │             event.persist();
2026-10-24T19:50:25.2005387Z  74 │ │             pendingPress.current = () => child.props.onPress?.(event);
2026-10-24T19:50:25.2005511Z  75 │ │             return;
2026-10-24T19:50:25.2005602Z  76 │ │           }
2026-10-24T19:50:25.2005759Z  77 │ │           child.props.onPress?.(event);
2026-10-24T19:50:25.2005875Z  78 │ │         },
2026-10-24T19:50:25.2006041Z  79 │ ├─▶     });
2026-10-24T19:50:25.2006366Z     · ╰──── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2006602Z  80 │         menuProps.onMenuInteractionStart = () => {
2026-10-24T19:50:25.2006709Z     ╰────
2026-10-24T19:50:25.2007231Z   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-24T19:50:25.2007559Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2007562Z
2026-10-24T19:50:25.2007790Z   ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used.
2026-10-24T19:50:25.2007921Z     ╭─[apps/web/src/types.ts:22:3]
2026-10-24T19:50:25.2008137Z  21 │   EnvironmentThreadShell,
2026-10-24T19:50:25.2008242Z  22 │   ThreadRunSummary,
2026-10-24T19:50:25.2008337Z     ·   ────────┬───────
2026-10-24T19:50:25.2008509Z     ·           ╰── 'ThreadRunSummary' is imported here
2026-10-24T19:50:25.2008636Z  23 │   ThreadRuntimeSummary,
2026-10-24T19:50:25.2008722Z     ╰────
2026-10-24T19:50:25.2008838Z   help: Consider removing this import.
2026-10-24T19:50:25.2008841Z
2026-10-24T19:50:25.2009020Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2009229Z     ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
2026-10-24T19:50:25.2009356Z  26 │   const latestInput = useRef(input);
2026-10-24T19:50:25.2009448Z  27 │   latestInput.current = input;
2026-10-24T19:50:25.2009601Z     ·   ─────┬─────────┬───
2026-10-24T19:50:25.2009819Z     ·        │         ╰── Cannot update ref value during render
2026-10-24T19:50:25.2009999Z     ·        ╰── This value is a ref
2026-10-24T19:50:25.2010109Z  28 │   const mounted = useRef(true);
2026-10-24T19:50:25.2010177Z     ╰────
2026-10-24T19:50:25.2010686Z   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-24T19:50:25.2011036Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2011039Z
2026-10-24T19:50:25.2011406Z   ⚠ react(immutability): This value cannot be modified
2026-10-24T19:50:25.2011651Z     ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5]
2026-10-24T19:50:25.2011727Z  90 │ }) {
2026-10-24T19:50:25.2011864Z  91 │   const rotation = useSharedValue(props.hidden ? 1 : 0);
2026-10-24T19:50:25.2011986Z     ·         ────┬───
2026-10-24T19:50:25.2012155Z     ·             ╰── `rotation` originates here
2026-10-24T19:50:25.2012241Z  92 │   useLayoutEffect(() => {
2026-10-24T19:50:25.2012426Z  93 │     rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
2026-10-24T19:50:25.2012535Z     ·     ────┬───
2026-10-24T19:50:25.2012714Z     ·         ╰── `rotation` cannot be modified
2026-10-24T19:50:25.2012805Z  94 │   }, [props.hidden, rotation]);
2026-10-24T19:50:25.2012900Z     ╰────
2026-10-24T19:50:25.2013200Z   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-24T19:50:25.2013567Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T19:50:25.2013570Z
2026-10-24T19:50:25.2013743Z   ⚠ react(immutability): This value cannot be modified
2026-10-24T19:50:25.2013986Z      ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5]
2026-10-24T19:50:25.2014206Z  266 │   const variant = props.variant ?? "plain";
2026-10-24T19:50:25.2014373Z  267 │   const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
2026-10-24T19:50:25.2014484Z      ·         ────────┬────────
2026-10-24T19:50:25.2014678Z      ·                 ╰── `loadingVisibility` originates here
2026-10-24T19:50:25.2014783Z  268 │   useLayoutEffect(() => {
2026-10-24T19:50:25.2014968Z  269 │     loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
2026-10-24T19:50:25.2015105Z      ·     ────────┬────────
2026-10-24T19:50:25.2015271Z      ·             ╰── `loadingVisibility` cannot be modified
2026-10-24T19:50:25.2015401Z  270 │   }, [loadingVisibility, props.loading]);
2026-10-24T19:50:25.2015486Z      ╰────
2026-10-24T19:50:25.2015791Z   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-24T19:50:25.2016128Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T19:50:25.2016133Z
2026-10-24T19:50:25.2016326Z   ⚠ react(immutability): This value cannot be modified
2026-10-24T19:50:25.2016529Z      ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5]
2026-10-24T19:50:25.2016609Z  325 │ }) {
2026-10-24T19:50:25.2016792Z  326 │   const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
2026-10-24T19:50:25.2016929Z      ·         ─────────┬─────────
2026-10-24T19:50:25.2017117Z      ·                  ╰── `recordingVisibility` originates here
2026-10-24T19:50:25.2017325Z  327 │   useLayoutEffect(() => {
2026-10-24T19:50:25.2017550Z  328 │     recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
2026-10-24T19:50:25.2017664Z      ·     ─────────┬─────────
2026-10-24T19:50:25.2017914Z      ·              ╰── `recordingVisibility` cannot be modified
2026-10-24T19:50:25.2018078Z  329 │   }, [props.phase, recordingVisibility]);
2026-10-24T19:50:25.2018158Z      ╰────
2026-10-24T19:50:25.2018450Z   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-24T19:50:25.2018801Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T19:50:25.2018804Z
2026-10-24T19:50:25.2018985Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2019184Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
2026-10-24T19:50:25.2019385Z  121 │   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T19:50:25.2019536Z  122 │   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T19:50:25.2019692Z      ·                                      ───────────┬──────────
2026-10-24T19:50:25.2019903Z      ·                                                 ╰── Cannot access ref value during render
2026-10-24T19:50:25.2020052Z  123 │   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T19:50:25.2020128Z      ╰────
2026-10-24T19:50:25.2020647Z   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-24T19:50:25.2021087Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2021094Z
2026-10-24T19:50:25.2021277Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2021478Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
2026-10-24T19:50:25.2021556Z  125 │
2026-10-24T19:50:25.2021700Z  126 │   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T19:50:25.2021826Z      ·        ─────────┬────────
2026-10-24T19:50:25.2022002Z      ·                 ╰── Cannot access ref value during render
2026-10-24T19:50:25.2022136Z  127 │     const recorder = createLazyVoiceRecorder({
2026-10-24T19:50:25.2022231Z      ╰────
2026-10-24T19:50:25.2022748Z   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-24T19:50:25.2023078Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2023081Z
2026-10-24T19:50:25.2023261Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2023444Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
2026-10-24T19:50:25.2023533Z  125 │
2026-10-24T19:50:25.2023677Z  126 │   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T19:50:25.2023790Z      ·       ─────────┬─────────
2026-10-24T19:50:25.2023991Z      ·                ╰── Cannot access ref value during render
2026-10-24T19:50:25.2024291Z  127 │     const recorder = createLazyVoiceRecorder({
2026-10-24T19:50:25.2024407Z      ╰────
2026-10-24T19:50:25.2024911Z   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-24T19:50:25.2025214Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2025251Z
2026-10-24T19:50:25.2025425Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2025619Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
2026-10-24T19:50:25.2025705Z  125 │
2026-10-24T19:50:25.2025843Z  126 │   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T19:50:25.2025988Z      ·                               ─────────┬─────────
2026-10-24T19:50:25.2026206Z      ·                                        ╰── Cannot access ref value during render
2026-10-24T19:50:25.2026338Z  127 │     const recorder = createLazyVoiceRecorder({
2026-10-24T19:50:25.2026423Z      ╰────
2026-10-24T19:50:25.2026904Z   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-24T19:50:25.2027256Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2027259Z
2026-10-24T19:50:25.2027444Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2027640Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
2026-10-24T19:50:25.2027720Z  125 │
2026-10-24T19:50:25.2027959Z  126 │   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T19:50:25.2028116Z      ·                              ──────────┬─────────
2026-10-24T19:50:25.2028317Z      ·                                        ╰── Cannot access ref value during render
2026-10-24T19:50:25.2028448Z  127 │     const recorder = createLazyVoiceRecorder({
2026-10-24T19:50:25.2028512Z      ╰────
2026-10-24T19:50:25.2029040Z   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-24T19:50:25.2029371Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2029374Z
2026-10-24T19:50:25.2029550Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2029742Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-24T19:50:25.2029884Z  126 │       if (!sessionRef.current || !recorderRef.current) {
2026-10-24T19:50:25.2030122Z  127 │ ╭─▶     const recorder = createLazyVoiceRecorder({
2026-10-24T19:50:25.2030331Z  128 │ │         create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T19:50:25.2030552Z  129 │ │         onStatus: (status: RecordingStatus) => {
2026-10-24T19:50:25.2030781Z  130 │ │           sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T19:50:25.2030923Z  131 │ │             isFinished: status.isFinished,
2026-10-24T19:50:25.2031142Z  132 │ │             hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T19:50:25.2031384Z  133 │ │             error: status.error,
2026-10-24T19:50:25.2031509Z  134 │ │             url: status.url,
2026-10-24T19:50:25.2031619Z  135 │ │           });
2026-10-24T19:50:25.2031740Z  136 │ │         },
2026-10-24T19:50:25.2031975Z  137 │ │         // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T19:50:25.2032123Z  138 │ │         selectInput: (inputs) => {
2026-10-24T19:50:25.2032289Z  139 │ │           const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T19:50:25.2032491Z  140 │ │           if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T19:50:25.2032697Z  141 │ │           const known = microphoneOrder(preferences.value.microphones);
2026-10-24T19:50:25.2032871Z  142 │ │           const order = rememberMicrophones(known, inputs);
2026-10-24T19:50:25.2032991Z  143 │ │           if (order !== known) {
2026-10-24T19:50:25.2033166Z  144 │ │             registry.set(updateMobilePreferencesAtom, {
2026-10-24T19:50:25.2033326Z  145 │ │               transform: (current) => ({
2026-10-24T19:50:25.2033574Z  146 │ │                 microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T19:50:25.2033696Z  147 │ │               }),
2026-10-24T19:50:25.2033785Z  148 │ │             });
2026-10-24T19:50:25.2033971Z  149 │ │           }
2026-10-24T19:50:25.2034145Z  150 │ │           return preferredMicrophoneInput(inputs, order);
2026-10-24T19:50:25.2034358Z  151 │ │         },
2026-10-24T19:50:25.2034505Z  152 │ ├─▶     });
2026-10-24T19:50:25.2038045Z      · ╰──── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2038147Z  153 │         recorderRef.current = recorder;
2026-10-24T19:50:25.2038202Z      ╰────
2026-10-24T19:50:25.2038695Z   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-24T19:50:25.2038998Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2039001Z
2026-10-24T19:50:25.2039154Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2039317Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-24T19:50:25.2039377Z  152 │     });
2026-10-24T19:50:25.2039462Z  153 │     recorderRef.current = recorder;
2026-10-24T19:50:25.2039579Z      ·     ─────┬─────────┬───
2026-10-24T19:50:25.2039843Z      ·          │         ╰── Cannot update ref value during render
2026-10-24T19:50:25.2040008Z      ·          ╰── This value is a ref
2026-10-24T19:50:25.2040117Z  154 │     sessionRef.current = new VoiceInputSession({
2026-10-24T19:50:25.2040171Z      ╰────
2026-10-24T19:50:25.2040644Z   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-24T19:50:25.2040943Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2040945Z
2026-10-24T19:50:25.2041100Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2041269Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-24T19:50:25.2041356Z  153 │         recorderRef.current = recorder;
2026-10-24T19:50:25.2041554Z  154 │ ╭─▶     sessionRef.current = new VoiceInputSession({
2026-10-24T19:50:25.2041641Z  155 │ │         recorder,
2026-10-24T19:50:25.2041774Z  156 │ │         getTranscriber: getLocalVoiceTranscriber,
2026-10-24T19:50:25.2041893Z  157 │ │         requestPermission: async () => {
2026-10-24T19:50:25.2042059Z  158 │ │           const permission = await requestRecordingPermissionsAsync();
2026-10-24T19:50:25.2042254Z  159 │ │           return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T19:50:25.2042341Z  160 │ │         },
2026-10-24T19:50:25.2042489Z  161 │ │         configureRecording: configureVoiceRecordingAudio,
2026-10-24T19:50:25.2042627Z  162 │ │         releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T19:50:25.2042764Z  163 │ │         deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T19:50:25.2042878Z  164 │ │         onStateChange: (nextState) =>
2026-10-24T19:50:25.2042971Z  165 │ │           setState({
2026-10-24T19:50:25.2043073Z  166 │ │             state: nextState,
2026-10-24T19:50:25.2043213Z  167 │ │             ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T19:50:25.2043344Z  168 │ │             label: sessionRef.current?.label ?? null,
2026-10-24T19:50:25.2043431Z  169 │ │           }),
2026-10-24T19:50:25.2043562Z  170 │ ├─▶     });
2026-10-24T19:50:25.2043766Z      · ╰──── Cannot access ref value during render
2026-10-24T19:50:25.2043825Z  171 │       }
2026-10-24T19:50:25.2043881Z      ╰────
2026-10-24T19:50:25.2044392Z   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-24T19:50:25.2044686Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2044689Z
2026-10-24T19:50:25.2044890Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2045086Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-24T19:50:25.2045169Z  153 │     recorderRef.current = recorder;
2026-10-24T19:50:25.2045274Z  154 │     sessionRef.current = new VoiceInputSession({
2026-10-24T19:50:25.2045388Z      ·     ─────┬────────┬───
2026-10-24T19:50:25.2045576Z      ·          │        ╰── Cannot update ref value during render
2026-10-24T19:50:25.2045695Z      ·          ╰── This value is a ref
2026-10-24T19:50:25.2045759Z  155 │       recorder,
2026-10-24T19:50:25.2045811Z      ╰────
2026-10-24T19:50:25.2046291Z   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-24T19:50:25.2046658Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2046661Z
2026-10-24T19:50:25.2046811Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2046972Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-24T19:50:25.2047060Z  184 │     return () => subscription.remove();
2026-10-24T19:50:25.2047128Z  185 │   }, [controller]);
2026-10-24T19:50:25.2047209Z      ·       ─────┬────
2026-10-24T19:50:25.2047356Z      ·            ╰── Cannot access ref value during render
2026-10-24T19:50:25.2047412Z  186 │
2026-10-24T19:50:25.2047469Z      ╰────
2026-10-24T19:50:25.2047947Z   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-24T19:50:25.2048239Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2048241Z
2026-10-24T19:50:25.2048388Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2048548Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-24T19:50:25.2048635Z  184 │     return () => subscription.remove();
2026-10-24T19:50:25.2048699Z  185 │   }, [controller]);
2026-10-24T19:50:25.2048851Z      ·      ──────┬─────
2026-10-24T19:50:25.2049041Z      ·            ╰── Cannot access ref value during render
2026-10-24T19:50:25.2049095Z  186 │
2026-10-24T19:50:25.2049146Z      ╰────
2026-10-24T19:50:25.2049619Z   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-24T19:50:25.2049910Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2049913Z
2026-10-24T19:50:25.2050057Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2050221Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-24T19:50:25.2050280Z  191 │     },
2026-10-24T19:50:25.2050353Z  192 │     [controller, recorder],
2026-10-24T19:50:25.2050429Z      ·      ─────┬────
2026-10-24T19:50:25.2050573Z      ·           ╰── Cannot access ref value during render
2026-10-24T19:50:25.2050627Z  193 │   );
2026-10-24T19:50:25.2050678Z      ╰────
2026-10-24T19:50:25.2051151Z   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-24T19:50:25.2051443Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2051446Z
2026-10-24T19:50:25.2051596Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2051758Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-24T19:50:25.2051850Z  174 │   const controller = session.controller;
2026-10-24T19:50:25.2051937Z  175 │   const recorder = recorderRef.current;
2026-10-24T19:50:25.2052045Z      ·                    ─────────┬─────────
2026-10-24T19:50:25.2052206Z      ·                             ╰── Cannot access ref value during render
2026-10-24T19:50:25.2052261Z  176 │
2026-10-24T19:50:25.2052312Z      ╰────
2026-10-24T19:50:25.2052791Z   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-24T19:50:25.2053089Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2053092Z
2026-10-24T19:50:25.2053237Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2053396Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-24T19:50:25.2053452Z  191 │     },
2026-10-24T19:50:25.2053524Z  192 │     [controller, recorder],
2026-10-24T19:50:25.2053615Z      ·     ───────────┬──────────
2026-10-24T19:50:25.2053766Z      ·                ╰── Cannot access ref value during render
2026-10-24T19:50:25.2053821Z  193 │   );
2026-10-24T19:50:25.2053874Z      ╰────
2026-10-24T19:50:25.2054432Z   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-24T19:50:25.2054765Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2054767Z
2026-10-24T19:50:25.2054912Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2055071Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-24T19:50:25.2055160Z  245 │     return () => clearInterval(intervalId);
2026-10-24T19:50:25.2055273Z  246 │   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T19:50:25.2055362Z      ·                    ─────┬────
2026-10-24T19:50:25.2055525Z      ·                         ╰── Cannot access ref value during render
2026-10-24T19:50:25.2055582Z  247 │
2026-10-24T19:50:25.2055633Z      ╰────
2026-10-24T19:50:25.2056103Z   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-24T19:50:25.2056393Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2056395Z
2026-10-24T19:50:25.2056539Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2056699Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-24T19:50:25.2056792Z  245 │     return () => clearInterval(intervalId);
2026-10-24T19:50:25.2056901Z  246 │   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T19:50:25.2057034Z      ·      ────────────────────────┬───────────────────────
2026-10-24T19:50:25.2057196Z      ·                              ╰── Cannot access ref value during render
2026-10-24T19:50:25.2057249Z  247 │
2026-10-24T19:50:25.2057301Z      ╰────
2026-10-24T19:50:25.2057777Z   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-24T19:50:25.2058076Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2058083Z
2026-10-24T19:50:25.2058226Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2058385Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-24T19:50:25.2058455Z  260 │     setOwnerFocused,
2026-10-24T19:50:25.2058516Z  261 │     session,
2026-10-24T19:50:25.2058587Z      ·     ───┬───
2026-10-24T19:50:25.2058729Z      ·        ╰── Cannot access ref value during render
2026-10-24T19:50:25.2058788Z  262 │     stop,
2026-10-24T19:50:25.2058838Z      ╰────
2026-10-24T19:50:25.2059386Z   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-24T19:50:25.2059721Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2059723Z
2026-10-24T19:50:25.2059867Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2060026Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-24T19:50:25.2060080Z  250 │
2026-10-24T19:50:25.2060221Z  251 │ ╭─▶   return {
2026-10-24T19:50:25.2060435Z  252 │ │       isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-24T19:50:25.2060514Z  253 │ │       state,
2026-10-24T19:50:25.2060606Z  254 │ │       audioLevels,
2026-10-24T19:50:25.2060704Z  255 │ │       elapsedSeconds,
2026-10-24T19:50:25.2060835Z  256 │ │       isBusy: voiceInputBlocksSubmission(state),
2026-10-24T19:50:25.2060917Z  257 │ │       ownerKey,
2026-10-24T19:50:25.2060992Z  258 │ │       label,
2026-10-24T19:50:25.2061082Z  259 │ │       focusedOwners,
2026-10-24T19:50:25.2061178Z  260 │ │       setOwnerFocused,
2026-10-24T19:50:25.2061258Z  261 │ │       session,
2026-10-24T19:50:25.2061333Z  262 │ │       stop,
2026-10-24T19:50:25.2061413Z  263 │ │       cancel,
2026-10-24T19:50:25.2061541Z  264 │ ├─▶   };
2026-10-24T19:50:25.2061752Z      · ╰──── Cannot access ref value during render
2026-10-24T19:50:25.2061809Z  265 │     }
2026-10-24T19:50:25.2061862Z      ╰────
2026-10-24T19:50:25.2062339Z   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-24T19:50:25.2062634Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2062637Z
2026-10-24T19:50:25.2062795Z   ⚠ react(immutability): This value cannot be modified
2026-10-24T19:50:25.2062953Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T19:50:25.2063119Z  121 │   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T19:50:25.2063248Z  122 │   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T19:50:25.2063329Z      ·         ─────┬─────
2026-10-24T19:50:25.2063466Z      ·              ╰── `audioLevels` originates here
2026-10-24T19:50:25.2063586Z  123 │   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T19:50:25.2063733Z  124 │   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-24T19:50:25.2063786Z  125 │
2026-10-24T19:50:25.2063920Z  126 │   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T19:50:25.2064021Z  127 │     const recorder = createLazyVoiceRecorder({
2026-10-24T19:50:25.2064161Z  128 │       create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T19:50:25.2064315Z  129 │       onStatus: (status: RecordingStatus) => {
2026-10-24T19:50:25.2064473Z  130 │         sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T19:50:25.2064560Z  131 │           isFinished: status.isFinished,
2026-10-24T19:50:25.2064705Z  132 │           hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T19:50:25.2064779Z  133 │           error: status.error,
2026-10-24T19:50:25.2064847Z  134 │           url: status.url,
2026-10-24T19:50:25.2064906Z  135 │         });
2026-10-24T19:50:25.2064963Z  136 │       },
2026-10-24T19:50:25.2065130Z  137 │       // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T19:50:25.2065207Z  138 │       selectInput: (inputs) => {
2026-10-24T19:50:25.2065332Z  139 │         const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T19:50:25.2065445Z  140 │         if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T19:50:25.2065584Z  141 │         const known = microphoneOrder(preferences.value.microphones);
2026-10-24T19:50:25.2065699Z  142 │         const order = rememberMicrophones(known, inputs);
2026-10-24T19:50:25.2065773Z  143 │         if (order !== known) {
2026-10-24T19:50:25.2065880Z  144 │           registry.set(updateMobilePreferencesAtom, {
2026-10-24T19:50:25.2065962Z  145 │             transform: (current) => ({
2026-10-24T19:50:25.2066134Z  146 │               microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T19:50:25.2066196Z  147 │             }),
2026-10-24T19:50:25.2066257Z  148 │           });
2026-10-24T19:50:25.2066314Z  149 │         }
2026-10-24T19:50:25.2066423Z  150 │         return preferredMicrophoneInput(inputs, order);
2026-10-24T19:50:25.2066481Z  151 │       },
2026-10-24T19:50:25.2066536Z  152 │     });
2026-10-24T19:50:25.2066623Z  153 │     recorderRef.current = recorder;
2026-10-24T19:50:25.2066728Z  154 │     sessionRef.current = new VoiceInputSession({
2026-10-24T19:50:25.2066790Z  155 │       recorder,
2026-10-24T19:50:25.2066889Z  156 │       getTranscriber: getLocalVoiceTranscriber,
2026-10-24T19:50:25.2066974Z  157 │       requestPermission: async () => {
2026-10-24T19:50:25.2067104Z  158 │         const permission = await requestRecordingPermissionsAsync();
2026-10-24T19:50:25.2067261Z  159 │         return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T19:50:25.2067318Z  160 │       },
2026-10-24T19:50:25.2067426Z  161 │       configureRecording: configureVoiceRecordingAudio,
2026-10-24T19:50:25.2067532Z  162 │       releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T19:50:25.2067634Z  163 │       deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T19:50:25.2067719Z  164 │       onStateChange: (nextState) =>
2026-10-24T19:50:25.2067784Z  165 │         setState({
2026-10-24T19:50:25.2067855Z  166 │           state: nextState,
2026-10-24T19:50:25.2067962Z  167 │           ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T19:50:25.2068061Z  168 │           label: sessionRef.current?.label ?? null,
2026-10-24T19:50:25.2068118Z  169 │         }),
2026-10-24T19:50:25.2068175Z  170 │     });
2026-10-24T19:50:25.2068230Z  171 │   }
2026-10-24T19:50:25.2068282Z  172 │
2026-10-24T19:50:25.2068365Z  173 │   const session = sessionRef.current;
2026-10-24T19:50:25.2068454Z  174 │   const controller = session.controller;
2026-10-24T19:50:25.2068538Z  175 │   const recorder = recorderRef.current;
2026-10-24T19:50:25.2068592Z  176 │
2026-10-24T19:50:25.2068656Z  177 │   useEffect(() => {
2026-10-24T19:50:25.2068867Z  178 │     const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-24T19:50:25.2069041Z  179 │       // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-24T19:50:25.2069181Z  180 │       // real background state cancels preparation; recorder status handles
2026-10-24T19:50:25.2069285Z  181 │       // calls and route interruptions during capture.
2026-10-24T19:50:25.2069421Z  182 │       if (nextState === "background") controller.appMovedToBackground();
2026-10-24T19:50:25.2069476Z  183 │     });
2026-10-24T19:50:25.2069561Z  184 │     return () => subscription.remove();
2026-10-24T19:50:25.2069625Z  185 │   }, [controller]);
2026-10-24T19:50:25.2069677Z  186 │
2026-10-24T19:50:25.2069738Z  187 │   useEffect(
2026-10-24T19:50:25.2069798Z  188 │     () => () => {
2026-10-24T19:50:25.2069872Z  189 │       controller.dispose();
2026-10-24T19:50:25.2069940Z  190 │       recorder.release();
2026-10-24T19:50:25.2069995Z  191 │     },
2026-10-24T19:50:25.2070069Z  192 │     [controller, recorder],
2026-10-24T19:50:25.2070127Z  193 │   );
2026-10-24T19:50:25.2070179Z  194 │
2026-10-24T19:50:25.2070243Z  195 │   useEffect(() => {
2026-10-24T19:50:25.2070334Z  196 │     if (state.phase !== "recording") return;
2026-10-24T19:50:25.2070386Z  197 │
2026-10-24T19:50:25.2070535Z  198 │     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-24T19:50:25.2070640Z  199 │     const activation = activateKeepAwakeAsync(tag);
2026-10-24T19:50:25.2070720Z  200 │     void activation.catch(() => {});
2026-10-24T19:50:25.2070784Z  201 │     return () => {
2026-10-24T19:50:25.2070934Z  202 │       // Release after activation settles, even if the recording ends immediately.
2026-10-24T19:50:25.2071074Z  203 │       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-24T19:50:25.2071128Z  204 │     };
2026-10-24T19:50:25.2071212Z  205 │   }, [keepAwakeId, state.phase]);
2026-10-24T19:50:25.2071267Z  206 │
2026-10-24T19:50:25.2071329Z  207 │   useEffect(() => {
2026-10-24T19:50:25.2071463Z  208 │     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T19:50:25.2071514Z  209 │
2026-10-24T19:50:25.2071635Z  210 │     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T19:50:25.2071789Z  211 │       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T19:50:25.2071893Z  212 │       audioLevels.value = audioLevelsRef.current;
2026-10-24T19:50:25.2071972Z      ·       ─────┬─────
2026-10-24T19:50:25.2072119Z      ·            ╰── `audioLevels` cannot be modified
2026-10-24T19:50:25.2072173Z  213 │     }
2026-10-24T19:50:25.2072226Z      ╰────
2026-10-24T19:50:25.2072505Z   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-24T19:50:25.2072823Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T19:50:25.2072826Z
2026-10-24T19:50:25.2073030Z   ⚠ react(immutability): Cannot modify local variables after render completes
2026-10-24T19:50:25.2073189Z      ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T19:50:25.2073242Z  206 │
2026-10-24T19:50:25.2073306Z  207 │   useEffect(() => {
2026-10-24T19:50:25.2073383Z      ·             ───┬───
2026-10-24T19:50:25.2073666Z      ·                ╰── This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-24T19:50:25.2073836Z  208 │     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T19:50:25.2073887Z  209 │
2026-10-24T19:50:25.2074031Z  210 │     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T19:50:25.2074183Z  211 │       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T19:50:25.2074286Z  212 │       audioLevels.value = audioLevelsRef.current;
2026-10-24T19:50:25.2074362Z      ·       ─────┬─────
2026-10-24T19:50:25.2074496Z      ·            ╰── This modifies `audioLevels`
2026-10-24T19:50:25.2074550Z  213 │     }
2026-10-24T19:50:25.2074602Z      ╰────
2026-10-24T19:50:25.2074947Z   help: This argument is a function which may reassign or mutate `audioLevels` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T19:50:25.2075261Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T19:50:25.2075268Z
2026-10-24T19:50:25.2075613Z   ⚠ 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-24T19:50:25.2075762Z     ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18]
2026-10-24T19:50:25.2075924Z  49 │   for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) {
2026-10-24T19:50:25.2076098Z  50 │     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
2026-10-24T19:50:25.2076183Z     ·                  ─────────
2026-10-24T19:50:25.2076369Z  51 │     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
2026-10-24T19:50:25.2076426Z     ╰────
2026-10-24T19:50:25.2076429Z
2026-10-24T19:50:25.2076767Z   ⚠ 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-24T19:50:25.2076913Z     ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18]
2026-10-24T19:50:25.2077080Z  50 │     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
2026-10-24T19:50:25.2077258Z  51 │     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
2026-10-24T19:50:25.2077341Z     ·                  ─────────
2026-10-24T19:50:25.2077394Z  52 │   }
2026-10-24T19:50:25.2077445Z     ╰────
2026-10-24T19:50:25.2077447Z
2026-10-24T19:50:25.2077850Z   ⚠ 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-24T19:50:25.2078030Z     ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5]
2026-10-24T19:50:25.2078094Z  54 │   assert.equal(
2026-10-24T19:50:25.2078269Z  55 │     Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"),
2026-10-24T19:50:25.2078339Z     ·     ─────────
2026-10-24T19:50:25.2078395Z  56 │     true,
2026-10-24T19:50:25.2078445Z     ╰────
2026-10-24T19:50:25.2078448Z
2026-10-24T19:50:25.2078785Z   ⚠ 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-24T19:50:25.2078926Z     ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5]
2026-10-24T19:50:25.2078993Z  58 │   assert.equal(
2026-10-24T19:50:25.2079183Z  59 │     Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"),
2026-10-24T19:50:25.2079255Z     ·     ─────────
2026-10-24T19:50:25.2079311Z  60 │     true,
2026-10-24T19:50:25.2079362Z     ╰────
2026-10-24T19:50:25.2079364Z
2026-10-24T19:50:25.2079699Z   ⚠ 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-24T19:50:25.2079849Z      ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16]
2026-10-24T19:50:25.2079901Z  102 │
2026-10-24T19:50:25.2080068Z  103 │   assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true);
2026-10-24T19:50:25.2080152Z      ·                ─────────
2026-10-24T19:50:25.2080212Z  104 │ });
2026-10-24T19:50:25.2080265Z      ╰────
2026-10-24T19:50:25.2080268Z
2026-10-24T19:50:25.2080749Z   ⚠ 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-24T19:50:25.2080872Z      ╭─[packages/shared/src/atomicWrite.test.ts:139:5]
2026-10-24T19:50:25.2080947Z  138 │       Effect.gen(function* () {
2026-10-24T19:50:25.2081143Z  139 │ ╭─▶     while (fiber.pollUnsafe() === undefined) {
2026-10-24T19:50:25.2081268Z  140 │ │         yield* TestClock.adjust("100 millis");
2026-10-24T19:50:25.2081602Z  141 │ │         // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock
2026-10-24T19:50:25.2081794Z  142 │ │         yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve)));
2026-10-24T19:50:25.2081924Z  143 │ ╰─▶     }
2026-10-24T19:50:25.2082008Z  144 │         return yield* Fiber.join(fiber);
2026-10-24T19:50:25.2082060Z      ╰────
2026-10-24T19:50:25.2082063Z
2026-10-24T19:50:25.2082351Z   ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-24T19:50:25.2082485Z      ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20]
2026-10-24T19:50:25.2082540Z  284 │     },
2026-10-24T19:50:25.2082621Z  285 │     (effect, flow, stopSessions) =>
2026-10-24T19:50:25.2082766Z      ·                    ──────┬─────
2026-10-24T19:50:25.2082952Z      ·                          ╰── 'stopSessions' is declared here
2026-10-24T19:50:25.2083017Z  286 │       effect.pipe(
2026-10-24T19:50:25.2083068Z      ╰────
2026-10-24T19:50:25.2083170Z   help: Consider removing this parameter.
2026-10-24T19:50:25.2083173Z
2026-10-24T19:50:25.2083381Z   ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used.
2026-10-24T19:50:25.2083529Z      ╭─[packages/client-runtime/src/work-log/presentation.ts:237:10]
2026-10-24T19:50:25.2083584Z  236 │
2026-10-24T19:50:25.2083701Z  237 │ function nonEmptyString(value: unknown): string | null {
2026-10-24T19:50:25.2083785Z      ·          ───────┬──────
2026-10-24T19:50:25.2083966Z      ·                 ╰── 'nonEmptyString' is declared here
2026-10-24T19:50:25.2084117Z  238 │   return typeof value === "string" && value.trim().length > 0 ? value : null;
2026-10-24T19:50:25.2084172Z      ╰────
2026-10-24T19:50:25.2084278Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2084281Z
2026-10-24T19:50:25.2084424Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2084576Z      ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27]
2026-10-24T19:50:25.2084758Z  151 │         <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
2026-10-24T19:50:25.2084836Z  152 │           {props.children(open)}
2026-10-24T19:50:25.2084925Z      ·                           ──┬─
2026-10-24T19:50:25.2085084Z      ·                             ╰── Cannot access ref value during render
2026-10-24T19:50:25.2085151Z  153 │         </View>
2026-10-24T19:50:25.2085205Z      ╰────
2026-10-24T19:50:25.2085685Z   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-24T19:50:25.2085984Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2085986Z
2026-10-24T19:50:25.2086187Z   ⚠ react(memo-dependencies): Found missing/extra memoization dependencies
2026-10-24T19:50:25.2086337Z      ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9]
2026-10-24T19:50:25.2086481Z  139 │       if (action.id !== undefined) {
2026-10-24T19:50:25.2086563Z  140 │         props.onPressAction?.({
2026-10-24T19:50:25.2086638Z      ·         ──┬──
2026-10-24T19:50:25.2086770Z      ·           ╰── Missing dependency `props`
2026-10-24T19:50:25.2086863Z  141 │           nativeEvent: { event: action.id },
2026-10-24T19:50:25.2087009Z  142 │         } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
2026-10-24T19:50:25.2087065Z  143 │       }
2026-10-24T19:50:25.2087121Z  144 │     },
2026-10-24T19:50:25.2087202Z  145 │     [close, props.onPressAction],
2026-10-24T19:50:25.2087295Z      ·             ─────────┬─────────
2026-10-24T19:50:25.2087512Z      ·                      ╰── Overly precise dependency `props.onPressAction`, use `props` instead
2026-10-24T19:50:25.2087567Z  146 │   );
2026-10-24T19:50:25.2087619Z      ╰────
2026-10-24T19:50:25.2088184Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-24T19:50:25.2088550Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2088552Z
2026-10-24T19:50:25.2088931Z   ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownOption(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T19:50:25.2089055Z      ╭─[packages/shared/src/otelEnvironment.ts:146:14]
2026-10-24T19:50:25.2089114Z  145 │     name,
2026-10-24T19:50:25.2089257Z  146 │     (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()),
2026-10-24T19:50:25.2089368Z      ·              ──────────────────────────
2026-10-24T19:50:25.2089490Z  147 │     `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`,
2026-10-24T19:50:25.2089542Z      ╰────
2026-10-24T19:50:25.2089545Z
2026-10-24T19:50:25.2089805Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.2089937Z     ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5]
2026-10-24T19:50:25.2090045Z  83 │   const [nowMs, setNowMs] = useState(() => Date.now());
2026-10-24T19:50:25.2090110Z  84 │   useEffect(() => {
2026-10-24T19:50:25.2090180Z     ·   ────┬────
2026-10-24T19:50:25.2090311Z     ·       ╰── This is the containing effect
2026-10-24T19:50:25.2090408Z  85 │     if (!actionState.isRunning) return;
2026-10-24T19:50:25.2090482Z  86 │     setNowMs(Date.now());
2026-10-24T19:50:25.2090552Z     ·     ────┬───
2026-10-24T19:50:25.2090720Z     ·         ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.2090847Z  87 │     const interval = setInterval(() => setNowMs(Date.now()), 1000);
2026-10-24T19:50:25.2090898Z     ╰────
2026-10-24T19:50:25.2091513Z   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-24T19:50:25.2091846Z   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-24T19:50:25.2091851Z
2026-10-24T19:50:25.2092060Z   ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T19:50:25.2092195Z    ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8]
2026-10-24T19:50:25.2092269Z  2 │   AuthDiagnosticsReadScope,
2026-10-24T19:50:25.2092338Z  3 │   type AuthSessionState,
2026-10-24T19:50:25.2092421Z    ·        ────────┬───────
2026-10-24T19:50:25.2092569Z    ·                ╰── 'AuthSessionState' is imported here
2026-10-24T19:50:25.2092638Z  4 │   sessionGrantsScope,
2026-10-24T19:50:25.2092689Z    ╰────
2026-10-24T19:50:25.2092787Z   help: Consider removing this import.
2026-10-24T19:50:25.2092789Z
2026-10-24T19:50:25.2093081Z   ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression
2026-10-24T19:50:25.2093249Z     ╭─[packages/shared/src/serverSettings.test.ts:35:7]
2026-10-24T19:50:25.2093432Z  34 │     const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) =>
2026-10-24T19:50:25.2093527Z  35 │       instanceId === configured ? true : false,
2026-10-24T19:50:25.2093644Z     ·       ────────────────────────────────────────
2026-10-24T19:50:25.2093700Z  36 │     );
2026-10-24T19:50:25.2093750Z     ╰────
2026-10-24T19:50:25.2093844Z   help: Remove this ternary operator
2026-10-24T19:50:25.2093847Z
2026-10-24T19:50:25.2094070Z   ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used.
2026-10-24T19:50:25.2094201Z    ╭─[packages/client-runtime/src/state/threadSort.ts:4:13]
2026-10-24T19:50:25.2094324Z  3 │ import type { EnvironmentThreadShell } from "./models.ts";
2026-10-24T19:50:25.2094408Z  4 │ import * as Arr from "effect/Array";
2026-10-24T19:50:25.2094481Z    ·             ─┬─
2026-10-24T19:50:25.2094605Z    ·              ╰── 'Arr' is imported here
2026-10-24T19:50:25.2094687Z  5 │ import * as Order from "effect/Order";
2026-10-24T19:50:25.2094738Z    ╰────
2026-10-24T19:50:25.2094834Z   help: Consider removing this import.
2026-10-24T19:50:25.2094836Z
2026-10-24T19:50:25.2095030Z   ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used.
2026-10-24T19:50:25.2095159Z    ╭─[packages/client-runtime/src/state/threadSort.ts:5:13]
2026-10-24T19:50:25.2095236Z  4 │ import * as Arr from "effect/Array";
2026-10-24T19:50:25.2095317Z  5 │ import * as Order from "effect/Order";
2026-10-24T19:50:25.2095399Z    ·             ──┬──
2026-10-24T19:50:25.2095532Z    ·               ╰── 'Order' is imported here
2026-10-24T19:50:25.2095582Z  6 │
2026-10-24T19:50:25.2095633Z    ╰────
2026-10-24T19:50:25.2095729Z   help: Consider removing this import.
2026-10-24T19:50:25.2095731Z
2026-10-24T19:50:25.2096010Z   ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2096155Z     ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
2026-10-24T19:50:25.2096209Z  60 │ ) {
2026-10-24T19:50:25.2096379Z  61 │   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
2026-10-24T19:50:25.2096460Z     ·         ──────┬──────
2026-10-24T19:50:25.2096606Z     ·               ╰── 'useDragRegion' is declared here
2026-10-24T19:50:25.2096702Z  62 │   const isInline = props.mode === "inline";
2026-10-24T19:50:25.2096753Z     ╰────
2026-10-24T19:50:25.2096858Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2096860Z
2026-10-24T19:50:25.2097347Z   ⚠ 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-24T19:50:25.2097504Z       ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7]
2026-10-24T19:50:25.2097598Z  1679 │           yield* harness.replaceSession;
2026-10-24T19:50:25.2097810Z  1680 │ ╭─▶       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T19:50:25.2098024Z  1681 │ │           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
2026-10-24T19:50:25.2098149Z  1682 │ │             break;
2026-10-24T19:50:25.2098228Z  1683 │ │           }
2026-10-24T19:50:25.2098337Z  1684 │ │           yield* Effect.yieldNow;
2026-10-24T19:50:25.2098470Z  1685 │ ╰─▶       }
2026-10-24T19:50:25.2098546Z  1686 │           yield* Queue.offer(
2026-10-24T19:50:25.2098598Z       ╰────
2026-10-24T19:50:25.2098601Z
2026-10-24T19:50:25.2099078Z   ⚠ 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-24T19:50:25.2099238Z       ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7]
2026-10-24T19:50:25.2099329Z  1788 │           yield* harness.replaceSession;
2026-10-24T19:50:25.2099540Z  1789 │ ╭─▶       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T19:50:25.2099700Z  1790 │ │           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
2026-10-24T19:50:25.2099807Z  1791 │ │           yield* Effect.yieldNow;
2026-10-24T19:50:25.2099939Z  1792 │ ╰─▶       }
2026-10-24T19:50:25.2100070Z  1793 │           expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
2026-10-24T19:50:25.2100123Z       ╰────
2026-10-24T19:50:25.2100126Z
2026-10-24T19:50:25.2100313Z   ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T19:50:25.2100425Z      ╭─[packages/shared/src/qrCode.ts:458:44]
2026-10-24T19:50:25.2100496Z  457 │   ): Array<byte> {
2026-10-24T19:50:25.2100602Z  458 │     let result: Array<byte> = divisor.map((_) => 0);
2026-10-24T19:50:25.2100703Z      ·                                            ┬
2026-10-24T19:50:25.2100849Z      ·                                            ╰── '_' is declared here
2026-10-24T19:50:25.2100922Z  459 │     for (const b of data) {
2026-10-24T19:50:25.2100975Z      ╰────
2026-10-24T19:50:25.2101077Z   help: Consider removing this parameter.
2026-10-24T19:50:25.2101080Z
2026-10-24T19:50:25.2101303Z   ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T19:50:25.2101440Z       ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15]
2026-10-24T19:50:25.2101572Z  1021 │             instanceId,
2026-10-24T19:50:25.2101748Z  1022 │             { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models },
2026-10-24T19:50:25.2101890Z       ·               ──────────────────────────────────────────────────
2026-10-24T19:50:25.2101950Z  1023 │           ]),
2026-10-24T19:50:25.2102001Z       ╰────
2026-10-24T19:50:25.2102273Z   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-24T19:50:25.2102276Z
2026-10-24T19:50:25.2102458Z   ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-24T19:50:25.2102643Z      ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34]
2026-10-24T19:50:25.2102713Z  115 │     return [...commands];
2026-10-24T19:50:25.2102854Z  116 │   }, [activeThreadRef, pathname, registrationVersion, navigation]);
2026-10-24T19:50:25.2102976Z      ·                                  ─────────┬─────────
2026-10-24T19:50:25.2103162Z      ·                                           ╰── Unnecessary dependency `registrationVersion`
2026-10-24T19:50:25.2103216Z  117 │
2026-10-24T19:50:25.2103268Z      ╰────
2026-10-24T19:50:25.2103588Z   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-24T19:50:25.2103933Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2103938Z
2026-10-24T19:50:25.2104165Z   ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T19:50:25.2104306Z     ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7]
2026-10-24T19:50:25.2104371Z  20 │     [instanceId]: {
2026-10-24T19:50:25.2104451Z  21 │       ...(state[instanceId] ?? {}),
2026-10-24T19:50:25.2104552Z     ·       ────────────────────────────
2026-10-24T19:50:25.2104618Z  22 │       [model]: options,
2026-10-24T19:50:25.2104670Z     ╰────
2026-10-24T19:50:25.2104938Z   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-24T19:50:25.2104942Z
2026-10-24T19:50:25.2105143Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.2105285Z       ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1321:5]
2026-10-24T19:50:25.2105370Z  1320 │     queuedMessagesByThreadKey,
2026-10-24T19:50:25.2105436Z  1321 │     retryTick,
2026-10-24T19:50:25.2105511Z       ·     ────┬────
2026-10-24T19:50:25.2105656Z       ·         ╰── Unnecessary dependency `retryTick`
2026-10-24T19:50:25.2105728Z  1322 │     restoreQueuedMessage,
2026-10-24T19:50:25.2105779Z       ╰────
2026-10-24T19:50:25.2106079Z   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-24T19:50:25.2106399Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2106402Z
2026-10-24T19:50:25.2106764Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.2106979Z      ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33]
2026-10-24T19:50:25.2107077Z  113 │     return () => cancelAnimationFrame(frame);
2026-10-24T19:50:25.2107178Z  114 │   }, [restoreSearch, tabActive, bottomSearch]);
2026-10-24T19:50:25.2107282Z      ·                                 ──────┬─────
2026-10-24T19:50:25.2107453Z      ·                                       ╰── Unnecessary dependency `bottomSearch`
2026-10-24T19:50:25.2107558Z  115 │   const composeButton = nativeToolbarCompose ? (
2026-10-24T19:50:25.2107609Z      ╰────
2026-10-24T19:50:25.2107903Z   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-24T19:50:25.2108227Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2108232Z
2026-10-24T19:50:25.2108704Z   ⚠ 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-24T19:50:25.2108829Z      ╭─[packages/effect-acp/src/protocol.test.ts:500:31]
2026-10-24T19:50:25.2108882Z  499 │
2026-10-24T19:50:25.2108997Z  500 │       const response = yield* Schema.decodeUnknownEffect(
2026-10-24T19:50:25.2109118Z      ·                               ──────────────────────────
2026-10-24T19:50:25.2109226Z  501 │         Schema.fromJsonString(JsonRpcErrorResponse),
2026-10-24T19:50:25.2109278Z      ╰────
2026-10-24T19:50:25.2109280Z
2026-10-24T19:50:25.2109505Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T19:50:25.2109642Z     ╭─[apps/web/src/lib/composerContextReferences.ts:90:40]
2026-10-24T19:50:25.2109716Z  89 │   let cursor = prompt.length;
2026-10-24T19:50:25.2109821Z  90 │   for (const occurrence of occurrences.reverse()) {
2026-10-24T19:50:25.2109926Z     ·                                        ───────
2026-10-24T19:50:25.2110007Z  91 │     let { start, end } = occurrence;
2026-10-24T19:50:25.2110057Z     ╰────
2026-10-24T19:50:25.2110322Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T19:50:25.2110325Z
2026-10-24T19:50:25.2110543Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T19:50:25.2110671Z     ╭─[apps/web/src/lib/announce.browser.test.ts:41:46]
2026-10-24T19:50:25.2110725Z  40 │
2026-10-24T19:50:25.2110846Z  41 │     expect(regionTexts()).toEqual([...first].reverse());
2026-10-24T19:50:25.2110954Z     ·                                              ───────
2026-10-24T19:50:25.2111049Z  42 │     expect(regionTexts()).toContain("Claude");
2026-10-24T19:50:25.2111101Z     ╰────
2026-10-24T19:50:25.2111361Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T19:50:25.2111363Z
2026-10-24T19:50:25.2111888Z   ⚠ 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-24T19:50:25.2112051Z      ╭─[packages/effect-acp/src/errors.test.ts:129:28]
2026-10-24T19:50:25.2112144Z  128 │       const secret = "acp-summary-secret";
2026-10-24T19:50:25.2112252Z  129 │       const cause = yield* Schema.decodeUnknownEffect(
2026-10-24T19:50:25.2112371Z      ·                            ──────────────────────────
2026-10-24T19:50:25.2112440Z  130 │         Schema.Struct({
2026-10-24T19:50:25.2112492Z      ╰────
2026-10-24T19:50:25.2112495Z
2026-10-24T19:50:25.2112873Z   ⚠ 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-24T19:50:25.2112990Z       ╭─[packages/effect-acp/src/client.ts:1269:11]
2026-10-24T19:50:25.2113148Z  1268 │         extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
2026-10-24T19:50:25.2113327Z  1269 │           Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
2026-10-24T19:50:25.2113432Z       ·           ──────────────────────────
2026-10-24T19:50:25.2113577Z  1270 │             Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
2026-10-24T19:50:25.2113630Z       ╰────
2026-10-24T19:50:25.2113633Z
2026-10-24T19:50:25.2114013Z   ⚠ 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-24T19:50:25.2114132Z     ╭─[packages/effect-acp/src/schema.test.ts:18:12]
2026-10-24T19:50:25.2114294Z  17 │     const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
2026-10-24T19:50:25.2114417Z  18 │     expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
2026-10-24T19:50:25.2114503Z     ·            ─────────
2026-10-24T19:50:25.2114567Z  19 │     expect(
2026-10-24T19:50:25.2114617Z     ╰────
2026-10-24T19:50:25.2114619Z
2026-10-24T19:50:25.2114957Z   ⚠ 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-24T19:50:25.2115075Z     ╭─[packages/effect-acp/src/schema.test.ts:20:7]
2026-10-24T19:50:25.2115135Z  19 │     expect(
2026-10-24T19:50:25.2115306Z  20 │       Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
2026-10-24T19:50:25.2115379Z     ·       ─────────
2026-10-24T19:50:25.2115443Z  21 │     ).toBe(true);
2026-10-24T19:50:25.2115494Z     ╰────
2026-10-24T19:50:25.2115496Z
2026-10-24T19:50:25.2115753Z   ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used.
2026-10-24T19:50:25.2115869Z     ╭─[apps/web/src/lib/terminalContext.ts:56:10]
2026-10-24T19:50:25.2115922Z  55 │
2026-10-24T19:50:25.2116022Z  56 │ function normalizeTerminalContextSelection(
2026-10-24T19:50:25.2116132Z     ·          ────────────────┬────────────────
2026-10-24T19:50:25.2116325Z     ·                          ╰── 'normalizeTerminalContextSelection' is declared here
2026-10-24T19:50:25.2116413Z  57 │   selection: TerminalContextSelection,
2026-10-24T19:50:25.2116466Z     ╰────
2026-10-24T19:50:25.2116570Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2116573Z
2026-10-24T19:50:25.2116833Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2117024Z      ╭─[packages/provider-grok/src/server/adapter.ts:408:7]
2026-10-24T19:50:25.2117111Z  407 │
2026-10-24T19:50:25.2117181Z  408 │ const layer: Layer.Layer<
2026-10-24T19:50:25.2117249Z      ·       ──┬──
2026-10-24T19:50:25.2117375Z      ·         ╰── 'layer' is declared here
2026-10-24T19:50:25.2117466Z  409 │   ProviderAdapter.ProviderAdapterV2,
2026-10-24T19:50:25.2117517Z      ╰────
2026-10-24T19:50:25.2117618Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2117621Z
2026-10-24T19:50:25.2117790Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T19:50:25.2117907Z       ╭─[apps/web/src/components/Sidebar.tsx:1136:11]
2026-10-24T19:50:25.2118006Z  1135 │           foldSearchQuery(threadSearchQuery),
2026-10-24T19:50:25.2118078Z  1136 │           Date.now(),
2026-10-24T19:50:25.2118164Z       ·           ─────┬────
2026-10-24T19:50:25.2118301Z       ·                ╰── Cannot call impure function
2026-10-24T19:50:25.2118441Z  1137 │           // A list filter, as on mobile: a pick would move rows unexplained.
2026-10-24T19:50:25.2118491Z       ╰────
2026-10-24T19:50:25.2118784Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T19:50:25.2119089Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T19:50:25.2119091Z
2026-10-24T19:50:25.2119357Z   ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used.
2026-10-24T19:50:25.2119511Z       ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10]
2026-10-24T19:50:25.2119564Z  1619 │
2026-10-24T19:50:25.2119773Z  1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean {
2026-10-24T19:50:25.2119890Z       ·          ──────────────────┬──────────────────
2026-10-24T19:50:25.2120097Z       ·                            ╰── 'promptResponseHasMissingXAiStopReason' is declared here
2026-10-24T19:50:25.2120173Z  1621 │   const meta = response._meta;
2026-10-24T19:50:25.2120225Z       ╰────
2026-10-24T19:50:25.2120327Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2120330Z
2026-10-24T19:50:25.2120858Z   ⚠ 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-24T19:50:25.2121014Z     ╭─[packages/contracts/src/baseSchemas.test.ts:39:9]
2026-10-24T19:50:25.2121082Z  38 │       JSON.stringify(
2026-10-24T19:50:25.2121202Z  39 │         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
2026-10-24T19:50:25.2121300Z     ·         ────────────────────────
2026-10-24T19:50:25.2121367Z  40 │           { name: "a" },
2026-10-24T19:50:25.2121418Z     ╰────
2026-10-24T19:50:25.2121420Z
2026-10-24T19:50:25.2121884Z   ⚠ 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-24T19:50:25.2122028Z      ╭─[packages/contracts/src/composerContext.test.ts:181:18]
2026-10-24T19:50:25.2122170Z  180 │   it("sends a message without the records the wire cannot carry", () => {
2026-10-24T19:50:25.2122352Z  181 │     const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
2026-10-24T19:50:25.2122460Z      ·                  ────────────────────────
2026-10-24T19:50:25.2122525Z  182 │       version: 1,
2026-10-24T19:50:25.2122576Z      ╰────
2026-10-24T19:50:25.2122579Z
2026-10-24T19:50:25.2122780Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.2122895Z     ╭─[apps/mobile/src/state/thread-order.ts:29:7]
2026-10-24T19:50:25.2122971Z  28 │     getPendingThreadOrder();
2026-10-24T19:50:25.2123052Z  29 │   }, [nowMinute, snoozeWakeTick]);
2026-10-24T19:50:25.2123181Z     ·       ────┬────  ───────┬──────
2026-10-24T19:50:25.2123382Z     ·           │             ╰── Unnecessary dependency `snoozeWakeTick`
2026-10-24T19:50:25.2123522Z     ·           ╰── Unnecessary dependency `nowMinute`
2026-10-24T19:50:25.2123587Z  30 │   return pending;
2026-10-24T19:50:25.2123637Z     ╰────
2026-10-24T19:50:25.2123969Z   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-24T19:50:25.2124286Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2124288Z
2026-10-24T19:50:25.2124666Z   ⚠ 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-24T19:50:25.2124783Z     ╭─[packages/contracts/src/auth.test.ts:17:12]
2026-10-24T19:50:25.2124941Z  16 │   it("decodes legacy review credentials without offering them in new grants", () => {
2026-10-24T19:50:25.2125113Z  17 │     expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
2026-10-24T19:50:25.2125214Z     ·            ────────────────────────
2026-10-24T19:50:25.2125279Z  18 │       "review:write",
2026-10-24T19:50:25.2125330Z     ╰────
2026-10-24T19:50:25.2125333Z
2026-10-24T19:50:25.2125702Z   ⚠ 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-24T19:50:25.2125872Z     ╭─[packages/contracts/src/auth.test.ts:20:18]
2026-10-24T19:50:25.2125962Z  19 │     ]);
2026-10-24T19:50:25.2126123Z  20 │     expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
2026-10-24T19:50:25.2126231Z     ·                  ────────────────────────
2026-10-24T19:50:25.2126362Z  21 │     expect(AuthStandardClientScopes).not.toContain("review:write");
2026-10-24T19:50:25.2126484Z     ╰────
2026-10-24T19:50:25.2126487Z
2026-10-24T19:50:25.2126853Z   ⚠ 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-24T19:50:25.2126964Z     ╭─[packages/contracts/src/auth.test.ts:58:21]
2026-10-24T19:50:25.2127134Z  57 │   it("ignores unknown response permissions without falling back to broader scopes", () => {
2026-10-24T19:50:25.2127267Z  58 │     const session = Schema.decodeUnknownSync(AuthSessionState)({
2026-10-24T19:50:25.2127376Z     ·                     ────────────────────────
2026-10-24T19:50:25.2127445Z  59 │       authenticated: true,
2026-10-24T19:50:25.2127495Z     ╰────
2026-10-24T19:50:25.2127498Z
2026-10-24T19:50:25.2127704Z   ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-24T19:50:25.2127811Z      ╭─[packages/contracts/src/rpc.ts:297:8]
2026-10-24T19:50:25.2127877Z  296 │ } from "./device.ts";
2026-10-24T19:50:25.2127972Z  297 │ import {} from "./previewAutomation.ts";
2026-10-24T19:50:25.2128042Z      ·        ──
2026-10-24T19:50:25.2128099Z  298 │ import {
2026-10-24T19:50:25.2128151Z      ╰────
2026-10-24T19:50:25.2128233Z   help: Remove empty braces
2026-10-24T19:50:25.2128235Z
2026-10-24T19:50:25.2128721Z   ⚠ 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-24T19:50:25.2128874Z      ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7]
2026-10-24T19:50:25.2128934Z  168 │           });
2026-10-24T19:50:25.2129134Z  169 │ ╭─▶       for (let index = 0; index < 100; index += 1) {
2026-10-24T19:50:25.2129332Z  170 │ │           if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break;
2026-10-24T19:50:25.2129437Z  171 │ │           yield* Effect.yieldNow;
2026-10-24T19:50:25.2129570Z  172 │ ╰─▶       }
2026-10-24T19:50:25.2129633Z  173 │
2026-10-24T19:50:25.2129690Z      ╰────
2026-10-24T19:50:25.2129692Z
2026-10-24T19:50:25.2130167Z   ⚠ 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-24T19:50:25.2130316Z      ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7]
2026-10-24T19:50:25.2130424Z  177 │           yield* Deferred.succeed(releaseSave, undefined);
2026-10-24T19:50:25.2130619Z  178 │ ╭─▶       for (let index = 0; index < 100; index += 1) {
2026-10-24T19:50:25.2130754Z  179 │ │           if ((yield* Ref.get(saved)).length > 0) break;
2026-10-24T19:50:25.2130857Z  180 │ │           yield* Effect.yieldNow;
2026-10-24T19:50:25.2131068Z  181 │ ╰─▶       }
2026-10-24T19:50:25.2131164Z  182 │
2026-10-24T19:50:25.2131216Z      ╰────
2026-10-24T19:50:25.2131219Z
2026-10-24T19:50:25.2131691Z   ⚠ 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-24T19:50:25.2131836Z      ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7]
2026-10-24T19:50:25.2131965Z  306 │           yield* Deferred.succeed(releaseUnenrichedSave, undefined);
2026-10-24T19:50:25.2132160Z  307 │ ╭─▶       for (let index = 0; index < 100; index += 1) {
2026-10-24T19:50:25.2132287Z  308 │ │           const values = yield* Ref.get(saved);
2026-10-24T19:50:25.2132485Z  309 │ │           if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) {
2026-10-24T19:50:25.2132572Z  310 │ │             break;
2026-10-24T19:50:25.2132650Z  311 │ │           }
2026-10-24T19:50:25.2132754Z  312 │ │           yield* Effect.yieldNow;
2026-10-24T19:50:25.2132885Z  313 │ ╰─▶       }
2026-10-24T19:50:25.2132938Z  314 │
2026-10-24T19:50:25.2132992Z      ╰────
2026-10-24T19:50:25.2132994Z
2026-10-24T19:50:25.2133377Z   ⚠ 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-24T19:50:25.2133513Z      ╭─[apps/server/src/assets/AssetAccess.test.ts:975:35]
2026-10-24T19:50:25.2133666Z  974 │       // Every client and server release spells the resource this way on the wire.
2026-10-24T19:50:25.2133824Z  975 │       const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({
2026-10-24T19:50:25.2133985Z      ·                                   ──────────────────────────
2026-10-24T19:50:25.2134101Z  976 │         resource: { _tag: "github-media", cwd: "/repo", url },
2026-10-24T19:50:25.2134152Z      ╰────
2026-10-24T19:50:25.2134154Z
2026-10-24T19:50:25.2134609Z   ⚠ 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-24T19:50:25.2134740Z       ╭─[apps/server/src/assets/AssetAccess.test.ts:1012:32]
2026-10-24T19:50:25.2134884Z  1011 │         expect(error._tag).toBe("AssetGitHubMediaUrlValidationError");
2026-10-24T19:50:25.2135077Z  1012 │         const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error);
2026-10-24T19:50:25.2135191Z       ·                                ───────────────────
2026-10-24T19:50:25.2135287Z  1013 │         expect(encoded).not.toContain(url);
2026-10-24T19:50:25.2135339Z       ╰────
2026-10-24T19:50:25.2135342Z
2026-10-24T19:50:25.2135557Z   ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T19:50:25.2135692Z     ╭─[packages/shared/src/composerContextLegacySend.ts:19:45]
2026-10-24T19:50:25.2135816Z  18 │   const occurrences = collectComposerContextReferences(text);
2026-10-24T19:50:25.2135923Z  19 │   for (const occurrence of [...occurrences].reverse()) {
2026-10-24T19:50:25.2136089Z     ·                                             ───────
2026-10-24T19:50:25.2136234Z  20 │     const record = recordsById.get(occurrence.contextId);
2026-10-24T19:50:25.2136287Z     ╰────
2026-10-24T19:50:25.2136553Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T19:50:25.2136555Z
2026-10-24T19:50:25.2136831Z   ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2136937Z     ╭─[packages/shared/src/model.test.ts:36:7]
2026-10-24T19:50:25.2136990Z  35 │
2026-10-24T19:50:25.2137122Z  36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({
2026-10-24T19:50:25.2137197Z     ·       ─────┬────
2026-10-24T19:50:25.2137339Z     ·            ╰── 'claudeCaps' is declared here
2026-10-24T19:50:25.2137413Z  37 │   optionDescriptors: [
2026-10-24T19:50:25.2137464Z     ╰────
2026-10-24T19:50:25.2137570Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2137572Z
2026-10-24T19:50:25.2137736Z   ⚠ eslint(no-empty-pattern): Empty array binding pattern
2026-10-24T19:50:25.2137896Z       ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1437:12]
2026-10-24T19:50:25.2137949Z  1436 │
2026-10-24T19:50:25.2138015Z  1437 │ for (const [] of [
2026-10-24T19:50:25.2138085Z       ·            ──
2026-10-24T19:50:25.2138159Z  1438 │   ["github", "github.com"],
2026-10-24T19:50:25.2138210Z       ╰────
2026-10-24T19:50:25.2138497Z   help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.
2026-10-24T19:50:25.2138503Z
2026-10-24T19:50:25.2138699Z   ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used.
2026-10-24T19:50:25.2138837Z    ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3]
2026-10-24T19:50:25.2138900Z  1 │ import type {
2026-10-24T19:50:25.2138962Z  2 │   EnvironmentId,
2026-10-24T19:50:25.2139035Z    ·   ──────┬──────
2026-10-24T19:50:25.2139174Z    ·         ╰── 'EnvironmentId' is imported here
2026-10-24T19:50:25.2139261Z  3 │   ExecutionEnvironmentCapabilities,
2026-10-24T19:50:25.2139312Z    ╰────
2026-10-24T19:50:25.2139411Z   help: Consider removing this import.
2026-10-24T19:50:25.2139414Z
2026-10-24T19:50:25.2139611Z   ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops
2026-10-24T19:50:25.2139741Z      ╭─[packages/client-runtime/src/state/shell.ts:189:5]
2026-10-24T19:50:25.2139852Z  186 │     let waiting = yield* Ref.get(awaitingCompletion);
2026-10-24T19:50:25.2139918Z  187 │     let next = initial;
2026-10-24T19:50:25.2139989Z      ·         ──┬─
2026-10-24T19:50:25.2140110Z      ·           ╰── From this accumulator
2026-10-24T19:50:25.2140190Z  188 │     let receivedSnapshot = false;
2026-10-24T19:50:25.2140264Z  189 │     for (const item of items) {
2026-10-24T19:50:25.2140333Z      ·     ─┬─
2026-10-24T19:50:25.2140437Z      ·      ╰── For this loop
2026-10-24T19:50:25.2140526Z  190 │       if (item.kind === "synchronized") {
2026-10-24T19:50:25.2140591Z  191 │         waiting = false;
2026-10-24T19:50:25.2140738Z  192 │         if (Option.isSome(next.snapshot)) {
2026-10-24T19:50:25.2140891Z  193 │           next = { ...next, status: "live", error: Option.none() };
2026-10-24T19:50:25.2140977Z      ·                    ───┬───
2026-10-24T19:50:25.2141105Z      ·                       ╰── From this spread
2026-10-24T19:50:25.2141165Z  194 │         }
2026-10-24T19:50:25.2141216Z      ╰────
2026-10-24T19:50:25.2141373Z   help: Consider using `Object.assign()` to mutate the accumulator instead.
2026-10-24T19:50:25.2141527Z   note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-24T19:50:25.2141530Z
2026-10-24T19:50:25.2141737Z   ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T19:50:25.2141867Z    ╭─[packages/client-runtime/src/state/filesystem.ts:3:8]
2026-10-24T19:50:25.2141944Z  2 │   AuthFilesystemReadScope,
2026-10-24T19:50:25.2142016Z  3 │   type AuthSessionState,
2026-10-24T19:50:25.2142100Z    ·        ────────┬───────
2026-10-24T19:50:25.2142247Z    ·                ╰── 'AuthSessionState' is imported here
2026-10-24T19:50:25.2142321Z  4 │   type FilesystemBrowseEntry,
2026-10-24T19:50:25.2142372Z    ╰────
2026-10-24T19:50:25.2142470Z   help: Consider removing this import.
2026-10-24T19:50:25.2142472Z
2026-10-24T19:50:25.2142737Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.2142930Z      ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10]
2026-10-24T19:50:25.2142983Z  117 │
2026-10-24T19:50:25.2143047Z  118 │   useEffect(() => {
2026-10-24T19:50:25.2143124Z      ·   ────┬────
2026-10-24T19:50:25.2143258Z      ·       ╰── This is the containing effect
2026-10-24T19:50:25.2143336Z  119 │     void refreshNotifications();
2026-10-24T19:50:25.2143426Z      ·          ──────────┬─────────
2026-10-24T19:50:25.2143604Z      ·                    ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.2143747Z  120 │     const subscription = AppState.addEventListener("change", (state) => {
2026-10-24T19:50:25.2143798Z      ╰────
2026-10-24T19:50:25.2144487Z   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-24T19:50:25.2144849Z   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-24T19:50:25.2144851Z
2026-10-24T19:50:25.2145113Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.2145298Z      ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7]
2026-10-24T19:50:25.2145350Z  125 │
2026-10-24T19:50:25.2145414Z  126 │   useEffect(() => {
2026-10-24T19:50:25.2145484Z      ·   ────┬────
2026-10-24T19:50:25.2145613Z      ·       ╰── This is the containing effect
2026-10-24T19:50:25.2145677Z  127 │     if (!isLoaded) {
2026-10-24T19:50:25.2145771Z  128 │       setLiveActivityStatus("checking");
2026-10-24T19:50:25.2145866Z      ·       ──────────┬──────────
2026-10-24T19:50:25.2146040Z      ·                 ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.2146102Z  129 │       return;
2026-10-24T19:50:25.2146153Z      ╰────
2026-10-24T19:50:25.2146765Z   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-24T19:50:25.2147093Z   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-24T19:50:25.2147095Z
2026-10-24T19:50:25.2147267Z   ⚠ eslint(no-control-regex): Unexpected control character
2026-10-24T19:50:25.2147464Z      ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46]
2026-10-24T19:50:25.2147604Z  219 │               <Text selectable className="font-mono text-sm text-foreground">
2026-10-24T19:50:25.2147746Z  220 │                 {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")}
2026-10-24T19:50:25.2147856Z      ·                                              ──┬─
2026-10-24T19:50:25.2148028Z      ·                                                ╰── 'U+001B' is a control character.
2026-10-24T19:50:25.2148091Z  221 │               </Text>
2026-10-24T19:50:25.2148142Z      ╰────
2026-10-24T19:50:25.2148385Z   help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression.
2026-10-24T19:50:25.2148390Z
2026-10-24T19:50:25.2148573Z   ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-24T19:50:25.2148735Z      ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85]
2026-10-24T19:50:25.2148843Z   99 │   const startEditor = startScheduledTaskEditor;
2026-10-24T19:50:25.2149028Z  100 │   const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
2026-10-24T19:50:25.2149176Z      ·                                                                                     ─────┬─────
2026-10-24T19:50:25.2149383Z      ·                                                                                          ╰── Unnecessary dependency `startEditor`
2026-10-24T19:50:25.2149465Z  101 │   const readEditor = useCallback(
2026-10-24T19:50:25.2149583Z      ╰────
2026-10-24T19:50:25.2149937Z   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-24T19:50:25.2150256Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2150261Z
2026-10-24T19:50:25.2150443Z   ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-24T19:50:25.2150608Z      ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7]
2026-10-24T19:50:25.2150670Z  120 │       setEditor,
2026-10-24T19:50:25.2150734Z  121 │       startEditor,
2026-10-24T19:50:25.2150810Z      ·       ─────┬─────
2026-10-24T19:50:25.2150961Z      ·            ╰── Unnecessary dependency `startEditor`
2026-10-24T19:50:25.2151028Z  122 │       hasChanges,
2026-10-24T19:50:25.2151080Z      ╰────
2026-10-24T19:50:25.2151396Z   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-24T19:50:25.2151710Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2151712Z
2026-10-24T19:50:25.2151911Z   ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used.
2026-10-24T19:50:25.2152006Z     ╭─[apps/server/src/ws.ts:10:13]
2026-10-24T19:50:25.2152093Z   9 │ import * as Effect from "effect/Effect";
2026-10-24T19:50:25.2152183Z  10 │ import * as Fiber from "effect/Fiber";
2026-10-24T19:50:25.2152262Z     ·             ──┬──
2026-10-24T19:50:25.2152391Z     ·               ╰── 'Fiber' is imported here
2026-10-24T19:50:25.2152491Z  11 │ import * as FileSystem from "effect/FileSystem";
2026-10-24T19:50:25.2152543Z     ╰────
2026-10-24T19:50:25.2152641Z   help: Consider removing this import.
2026-10-24T19:50:25.2152644Z
2026-10-24T19:50:25.2152842Z   ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used.
2026-10-24T19:50:25.2152934Z     ╭─[apps/server/src/ws.ts:17:13]
2026-10-24T19:50:25.2153013Z  16 │ import * as Ref from "effect/Ref";
2026-10-24T19:50:25.2153106Z  17 │ import * as Schedule from "effect/Schedule";
2026-10-24T19:50:25.2153185Z     ·             ────┬───
2026-10-24T19:50:25.2153325Z     ·                 ╰── 'Schedule' is imported here
2026-10-24T19:50:25.2153413Z  18 │ import * as Schema from "effect/Schema";
2026-10-24T19:50:25.2153465Z     ╰────
2026-10-24T19:50:25.2153562Z   help: Consider removing this import.
2026-10-24T19:50:25.2153564Z
2026-10-24T19:50:25.2153867Z   ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2153994Z       ╭─[apps/server/src/ws.ts:1286:13]
2026-10-24T19:50:25.2154151Z  1285 │       const usageLimitSources = yield* UsageLimitSources.UsageLimitSources;
2026-10-24T19:50:25.2154350Z  1286 │       const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner;
2026-10-24T19:50:25.2154459Z       ·             ────────────┬───────────
2026-10-24T19:50:25.2154692Z       ·                         ╰── 'projectSetupScriptRunner' is declared here
2026-10-24T19:50:25.2154896Z  1287 │       const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker;
2026-10-24T19:50:25.2154950Z       ╰────
2026-10-24T19:50:25.2155055Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2155058Z
2026-10-24T19:50:25.2155320Z   ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts.
2026-10-24T19:50:25.2155466Z     ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14]
2026-10-24T19:50:25.2155623Z  11 │       addEventListener(_type: string, listener: (event: { data: string }) => void) {
2026-10-24T19:50:25.2155703Z  12 │         this.onmessage = listener;
2026-10-24T19:50:25.2155781Z     ·              ─────────
2026-10-24T19:50:25.2155839Z  13 │       }
2026-10-24T19:50:25.2155899Z     ╰────
2026-10-24T19:50:25.2156223Z   help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on<event>` replaces any previously registered handler.
2026-10-24T19:50:25.2156226Z
2026-10-24T19:50:25.2156432Z   ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-24T19:50:25.2156574Z     ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9]
2026-10-24T19:50:25.2156640Z  15 │       constructor() {
2026-10-24T19:50:25.2156706Z  16 │         source = this;
2026-10-24T19:50:25.2156776Z     ·         ──────
2026-10-24T19:50:25.2156833Z  17 │       }
2026-10-24T19:50:25.2156885Z     ╰────
2026-10-24T19:50:25.2157171Z   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-24T19:50:25.2157176Z
2026-10-24T19:50:25.2157385Z   ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used.
2026-10-24T19:50:25.2157547Z     ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13]
2026-10-24T19:50:25.2157635Z  24 │ import * as Schema from "effect/Schema";
2026-10-24T19:50:25.2157751Z  25 │ import * as HostProcess from "@t3tools/shared/HostProcess";
2026-10-24T19:50:25.2157834Z     ·             ─────┬─────
2026-10-24T19:50:25.2157975Z     ·                  ╰── 'HostProcess' is imported here
2026-10-24T19:50:25.2158029Z  26 │
2026-10-24T19:50:25.2158082Z     ╰────
2026-10-24T19:50:25.2158177Z   help: Consider removing this import.
2026-10-24T19:50:25.2158181Z
2026-10-24T19:50:25.2158466Z   ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2158637Z      ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11]
2026-10-24T19:50:25.2158720Z  123 │     const path = yield* Path.Path;
2026-10-24T19:50:25.2158839Z  124 │     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-24T19:50:25.2158920Z      ·           ──────┬─────
2026-10-24T19:50:25.2159059Z      ·                 ╰── 'serverConfig' is declared here
2026-10-24T19:50:25.2159202Z  125 │     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-24T19:50:25.2159253Z      ╰────
2026-10-24T19:50:25.2159355Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2159358Z
2026-10-24T19:50:25.2159697Z   ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2159896Z      ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11]
2026-10-24T19:50:25.2160011Z  124 │     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-24T19:50:25.2160152Z  125 │     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-24T19:50:25.2160239Z      ·           ───────┬──────
2026-10-24T19:50:25.2160386Z      ·                  ╰── 'serverSettings' is declared here
2026-10-24T19:50:25.2160524Z  126 │     const gitWorkflow = yield* GitWorkflowService.GitWorkflowService;
2026-10-24T19:50:25.2160574Z      ╰────
2026-10-24T19:50:25.2160677Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2160680Z
2026-10-24T19:50:25.2160893Z   ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-24T19:50:25.2161066Z     ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13]
2026-10-24T19:50:25.2161140Z  14 │ } from "@t3tools/contracts";
2026-10-24T19:50:25.2161229Z  15 │ import type {} from "@t3tools/contracts";
2026-10-24T19:50:25.2161299Z     ·             ──
2026-10-24T19:50:25.2161351Z  16 │
2026-10-24T19:50:25.2161401Z     ╰────
2026-10-24T19:50:25.2161483Z   help: Remove empty braces
2026-10-24T19:50:25.2161486Z
2026-10-24T19:50:25.2161718Z   ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used.
2026-10-24T19:50:25.2161838Z     ╭─[apps/server/src/checkpointing/Utils.ts:12:10]
2026-10-24T19:50:25.2161892Z  11 │
2026-10-24T19:50:25.2161994Z  12 │ function resolveThreadWorkspaceCwd(input: {
2026-10-24T19:50:25.2162098Z     ·          ────────────┬────────────
2026-10-24T19:50:25.2162270Z     ·                      ╰── 'resolveThreadWorkspaceCwd' is declared here
2026-10-24T19:50:25.2162336Z  13 │   readonly thread: {
2026-10-24T19:50:25.2162387Z     ╰────
2026-10-24T19:50:25.2162492Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2162494Z
2026-10-24T19:50:25.2162761Z   ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2162893Z      ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7]
2026-10-24T19:50:25.2162946Z  339 │
2026-10-24T19:50:25.2163049Z  340 │ const layerTest = AnalyticsService.layerTest;
2026-10-24T19:50:25.2163131Z      ·       ────┬────
2026-10-24T19:50:25.2163267Z      ·           ╰── 'layerTest' is declared here
2026-10-24T19:50:25.2163317Z      ╰────
2026-10-24T19:50:25.2163422Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2163424Z
2026-10-24T19:50:25.2163641Z   ⚠ react(no-unstable-nested-components): Do not define components during render.
2026-10-24T19:50:25.2163748Z       ╭─[apps/mobile/src/Stack.tsx:1079:21]
2026-10-24T19:50:25.2163812Z  1078 │     <Navigator
2026-10-24T19:50:25.2164010Z  1079 │       screenLayout={(props) => <GuardedScreenLayout {...props} />}
2026-10-24T19:50:25.2164151Z       ·                     ─────────────────────────────────────────────
2026-10-24T19:50:25.2164235Z  1080 │       screenOptions={({ route }) =>
2026-10-24T19:50:25.2164286Z       ╰────
2026-10-24T19:50:25.2164720Z   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-24T19:50:25.2164786Z
2026-10-24T19:50:25.2164995Z   ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T19:50:25.2165134Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6]
2026-10-24T19:50:25.2165297Z  227 │     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-24T19:50:25.2165387Z  228 │       nativeEventSnapshotsRef.current,
2026-10-24T19:50:25.2165480Z      ·       ───────────┬───────────
2026-10-24T19:50:25.2165958Z      ·                  ╰── 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-24T19:50:25.2166038Z  229 │       mostRecentEventCount,
2026-10-24T19:50:25.2166093Z  230 │     );
2026-10-24T19:50:25.2166215Z  231 │   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-24T19:50:25.2166353Z      ·      ──────────────────────────┬──────────────────────────
2026-10-24T19:50:25.2166628Z      ·                                ╰── This dependency list is missing values used by the callback
2026-10-24T19:50:25.2166710Z  232 │   const assumedValue = props.value;
2026-10-24T19:50:25.2166762Z      ╰────
2026-10-24T19:50:25.2166933Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T19:50:25.2167260Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2167266Z
2026-10-24T19:50:25.2167484Z   ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T19:50:25.2167620Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7]
2026-10-24T19:50:25.2167765Z  238 │     nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-24T19:50:25.2167856Z  239 │       nativeEventSnapshotsRef.current,
2026-10-24T19:50:25.2167946Z      ·       ───────────┬───────────
2026-10-24T19:50:25.2168421Z      ·                  ╰── 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-24T19:50:25.2168565Z  240 │       controlledEventCount,
2026-10-24T19:50:25.2168672Z  241 │       assumedValue,
2026-10-24T19:50:25.2168729Z  242 │     );
2026-10-24T19:50:25.2168886Z  243 │   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-24T19:50:25.2169024Z      ·                                                         ───────────┬──────────
2026-10-24T19:50:25.2169237Z      ·                                                                    ╰── Unnecessary dependency `controlledDocumentJson`
2026-10-24T19:50:25.2169330Z  244 │   const acceptNativeEvent = useCallback(
2026-10-24T19:50:25.2169380Z      ╰────
2026-10-24T19:50:25.2169812Z   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-24T19:50:25.2170138Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2170145Z
2026-10-24T19:50:25.2170295Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2170433Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
2026-10-24T19:50:25.2170558Z  163 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T19:50:25.2170670Z  164 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T19:50:25.2170789Z      ·                             ─────────────┬────────────
2026-10-24T19:50:25.2170960Z      ·                                          ╰── Cannot access ref value during render
2026-10-24T19:50:25.2171016Z  165 │     });
2026-10-24T19:50:25.2171075Z      ╰────
2026-10-24T19:50:25.2171559Z   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-24T19:50:25.2171854Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2171857Z
2026-10-24T19:50:25.2172001Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2172140Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
2026-10-24T19:50:25.2172262Z  163 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T19:50:25.2172373Z  164 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T19:50:25.2172492Z      ·                             ─────────────┬────────────
2026-10-24T19:50:25.2172707Z      ·                                          ╰── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2172764Z  165 │     });
2026-10-24T19:50:25.2172815Z      ╰────
2026-10-24T19:50:25.2173290Z   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-24T19:50:25.2173584Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2173587Z
2026-10-24T19:50:25.2173798Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2174001Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23]
2026-10-24T19:50:25.2174058Z  165 │     });
2026-10-24T19:50:25.2174146Z  166 │     confirmedTokensRef.current = tokens;
2026-10-24T19:50:25.2174272Z      ·     ─────────┬────────────┬───
2026-10-24T19:50:25.2174464Z      ·              │            ╰── Cannot update ref value during render
2026-10-24T19:50:25.2174584Z      ·              ╰── This value is a ref
2026-10-24T19:50:25.2174655Z  167 │     return JSON.stringify(
2026-10-24T19:50:25.2174707Z      ╰────
2026-10-24T19:50:25.2175187Z   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-24T19:50:25.2175485Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2175487Z
2026-10-24T19:50:25.2175634Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2175767Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5]
2026-10-24T19:50:25.2175839Z  207 │     mostRecentEventCount,
2026-10-24T19:50:25.2175928Z  208 │     nativeEventSnapshotsRef.current,
2026-10-24T19:50:25.2176036Z      ·     ───────────────┬───────────────
2026-10-24T19:50:25.2176227Z      ·                    ╰── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2176287Z  209 │   );
2026-10-24T19:50:25.2176344Z      ╰────
2026-10-24T19:50:25.2176818Z   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-24T19:50:25.2177111Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2177116Z
2026-10-24T19:50:25.2177259Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2177394Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5]
2026-10-24T19:50:25.2177466Z  213 │     mostRecentEventCount,
2026-10-24T19:50:25.2177552Z  214 │     nativeEventSnapshotsRef.current,
2026-10-24T19:50:25.2177659Z      ·     ───────────────┬───────────────
2026-10-24T19:50:25.2177856Z      ·                    ╰── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2177913Z  215 │   );
2026-10-24T19:50:25.2177966Z      ╰────
2026-10-24T19:50:25.2178437Z   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-24T19:50:25.2178730Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2178732Z
2026-10-24T19:50:25.2178923Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-24T19:50:25.2179117Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6]
2026-10-24T19:50:25.2179268Z  163 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T19:50:25.2179378Z  164 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T19:50:25.2179489Z      ·                             ─────────┬────────
2026-10-24T19:50:25.2179971Z      ·                                      ╰── 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-24T19:50:25.2180026Z  165 │     });
2026-10-24T19:50:25.2180114Z  166 │     confirmedTokensRef.current = tokens;
2026-10-24T19:50:25.2180185Z  167 │     return JSON.stringify(
2026-10-24T19:50:25.2180357Z  168 │       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-24T19:50:25.2180428Z  169 │         const record =
2026-10-24T19:50:25.2180506Z  170 │           token.type === "context"
2026-10-24T19:50:25.2180673Z  171 │             ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-24T19:50:25.2180740Z  172 │             : undefined;
2026-10-24T19:50:25.2180850Z  173 │         const presentation = contextChipPresentation(
2026-10-24T19:50:25.2180959Z  174 │           token.type === "context" ? token.kind : token.type,
2026-10-24T19:50:25.2181022Z  175 │           record,
2026-10-24T19:50:25.2181081Z  176 │         );
2026-10-24T19:50:25.2181165Z  177 │         const icon = contextChipIcon(
2026-10-24T19:50:25.2181232Z  178 │           presentation,
2026-10-24T19:50:25.2181376Z  179 │           token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-24T19:50:25.2181441Z  180 │         );
2026-10-24T19:50:25.2181507Z  181 │         return {
2026-10-24T19:50:25.2181576Z  182 │           type: token.type,
2026-10-24T19:50:25.2181650Z  183 │           source: token.source,
2026-10-24T19:50:25.2181724Z  184 │           start: token.start,
2026-10-24T19:50:25.2181789Z  185 │           end: token.end,
2026-10-24T19:50:25.2181939Z  186 │           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-24T19:50:25.2182000Z  187 │           label:
2026-10-24T19:50:25.2182078Z  188 │             token.type === "skill"
2026-10-24T19:50:25.2182185Z  189 │               ? (skillLabels.get(token.value) ?? token.value)
2026-10-24T19:50:25.2182270Z  190 │               : token.type === "context"
2026-10-24T19:50:25.2182516Z  191 │                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}`
2026-10-24T19:50:25.2182601Z  192 │                 : basename(token.value),
2026-10-24T19:50:25.2182745Z  193 │           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-24T19:50:25.2182838Z  194 │           iconUri: contextChipIconUri(icon),
2026-10-24T19:50:25.2182926Z  195 │           tintsIcon: icon.kind === "chip",
2026-10-24T19:50:25.2182985Z  196 │         };
2026-10-24T19:50:25.2183042Z  197 │       }),
2026-10-24T19:50:25.2183097Z  198 │     );
2026-10-24T19:50:25.2183231Z  199 │   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-24T19:50:25.2183385Z      ·      ───────────────────────────────┬───────────────────────────────
2026-10-24T19:50:25.2183593Z      ·                                     ╰── This dependency list is missing values used by the callback
2026-10-24T19:50:25.2183917Z  200 │   // Every render resolves against the snapshot history, so a render whose
2026-10-24T19:50:25.2184007Z      ╰────
2026-10-24T19:50:25.2184220Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T19:50:25.2184538Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2184541Z
2026-10-24T19:50:25.2184729Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-24T19:50:25.2184868Z      ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5]
2026-10-24T19:50:25.2185000Z  253 │       mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-24T19:50:25.2185103Z  254 │       nativeEventSnapshotsRef.current.push({
2026-10-24T19:50:25.2185199Z      ·       ───────────┬───────────
2026-10-24T19:50:25.2185673Z      ·                  ╰── 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-24T19:50:25.2185767Z  255 │         eventCount: acknowledgedEventCount,
2026-10-24T19:50:25.2185831Z  256 │         value,
2026-10-24T19:50:25.2185908Z  257 │         selection: nextSelection,
2026-10-24T19:50:25.2185965Z  258 │       });
2026-10-24T19:50:25.2186051Z  259 │       return acknowledgedEventCount;
2026-10-24T19:50:25.2186108Z  260 │     },
2026-10-24T19:50:25.2186162Z  261 │     [],
2026-10-24T19:50:25.2186231Z      ·     ─┬
2026-10-24T19:50:25.2186423Z      ·      ╰── This dependency list is missing values used by the callback
2026-10-24T19:50:25.2186481Z  262 │   );
2026-10-24T19:50:25.2186531Z      ╰────
2026-10-24T19:50:25.2186738Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T19:50:25.2187056Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2187059Z
2026-10-24T19:50:25.2187205Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2187326Z      ╭─[apps/mobile/src/native/StackHeader.tsx:185:9]
2026-10-24T19:50:25.2187392Z  184 │         "options",
2026-10-24T19:50:25.2187485Z  185 │         latestOptionFunctionsRef.current,
2026-10-24T19:50:25.2187595Z      ·         ────────────────┬───────────────
2026-10-24T19:50:25.2187846Z      ·                         ╰── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2187976Z  186 │         optionFunctionWrappersRef.current,
2026-10-24T19:50:25.2188028Z      ╰────
2026-10-24T19:50:25.2188503Z   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-24T19:50:25.2188800Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2188803Z
2026-10-24T19:50:25.2188948Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2189071Z      ╭─[apps/mobile/src/native/StackHeader.tsx:186:9]
2026-10-24T19:50:25.2189166Z  185 │         latestOptionFunctionsRef.current,
2026-10-24T19:50:25.2189260Z  186 │         optionFunctionWrappersRef.current,
2026-10-24T19:50:25.2189369Z      ·         ────────────────┬────────────────
2026-10-24T19:50:25.2189562Z      ·                         ╰── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2189654Z  187 │       ) as NativeStackNavigationOptions)
2026-10-24T19:50:25.2189707Z      ╰────
2026-10-24T19:50:25.2190177Z   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-24T19:50:25.2190475Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2190481Z
2026-10-24T19:50:25.2190680Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T19:50:25.2190827Z     ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-24T19:50:25.2190914Z  35 │       <T3SourceTextRunNativeComponent
2026-10-24T19:50:25.2190977Z  36 │         key={index}
2026-10-24T19:50:25.2191056Z     ·         ───────────
2026-10-24T19:50:25.2191130Z  37 │         style={flattenedStyle}
2026-10-24T19:50:25.2191183Z     ╰────
2026-10-24T19:50:25.2191331Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T19:50:25.2191334Z
2026-10-24T19:50:25.2191781Z   ⚠ 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-24T19:50:25.2191933Z      ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20]
2026-10-24T19:50:25.2192014Z  262 │       ...(update._meta !== undefined
2026-10-24T19:50:25.2192182Z  263 │         ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null }
2026-10-24T19:50:25.2192270Z      ·                    ─────────
2026-10-24T19:50:25.2192331Z  264 │         : {}),
2026-10-24T19:50:25.2192382Z      ╰────
2026-10-24T19:50:25.2192385Z
2026-10-24T19:50:25.2192569Z   ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used.
2026-10-24T19:50:25.2192706Z     ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18]
2026-10-24T19:50:25.2192846Z  14 │ import * as Layer from "effect/Layer";
2026-10-24T19:50:25.2192968Z  15 │ import type * as Scope from "effect/Scope";
2026-10-24T19:50:25.2193048Z     ·                  ──┬──
2026-10-24T19:50:25.2193180Z     ·                    ╰── 'Scope' is imported here
2026-10-24T19:50:25.2193266Z  16 │ import * as Stream from "effect/Stream";
2026-10-24T19:50:25.2193320Z     ╰────
2026-10-24T19:50:25.2193418Z   help: Consider removing this import.
2026-10-24T19:50:25.2193422Z
2026-10-24T19:50:25.2193795Z   ⚠ 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-24T19:50:25.2193946Z      ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17]
2026-10-24T19:50:25.2194083Z  236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => {
2026-10-24T19:50:25.2194223Z  237 │   const input = Schema.decodeUnknownSync(SettingsUpdate)(payload);
2026-10-24T19:50:25.2194332Z      ·                 ────────────────────────
2026-10-24T19:50:25.2194470Z  238 │   const scopes = requiredScopesForServerSettingsPatch(input.patch);
2026-10-24T19:50:25.2194522Z      ╰────
2026-10-24T19:50:25.2194524Z
2026-10-24T19:50:25.2194894Z   ⚠ 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-24T19:50:25.2195016Z      ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26]
2026-10-24T19:50:25.2195115Z  255 │   if (method === WS_METHODS.assetsCreateUrl) {
2026-10-24T19:50:25.2195272Z  256 │     const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload);
2026-10-24T19:50:25.2195394Z      ·                          ────────────────────────
2026-10-24T19:50:25.2195458Z  257 │     return [
2026-10-24T19:50:25.2195509Z      ╰────
2026-10-24T19:50:25.2195512Z
2026-10-24T19:50:25.2195713Z   ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used.
2026-10-24T19:50:25.2195816Z     ╭─[apps/server/src/auth/http.ts:28:10]
2026-10-24T19:50:25.2195904Z  27 │ import * as Schema from "effect/Schema";
2026-10-24T19:50:25.2195994Z  28 │ import { identity } from "effect/Function";
2026-10-24T19:50:25.2196069Z     ·          ────┬───
2026-10-24T19:50:25.2196204Z     ·              ╰── 'identity' is imported here
2026-10-24T19:50:25.2196288Z  29 │ import * as Layer from "effect/Layer";
2026-10-24T19:50:25.2196341Z     ╰────
2026-10-24T19:50:25.2196437Z   help: Consider removing this import.
2026-10-24T19:50:25.2196446Z
2026-10-24T19:50:25.2196643Z   ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used.
2026-10-24T19:50:25.2196788Z     ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10]
2026-10-24T19:50:25.2196921Z  16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native";
2026-10-24T19:50:25.2197039Z  17 │ import { Image, Platform, StyleSheet } from "react-native";
2026-10-24T19:50:25.2197112Z     ·          ──┬──
2026-10-24T19:50:25.2197238Z     ·            ╰── 'Image' is imported here
2026-10-24T19:50:25.2197289Z  18 │
2026-10-24T19:50:25.2197340Z     ╰────
2026-10-24T19:50:25.2197435Z   help: Consider removing this import.
2026-10-24T19:50:25.2197437Z
2026-10-24T19:50:25.2197700Z   ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T19:50:25.2197874Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6]
2026-10-24T19:50:25.2198039Z  225 │     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-24T19:50:25.2198128Z  226 │       nativeEventSnapshotsRef.current,
2026-10-24T19:50:25.2198220Z      ·       ───────────┬───────────
2026-10-24T19:50:25.2198690Z      ·                  ╰── 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-24T19:50:25.2198766Z  227 │       mostRecentEventCount,
2026-10-24T19:50:25.2198823Z  228 │     );
2026-10-24T19:50:25.2198946Z  229 │   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-24T19:50:25.2199086Z      ·      ──────────────────────────┬──────────────────────────
2026-10-24T19:50:25.2199295Z      ·                                ╰── This dependency list is missing values used by the callback
2026-10-24T19:50:25.2199378Z  230 │   const assumedValue = props.value;
2026-10-24T19:50:25.2199430Z      ╰────
2026-10-24T19:50:25.2199600Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T19:50:25.2199920Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2199922Z
2026-10-24T19:50:25.2200140Z   ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T19:50:25.2200290Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7]
2026-10-24T19:50:25.2200436Z  236 │     nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-24T19:50:25.2200523Z  237 │       nativeEventSnapshotsRef.current,
2026-10-24T19:50:25.2200615Z      ·       ───────────┬───────────
2026-10-24T19:50:25.2201085Z      ·                  ╰── 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-24T19:50:25.2201160Z  238 │       controlledEventCount,
2026-10-24T19:50:25.2201225Z  239 │       assumedValue,
2026-10-24T19:50:25.2201284Z  240 │     );
2026-10-24T19:50:25.2202459Z  241 │   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-24T19:50:25.2202618Z      ·                                                         ───────────┬──────────
2026-10-24T19:50:25.2202841Z      ·                                                                    ╰── Unnecessary dependency `controlledDocumentJson`
2026-10-24T19:50:25.2202932Z  242 │   const acceptNativeEvent = useCallback(
2026-10-24T19:50:25.2202982Z      ╰────
2026-10-24T19:50:25.2203417Z   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-24T19:50:25.2203737Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2203740Z
2026-10-24T19:50:25.2204000Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2204181Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
2026-10-24T19:50:25.2204304Z  161 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T19:50:25.2204418Z  162 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T19:50:25.2204535Z      ·                             ─────────────┬────────────
2026-10-24T19:50:25.2204707Z      ·                                          ╰── Cannot access ref value during render
2026-10-24T19:50:25.2204763Z  163 │     });
2026-10-24T19:50:25.2204815Z      ╰────
2026-10-24T19:50:25.2205296Z   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-24T19:50:25.2205598Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2205605Z
2026-10-24T19:50:25.2205750Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2205896Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
2026-10-24T19:50:25.2206018Z  161 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T19:50:25.2206128Z  162 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T19:50:25.2206244Z      ·                             ─────────────┬────────────
2026-10-24T19:50:25.2206712Z      ·                                          ╰── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2206776Z  163 │     });
2026-10-24T19:50:25.2206831Z      ╰────
2026-10-24T19:50:25.2207305Z   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-24T19:50:25.2207597Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2207600Z
2026-10-24T19:50:25.2207746Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2207890Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23]
2026-10-24T19:50:25.2207944Z  163 │     });
2026-10-24T19:50:25.2208034Z  164 │     confirmedTokensRef.current = tokens;
2026-10-24T19:50:25.2208229Z      ·     ─────────┬────────────┬───
2026-10-24T19:50:25.2208463Z      ·              │            ╰── Cannot update ref value during render
2026-10-24T19:50:25.2208581Z      ·              ╰── This value is a ref
2026-10-24T19:50:25.2208654Z  165 │     return JSON.stringify(
2026-10-24T19:50:25.2208705Z      ╰────
2026-10-24T19:50:25.2209177Z   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-24T19:50:25.2209468Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2209473Z
2026-10-24T19:50:25.2209622Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2209768Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5]
2026-10-24T19:50:25.2209838Z  205 │     mostRecentEventCount,
2026-10-24T19:50:25.2209924Z  206 │     nativeEventSnapshotsRef.current,
2026-10-24T19:50:25.2210029Z      ·     ───────────────┬───────────────
2026-10-24T19:50:25.2210218Z      ·                    ╰── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2210273Z  207 │   );
2026-10-24T19:50:25.2210323Z      ╰────
2026-10-24T19:50:25.2210800Z   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-24T19:50:25.2211095Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2211098Z
2026-10-24T19:50:25.2211242Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2211386Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5]
2026-10-24T19:50:25.2211455Z  211 │     mostRecentEventCount,
2026-10-24T19:50:25.2211542Z  212 │     nativeEventSnapshotsRef.current,
2026-10-24T19:50:25.2211645Z      ·     ───────────────┬───────────────
2026-10-24T19:50:25.2211833Z      ·                    ╰── Passing a ref to a function may read its value during render
2026-10-24T19:50:25.2211886Z  213 │   );
2026-10-24T19:50:25.2211937Z      ╰────
2026-10-24T19:50:25.2212413Z   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-24T19:50:25.2212708Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2212710Z
2026-10-24T19:50:25.2212899Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-24T19:50:25.2213040Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6]
2026-10-24T19:50:25.2213161Z  161 │     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T19:50:25.2213273Z  162 │       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T19:50:25.2213435Z      ·                             ─────────┬────────
2026-10-24T19:50:25.2213967Z      ·                                      ╰── 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-24T19:50:25.2214023Z  163 │     });
2026-10-24T19:50:25.2214113Z  164 │     confirmedTokensRef.current = tokens;
2026-10-24T19:50:25.2214185Z  165 │     return JSON.stringify(
2026-10-24T19:50:25.2214348Z  166 │       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-24T19:50:25.2214415Z  167 │         const record =
2026-10-24T19:50:25.2214494Z  168 │           token.type === "context"
2026-10-24T19:50:25.2214665Z  169 │             ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-24T19:50:25.2214732Z  170 │             : undefined;
2026-10-24T19:50:25.2214840Z  171 │         const presentation = contextChipPresentation(
2026-10-24T19:50:25.2214950Z  172 │           token.type === "context" ? token.kind : token.type,
2026-10-24T19:50:25.2215012Z  173 │           record,
2026-10-24T19:50:25.2215069Z  174 │         );
2026-10-24T19:50:25.2215153Z  175 │         const icon = contextChipIcon(
2026-10-24T19:50:25.2215219Z  176 │           presentation,
2026-10-24T19:50:25.2215363Z  177 │           token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-24T19:50:25.2215419Z  178 │         );
2026-10-24T19:50:25.2215481Z  179 │         return {
2026-10-24T19:50:25.2215552Z  180 │           type: token.type,
2026-10-24T19:50:25.2215626Z  181 │           source: token.source,
2026-10-24T19:50:25.2215696Z  182 │           start: token.start,
2026-10-24T19:50:25.2215769Z  183 │           end: token.end,
2026-10-24T19:50:25.2215920Z  184 │           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-24T19:50:25.2215979Z  185 │           label:
2026-10-24T19:50:25.2216055Z  186 │             token.type === "skill"
2026-10-24T19:50:25.2216161Z  187 │               ? (skillLabels.get(token.value) ?? token.value)
2026-10-24T19:50:25.2216242Z  188 │               : token.type === "context"
2026-10-24T19:50:25.2216480Z  189 │                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}`
2026-10-24T19:50:25.2216561Z  190 │                 : basename(token.value),
2026-10-24T19:50:25.2216704Z  191 │           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-24T19:50:25.2216796Z  192 │           iconUri: contextChipIconUri(icon),
2026-10-24T19:50:25.2216888Z  193 │           tintsIcon: icon.kind === "chip",
2026-10-24T19:50:25.2216947Z  194 │         };
2026-10-24T19:50:25.2217005Z  195 │       }),
2026-10-24T19:50:25.2217059Z  196 │     );
2026-10-24T19:50:25.2217192Z  197 │   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-24T19:50:25.2217344Z      ·      ───────────────────────────────┬───────────────────────────────
2026-10-24T19:50:25.2217552Z      ·                                     ╰── This dependency list is missing values used by the callback
2026-10-24T19:50:25.2217691Z  198 │   // Every render resolves against the snapshot history, so a render whose
2026-10-24T19:50:25.2217742Z      ╰────
2026-10-24T19:50:25.2217953Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T19:50:25.2218335Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2218376Z
2026-10-24T19:50:25.2218565Z   ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-24T19:50:25.2218706Z      ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5]
2026-10-24T19:50:25.2218834Z  251 │       mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-24T19:50:25.2218936Z  252 │       nativeEventSnapshotsRef.current.push({
2026-10-24T19:50:25.2219029Z      ·       ───────────┬───────────
2026-10-24T19:50:25.2219500Z      ·                  ╰── 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-24T19:50:25.2219595Z  253 │         eventCount: acknowledgedEventCount,
2026-10-24T19:50:25.2219656Z  254 │         value,
2026-10-24T19:50:25.2219733Z  255 │         selection: nextSelection,
2026-10-24T19:50:25.2219790Z  256 │       });
2026-10-24T19:50:25.2219872Z  257 │       return acknowledgedEventCount;
2026-10-24T19:50:25.2219925Z  258 │     },
2026-10-24T19:50:25.2219979Z  259 │     [],
2026-10-24T19:50:25.2220047Z      ·     ─┬
2026-10-24T19:50:25.2220228Z      ·      ╰── This dependency list is missing values used by the callback
2026-10-24T19:50:25.2220282Z  260 │   );
2026-10-24T19:50:25.2220333Z      ╰────
2026-10-24T19:50:25.2220541Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T19:50:25.2220863Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2220869Z
2026-10-24T19:50:25.2221037Z   ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T19:50:25.2221158Z      ╭─[apps/server/src/processRunner.test.ts:266:14]
2026-10-24T19:50:25.2221211Z  265 │
2026-10-24T19:50:25.2221316Z  266 │   for (const {} of ["timeout", "success"] as const) {
2026-10-24T19:50:25.2221387Z      ·              ──
2026-10-24T19:50:25.2221441Z  267 │   }
2026-10-24T19:50:25.2221492Z      ╰────
2026-10-24T19:50:25.2221724Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T19:50:25.2221727Z
2026-10-24T19:50:25.2221994Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2222163Z      ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:410:7]
2026-10-24T19:50:25.2222215Z  409 │
2026-10-24T19:50:25.2222340Z  410 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make);
2026-10-24T19:50:25.2222409Z      ·       ──┬──
2026-10-24T19:50:25.2222534Z      ·         ╰── 'layer' is declared here
2026-10-24T19:50:25.2222586Z      ╰────
2026-10-24T19:50:25.2222691Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2222694Z
2026-10-24T19:50:25.2223231Z   ⚠ 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-24T19:50:25.2223395Z       ╭─[apps/server/src/usage/UsageService.test.ts:2615:7]
2026-10-24T19:50:25.2223493Z  2614 │           let orphanedAt: number | undefined;
2026-10-24T19:50:25.2223731Z  2615 │ ╭─▶       for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
2026-10-24T19:50:25.2223852Z  2616 │ │           const tasks: Array<() => void> = [];
2026-10-24T19:50:25.2224030Z  2617 │ │           const dispatcher: Scheduler.SchedulerDispatcher = {
2026-10-24T19:50:25.2224162Z  2618 │ │             scheduleTask: (task) => tasks.push(task),
2026-10-24T19:50:25.2224260Z  2619 │ │             flush: () => {
2026-10-24T19:50:25.2224381Z  2620 │ │               let task: (() => void) | undefined;
2026-10-24T19:50:25.2224536Z  2621 │ │               while ((task = tasks.shift()) !== undefined) task();
2026-10-24T19:50:25.2224620Z  2622 │ │             },
2026-10-24T19:50:25.2224700Z  2623 │ │           };
2026-10-24T19:50:25.2224770Z  2624 │ │
2026-10-24T19:50:25.2224929Z  2625 │ │           let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
2026-10-24T19:50:25.2225034Z  2626 │ │           let requestChecks = 0;
2026-10-24T19:50:25.2225163Z  2627 │ │           const scheduler: Scheduler.Scheduler = {
2026-10-24T19:50:25.2225271Z  2628 │ │             executionMode: "async",
2026-10-24T19:50:25.2225390Z  2629 │ │             makeDispatcher: () => dispatcher,
2026-10-24T19:50:25.2225507Z  2630 │ │             shouldYield: (fiber) => {
2026-10-24T19:50:25.2225643Z  2631 │ │               if (fiber !== requestFiber) return false;
2026-10-24T19:50:25.2225747Z  2632 │ │               requestChecks += 1;
2026-10-24T19:50:25.2225887Z  2633 │ │               if (requestChecks !== interruptAt) return false;
2026-10-24T19:50:25.2226003Z  2634 │ │               fiber.interruptUnsafe();
2026-10-24T19:50:25.2226099Z  2635 │ │               return true;
2026-10-24T19:50:25.2226180Z  2636 │ │             },
2026-10-24T19:50:25.2226259Z  2637 │ │           };
2026-10-24T19:50:25.2226329Z  2638 │ │
2026-10-24T19:50:25.2226450Z  2639 │ │           const input: UsageSummaryInput = {
2026-10-24T19:50:25.2226543Z  2640 │ │             ...WINDOW,
2026-10-24T19:50:25.2226731Z  2641 │ │             sinceDay: UsageDay.make("2026-09-01"),
2026-10-24T19:50:25.2226958Z  2642 │ │             untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
2026-10-24T19:50:25.2227037Z  2643 │ │           };
2026-10-24T19:50:25.2227148Z  2644 │ │           const first = yield* service
2026-10-24T19:50:25.2227252Z  2645 │ │             .readSummary(input)
2026-10-24T19:50:25.2227341Z  2646 │ │             .pipe(
2026-10-24T19:50:25.2227437Z  2647 │ │               Effect.exit,
2026-10-24T19:50:25.2227594Z  2648 │ │               Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-24T19:50:25.2227696Z  2649 │ │               Effect.forkChild,
2026-10-24T19:50:25.2227783Z  2650 │ │             );
2026-10-24T19:50:25.2227888Z  2651 │ │           requestFiber = first;
2026-10-24T19:50:25.2227993Z  2652 │ │           yield* Effect.yieldNow;
2026-10-24T19:50:25.2228094Z  2653 │ │           dispatcher.flush();
2026-10-24T19:50:25.2228165Z  2654 │ │
2026-10-24T19:50:25.2228318Z  2655 │ │           const second = yield* service.readSummary(input).pipe(
2026-10-24T19:50:25.2228415Z  2656 │ │             Effect.match({
2026-10-24T19:50:25.2228537Z  2657 │ │               onFailure: (error) => error.reason,
2026-10-24T19:50:25.2228659Z  2658 │ │               onSuccess: () => "success" as const,
2026-10-24T19:50:25.2228742Z  2659 │ │             }),
2026-10-24T19:50:25.2228904Z  2660 │ │             Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-24T19:50:25.2229007Z  2661 │ │             Effect.forkChild,
2026-10-24T19:50:25.2229087Z  2662 │ │           );
2026-10-24T19:50:25.2229191Z  2663 │ │           yield* Effect.yieldNow;
2026-10-24T19:50:25.2229293Z  2664 │ │           dispatcher.flush();
2026-10-24T19:50:25.2229417Z  2665 │ │           const secondExit = second.pollUnsafe();
2026-10-24T19:50:25.2229531Z  2666 │ │           if (secondExit === undefined) {
2026-10-24T19:50:25.2229645Z  2667 │ │             second.interruptUnsafe();
2026-10-24T19:50:25.2229755Z  2668 │ │             orphanedAt = interruptAt;
2026-10-24T19:50:25.2229841Z  2669 │ │             break;
2026-10-24T19:50:25.2229925Z  2670 │ │           }
2026-10-24T19:50:25.2230046Z  2671 │ │           if (Exit.isFailure(secondExit)) {
2026-10-24T19:50:25.2230203Z  2672 │ │             assert.fail("the matching request fiber was interrupted");
2026-10-24T19:50:25.2230281Z  2673 │ │           }
2026-10-24T19:50:25.2230431Z  2674 │ │           assert.strictEqual(secondExit.value, "invalidWindow");
2026-10-24T19:50:25.2230565Z  2675 │ ╰─▶       }
2026-10-24T19:50:25.2230619Z  2676 │
2026-10-24T19:50:25.2230670Z       ╰────
2026-10-24T19:50:25.2230674Z
2026-10-24T19:50:25.2230886Z   ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
2026-10-24T19:50:25.2231070Z     ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10]
2026-10-24T19:50:25.2231152Z  78 │
2026-10-24T19:50:25.2231289Z  79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string {
2026-10-24T19:50:25.2231375Z     ·          ────────┬───────
2026-10-24T19:50:25.2231524Z     ·                  ╰── 'describeSchedule' is declared here
2026-10-24T19:50:25.2231631Z  80 │   if (schedule.type === "webhook") return "On webhook";
2026-10-24T19:50:25.2231683Z     ╰────
2026-10-24T19:50:25.2231785Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2231788Z
2026-10-24T19:50:25.2231976Z   ⚠ react(capitalized-calls): Capitalized function called without JSX
2026-10-24T19:50:25.2232090Z    ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15]
2026-10-24T19:50:25.2232146Z  7 │     () =>
2026-10-24T19:50:25.2232218Z  8 │       Gesture.Hover()
2026-10-24T19:50:25.2232298Z    ·               ──┬──
2026-10-24T19:50:25.2232432Z    ·                 ╰── `Hover` may be a component
2026-10-24T19:50:25.2232505Z  9 │         .manualActivation(true)
2026-10-24T19:50:25.2232555Z    ╰────
2026-10-24T19:50:25.2232840Z   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-24T19:50:25.2233296Z   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-24T19:50:25.2233299Z
2026-10-24T19:50:25.2233508Z   ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used.
2026-10-24T19:50:25.2233615Z     ╭─[infra/relay/src/http/Api.ts:69:13]
2026-10-24T19:50:25.2233761Z  68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts";
2026-10-24T19:50:25.2233874Z  69 │ import * as HookForwarder from "../hooks/HookForwarder.ts";
2026-10-24T19:50:25.2233988Z     ·             ──────┬──────
2026-10-24T19:50:25.2234132Z     ·                   ╰── 'HookForwarder' is imported here
2026-10-24T19:50:25.2234234Z  70 │ import * as HeldHooks from "../hooks/HeldHooks.ts";
2026-10-24T19:50:25.2234285Z     ╰────
2026-10-24T19:50:25.2234382Z   help: Consider removing this import.
2026-10-24T19:50:25.2234385Z
2026-10-24T19:50:25.2234654Z   ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2234776Z      ╭─[apps/server/src/usage/UsageService.ts:169:7]
2026-10-24T19:50:25.2234832Z  168 │
2026-10-24T19:50:25.2234910Z  169 │ const layerTest = Layer.succeed(
2026-10-24T19:50:25.2234983Z      ·       ────┬────
2026-10-24T19:50:25.2235114Z      ·           ╰── 'layerTest' is declared here
2026-10-24T19:50:25.2235179Z  170 │   UsageService,
2026-10-24T19:50:25.2235229Z      ╰────
2026-10-24T19:50:25.2235331Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2235334Z
2026-10-24T19:50:25.2235809Z   ⚠ 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-24T19:50:25.2236050Z      ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
2026-10-24T19:50:25.2236157Z  520 │                 })).delivery;
2026-10-24T19:50:25.2236355Z  521 │ ╭─▶             while (delivery.outcome === "accepted") {
2026-10-24T19:50:25.2236468Z  522 │ │                 yield* Effect.yieldNow;
2026-10-24T19:50:25.2236615Z  523 │ │                 delivery = (yield* service.getWebhookDelivery({
2026-10-24T19:50:25.2236714Z  524 │ │                   id: task.id,
2026-10-24T19:50:25.2236828Z  525 │ │                   deliveryId: deliveryId!,
2026-10-24T19:50:25.2236924Z  526 │ │                 })).delivery;
2026-10-24T19:50:25.2237061Z  527 │ ╰─▶             }
2026-10-24T19:50:25.2237183Z  528 │                 assert.equal(delivery.outcome, "dispatch_failed");
2026-10-24T19:50:25.2237241Z      ╰────
2026-10-24T19:50:25.2237243Z
2026-10-24T19:50:25.2237472Z   ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T19:50:25.2237595Z      ╭─[apps/server/src/terminal/Manager.test.ts:731:31]
2026-10-24T19:50:25.2237651Z  730 │       );
2026-10-24T19:50:25.2237823Z  731 │       const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot;
2026-10-24T19:50:25.2237919Z      ·                               ──────
2026-10-24T19:50:25.2238033Z  732 │       expect(snapshot?.history).toBe("aa😀\rEND");
2026-10-24T19:50:25.2238084Z      ╰────
2026-10-24T19:50:25.2238259Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T19:50:25.2238262Z
2026-10-24T19:50:25.2238481Z   ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining
2026-10-24T19:50:25.2238656Z       ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8]
2026-10-24T19:50:25.2238724Z  1782 │     assert.equal(
2026-10-24T19:50:25.2238872Z  1783 │       (stored.context?.records[0] as { attachmentId: string }).attachmentId,
2026-10-24T19:50:25.2238975Z       ·        ──────────────────────────
2026-10-24T19:50:25.2239055Z  1784 │       stored.attachments[0]?.id,
2026-10-24T19:50:25.2239107Z       ╰────
2026-10-24T19:50:25.2239279Z   help: If this short-circuits with 'undefined' the evaluation will throw TypeError
2026-10-24T19:50:25.2239282Z
2026-10-24T19:50:25.2239570Z   ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2239723Z        ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12395:7]
2026-10-24T19:50:25.2239781Z  12394 │
2026-10-24T19:50:25.2239925Z  12395 │ const layerUnavailable: Layer.Layer<OrchestratorV2> = Layer.succeed(
2026-10-24T19:50:25.2240011Z        ·       ────────┬───────
2026-10-24T19:50:25.2240160Z        ·               ╰── 'layerUnavailable' is declared here
2026-10-24T19:50:25.2240228Z  12396 │   OrchestratorV2,
2026-10-24T19:50:25.2240280Z        ╰────
2026-10-24T19:50:25.2240385Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2240388Z
2026-10-24T19:50:25.2240688Z   ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2240909Z      ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7]
2026-10-24T19:50:25.2240994Z  345 │
2026-10-24T19:50:25.2241096Z  346 │ const layerFromProviderAdapter: Layer.Layer<
2026-10-24T19:50:25.2241190Z      ·       ────────────┬───────────
2026-10-24T19:50:25.2241360Z      ·                   ╰── 'layerFromProviderAdapter' is declared here
2026-10-24T19:50:25.2241438Z  347 │   ProviderAdapterRegistryV2,
2026-10-24T19:50:25.2241488Z      ╰────
2026-10-24T19:50:25.2241590Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2241594Z
2026-10-24T19:50:25.2241797Z   ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T19:50:25.2241966Z    ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
2026-10-24T19:50:25.2242040Z  3 │   AuthProvidersManageScope,
2026-10-24T19:50:25.2242116Z  4 │   type AuthSessionState,
2026-10-24T19:50:25.2242202Z    ·        ────────┬───────
2026-10-24T19:50:25.2242349Z    ·                ╰── 'AuthSessionState' is imported here
2026-10-24T19:50:25.2242415Z  5 │   type EnvironmentId,
2026-10-24T19:50:25.2242464Z    ╰────
2026-10-24T19:50:25.2242561Z   help: Consider removing this import.
2026-10-24T19:50:25.2242564Z
2026-10-24T19:50:25.2242825Z   ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T19:50:25.2242967Z      ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-24T19:50:25.2243019Z  150 │
2026-10-24T19:50:25.2243083Z  151 │   useEffect(() => {
2026-10-24T19:50:25.2243154Z      ·   ────┬────
2026-10-24T19:50:25.2243290Z      ·       ╰── This is the containing effect
2026-10-24T19:50:25.2243376Z  152 │     if (!controlledSelectedPath) {
2026-10-24T19:50:25.2243436Z  153 │       return;
2026-10-24T19:50:25.2243492Z  154 │     }
2026-10-24T19:50:25.2243573Z  155 │     setExpandedPaths((current) => {
2026-10-24T19:50:25.2243653Z      ·     ────────┬───────
2026-10-24T19:50:25.2243827Z      ·             ╰── Avoid calling setState() directly within an effect
2026-10-24T19:50:25.2243984Z  156 │       const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-24T19:50:25.2244038Z      ╰────
2026-10-24T19:50:25.2244659Z   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-24T19:50:25.2244990Z   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-24T19:50:25.2244993Z
2026-10-24T19:50:25.2245222Z   ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T19:50:25.2245397Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15]
2026-10-24T19:50:25.2245465Z  1997 │       assert.equal(
2026-10-24T19:50:25.2245612Z  1998 │         items.filter((item) => item.type === "assistant_message").at(-1)?.text,
2026-10-24T19:50:25.2245690Z       ·               ──────
2026-10-24T19:50:25.2245767Z  1999 │         "authoritative answer",
2026-10-24T19:50:25.2245820Z       ╰────
2026-10-24T19:50:25.2246048Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T19:50:25.2246084Z
2026-10-24T19:50:25.2246825Z   ⚠ 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-24T19:50:25.2246997Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7]
2026-10-24T19:50:25.2247181Z  3950 │           const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped);
2026-10-24T19:50:25.2247387Z  3951 │ ╭─▶       while (!responseLifecycle.includes("failed")) {
2026-10-24T19:50:25.2247494Z  3952 │ │           yield* Effect.yieldNow;
2026-10-24T19:50:25.2247634Z  3953 │ ╰─▶       }
2026-10-24T19:50:25.2247757Z  3954 │           const responseExit = yield* Fiber.join(responseFiber);
2026-10-24T19:50:25.2247810Z       ╰────
2026-10-24T19:50:25.2247812Z
2026-10-24T19:50:25.2248283Z   ⚠ 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-24T19:50:25.2248452Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9]
2026-10-24T19:50:25.2248541Z  6061 │               .pipe(Effect.forkScoped);
2026-10-24T19:50:25.2248726Z  6062 │ ╭─▶         while (promptGates.length < 1) {
2026-10-24T19:50:25.2248843Z  6063 │ │             yield* Effect.yieldNow;
2026-10-24T19:50:25.2248980Z  6064 │ ╰─▶         }
2026-10-24T19:50:25.2249152Z  6065 │             assert.isDefined(sessionUpdateHandler, "session update handler must be wired");
2026-10-24T19:50:25.2249205Z       ╰────
2026-10-24T19:50:25.2249207Z
2026-10-24T19:50:25.2249677Z   ⚠ 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-24T19:50:25.2249847Z       ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9]
2026-10-24T19:50:25.2249932Z  6196 │               .pipe(Effect.forkScoped);
2026-10-24T19:50:25.2250120Z  6197 │ ╭─▶         while (promptGates.length < 2) {
2026-10-24T19:50:25.2250230Z  6198 │ │             yield* Effect.yieldNow;
2026-10-24T19:50:25.2250365Z  6199 │ ╰─▶         }
2026-10-24T19:50:25.2250529Z  6200 │             if (sessionUpdateHandler === undefined || capturedMutation.current === null) {
2026-10-24T19:50:25.2250580Z       ╰────
2026-10-24T19:50:25.2250583Z
2026-10-24T19:50:25.2250845Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2251012Z        ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10602:7]
2026-10-24T19:50:25.2251064Z  10601 │
2026-10-24T19:50:25.2251138Z  10602 │ const layer: Layer.Layer<
2026-10-24T19:50:25.2251211Z        ·       ──┬──
2026-10-24T19:50:25.2251417Z        ·         ╰── 'layer' is declared here
2026-10-24T19:50:25.2251551Z  10603 │   ProviderAdapter.ProviderAdapterV2,
2026-10-24T19:50:25.2251604Z        ╰────
2026-10-24T19:50:25.2251707Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2251709Z
2026-10-24T19:50:25.2251912Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.2252059Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-24T19:50:25.2252157Z  256 │     return () => cancelAnimationFrame(frame);
2026-10-24T19:50:25.2252236Z  257 │   }, [props.path, targetIndex]);
2026-10-24T19:50:25.2252312Z      ·       ─────┬────
2026-10-24T19:50:25.2252457Z      ·            ╰── Unnecessary dependency `props.path`
2026-10-24T19:50:25.2252518Z  258 │
2026-10-24T19:50:25.2252576Z      ╰────
2026-10-24T19:50:25.2252881Z   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-24T19:50:25.2253196Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2253200Z
2026-10-24T19:50:25.2253394Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T19:50:25.2253545Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-24T19:50:25.2253619Z  292 │                     <SourceText
2026-10-24T19:50:25.2253718Z  293 │                       key={`${index}:${tokenIndex}`}
2026-10-24T19:50:25.2253841Z      ·                       ──────────────────────────────
2026-10-24T19:50:25.2253945Z  294 │                       style={{
2026-10-24T19:50:25.2253997Z      ╰────
2026-10-24T19:50:25.2254144Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T19:50:25.2254147Z
2026-10-24T19:50:25.2254340Z   ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T19:50:25.2254489Z      ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-24T19:50:25.2254554Z  308 │             return (
2026-10-24T19:50:25.2254637Z  309 │               <SourceText key={index}>
2026-10-24T19:50:25.2254736Z      ·                           ───────────
2026-10-24T19:50:25.2254802Z  310 │                 {body}
2026-10-24T19:50:25.2254852Z      ╰────
2026-10-24T19:50:25.2255059Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T19:50:25.2255206Z
2026-10-24T19:50:25.2255544Z   ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2255711Z       ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7]
2026-10-24T19:50:25.2255766Z  1443 │
2026-10-24T19:50:25.2255882Z  1444 │ const layerCodexAppServerClientFactoryCommand = (
2026-10-24T19:50:25.2256000Z       ·       ───────────────────┬───────────────────
2026-10-24T19:50:25.2256209Z       ·                          ╰── 'layerCodexAppServerClientFactoryCommand' is declared here
2026-10-24T19:50:25.2256328Z  1445 │   options: CodexClient.CodexAppServerClientOptions & {
2026-10-24T19:50:25.2256379Z       ╰────
2026-10-24T19:50:25.2256487Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2256495Z
2026-10-24T19:50:25.2256756Z   ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T19:50:25.2256918Z       ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7]
2026-10-24T19:50:25.2256971Z  1679 │
2026-10-24T19:50:25.2257041Z  1680 │ const layer: Layer.Layer<
2026-10-24T19:50:25.2257112Z       ·       ──┬──
2026-10-24T19:50:25.2257238Z       ·         ╰── 'layer' is declared here
2026-10-24T19:50:25.2257330Z  1681 │   ProviderAdapter.ProviderAdapterV2,
2026-10-24T19:50:25.2257380Z       ╰────
2026-10-24T19:50:25.2257481Z   help: Consider removing this declaration.
2026-10-24T19:50:25.2257483Z
2026-10-24T19:50:25.2257776Z   ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T19:50:25.2257937Z      ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
2026-10-24T19:50:25.2257994Z  162 │   keys,
2026-10-24T19:50:25.2258065Z  163 │   overridingProjects = [],
2026-10-24T19:50:25.2258147Z      ·                        ──
2026-10-24T19:50:25.2258214Z  164 │   onClearOverrides,
2026-10-24T19:50:25.2258265Z      ╰────
2026-10-24T19:50:25.2258587Z   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-24T19:50:25.2258590Z
2026-10-24T19:50:25.2259071Z   ⚠ 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-24T19:50:25.2259255Z      ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5]
2026-10-24T19:50:25.2259326Z  222 │         let idlePasses = 0;
2026-10-24T19:50:25.2259470Z  223 │ ╭─▶     for (;;) {
2026-10-24T19:50:25.2259607Z  224 │ │         yield* Effect.promise(() => Promise.resolve());
2026-10-24T19:50:25.2259751Z  225 │ │         const pending = backgroundRuntime.pending.shift();
2026-10-24T19:50:25.2259847Z  226 │ │         if (!pending) {
2026-10-24T19:50:25.2259939Z  227 │ │           idlePasses++;
2026-10-24T19:50:25.2260044Z  228 │ │           if (idlePasses >= 3) {
2026-10-24T19:50:25.2260184Z  229 │ │             return;
2026-10-24T19:50:25.2260300Z  230 │ │           }
2026-10-24T19:50:25.2260385Z  231 │ │           continue;
2026-10-24T19:50:25.2260460Z  232 │ │         }
2026-10-24T19:50:25.2260553Z  233 │ │         idlePasses = 0;
2026-10-24T19:50:25.2260669Z  234 │ │         const exit = yield* Effect.exit(
2026-10-24T19:50:25.2260882Z  235 │ │           pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
2026-10-24T19:50:25.2260960Z  236 │ │         );
2026-10-24T19:50:25.2261066Z  237 │ │         yield* Effect.sync(() => {
2026-10-24T19:50:25.2261171Z  238 │ │           pending.resolve(exit);
2026-10-24T19:50:25.2261253Z  239 │ │         });
2026-10-24T19:50:25.2261384Z  240 │ ╰─▶     }
2026-10-24T19:50:25.2261441Z  241 │       },
2026-10-24T19:50:25.2261492Z      ╰────
2026-10-24T19:50:25.2261494Z
2026-10-24T19:50:25.2261640Z   ⚠ react(refs): Cannot access refs during render
2026-10-24T19:50:25.2261795Z      ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27]
2026-10-24T19:50:25.2261853Z  493 │         >
2026-10-24T19:50:25.2261931Z  494 │           {props.children(close)}
2026-10-24T19:50:25.2262019Z      ·                           ──┬──
2026-10-24T19:50:25.2262183Z      ·                             ╰── Cannot access ref value during render
2026-10-24T19:50:25.2262259Z  495 │         </ReanimatedSwipeable>
2026-10-24T19:50:25.2262311Z      ╰────
2026-10-24T19:50:25.2262796Z   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-24T19:50:25.2263094Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T19:50:25.2263097Z
2026-10-24T19:50:25.2263328Z   ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used.
2026-10-24T19:50:25.2263455Z     ╭─[apps/mobile/src/features/home/HomeScreen.tsx:15:8]
2026-10-24T19:50:25.2263525Z  14 │   threadSearchMatchKey,
2026-10-24T19:50:25.2263609Z  15 │   type EnvironmentThreadSearchMatch,
2026-10-24T19:50:25.2263718Z     ·        ──────────────┬─────────────
2026-10-24T19:50:25.2263936Z     ·                      ╰── 'EnvironmentThreadSearchMatch' is imported here
2026-10-24T19:50:25.2264046Z  16 │ } from "@t3tools/client-runtime/state/thread-search";
2026-10-24T19:50:25.2264096Z     ╰────
2026-10-24T19:50:25.2264194Z   help: Consider removing this import.
2026-10-24T19:50:25.2264197Z
2026-10-24T19:50:25.2264399Z   ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T19:50:25.2264528Z      ╭─[apps/mobile/src/features/home/HomeScreen.tsx:527:25]
2026-10-24T19:50:25.2264657Z  526 │     // range) the boundary string is identical and the chain would die.
2026-10-24T19:50:25.2264749Z  527 │   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-24T19:50:25.2264849Z      ·                         ───────┬──────
2026-10-24T19:50:25.2265074Z      ·                                ╰── Unnecessary dependency `snoozeWakeTick`
2026-10-24T19:50:25.2265243Z  528 │   const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase();
2026-10-24T19:50:25.2265294Z      ╰────
2026-10-24T19:50:25.2265594Z   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-24T19:50:25.2265909Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T19:50:25.2265912Z
2026-10-24T19:50:25.2266082Z   ⚠ react(purity): Cannot call impure function during render
2026-10-24T19:50:25.2266209Z      ╭─[apps/mobile/src/features/home/HomeScreen.tsx:518:53]
2026-10-24T19:50:25.2266299Z  517 │     if (Number.isNaN(wakeAtMs)) return;
2026-10-24T19:50:25.2266461Z  518 │     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-24T19:50:25.2266588Z      ·                                                     ─────┬────
2026-10-24T19:50:25.2266756Z      ·                                                          ╰── Cannot call impure function
2026-10-24T19:50:25.2266836Z  519 │     const id = setTimeout(() => {
2026-10-24T19:50:25.2266886Z      ╰────
2026-10-24T19:50:25.2267174Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T19:50:25.2267471Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T19:50:25.2267480Z
2026-10-24T19:50:25.2267566Z Found 0 errors and 367 warnings in 5477 files (6.0s, 8 threads)
2026-10-24T19:50:25.2721503Z Post job cleanup.
2026-10-24T19:50:25.3354088Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-24T19:50:25.3430046Z Post job cleanup.
2026-10-24T19:50:25.4253471Z ##[start-action display=Cache full pnpm store;id=__3cb0b5a0-99dd-466d-942d-2b46cf806664.__actions_cache]
2026-10-24T19:50:25.4576184Z Post job cleanup.
2026-10-24T19:50:25.5205336Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074, not saving cache.
2026-10-24T19:50:25.5241400Z ##[end-action id=__3cb0b5a0-99dd-466d-942d-2b46cf806664.__actions_cache;outcome=success;conclusion=success;duration_ms=98]
2026-10-24T19:50:25.5242736Z ##[start-action display=Cache Vite+;id=__3cb0b5a0-99dd-466d-942d-2b46cf806664.vp_cache]
2026-10-24T19:50:25.5267847Z Post job cleanup.
2026-10-24T19:50:25.5908802Z Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache.
2026-10-24T19:50:25.5944615Z ##[end-action id=__3cb0b5a0-99dd-466d-942d-2b46cf806664.vp_cache;outcome=success;conclusion=success;duration_ms=70]
2026-10-24T19:50:25.5975576Z Post job cleanup.
2026-10-24T19:50:25.6392786Z [command]/usr/local/bin/git version
2026-10-24T19:50:25.6423535Z git version 2.55.0
2026-10-24T19:50:25.6441258Z Temporarily overriding HOME='/home/runner/_work/_temp/9232ecfb-87b8-4140-bf64-9b5aafb3d816' before making global git config changes
2026-10-24T19:50:25.6441616Z Adding repository directory to the temporary git global config as a safe directory
2026-10-24T19:50:25.6444413Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-24T19:50:25.6468881Z Removing SSH command configuration
2026-10-24T19:50:25.6471874Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-24T19:50:25.6496901Z [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-24T19:50:25.6632044Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-24T19:50:25.6650424Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-24T19:50:25.6696225Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-24T19:50:25.6709235Z ##[group]Run '/job_completed.sh'
2026-10-24T19:50:25.6715280Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-24T19:50:25.6715452Z env:
2026-10-24T19:50:25.6715567Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 157
2026-10-24T19:50:25.6715717Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 352
2026-10-24T19:50:25.6715860Z   BLACKSMITH_CHECK_RUN_ID: 120970600013
2026-10-24T19:50:25.6716004Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-24T19:50:25.6716155Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-24T19:50:25.6716291Z ##[endgroup]
2026-10-24T19:50:25.6795078Z Docker container cache not activated, skipping hash computation.
2026-10-24T19:50:25.7071947Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-24T19:50:25.7593835Z Cleaning up orphan processes