GitHub check
256 KB of 598 KB loaded Download the full log (598 KB)
342 KB of earlier output not loaded
6Z 195 │ for (let index = 0; index < count; index += 1) {
2026-10-24T10:35:58.0681795Z ╰────
2026-10-24T10:35:58.0682335Z help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`.
2026-10-24T10:35:58.0682758Z
2026-10-24T10:35:58.0683018Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T10:35:58.0683656Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15]
2026-10-24T10:35:58.0683979Z 1997 │ assert.equal(
2026-10-24T10:35:58.0684306Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text,
2026-10-24T10:35:58.0684596Z · ──────
2026-10-24T10:35:58.0684848Z 1999 │ "authoritative answer",
2026-10-24T10:35:58.0685050Z ╰────
2026-10-24T10:35:58.0685356Z help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T10:35:58.0685556Z
2026-10-24T10:35:58.0686078Z ⚠ 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-24T10:35:58.0686746Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7]
2026-10-24T10:35:58.0687258Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped);
2026-10-24T10:35:58.0687719Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) {
2026-10-24T10:35:58.0688098Z 3952 │ │ yield* Effect.yieldNow;
2026-10-24T10:35:58.0688418Z 3953 │ ╰─▶ }
2026-10-24T10:35:58.0688742Z 3954 │ const responseExit = yield* Fiber.join(responseFiber);
2026-10-24T10:35:58.0688996Z ╰────
2026-10-24T10:35:58.0689076Z
2026-10-24T10:35:58.0689588Z ⚠ 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-24T10:35:58.0690260Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9]
2026-10-24T10:35:58.0690563Z 6061 │ .pipe(Effect.forkScoped);
2026-10-24T10:35:58.0691047Z 6062 │ ╭─▶ while (promptGates.length < 1) {
2026-10-24T10:35:58.0691418Z 6063 │ │ yield* Effect.yieldNow;
2026-10-24T10:35:58.0691760Z 6064 │ ╰─▶ }
2026-10-24T10:35:58.0692117Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired");
2026-10-24T10:35:58.0692428Z ╰────
2026-10-24T10:35:58.0692517Z
2026-10-24T10:35:58.0693013Z ⚠ 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-24T10:35:58.0693678Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9]
2026-10-24T10:35:58.0694013Z 6196 │ .pipe(Effect.forkScoped);
2026-10-24T10:35:58.0694349Z 6197 │ ╭─▶ while (promptGates.length < 2) {
2026-10-24T10:35:58.0694815Z 6198 │ │ yield* Effect.yieldNow;
2026-10-24T10:35:58.0695137Z 6199 │ ╰─▶ }
2026-10-24T10:35:58.0695532Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) {
2026-10-24T10:35:58.0695808Z ╰────
2026-10-24T10:35:58.0695890Z
2026-10-24T10:35:58.0696236Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T10:35:58.0696673Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11]
2026-10-24T10:35:58.0696922Z 113 │ const declared = {
2026-10-24T10:35:58.0697202Z 114 │ ...(manifest.dependencies ?? {}),
2026-10-24T10:35:58.0697560Z · ────────────────────────────────
2026-10-24T10:35:58.0697867Z 115 │ ...(manifest.optionalDependencies ?? {}),
2026-10-24T10:35:58.0698085Z ╰────
2026-10-24T10:35:58.0698496Z 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-24T10:35:58.0698792Z
2026-10-24T10:35:58.0699040Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T10:35:58.0699463Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11]
2026-10-24T10:35:58.0699756Z 114 │ ...(manifest.dependencies ?? {}),
2026-10-24T10:35:58.0700028Z 115 │ ...(manifest.optionalDependencies ?? {}),
2026-10-24T10:35:58.0700342Z · ────────────────────────────────────────
2026-10-24T10:35:58.0700726Z 116 │ ...(manifest.peerDependencies ?? {}),
2026-10-24T10:35:58.0700958Z ╰────
2026-10-24T10:35:58.0701382Z 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-24T10:35:58.0701670Z
2026-10-24T10:35:58.0701939Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T10:35:58.0702367Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11]
2026-10-24T10:35:58.0706528Z 115 │ ...(manifest.optionalDependencies ?? {}),
2026-10-24T10:35:58.0706775Z 116 │ ...(manifest.peerDependencies ?? {}),
2026-10-24T10:35:58.0707011Z · ────────────────────────────────────
2026-10-24T10:35:58.0707195Z 117 │ };
2026-10-24T10:35:58.0707318Z ╰────
2026-10-24T10:35:58.0707642Z 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-24T10:35:58.0707901Z
2026-10-24T10:35:58.0708053Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0708374Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
2026-10-24T10:35:58.0708630Z 26 │ const latestInput = useRef(input);
2026-10-24T10:35:58.0708921Z 27 │ latestInput.current = input;
2026-10-24T10:35:58.0709179Z · ─────┬─────────┬───
2026-10-24T10:35:58.0709487Z · │ ╰── Cannot update ref value during render
2026-10-24T10:35:58.0709783Z · ╰── This value is a ref
2026-10-24T10:35:58.0709983Z 28 │ const mounted = useRef(true);
2026-10-24T10:35:58.0710128Z ╰────
2026-10-24T10:35:58.0710657Z 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-24T10:35:58.0711435Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0711728Z
2026-10-24T10:35:58.0711942Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-24T10:35:58.0712256Z ╭─[packages/contracts/src/rpc.ts:297:8]
2026-10-24T10:35:58.0712445Z 296 │ } from "./device.ts";
2026-10-24T10:35:58.0712622Z 297 │ import {} from "./previewAutomation.ts";
2026-10-24T10:35:58.0712804Z · ──
2026-10-24T10:35:58.0712945Z 298 │ import {
2026-10-24T10:35:58.0713065Z ╰────
2026-10-24T10:35:58.0713200Z help: Remove empty braces
2026-10-24T10:35:58.0713302Z
2026-10-24T10:35:58.0713566Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T10:35:58.0713992Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10597:7]
2026-10-24T10:35:58.0714222Z 10596 │
2026-10-24T10:35:58.0714355Z 10597 │ const layer: Layer.Layer<
2026-10-24T10:35:58.0714519Z · ──┬──
2026-10-24T10:35:58.0714731Z · ╰── 'layer' is declared here
2026-10-24T10:35:58.0714958Z 10598 │ ProviderAdapter.ProviderAdapterV2,
2026-10-24T10:35:58.0715121Z ╰────
2026-10-24T10:35:58.0715283Z help: Consider removing this declaration.
2026-10-24T10:35:58.0715403Z
2026-10-24T10:35:58.0715561Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0715888Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5]
2026-10-24T10:35:58.0716114Z 90 │ }) {
2026-10-24T10:35:58.0716288Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0);
2026-10-24T10:35:58.0716498Z · ────┬───
2026-10-24T10:35:58.0716724Z · ╰── `rotation` originates here
2026-10-24T10:35:58.0716931Z 92 │ useLayoutEffect(() => {
2026-10-24T10:35:58.0717164Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
2026-10-24T10:35:58.0717387Z · ────┬───
2026-10-24T10:35:58.0717604Z · ╰── `rotation` cannot be modified
2026-10-24T10:35:58.0717815Z 94 │ }, [props.hidden, rotation]);
2026-10-24T10:35:58.0717960Z ╰────
2026-10-24T10:35:58.0718283Z 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-24T10:35:58.0718918Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0719252Z
2026-10-24T10:35:58.0719437Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0719767Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5]
2026-10-24T10:35:58.0720033Z 266 │ const variant = props.variant ?? "plain";
2026-10-24T10:35:58.0720277Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
2026-10-24T10:35:58.0720505Z · ────────┬────────
2026-10-24T10:35:58.0720752Z · ╰── `loadingVisibility` originates here
2026-10-24T10:35:58.0720968Z 268 │ useLayoutEffect(() => {
2026-10-24T10:35:58.0721243Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
2026-10-24T10:35:58.0721496Z · ────────┬────────
2026-10-24T10:35:58.0721744Z · ╰── `loadingVisibility` cannot be modified
2026-10-24T10:35:58.0721983Z 270 │ }, [loadingVisibility, props.loading]);
2026-10-24T10:35:58.0722151Z ╰────
2026-10-24T10:35:58.0722469Z 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-24T10:35:58.0723031Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0723322Z
2026-10-24T10:35:58.0723479Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0723806Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5]
2026-10-24T10:35:58.0724050Z 325 │ }) {
2026-10-24T10:35:58.0724279Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
2026-10-24T10:35:58.0724533Z · ─────────┬─────────
2026-10-24T10:35:58.0724787Z · ╰── `recordingVisibility` originates here
2026-10-24T10:35:58.0725006Z 327 │ useLayoutEffect(() => {
2026-10-24T10:35:58.0725281Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
2026-10-24T10:35:58.0725564Z · ─────────┬─────────
2026-10-24T10:35:58.0725811Z · ╰── `recordingVisibility` cannot be modified
2026-10-24T10:35:58.0726053Z 329 │ }, [props.phase, recordingVisibility]);
2026-10-24T10:35:58.0726208Z ╰────
2026-10-24T10:35:58.0726534Z 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-24T10:35:58.0727114Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0727406Z
2026-10-24T10:35:58.0727564Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0727885Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
2026-10-24T10:35:58.0728158Z 65 │ const [expanded, setExpanded] = useState(false);
2026-10-24T10:35:58.0728359Z 66 │ const progress = useSharedValue(0);
2026-10-24T10:35:58.0728535Z · ────┬───
2026-10-24T10:35:58.0728753Z · ╰── `progress` originates here
2026-10-24T10:35:58.0729015Z 67 │ useEffect(() => {
2026-10-24T10:35:58.0729255Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
2026-10-24T10:35:58.0729459Z · ────┬───
2026-10-24T10:35:58.0729673Z · ╰── `progress` cannot be modified
2026-10-24T10:35:58.0729877Z 69 │ }, [expanded, progress]);
2026-10-24T10:35:58.0730018Z ╰────
2026-10-24T10:35:58.0730336Z 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-24T10:35:58.0730899Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0731223Z
2026-10-24T10:35:58.0731369Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0731686Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
2026-10-24T10:35:58.0732015Z 121 │ const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T10:35:58.0732304Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T10:35:58.0732562Z · ───────────┬──────────
2026-10-24T10:35:58.0732863Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0733146Z 123 │ const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T10:35:58.0733329Z ╰────
2026-10-24T10:35:58.0733861Z 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-24T10:35:58.0734586Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0734864Z
2026-10-24T10:35:58.0735007Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0735316Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
2026-10-24T10:35:58.0735527Z 125 │
2026-10-24T10:35:58.0735698Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-24T10:35:58.0735902Z · ─────────┬────────
2026-10-24T10:35:58.0736148Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0736396Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-24T10:35:58.0736567Z ╰────
2026-10-24T10:35:58.0737092Z 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-24T10:35:58.0737806Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0738085Z
2026-10-24T10:35:58.0738228Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0738538Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
2026-10-24T10:35:58.0738750Z 125 │
2026-10-24T10:35:58.0738914Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-24T10:35:58.0739176Z · ─────────┬─────────
2026-10-24T10:35:58.0739459Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0739703Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-24T10:35:58.0739868Z ╰────
2026-10-24T10:35:58.0740390Z 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-24T10:35:58.0741132Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0741417Z
2026-10-24T10:35:58.0741562Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0741879Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
2026-10-24T10:35:58.0742097Z 125 │
2026-10-24T10:35:58.0742261Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-24T10:35:58.0742490Z · ─────────┬─────────
2026-10-24T10:35:58.0742777Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0743036Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-24T10:35:58.0743197Z ╰────
2026-10-24T10:35:58.0743717Z 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-24T10:35:58.0744435Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0744714Z
2026-10-24T10:35:58.0744858Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0745164Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
2026-10-24T10:35:58.0745608Z 125 │
2026-10-24T10:35:58.0745773Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-24T10:35:58.0746005Z · ──────────┬─────────
2026-10-24T10:35:58.0746290Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0746554Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-24T10:35:58.0746718Z ╰────
2026-10-24T10:35:58.0747328Z 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-24T10:35:58.0748105Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0748389Z
2026-10-24T10:35:58.0748533Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0748840Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-24T10:35:58.0749117Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-24T10:35:58.0749436Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({
2026-10-24T10:35:58.0749810Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T10:35:58.0750117Z 129 │ │ onStatus: (status: RecordingStatus) => {
2026-10-24T10:35:58.0750414Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T10:35:58.0750697Z 131 │ │ isFinished: status.isFinished,
2026-10-24T10:35:58.0751007Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T10:35:58.0751312Z 133 │ │ error: status.error,
2026-10-24T10:35:58.0751525Z 134 │ │ url: status.url,
2026-10-24T10:35:58.0751716Z 135 │ │ });
2026-10-24T10:35:58.0751890Z 136 │ │ },
2026-10-24T10:35:58.0752191Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T10:35:58.0752494Z 138 │ │ selectInput: (inputs) => {
2026-10-24T10:35:58.0752766Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T10:35:58.0753069Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T10:35:58.0753384Z 141 │ │ const known = microphoneOrder(preferences.value.microphones);
2026-10-24T10:35:58.0753688Z 142 │ │ const order = rememberMicrophones(known, inputs);
2026-10-24T10:35:58.0753936Z 143 │ │ if (order !== known) {
2026-10-24T10:35:58.0754190Z 144 │ │ registry.set(updateMobilePreferencesAtom, {
2026-10-24T10:35:58.0754453Z 145 │ │ transform: (current) => ({
2026-10-24T10:35:58.0754789Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T10:35:58.0755074Z 147 │ │ }),
2026-10-24T10:35:58.0755256Z 148 │ │ });
2026-10-24T10:35:58.0755427Z 149 │ │ }
2026-10-24T10:35:58.0755660Z 150 │ │ return preferredMicrophoneInput(inputs, order);
2026-10-24T10:35:58.0755883Z 151 │ │ },
2026-10-24T10:35:58.0756106Z 152 │ ├─▶ });
2026-10-24T10:35:58.0756482Z · ╰──── Passing a ref to a function may read its value during render
2026-10-24T10:35:58.0756941Z 153 │ recorderRef.current = recorder;
2026-10-24T10:35:58.0757134Z ╰────
2026-10-24T10:35:58.0757656Z 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-24T10:35:58.0758374Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0758653Z
2026-10-24T10:35:58.0758796Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0759105Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-24T10:35:58.0759325Z 152 │ });
2026-10-24T10:35:58.0759471Z 153 │ recorderRef.current = recorder;
2026-10-24T10:35:58.0759690Z · ─────┬─────────┬───
2026-10-24T10:35:58.0759994Z · │ ╰── Cannot update ref value during render
2026-10-24T10:35:58.0760284Z · ╰── This value is a ref
2026-10-24T10:35:58.0760512Z 154 │ sessionRef.current = new VoiceInputSession({
2026-10-24T10:35:58.0760680Z ╰────
2026-10-24T10:35:58.0761227Z 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-24T10:35:58.0761946Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0762227Z
2026-10-24T10:35:58.0762372Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0762678Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-24T10:35:58.0762927Z 153 │ recorderRef.current = recorder;
2026-10-24T10:35:58.0763224Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({
2026-10-24T10:35:58.0763494Z 155 │ │ recorder,
2026-10-24T10:35:58.0763721Z 156 │ │ getTranscriber: getLocalVoiceTranscriber,
2026-10-24T10:35:58.0763978Z 157 │ │ requestPermission: async () => {
2026-10-24T10:35:58.0764269Z 158 │ │ const permission = await requestRecordingPermissionsAsync();
2026-10-24T10:35:58.0764636Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T10:35:58.0764912Z 160 │ │ },
2026-10-24T10:35:58.0765151Z 161 │ │ configureRecording: configureVoiceRecordingAudio,
2026-10-24T10:35:58.0765439Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T10:35:58.0765720Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T10:35:58.0765974Z 164 │ │ onStateChange: (nextState) =>
2026-10-24T10:35:58.0766189Z 165 │ │ setState({
2026-10-24T10:35:58.0766394Z 166 │ │ state: nextState,
2026-10-24T10:35:58.0766647Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T10:35:58.0766987Z 168 │ │ label: sessionRef.current?.label ?? null,
2026-10-24T10:35:58.0767233Z 169 │ │ }),
2026-10-24T10:35:58.0767458Z 170 │ ├─▶ });
2026-10-24T10:35:58.0767790Z · ╰──── Cannot access ref value during render
2026-10-24T10:35:58.0768032Z 171 │ }
2026-10-24T10:35:58.0768146Z ╰────
2026-10-24T10:35:58.0768670Z 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-24T10:35:58.0769394Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0769675Z
2026-10-24T10:35:58.0769819Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0770127Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-24T10:35:58.0770372Z 153 │ recorderRef.current = recorder;
2026-10-24T10:35:58.0770576Z 154 │ sessionRef.current = new VoiceInputSession({
2026-10-24T10:35:58.0770802Z · ─────┬────────┬───
2026-10-24T10:35:58.0771128Z · │ ╰── Cannot update ref value during render
2026-10-24T10:35:58.0771415Z · ╰── This value is a ref
2026-10-24T10:35:58.0771599Z 155 │ recorder,
2026-10-24T10:35:58.0771724Z ╰────
2026-10-24T10:35:58.0772251Z 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-24T10:35:58.0772966Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0773242Z
2026-10-24T10:35:58.0773384Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0773690Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-24T10:35:58.0773936Z 184 │ return () => subscription.remove();
2026-10-24T10:35:58.0774104Z 185 │ }, [controller]);
2026-10-24T10:35:58.0774260Z · ─────┬────
2026-10-24T10:35:58.0774499Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0774698Z 186 │
2026-10-24T10:35:58.0774805Z ╰────
2026-10-24T10:35:58.0775325Z 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-24T10:35:58.0776054Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0776337Z
2026-10-24T10:35:58.0776482Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0776789Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-24T10:35:58.0777092Z 184 │ return () => subscription.remove();
2026-10-24T10:35:58.0777294Z 185 │ }, [controller]);
2026-10-24T10:35:58.0777450Z · ──────┬─────
2026-10-24T10:35:58.0777685Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0777879Z 186 │
2026-10-24T10:35:58.0777985Z ╰────
2026-10-24T10:35:58.0778506Z 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-24T10:35:58.0779225Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0779508Z
2026-10-24T10:35:58.0779662Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0779969Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-24T10:35:58.0780185Z 191 │ },
2026-10-24T10:35:58.0780318Z 192 │ [controller, recorder],
2026-10-24T10:35:58.0780481Z · ─────┬────
2026-10-24T10:35:58.0780711Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0780905Z 193 │ );
2026-10-24T10:35:58.0781014Z ╰────
2026-10-24T10:35:58.0781702Z 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-24T10:35:58.0782436Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0782725Z
2026-10-24T10:35:58.0782869Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0783175Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-24T10:35:58.0783430Z 174 │ const controller = session.controller;
2026-10-24T10:35:58.0783623Z 175 │ const recorder = recorderRef.current;
2026-10-24T10:35:58.0783830Z · ─────────┬─────────
2026-10-24T10:35:58.0784096Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0784302Z 176 │
2026-10-24T10:35:58.0784407Z ╰────
2026-10-24T10:35:58.0784936Z 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-24T10:35:58.0785726Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0786002Z
2026-10-24T10:35:58.0786145Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0786449Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-24T10:35:58.0786669Z 191 │ },
2026-10-24T10:35:58.0786801Z 192 │ [controller, recorder],
2026-10-24T10:35:58.0786979Z · ───────────┬──────────
2026-10-24T10:35:58.0787300Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0787541Z 193 │ );
2026-10-24T10:35:58.0787650Z ╰────
2026-10-24T10:35:58.0788169Z 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-24T10:35:58.0788882Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0789161Z
2026-10-24T10:35:58.0789306Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0789611Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-24T10:35:58.0789864Z 245 │ return () => clearInterval(intervalId);
2026-10-24T10:35:58.0790086Z 246 │ }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T10:35:58.0790302Z · ─────┬────
2026-10-24T10:35:58.0790563Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0790767Z 247 │
2026-10-24T10:35:58.0790875Z ╰────
2026-10-24T10:35:58.0791432Z 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-24T10:35:58.0792165Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0792448Z
2026-10-24T10:35:58.0792595Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0792905Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-24T10:35:58.0793153Z 245 │ return () => clearInterval(intervalId);
2026-10-24T10:35:58.0793368Z 246 │ }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T10:35:58.0793621Z · ────────────────────────┬───────────────────────
2026-10-24T10:35:58.0793911Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0794116Z 247 │
2026-10-24T10:35:58.0794223Z ╰────
2026-10-24T10:35:58.0794755Z 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-24T10:35:58.0795545Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0795865Z
2026-10-24T10:35:58.0796009Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0796314Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-24T10:35:58.0796542Z 260 │ setOwnerFocused,
2026-10-24T10:35:58.0796687Z 261 │ session,
2026-10-24T10:35:58.0796827Z · ───┬───
2026-10-24T10:35:58.0797051Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0797250Z 262 │ stop,
2026-10-24T10:35:58.0797367Z ╰────
2026-10-24T10:35:58.0797900Z 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-24T10:35:58.0798634Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0798915Z
2026-10-24T10:35:58.0799065Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0799378Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-24T10:35:58.0799596Z 250 │
2026-10-24T10:35:58.0799798Z 251 │ ╭─▶ return {
2026-10-24T10:35:58.0800154Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-24T10:35:58.0800448Z 253 │ │ state,
2026-10-24T10:35:58.0800636Z 254 │ │ audioLevels,
2026-10-24T10:35:58.0800836Z 255 │ │ elapsedSeconds,
2026-10-24T10:35:58.0801102Z 256 │ │ isBusy: voiceInputBlocksSubmission(state),
2026-10-24T10:35:58.0801324Z 257 │ │ ownerKey,
2026-10-24T10:35:58.0801499Z 258 │ │ label,
2026-10-24T10:35:58.0801681Z 259 │ │ focusedOwners,
2026-10-24T10:35:58.0801883Z 260 │ │ setOwnerFocused,
2026-10-24T10:35:58.0802072Z 261 │ │ session,
2026-10-24T10:35:58.0802245Z 262 │ │ stop,
2026-10-24T10:35:58.0802419Z 263 │ │ cancel,
2026-10-24T10:35:58.0802649Z 264 │ ├─▶ };
2026-10-24T10:35:58.0802983Z · ╰──── Cannot access ref value during render
2026-10-24T10:35:58.0803222Z 265 │ }
2026-10-24T10:35:58.0803333Z ╰────
2026-10-24T10:35:58.0803855Z 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-24T10:35:58.0804569Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0804848Z
2026-10-24T10:35:58.0805006Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0805378Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T10:35:58.0805739Z 121 │ const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T10:35:58.0806032Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T10:35:58.0806249Z · ─────┬─────
2026-10-24T10:35:58.0806489Z · ╰── `audioLevels` originates here
2026-10-24T10:35:58.0806742Z 123 │ const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T10:35:58.0807020Z 124 │ const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-24T10:35:58.0807226Z 125 │
2026-10-24T10:35:58.0807392Z 126 │ if (!sessionRef.current || !recorderRef.current) {
2026-10-24T10:35:58.0807608Z 127 │ const recorder = createLazyVoiceRecorder({
2026-10-24T10:35:58.0807869Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T10:35:58.0808114Z 129 │ onStatus: (status: RecordingStatus) => {
2026-10-24T10:35:58.0808344Z 130 │ sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T10:35:58.0808564Z 131 │ isFinished: status.isFinished,
2026-10-24T10:35:58.0808811Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T10:35:58.0809037Z 133 │ error: status.error,
2026-10-24T10:35:58.0809197Z 134 │ url: status.url,
2026-10-24T10:35:58.0809340Z 135 │ });
2026-10-24T10:35:58.0809464Z 136 │ },
2026-10-24T10:35:58.0809693Z 137 │ // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T10:35:58.0809936Z 138 │ selectInput: (inputs) => {
2026-10-24T10:35:58.0810162Z 139 │ const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T10:35:58.0810410Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T10:35:58.0810670Z 141 │ const known = microphoneOrder(preferences.value.microphones);
2026-10-24T10:35:58.0810922Z 142 │ const order = rememberMicrophones(known, inputs);
2026-10-24T10:35:58.0811145Z 143 │ if (order !== known) {
2026-10-24T10:35:58.0811341Z 144 │ registry.set(updateMobilePreferencesAtom, {
2026-10-24T10:35:58.0811543Z 145 │ transform: (current) => ({
2026-10-24T10:35:58.0811816Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T10:35:58.0812051Z 147 │ }),
2026-10-24T10:35:58.0812187Z 148 │ });
2026-10-24T10:35:58.0812313Z 149 │ }
2026-10-24T10:35:58.0812497Z 150 │ return preferredMicrophoneInput(inputs, order);
2026-10-24T10:35:58.0812679Z 151 │ },
2026-10-24T10:35:58.0812798Z 152 │ });
2026-10-24T10:35:58.0812942Z 153 │ recorderRef.current = recorder;
2026-10-24T10:35:58.0813144Z 154 │ sessionRef.current = new VoiceInputSession({
2026-10-24T10:35:58.0813319Z 155 │ recorder,
2026-10-24T10:35:58.0813490Z 156 │ getTranscriber: getLocalVoiceTranscriber,
2026-10-24T10:35:58.0813689Z 157 │ requestPermission: async () => {
2026-10-24T10:35:58.0813922Z 158 │ const permission = await requestRecordingPermissionsAsync();
2026-10-24T10:35:58.0814221Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T10:35:58.0814441Z 160 │ },
2026-10-24T10:35:58.0814617Z 161 │ configureRecording: configureVoiceRecordingAudio,
2026-10-24T10:35:58.0814844Z 162 │ releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T10:35:58.0815123Z 163 │ deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T10:35:58.0815355Z 164 │ onStateChange: (nextState) =>
2026-10-24T10:35:58.0815518Z 165 │ setState({
2026-10-24T10:35:58.0815665Z 166 │ state: nextState,
2026-10-24T10:35:58.0815855Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T10:35:58.0816073Z 168 │ label: sessionRef.current?.label ?? null,
2026-10-24T10:35:58.0816240Z 169 │ }),
2026-10-24T10:35:58.0816364Z 170 │ });
2026-10-24T10:35:58.0816478Z 171 │ }
2026-10-24T10:35:58.0816586Z 172 │
2026-10-24T10:35:58.0816725Z 173 │ const session = sessionRef.current;
2026-10-24T10:35:58.0816914Z 174 │ const controller = session.controller;
2026-10-24T10:35:58.0817102Z 175 │ const recorder = recorderRef.current;
2026-10-24T10:35:58.0817252Z 176 │
2026-10-24T10:35:58.0817379Z 177 │ useEffect(() => {
2026-10-24T10:35:58.0817613Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-24T10:35:58.0817914Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-24T10:35:58.0818202Z 180 │ // real background state cancels preparation; recorder status handles
2026-10-24T10:35:58.0818451Z 181 │ // calls and route interruptions during capture.
2026-10-24T10:35:58.0818706Z 182 │ if (nextState === "background") controller.appMovedToBackground();
2026-10-24T10:35:58.0818910Z 183 │ });
2026-10-24T10:35:58.0819057Z 184 │ return () => subscription.remove();
2026-10-24T10:35:58.0819225Z 185 │ }, [controller]);
2026-10-24T10:35:58.0819356Z 186 │
2026-10-24T10:35:58.0819471Z 187 │ useEffect(
2026-10-24T10:35:58.0819604Z 188 │ () => () => {
2026-10-24T10:35:58.0819761Z 189 │ controller.dispose();
2026-10-24T10:35:58.0819923Z 190 │ recorder.release();
2026-10-24T10:35:58.0820063Z 191 │ },
2026-10-24T10:35:58.0820195Z 192 │ [controller, recorder],
2026-10-24T10:35:58.0820336Z 193 │ );
2026-10-24T10:35:58.0820445Z 194 │
2026-10-24T10:35:58.0820565Z 195 │ useEffect(() => {
2026-10-24T10:35:58.0820737Z 196 │ if (state.phase !== "recording") return;
2026-10-24T10:35:58.0820898Z 197 │
2026-10-24T10:35:58.0821133Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-24T10:35:58.0821399Z 199 │ const activation = activateKeepAwakeAsync(tag);
2026-10-24T10:35:58.0821601Z 200 │ void activation.catch(() => {});
2026-10-24T10:35:58.0821764Z 201 │ return () => {
2026-10-24T10:35:58.0821993Z 202 │ // Release after activation settles, even if the recording ends immediately.
2026-10-24T10:35:58.0822294Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-24T10:35:58.0822500Z 204 │ };
2026-10-24T10:35:58.0822642Z 205 │ }, [keepAwakeId, state.phase]);
2026-10-24T10:35:58.0822793Z 206 │
2026-10-24T10:35:58.0822910Z 207 │ useEffect(() => {
2026-10-24T10:35:58.0823131Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T10:35:58.0823183Z 209 │
2026-10-24T10:35:58.0823303Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T10:35:58.0823459Z 211 │ audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T10:35:58.0823561Z 212 │ audioLevels.value = audioLevelsRef.current;
2026-10-24T10:35:58.0823639Z · ─────┬─────
2026-10-24T10:35:58.0823844Z · ╰── `audioLevels` cannot be modified
2026-10-24T10:35:58.0823933Z 213 │ }
2026-10-24T10:35:58.0823986Z ╰────
2026-10-24T10:35:58.0824255Z 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-24T10:35:58.0824572Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0824575Z
2026-10-24T10:35:58.0824782Z ⚠ react(immutability): Cannot modify local variables after render completes
2026-10-24T10:35:58.0824944Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T10:35:58.0824996Z 206 │
2026-10-24T10:35:58.0825059Z 207 │ useEffect(() => {
2026-10-24T10:35:58.0825137Z · ───┬───
2026-10-24T10:35:58.0825575Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-24T10:35:58.0825718Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T10:35:58.0825768Z 209 │
2026-10-24T10:35:58.0825888Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T10:35:58.0826043Z 211 │ audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T10:35:58.0826144Z 212 │ audioLevels.value = audioLevelsRef.current;
2026-10-24T10:35:58.0826220Z · ─────┬─────
2026-10-24T10:35:58.0826353Z · ╰── This modifies `audioLevels`
2026-10-24T10:35:58.0826408Z 213 │ }
2026-10-24T10:35:58.0826458Z ╰────
2026-10-24T10:35:58.0826808Z 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-24T10:35:58.0827124Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0827126Z
2026-10-24T10:35:58.0827392Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used.
2026-10-24T10:35:58.0827578Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10]
2026-10-24T10:35:58.0827630Z 959 │
2026-10-24T10:35:58.0827739Z 960 │ function layerClaudeAgentSdkReplayQueryRunner(
2026-10-24T10:35:58.0827855Z · ──────────────────┬─────────────────
2026-10-24T10:35:58.0828063Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here
2026-10-24T10:35:58.0828172Z 961 │ transcript: ClaudeAgentSdkReplayTranscript,
2026-10-24T10:35:58.0828221Z ╰────
2026-10-24T10:35:58.0828325Z help: Consider removing this declaration.
2026-10-24T10:35:58.0828327Z
2026-10-24T10:35:58.0828559Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T10:35:58.0828704Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51]
2026-10-24T10:35:58.0828764Z 227 │ ): string {
2026-10-24T10:35:58.0828919Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? "";
2026-10-24T10:35:58.0829033Z · ──────
2026-10-24T10:35:58.0829239Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName;
2026-10-24T10:35:58.0829331Z ╰────
2026-10-24T10:35:58.0829505Z help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T10:35:58.0829508Z
2026-10-24T10:35:58.0829815Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'.
2026-10-24T10:35:58.0829978Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7]
2026-10-24T10:35:58.0830029Z 345 │
2026-10-24T10:35:58.0830133Z 346 │ const layerFromProviderAdapter: Layer.Layer<
2026-10-24T10:35:58.0830227Z · ────────────┬───────────
2026-10-24T10:35:58.0830397Z · ╰── 'layerFromProviderAdapter' is declared here
2026-10-24T10:35:58.0830480Z 347 │ ProviderAdapterRegistryV2,
2026-10-24T10:35:58.0830535Z ╰────
2026-10-24T10:35:58.0830641Z help: Consider removing this declaration.
2026-10-24T10:35:58.0830643Z
2026-10-24T10:35:58.0830930Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T10:35:58.0831116Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
2026-10-24T10:35:58.0831168Z 14 │
2026-10-24T10:35:58.0831243Z 15 │ const legacyCredentials = {
2026-10-24T10:35:58.0831327Z · ────────┬────────
2026-10-24T10:35:58.0831475Z · ╰── 'legacyCredentials' is declared here
2026-10-24T10:35:58.0831542Z 16 │ version: 1 as const,
2026-10-24T10:35:58.0831592Z ╰────
2026-10-24T10:35:58.0831702Z help: Consider removing this declaration.
2026-10-24T10:35:58.0831708Z
2026-10-24T10:35:58.0831904Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T10:35:58.0832054Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25]
2026-10-24T10:35:58.0832163Z 266 │ {record.elements?.map((element, index) => (
2026-10-24T10:35:58.0832335Z 267 │ <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
2026-10-24T10:35:58.0832489Z · ───────────────────────────────────────────────────────
2026-10-24T10:35:58.0832564Z 268 │ <ContextField
2026-10-24T10:35:58.0832615Z ╰────
2026-10-24T10:35:58.0832763Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T10:35:58.0832765Z
2026-10-24T10:35:58.0833118Z ⚠ 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-24T10:35:58.0833240Z ╭─[packages/effect-acp/src/schema.test.ts:18:12]
2026-10-24T10:35:58.0833404Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
2026-10-24T10:35:58.0833526Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
2026-10-24T10:35:58.0833605Z · ─────────
2026-10-24T10:35:58.0833662Z 19 │ expect(
2026-10-24T10:35:58.0833713Z ╰────
2026-10-24T10:35:58.0833715Z
2026-10-24T10:35:58.0834056Z ⚠ 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-24T10:35:58.0834232Z ╭─[packages/effect-acp/src/schema.test.ts:20:7]
2026-10-24T10:35:58.0834327Z 19 │ expect(
2026-10-24T10:35:58.0834497Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
2026-10-24T10:35:58.0834570Z · ─────────
2026-10-24T10:35:58.0834632Z 21 │ ).toBe(true);
2026-10-24T10:35:58.0834682Z ╰────
2026-10-24T10:35:58.0834686Z
2026-10-24T10:35:58.0834944Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0835080Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
2026-10-24T10:35:58.0835131Z 57 │
2026-10-24T10:35:58.0835196Z 58 │ useEffect(() => {
2026-10-24T10:35:58.0835265Z · ────┬────
2026-10-24T10:35:58.0835403Z · ╰── This is the containing effect
2026-10-24T10:35:58.0835501Z 59 │ const controller = new AbortController();
2026-10-24T10:35:58.0835573Z 60 │ setLoadState("pending");
2026-10-24T10:35:58.0835647Z · ──────┬─────
2026-10-24T10:35:58.0835815Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0835978Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player.
2026-10-24T10:35:58.0836027Z ╰────
2026-10-24T10:35:58.0836647Z 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-24T10:35:58.0836985Z 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-24T10:35:58.0836990Z
2026-10-24T10:35:58.0837195Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.0837331Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
2026-10-24T10:35:58.0837413Z 70 │ return () => controller.abort();
2026-10-24T10:35:58.0837508Z 71 │ }, [player, props.playRequested, attempt]);
2026-10-24T10:35:58.0837682Z · ───┬── ─────────┬───────── ───┬───
2026-10-24T10:35:58.0837911Z · │ │ ╰── Unnecessary dependency `attempt`
2026-10-24T10:35:58.0838189Z · │ ╰── Unnecessary dependency `props.playRequested`
2026-10-24T10:35:58.0838361Z · ╰── Unnecessary dependency `player_0`
2026-10-24T10:35:58.0838412Z 72 │
2026-10-24T10:35:58.0838465Z ╰────
2026-10-24T10:35:58.0838765Z 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-24T10:35:58.0839085Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0839088Z
2026-10-24T10:35:58.0839347Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0839499Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55]
2026-10-24T10:35:58.0839560Z 61 │ }, []);
2026-10-24T10:35:58.0839623Z 62 │ useEffect(() => {
2026-10-24T10:35:58.0839695Z · ────┬────
2026-10-24T10:35:58.0839821Z · ╰── This is the containing effect
2026-10-24T10:35:58.0839972Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl);
2026-10-24T10:35:58.0840097Z · ───────┬──────
2026-10-24T10:35:58.0840302Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0840382Z 64 │ }, [playbackUrl, resolvedUrl]);
2026-10-24T10:35:58.0840433Z ╰────
2026-10-24T10:35:58.0841059Z 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-24T10:35:58.0841416Z 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-24T10:35:58.0841421Z
2026-10-24T10:35:58.0841706Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-24T10:35:58.0841841Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20]
2026-10-24T10:35:58.0841896Z 248 │ },
2026-10-24T10:35:58.0841978Z 249 │ (effect, flow, stopSessions) =>
2026-10-24T10:35:58.0842075Z · ──────┬─────
2026-10-24T10:35:58.0842228Z · ╰── 'stopSessions' is declared here
2026-10-24T10:35:58.0842294Z 250 │ effect.pipe(
2026-10-24T10:35:58.0842345Z ╰────
2026-10-24T10:35:58.0842447Z help: Consider removing this parameter.
2026-10-24T10:35:58.0842449Z
2026-10-24T10:35:58.0842707Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0842839Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:172:5]
2026-10-24T10:35:58.0843033Z 167 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
2026-10-24T10:35:58.0843102Z 168 │ useLayoutEffect(() => {
2026-10-24T10:35:58.0843181Z · ───────┬───────
2026-10-24T10:35:58.0843382Z · ╰── This is the containing effect
2026-10-24T10:35:58.0843511Z 169 │ if (faviconRequest === null) return;
2026-10-24T10:35:58.0843562Z 170 │
2026-10-24T10:35:58.0843697Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest);
2026-10-24T10:35:58.0843794Z 172 │ setActiveFaviconRequest(faviconRequest);
2026-10-24T10:35:58.0843884Z · ───────────┬───────────
2026-10-24T10:35:58.0844057Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0844127Z 173 │ return endRequest;
2026-10-24T10:35:58.0844178Z ╰────
2026-10-24T10:35:58.0844798Z 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-24T10:35:58.0845129Z 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-24T10:35:58.0845133Z
2026-10-24T10:35:58.0845598Z ⚠ 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-24T10:35:58.0845720Z ╭─[packages/effect-acp/src/errors.test.ts:129:28]
2026-10-24T10:35:58.0845814Z 128 │ const secret = "acp-summary-secret";
2026-10-24T10:35:58.0845926Z 129 │ const cause = yield* Schema.decodeUnknownEffect(
2026-10-24T10:35:58.0846049Z · ──────────────────────────
2026-10-24T10:35:58.0846120Z 130 │ Schema.Struct({
2026-10-24T10:35:58.0846171Z ╰────
2026-10-24T10:35:58.0846173Z
2026-10-24T10:35:58.0846556Z ⚠ 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-24T10:35:58.0846671Z ╭─[packages/effect-acp/src/client.ts:1269:11]
2026-10-24T10:35:58.0846823Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
2026-10-24T10:35:58.0847003Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
2026-10-24T10:35:58.0847108Z · ──────────────────────────
2026-10-24T10:35:58.0847264Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
2026-10-24T10:35:58.0847319Z ╰────
2026-10-24T10:35:58.0847322Z
2026-10-24T10:35:58.0847786Z ⚠ 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-24T10:35:58.0847911Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31]
2026-10-24T10:35:58.0847964Z 499 │
2026-10-24T10:35:58.0848077Z 500 │ const response = yield* Schema.decodeUnknownEffect(
2026-10-24T10:35:58.0848195Z · ──────────────────────────
2026-10-24T10:35:58.0848308Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse),
2026-10-24T10:35:58.0848359Z ╰────
2026-10-24T10:35:58.0848361Z
2026-10-24T10:35:58.0848690Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0848858Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5]
2026-10-24T10:35:58.0848963Z 66 │ const { id: attachmentId, fileUri } = attachment;
2026-10-24T10:35:58.0849031Z 67 │ useEffect(() => {
2026-10-24T10:35:58.0849100Z · ────┬────
2026-10-24T10:35:58.0849229Z · ╰── This is the containing effect
2026-10-24T10:35:58.0849293Z 68 │ setUri(null);
2026-10-24T10:35:58.0849365Z · ───┬──
2026-10-24T10:35:58.0849530Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0849593Z 69 │ setError(null);
2026-10-24T10:35:58.0849643Z ╰────
2026-10-24T10:35:58.0850264Z 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-24T10:35:58.0850598Z 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-24T10:35:58.0850600Z
2026-10-24T10:35:58.0850805Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.0850941Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7]
2026-10-24T10:35:58.0850995Z 90 │ };
2026-10-24T10:35:58.0851069Z 91 │ }, [attachmentId, fileUri]);
2026-10-24T10:35:58.0851217Z · ──────┬───── ───┬───
2026-10-24T10:35:58.0851403Z · │ ╰── Unnecessary dependency `fileUri`
2026-10-24T10:35:58.0851553Z · ╰── Unnecessary dependency `attachmentId`
2026-10-24T10:35:58.0851689Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType;
2026-10-24T10:35:58.0851739Z ╰────
2026-10-24T10:35:58.0852033Z 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-24T10:35:58.0852355Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0852357Z
2026-10-24T10:35:58.0852582Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T10:35:58.0852726Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34]
2026-10-24T10:35:58.0852790Z 212 │ useEffect(() => {
2026-10-24T10:35:58.0852904Z 213 │ if (!isFocused && hasSource) props.onRequestClose();
2026-10-24T10:35:58.0853002Z · ──┬──
2026-10-24T10:35:58.0853155Z · ╰── Missing dependency `props`
2026-10-24T10:35:58.0853262Z 214 │ }, [isFocused, hasSource, props.onRequestClose]);
2026-10-24T10:35:58.0853377Z · ──────────┬─────────
2026-10-24T10:35:58.0853610Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead
2026-10-24T10:35:58.0853754Z 215 │ const { source } = props;
2026-10-24T10:35:58.0853837Z ╰────
2026-10-24T10:35:58.0854259Z 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-24T10:35:58.0854578Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0854581Z
2026-10-24T10:35:58.0854753Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.0854876Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56]
2026-10-24T10:35:58.0854979Z 820 │ const resolved = resolveThreadTarget(target);
2026-10-24T10:35:58.0855146Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
2026-10-24T10:35:58.0855271Z · ─────┬────
2026-10-24T10:35:58.0855440Z · ╰── Cannot call impure function
2026-10-24T10:35:58.0855521Z 822 │ return AsyncResult.failure(
2026-10-24T10:35:58.0855573Z ╰────
2026-10-24T10:35:58.0855859Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T10:35:58.0856165Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.0856168Z
2026-10-24T10:35:58.0856344Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.0856466Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46]
2026-10-24T10:35:58.0856537Z 708 │ const wokeAt = resolved
2026-10-24T10:35:58.0856672Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
2026-10-24T10:35:58.0856784Z · ─────┬────
2026-10-24T10:35:58.0856945Z · ╰── Cannot call impure function
2026-10-24T10:35:58.0857008Z 710 │ : null;
2026-10-24T10:35:58.0857059Z ╰────
2026-10-24T10:35:58.0857343Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T10:35:58.0857647Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.0857652Z
2026-10-24T10:35:58.0857865Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T10:35:58.0857990Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28]
2026-10-24T10:35:58.0858092Z 258 │ visit(parser.parse(markdown), false, false);
2026-10-24T10:35:58.0858177Z 259 │ for (const edit of edits.reverse())
2026-10-24T10:35:58.0858272Z · ───────
2026-10-24T10:35:58.0858439Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T10:35:58.0858490Z ╰────
2026-10-24T10:35:58.0858749Z help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T10:35:58.0858825Z
2026-10-24T10:35:58.0859071Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T10:35:58.0859195Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28]
2026-10-24T10:35:58.0859277Z 289 │ visit(parser.parse(markdown));
2026-10-24T10:35:58.0859360Z 290 │ for (const edit of edits.reverse())
2026-10-24T10:35:58.0859453Z · ───────
2026-10-24T10:35:58.0859615Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T10:35:58.0859666Z ╰────
2026-10-24T10:35:58.0859925Z help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T10:35:58.0859928Z
2026-10-24T10:35:58.0860144Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T10:35:58.0860269Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38]
2026-10-24T10:35:58.0860348Z 343 │ visit(parser.parse(markdown));
2026-10-24T10:35:58.0860452Z 344 │ for (const lineStart of lineStarts.reverse()) {
2026-10-24T10:35:58.0860553Z · ───────
2026-10-24T10:35:58.0860718Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent),
2026-10-24T10:35:58.0860770Z ╰────
2026-10-24T10:35:58.0861027Z help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T10:35:58.0861029Z
2026-10-24T10:35:58.0861205Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0861368Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39]
2026-10-24T10:35:58.0861426Z 276 │
2026-10-24T10:35:58.0861610Z 277 │ ╭─▶ return createElement(RawNativeView, {
2026-10-24T10:35:58.0861704Z 278 │ │ ...nativeProps,
2026-10-24T10:35:58.0861855Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined,
2026-10-24T10:35:58.0861949Z 280 │ │ ref: nativeRef,
2026-10-24T10:35:58.0862081Z 281 │ ├─▶ });
2026-10-24T10:35:58.0862322Z · ╰──── Passing a ref to a function may read its value during render
2026-10-24T10:35:58.0862375Z 282 │ }
2026-10-24T10:35:58.0862430Z ╰────
2026-10-24T10:35:58.0862986Z 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-24T10:35:58.0863425Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0863427Z
2026-10-24T10:35:58.0863573Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0863728Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27]
2026-10-24T10:35:58.0863786Z 493 │ >
2026-10-24T10:35:58.0863865Z 494 │ {props.children(close)}
2026-10-24T10:35:58.0863952Z · ──┬──
2026-10-24T10:35:58.0864119Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0864200Z 495 │ </ReanimatedSwipeable>
2026-10-24T10:35:58.0864250Z ╰────
2026-10-24T10:35:58.0864726Z 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-24T10:35:58.0865026Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0865028Z
2026-10-24T10:35:58.0865356Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0865537Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:7]
2026-10-24T10:35:58.0865593Z 324 │ };
2026-10-24T10:35:58.0865659Z 325 │ useEffect(() => {
2026-10-24T10:35:58.0865733Z · ────┬────
2026-10-24T10:35:58.0865864Z · ╰── This is the containing effect
2026-10-24T10:35:58.0865964Z 326 │ if (!guidesEnabled && section === "guide") {
2026-10-24T10:35:58.0866059Z 327 │ requestedSection.current = "overview";
2026-10-24T10:35:58.0866233Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
2026-10-24T10:35:58.0866307Z 329 │ setSection("overview");
2026-10-24T10:35:58.0866384Z · ─────┬────
2026-10-24T10:35:58.0866553Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0866614Z 330 │ }
2026-10-24T10:35:58.0866667Z ╰────
2026-10-24T10:35:58.0867270Z 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-24T10:35:58.0867601Z 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-24T10:35:58.0867603Z
2026-10-24T10:35:58.0867813Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T10:35:58.0867990Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:331:6]
2026-10-24T10:35:58.0868168Z 326 │ if (!guidesEnabled && section === "guide") {
2026-10-24T10:35:58.0868300Z 327 │ requestedSection.current = "overview";
2026-10-24T10:35:58.0868382Z · ────────┬───────
2026-10-24T10:35:58.0868832Z · ╰── 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-24T10:35:58.0868995Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top;
2026-10-24T10:35:58.0869143Z · ─────────┬───────── ──────┬──────
2026-10-24T10:35:58.0869663Z · │ ╰── 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-24T10:35:58.0870126Z · ╰── 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-24T10:35:58.0870201Z 329 │ setSection("overview");
2026-10-24T10:35:58.0870255Z 330 │ }
2026-10-24T10:35:58.0870348Z 331 │ }, [guidesEnabled, section, insets.top]);
2026-10-24T10:35:58.0870458Z · ──────────────────┬─────────────────
2026-10-24T10:35:58.0870656Z · ╰── This dependency list is missing values used by the callback
2026-10-24T10:35:58.0870744Z 332 │ const tabContent = activityContent;
2026-10-24T10:35:58.0870804Z ╰────
2026-10-24T10:35:58.0870975Z help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T10:35:58.0871325Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0871328Z
2026-10-24T10:35:58.0871536Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T10:35:58.0871710Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:868:6]
2026-10-24T10:35:58.0871767Z 851 │ if (
2026-10-24T10:35:58.0871884Z 852 │ lastSelection.current.path === route.params.path &&
2026-10-24T10:35:58.0871964Z · ──────┬──────
2026-10-24T10:35:58.0872416Z · ╰── 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-24T10:35:58.0872546Z 853 │ lastSelection.current.id === route.params.fileSelectionId
2026-10-24T10:35:58.0872601Z 854 │ )
2026-10-24T10:35:58.0872663Z 855 │ return;
2026-10-24T10:35:58.0872844Z 856 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId };
2026-10-24T10:35:58.0872981Z 857 │ if (route.params.focus) navigation.setParams({ focus: undefined });
2026-10-24T10:35:58.0873067Z 858 │ setJumpPath(route.params.path);
2026-10-24T10:35:58.0873140Z 859 │ setSelectedRowId(null);
2026-10-24T10:35:58.0873221Z 860 │ jumpStarted.current = false;
2026-10-24T10:35:58.0873440Z 861 │ const file = data.files.find((entry) => entry.path === route.params.path);
2026-10-24T10:35:58.0873564Z 862 │ if (!file || !nativeView.current) return;
2026-10-24T10:35:58.0873654Z · ─────┬────
2026-10-24T10:35:58.0874098Z · ╰── 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-24T10:35:58.0874227Z 863 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id));
2026-10-24T10:35:58.0874305Z 864 │ jumpStarted.current = true;
2026-10-24T10:35:58.0874442Z 865 │ void nativeView.current.scrollToFile(file.id, false).catch(() => {
2026-10-24T10:35:58.0874524Z 866 │ jumpStarted.current = false;
2026-10-24T10:35:58.0874581Z 867 │ });
2026-10-24T10:35:58.0874785Z 868 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]);
2026-10-24T10:35:58.0874990Z · ──────────────────────────────────────────────┬──────────────────────────────────────────────
2026-10-24T10:35:58.0875215Z · ╰── This dependency list is missing values used by the callback
2026-10-24T10:35:58.0875327Z 869 │ const appliedFilter = useRef(filter.hideTestFiles);
2026-10-24T10:35:58.0875380Z ╰────
2026-10-24T10:35:58.0875548Z help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T10:35:58.0875870Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0875872Z
2026-10-24T10:35:58.0876140Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0876297Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:523:5]
2026-10-24T10:35:58.0877971Z 521 │ }, []);
2026-10-24T10:35:58.0878048Z 522 │ useEffect(() => {
2026-10-24T10:35:58.0878123Z · ────┬────
2026-10-24T10:35:58.0878259Z · ╰── This is the containing effect
2026-10-24T10:35:58.0878344Z 523 │ setKeyboardStateSuspect(false);
2026-10-24T10:35:58.0878435Z · ───────────┬───────────
2026-10-24T10:35:58.0878608Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0878710Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-24T10:35:58.0878760Z ╰────
2026-10-24T10:35:58.0879369Z 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-24T10:35:58.0879702Z 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-24T10:35:58.0879704Z
2026-10-24T10:35:58.0879965Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0880118Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:888:7]
2026-10-24T10:35:58.0880276Z 885 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
2026-10-24T10:35:58.0880426Z 886 │ useEffect(() => {
2026-10-24T10:35:58.0880528Z · ────┬────
2026-10-24T10:35:58.0880656Z · ╰── This is the containing effect
2026-10-24T10:35:58.0880817Z 887 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
2026-10-24T10:35:58.0880930Z 888 │ setLastKnownKeyboardHeight(liveKeyboardHeight);
2026-10-24T10:35:58.0881028Z · ─────────────┬────────────
2026-10-24T10:35:58.0881235Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0881288Z 889 │ }
2026-10-24T10:35:58.0881338Z ╰────
2026-10-24T10:35:58.0881958Z 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-24T10:35:58.0882294Z 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-24T10:35:58.0882296Z
2026-10-24T10:35:58.0882554Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0882708Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1135:5]
2026-10-24T10:35:58.0882762Z 1133 │
2026-10-24T10:35:58.0882828Z 1134 │ useEffect(() => {
2026-10-24T10:35:58.0882900Z · ────┬────
2026-10-24T10:35:58.0883036Z · ╰── This is the containing effect
2026-10-24T10:35:58.0883115Z 1135 │ setAnchorMessageId(null);
2026-10-24T10:35:58.0883200Z · ─────────┬────────
2026-10-24T10:35:58.0883375Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0883455Z 1136 │ setSubmittedMessageId(null);
2026-10-24T10:35:58.0883506Z ╰────
2026-10-24T10:35:58.0884102Z 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-24T10:35:58.0884500Z 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-24T10:35:58.0884538Z
2026-10-24T10:35:58.0884743Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.0884895Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:524:7]
2026-10-24T10:35:58.0884979Z 523 │ setKeyboardStateSuspect(false);
2026-10-24T10:35:58.0885078Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-24T10:35:58.0885217Z · ────────┬──────── ─────────┬────────
2026-10-24T10:35:58.0885430Z · │ ╰── Unnecessary dependency `liveKeyboardHeight`
2026-10-24T10:35:58.0885591Z · ╰── Unnecessary dependency `isKeyboardVisible`
2026-10-24T10:35:58.0885727Z 525 │ const handleOwnedInputFocusChange = (focused: boolean) => {
2026-10-24T10:35:58.0885781Z ╰────
2026-10-24T10:35:58.0886076Z 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-24T10:35:58.0886389Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0886392Z
2026-10-24T10:35:58.0886597Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.0886752Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1083:7]
2026-10-24T10:35:58.0886838Z 1082 │ userInputInsetProgress.set(1);
2026-10-24T10:35:58.0887002Z 1083 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
2026-10-24T10:35:58.0887104Z · ────────────┬───────────
2026-10-24T10:35:58.0887290Z · ╰── Unnecessary dependency `activeUserInputRequestId`
2026-10-24T10:35:58.0887398Z 1084 │ const showContent = props.showContent ?? true;
2026-10-24T10:35:58.0887448Z ╰────
2026-10-24T10:35:58.0887746Z 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-24T10:35:58.0888063Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0888065Z
2026-10-24T10:35:58.0888267Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.0888430Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1141:15]
2026-10-24T10:35:58.0888500Z 1140 │ freeze.set(false);
2026-10-24T10:35:58.0888581Z 1141 │ }, [freeze, selectedThreadKey]);
2026-10-24T10:35:58.0888675Z · ────────┬────────
2026-10-24T10:35:58.0888840Z · ╰── Unnecessary dependency `selectedThreadKey`
2026-10-24T10:35:58.0888892Z 1142 │
2026-10-24T10:35:58.0888943Z ╰────
2026-10-24T10:35:58.0889234Z 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-24T10:35:58.0889549Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0889552Z
2026-10-24T10:35:58.0889784Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0889973Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:971:5]
2026-10-24T10:35:58.0890084Z 966 │ const composerPopoverHeight = useSharedValue(0);
2026-10-24T10:35:58.0890189Z 967 │ const floatingControlCoverage = useSharedValue(
2026-10-24T10:35:58.0890283Z · ───────────┬───────────
2026-10-24T10:35:58.0890447Z · ╰── `floatingControlCoverage` originates here
2026-10-24T10:35:58.0890573Z 968 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-24T10:35:58.0890627Z 969 │ );
2026-10-24T10:35:58.0890691Z 970 │ useEffect(() => {
2026-10-24T10:35:58.0890793Z 971 │ floatingControlCoverage.value = withTiming(
2026-10-24T10:35:58.0890890Z · ───────────┬───────────
2026-10-24T10:35:58.0891055Z · ╰── `floatingControlCoverage` cannot be modified
2026-10-24T10:35:58.0891211Z 972 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-24T10:35:58.0891261Z ╰────
2026-10-24T10:35:58.0891528Z 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-24T10:35:58.0891841Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0891843Z
2026-10-24T10:35:58.0892002Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0892158Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:989:7]
2026-10-24T10:35:58.0892349Z 979 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
2026-10-24T10:35:58.0892472Z 980 │ const combinedContentInsetEndAdjustment = useSharedValue(
2026-10-24T10:35:58.0892581Z · ────────────────┬────────────────
2026-10-24T10:35:58.0892770Z · ╰── `combinedContentInsetEndAdjustment` originates here
2026-10-24T10:35:58.0892897Z 981 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
2026-10-24T10:35:58.0892951Z 982 │ );
2026-10-24T10:35:58.0893021Z 983 │ useAnimatedReaction(
2026-10-24T10:35:58.0893077Z 984 │ () =>
2026-10-24T10:35:58.0893168Z 985 │ contentInsetEndAdjustment.value +
2026-10-24T10:35:58.0893255Z 986 │ floatingControlCoverage.value +
2026-10-24T10:35:58.0893459Z 987 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
2026-10-24T10:35:58.0893524Z 988 │ (value) => {
2026-10-24T10:35:58.0893637Z 989 │ combinedContentInsetEndAdjustment.value = value;
2026-10-24T10:35:58.0893746Z · ────────────────┬────────────────
2026-10-24T10:35:58.0893940Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified
2026-10-24T10:35:58.0893995Z 990 │ },
2026-10-24T10:35:58.0894045Z ╰────
2026-10-24T10:35:58.0894310Z 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-24T10:35:58.0894623Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0894625Z
2026-10-24T10:35:58.0894903Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.0895067Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25]
2026-10-24T10:35:58.0895198Z 532 │ // range) the boundary string is identical and the chain would die.
2026-10-24T10:35:58.0895288Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-24T10:35:58.0895389Z · ───────┬──────
2026-10-24T10:35:58.0895556Z · ╰── Unnecessary dependency `snoozeWakeTick`
2026-10-24T10:35:58.0895696Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase();
2026-10-24T10:35:58.0895746Z ╰────
2026-10-24T10:35:58.0896053Z 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-24T10:35:58.0896371Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0896373Z
2026-10-24T10:35:58.0896544Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.0896671Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53]
2026-10-24T10:35:58.0896758Z 523 │ if (Number.isNaN(wakeAtMs)) return;
2026-10-24T10:35:58.0896915Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-24T10:35:58.0897035Z · ─────┬────
2026-10-24T10:35:58.0897209Z · ╰── Cannot call impure function
2026-10-24T10:35:58.0897291Z 525 │ const id = setTimeout(() => {
2026-10-24T10:35:58.0897340Z ╰────
2026-10-24T10:35:58.0897632Z 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-24T10:35:58.0897939Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.0897942Z
2026-10-24T10:35:58.0898203Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0898375Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5]
2026-10-24T10:35:58.0898426Z 76 │
2026-10-24T10:35:58.0898496Z 77 │ useEffect(() => {
2026-10-24T10:35:58.0898572Z · ────┬────
2026-10-24T10:35:58.0898701Z · ╰── This is the containing effect
2026-10-24T10:35:58.0898829Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl);
2026-10-24T10:35:58.0898896Z 79 │ setHostInput(host);
2026-10-24T10:35:58.0898972Z · ──────┬─────
2026-10-24T10:35:58.0899139Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0899204Z 80 │ setCodeInput(code);
2026-10-24T10:35:58.0899255Z ╰────
2026-10-24T10:35:58.0899928Z 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-24T10:35:58.0900292Z 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-24T10:35:58.0900294Z
2026-10-24T10:35:58.0900557Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0900727Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5]
2026-10-24T10:35:58.0900779Z 82 │
2026-10-24T10:35:58.0900842Z 83 │ useEffect(() => {
2026-10-24T10:35:58.0900912Z · ────┬────
2026-10-24T10:35:58.0901038Z · ╰── This is the containing effect
2026-10-24T10:35:58.0901156Z 84 │ if (routePairingUrl.length === 0) {
2026-10-24T10:35:58.0901220Z 85 │ return;
2026-10-24T10:35:58.0901276Z 86 │ }
2026-10-24T10:35:58.0901326Z 87 │
2026-10-24T10:35:58.0901442Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl);
2026-10-24T10:35:58.0901507Z 89 │ setHostInput(host);
2026-10-24T10:35:58.0901582Z · ──────┬─────
2026-10-24T10:35:58.0901748Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0901812Z 90 │ setCodeInput(code);
2026-10-24T10:35:58.0901863Z ╰────
2026-10-24T10:35:58.0902474Z 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-24T10:35:58.0902805Z 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-24T10:35:58.0902810Z
2026-10-24T10:35:58.0903068Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0903238Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7]
2026-10-24T10:35:58.0903289Z 92 │
2026-10-24T10:35:58.0903350Z 93 │ useEffect(() => {
2026-10-24T10:35:58.0903418Z · ────┬────
2026-10-24T10:35:58.0903545Z · ╰── This is the containing effect
2026-10-24T10:35:58.0903628Z 94 │ if (pairingConnectionError) {
2026-10-24T10:35:58.0903698Z 95 │ setIsSubmitting(false);
2026-10-24T10:35:58.0903783Z · ───────┬───────
2026-10-24T10:35:58.0903959Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0904012Z 96 │ }
2026-10-24T10:35:58.0904061Z ╰────
2026-10-24T10:35:58.0904674Z 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-24T10:35:58.0904998Z 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-24T10:35:58.0905001Z
2026-10-24T10:35:58.0905296Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0905500Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27]
2026-10-24T10:35:58.0905688Z 151 │ <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
2026-10-24T10:35:58.0905767Z 152 │ {props.children(open)}
2026-10-24T10:35:58.0905858Z · ──┬─
2026-10-24T10:35:58.0906017Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.0906078Z 153 │ </View>
2026-10-24T10:35:58.0906128Z ╰────
2026-10-24T10:35:58.0906617Z 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-24T10:35:58.0906916Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0906919Z
2026-10-24T10:35:58.0907120Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies
2026-10-24T10:35:58.0907271Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9]
2026-10-24T10:35:58.0907353Z 139 │ if (action.id !== undefined) {
2026-10-24T10:35:58.0907431Z 140 │ props.onPressAction?.({
2026-10-24T10:35:58.0907502Z · ──┬──
2026-10-24T10:35:58.0907634Z · ╰── Missing dependency `props`
2026-10-24T10:35:58.0907727Z 141 │ nativeEvent: { event: action.id },
2026-10-24T10:35:58.0907883Z 142 │ } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
2026-10-24T10:35:58.0907941Z 143 │ }
2026-10-24T10:35:58.0907994Z 144 │ },
2026-10-24T10:35:58.0908074Z 145 │ [close, props.onPressAction],
2026-10-24T10:35:58.0908166Z · ─────────┬─────────
2026-10-24T10:35:58.0908386Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead
2026-10-24T10:35:58.0908438Z 146 │ );
2026-10-24T10:35:58.0908488Z ╰────
2026-10-24T10:35:58.0908970Z 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-24T10:35:58.0909358Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0909398Z
2026-10-24T10:35:58.0909554Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0909710Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
2026-10-24T10:35:58.0909805Z 53 │ function usePulseAnimation(pulse: boolean) {
2026-10-24T10:35:58.0909896Z 54 │ const pulseProgress = useSharedValue(0);
2026-10-24T10:35:58.0909978Z · ──────┬──────
2026-10-24T10:35:58.0910117Z · ╰── `pulseProgress` originates here
2026-10-24T10:35:58.0910169Z 55 │
2026-10-24T10:35:58.0910232Z 56 │ useEffect(() => {
2026-10-24T10:35:58.0910293Z 57 │ if (pulse) {
2026-10-24T10:35:58.0910379Z 58 │ pulseProgress.value = withRepeat(
2026-10-24T10:35:58.0910464Z · ──────┬──────
2026-10-24T10:35:58.0910613Z · ╰── `pulseProgress` cannot be modified
2026-10-24T10:35:58.0910679Z 59 │ withTiming(1, {
2026-10-24T10:35:58.0910729Z ╰────
2026-10-24T10:35:58.0911000Z 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-24T10:35:58.0911339Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0911342Z
2026-10-24T10:35:58.0911538Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T10:35:58.0911714Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15]
2026-10-24T10:35:58.0911778Z 87 │ <li
2026-10-24T10:35:58.0911865Z 88 │ key={`${index}:${check.name}`}
2026-10-24T10:35:58.0911975Z · ──────────────────────────────
2026-10-24T10:35:58.0912123Z 89 │ className="col-span-full grid grid-cols-subgrid items-center text-xs"
2026-10-24T10:35:58.0912174Z ╰────
2026-10-24T10:35:58.0912320Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T10:35:58.0912322Z
2026-10-24T10:35:58.0912581Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0912730Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
2026-10-24T10:35:58.0912781Z 55 │
2026-10-24T10:35:58.0912845Z 56 │ useEffect(() => {
2026-10-24T10:35:58.0912921Z · ────┬────
2026-10-24T10:35:58.0913053Z · ╰── This is the containing effect
2026-10-24T10:35:58.0913120Z 57 │ setDecodedSize(null);
2026-10-24T10:35:58.0913197Z · ───────┬──────
2026-10-24T10:35:58.0913364Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0913432Z 58 │ }, [props.sourceKey]);
2026-10-24T10:35:58.0913482Z ╰────
2026-10-24T10:35:58.0914099Z 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-24T10:35:58.0914498Z 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-24T10:35:58.0914531Z
2026-10-24T10:35:58.0914790Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0914937Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
2026-10-24T10:35:58.0914989Z 59 │
2026-10-24T10:35:58.0915051Z 60 │ useEffect(() => {
2026-10-24T10:35:58.0915119Z · ────┬────
2026-10-24T10:35:58.0915244Z · ╰── This is the containing effect
2026-10-24T10:35:58.0915310Z 61 │ setFailedUri(null);
2026-10-24T10:35:58.0915384Z · ──────┬─────
2026-10-24T10:35:58.0915556Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0915622Z 62 │ }, [props.uri]);
2026-10-24T10:35:58.0915672Z ╰────
2026-10-24T10:35:58.0916282Z 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-24T10:35:58.0916609Z 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-24T10:35:58.0916611Z
2026-10-24T10:35:58.0916829Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-24T10:35:58.0916983Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
2026-10-24T10:35:58.0917112Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg";
2026-10-24T10:35:58.0917295Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
2026-10-24T10:35:58.0917382Z · ────────┬────────
2026-10-24T10:35:58.0917533Z · ╰── 'ActivityIndicator' is imported here
2026-10-24T10:35:58.0917584Z 8 │
2026-10-24T10:35:58.0917634Z ╰────
2026-10-24T10:35:58.0917731Z help: Consider removing this import.
2026-10-24T10:35:58.0917734Z
2026-10-24T10:35:58.0917938Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.0918089Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
2026-10-24T10:35:58.0918162Z 57 │ setDecodedSize(null);
2026-10-24T10:35:58.0918233Z 58 │ }, [props.sourceKey]);
2026-10-24T10:35:58.0918312Z · ───────┬───────
2026-10-24T10:35:58.0918468Z · ╰── Unnecessary dependency `props.sourceKey`
2026-10-24T10:35:58.0918519Z 59 │
2026-10-24T10:35:58.0918568Z ╰────
2026-10-24T10:35:58.0918866Z 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-24T10:35:58.0919185Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0919187Z
2026-10-24T10:35:58.0919392Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.0919609Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
2026-10-24T10:35:58.0919718Z 61 │ setFailedUri(null);
2026-10-24T10:35:58.0919780Z 62 │ }, [props.uri]);
2026-10-24T10:35:58.0919852Z · ────┬────
2026-10-24T10:35:58.0919994Z · ╰── Unnecessary dependency `props.uri`
2026-10-24T10:35:58.0920043Z 63 │
2026-10-24T10:35:58.0920093Z ╰────
2026-10-24T10:35:58.0920385Z 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-24T10:35:58.0920700Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0920703Z
2026-10-24T10:35:58.0920966Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0921155Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
2026-10-24T10:35:58.0921268Z 37 │ const [initialized, setInitialized] = useState(false);
2026-10-24T10:35:58.0921335Z 38 │ useLayoutEffect(() => {
2026-10-24T10:35:58.0921412Z · ───────┬───────
2026-10-24T10:35:58.0921541Z · ╰── This is the containing effect
2026-10-24T10:35:58.0921601Z 39 │ reset();
2026-10-24T10:35:58.0921667Z 40 │ setInitialized(true);
2026-10-24T10:35:58.0921742Z · ───────┬──────
2026-10-24T10:35:58.0921909Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0921976Z 41 │ }, [reset]);
2026-10-24T10:35:58.0922030Z ╰────
2026-10-24T10:35:58.0922644Z 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-24T10:35:58.0922973Z 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-24T10:35:58.0922975Z
2026-10-24T10:35:58.0923234Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0923395Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
2026-10-24T10:35:58.0923449Z 88 │
2026-10-24T10:35:58.0923514Z 89 │ useEffect(() => {
2026-10-24T10:35:58.0923580Z · ────┬────
2026-10-24T10:35:58.0923707Z · ╰── This is the containing effect
2026-10-24T10:35:58.0923869Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
2026-10-24T10:35:58.0923971Z 91 │ const branchName = initialProjectRef.branch;
2026-10-24T10:35:58.0924035Z 92 │ let active = true;
2026-10-24T10:35:58.0924130Z 93 │ setPendingCheckouts((count) => count + 1);
2026-10-24T10:35:58.0924213Z · ─────────┬─────────
2026-10-24T10:35:58.0924384Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0924538Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
2026-10-24T10:35:58.0924659Z ╰────
2026-10-24T10:35:58.0925299Z 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-24T10:35:58.0925629Z 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-24T10:35:58.0925631Z
2026-10-24T10:35:58.0925839Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-24T10:35:58.0925961Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9]
2026-10-24T10:35:58.0926027Z 37 │ get isConnected() {
2026-10-24T10:35:58.0926122Z 38 │ let current: FakeElement | null = this;
2026-10-24T10:35:58.0926195Z · ───────
2026-10-24T10:35:58.0926266Z 39 │ while (current?.parent) {
2026-10-24T10:35:58.0926318Z ╰────
2026-10-24T10:35:58.0926601Z 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-24T10:35:58.0926603Z
2026-10-24T10:35:58.0926761Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0926919Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T10:35:58.0926973Z 86 │
2026-10-24T10:35:58.0927065Z 87 │ const cardCoverage = props.cardCoverage;
2026-10-24T10:35:58.0927145Z · ──────┬─────
2026-10-24T10:35:58.0927288Z · ╰── `cardCoverage` originates here
2026-10-24T10:35:58.0927371Z 88 │ const barHeightRef = useRef(0);
2026-10-24T10:35:58.0927449Z 89 │ const cardHeightRef = useRef(0);
2026-10-24T10:35:58.0927535Z 90 │ const cardHeight = useSharedValue(0);
2026-10-24T10:35:58.0927626Z 91 │ const notifyCoverage = useCallback(() => {
2026-10-24T10:35:58.0927692Z 92 │ if (!cardCoverage) {
2026-10-24T10:35:58.0927751Z 93 │ return;
2026-10-24T10:35:58.0927804Z 94 │ }
2026-10-24T10:35:58.0927953Z 95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T10:35:58.0928039Z 96 │ if (coverage === cardCoverage.value) {
2026-10-24T10:35:58.0928097Z 97 │ return;
2026-10-24T10:35:58.0928151Z 98 │ }
2026-10-24T10:35:58.0928230Z 99 │ if (cardCoverage.value === 0) {
2026-10-24T10:35:58.0928312Z 100 │ cardCoverage.value = coverage;
2026-10-24T10:35:58.0928394Z · ──────┬─────
2026-10-24T10:35:58.0928539Z · ╰── `cardCoverage` cannot be modified
2026-10-24T10:35:58.0928597Z 101 │ return;
2026-10-24T10:35:58.0928649Z ╰────
2026-10-24T10:35:58.0928951Z help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state
2026-10-24T10:35:58.0929267Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0929270Z
2026-10-24T10:35:58.0929424Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0929581Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
2026-10-24T10:35:58.0929731Z 89 │ const cardHeightRef = useRef(0);
2026-10-24T10:35:58.0929849Z 90 │ const cardHeight = useSharedValue(0);
2026-10-24T10:35:58.0929925Z · ─────┬────
2026-10-24T10:35:58.0930060Z · ╰── `cardHeight` originates here
2026-10-24T10:35:58.0930154Z 91 │ const notifyCoverage = useCallback(() => {
2026-10-24T10:35:58.0930220Z 92 │ if (!cardCoverage) {
2026-10-24T10:35:58.0930277Z 93 │ return;
2026-10-24T10:35:58.0930329Z 94 │ }
2026-10-24T10:35:58.0930478Z 95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T10:35:58.0930565Z 96 │ if (coverage === cardCoverage.value) {
2026-10-24T10:35:58.0930621Z 97 │ return;
2026-10-24T10:35:58.0930673Z 98 │ }
2026-10-24T10:35:58.0930758Z 99 │ if (cardCoverage.value === 0) {
2026-10-24T10:35:58.0930842Z 100 │ cardCoverage.value = coverage;
2026-10-24T10:35:58.0930898Z 101 │ return;
2026-10-24T10:35:58.0930950Z 102 │ }
2026-10-24T10:35:58.0931051Z 103 │ cardCoverage.value = withTiming(coverage, {
2026-10-24T10:35:58.0931173Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS,
2026-10-24T10:35:58.0931258Z 105 │ easing: Easing.out(Easing.cubic),
2026-10-24T10:35:58.0931313Z 106 │ });
2026-10-24T10:35:58.0931378Z 107 │ }, [cardCoverage]);
2026-10-24T10:35:58.0931461Z 108 │ const handleBarLayout = useCallback(
2026-10-24T10:35:58.0931541Z 109 │ (event: LayoutChangeEvent) => {
2026-10-24T10:35:58.0931667Z 110 │ barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T10:35:58.0931734Z 111 │ notifyCoverage();
2026-10-24T10:35:58.0931787Z 112 │ },
2026-10-24T10:35:58.0931859Z 113 │ [notifyCoverage],
2026-10-24T10:35:58.0931914Z 114 │ );
2026-10-24T10:35:58.0931997Z 115 │ const handleCardLayout = useCallback(
2026-10-24T10:35:58.0932076Z 116 │ (event: LayoutChangeEvent) => {
2026-10-24T10:35:58.0932201Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T10:35:58.0932314Z 118 │ cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T10:35:58.0932392Z · ─────┬────
2026-10-24T10:35:58.0932531Z · ╰── `cardHeight` cannot be modified
2026-10-24T10:35:58.0932597Z 119 │ notifyCoverage();
2026-10-24T10:35:58.0932648Z ╰────
2026-10-24T10:35:58.0932919Z 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-24T10:35:58.0933301Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0933339Z
2026-10-24T10:35:58.0933545Z ⚠ react(immutability): Cannot modify local variables after render completes
2026-10-24T10:35:58.0933702Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T10:35:58.0933788Z 90 │ const cardHeight = useSharedValue(0);
2026-10-24T10:35:58.0933881Z 91 │ const notifyCoverage = useCallback(() => {
2026-10-24T10:35:58.0933985Z · ───┬───
2026-10-24T10:35:58.0934228Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T10:35:58.0934294Z 92 │ if (!cardCoverage) {
2026-10-24T10:35:58.0934358Z 93 │ return;
2026-10-24T10:35:58.0934412Z 94 │ }
2026-10-24T10:35:58.0934561Z 95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T10:35:58.0934646Z 96 │ if (coverage === cardCoverage.value) {
2026-10-24T10:35:58.0934703Z 97 │ return;
2026-10-24T10:35:58.0934756Z 98 │ }
2026-10-24T10:35:58.0934835Z 99 │ if (cardCoverage.value === 0) {
2026-10-24T10:35:58.0934917Z 100 │ cardCoverage.value = coverage;
2026-10-24T10:35:58.0934993Z · ──────┬─────
2026-10-24T10:35:58.0935130Z · ╰── This modifies `cardCoverage`
2026-10-24T10:35:58.0935189Z 101 │ return;
2026-10-24T10:35:58.0935240Z ╰────
2026-10-24T10:35:58.0935595Z help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T10:35:58.0935910Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0935912Z
2026-10-24T10:35:58.0936115Z ⚠ react(immutability): Cannot modify local variables after render completes
2026-10-24T10:35:58.0936271Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T10:35:58.0936351Z 99 │ if (cardCoverage.value === 0) {
2026-10-24T10:35:58.0936430Z 100 │ cardCoverage.value = coverage;
2026-10-24T10:35:58.0936507Z · ──────┬─────
2026-10-24T10:35:58.0936641Z · ╰── This modifies `cardCoverage`
2026-10-24T10:35:58.0936699Z 101 │ return;
2026-10-24T10:35:58.0936756Z 102 │ }
2026-10-24T10:35:58.0936860Z 103 │ cardCoverage.value = withTiming(coverage, {
2026-10-24T10:35:58.0936957Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS,
2026-10-24T10:35:58.0937041Z 105 │ easing: Easing.out(Easing.cubic),
2026-10-24T10:35:58.0937096Z 106 │ });
2026-10-24T10:35:58.0937161Z 107 │ }, [cardCoverage]);
2026-10-24T10:35:58.0937243Z 108 │ const handleBarLayout = useCallback(
2026-10-24T10:35:58.0937321Z 109 │ (event: LayoutChangeEvent) => {
2026-10-24T10:35:58.0937427Z · ───────────────┬───────────────
2026-10-24T10:35:58.0937654Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T10:35:58.0937779Z 110 │ barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T10:35:58.0937828Z ╰────
2026-10-24T10:35:58.0938251Z help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T10:35:58.0938597Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0938600Z
2026-10-24T10:35:58.0938803Z ⚠ react(immutability): Cannot modify local variables after render completes
2026-10-24T10:35:58.0938959Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
2026-10-24T10:35:58.0939043Z 115 │ const handleCardLayout = useCallback(
2026-10-24T10:35:58.0939124Z 116 │ (event: LayoutChangeEvent) => {
2026-10-24T10:35:58.0939227Z · ───────────────┬───────────────
2026-10-24T10:35:58.0939456Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render
2026-10-24T10:35:58.0939584Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T10:35:58.0939700Z 118 │ cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T10:35:58.0939775Z · ─────┬────
2026-10-24T10:35:58.0939905Z · ╰── This modifies `cardHeight`
2026-10-24T10:35:58.0939971Z 119 │ notifyCoverage();
2026-10-24T10:35:58.0940023Z ╰────
2026-10-24T10:35:58.0940358Z help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T10:35:58.0940675Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0940680Z
2026-10-24T10:35:58.0940940Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0941116Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
2026-10-24T10:35:58.0941280Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
2026-10-24T10:35:58.0941344Z 29 │ useEffect(() => {
2026-10-24T10:35:58.0941414Z · ────┬────
2026-10-24T10:35:58.0941542Z · ╰── This is the containing effect
2026-10-24T10:35:58.0941667Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot });
2026-10-24T10:35:58.0941771Z · ───┬───
2026-10-24T10:35:58.0941969Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0942043Z 31 │ }, [key, live, snapshot]);
2026-10-24T10:35:58.0942093Z ╰────
2026-10-24T10:35:58.0942708Z 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-24T10:35:58.0943037Z 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-24T10:35:58.0943040Z
2026-10-24T10:35:58.0943397Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T10:35:58.0943600Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-24T10:35:58.0943689Z 35 │ <T3SourceTextRunNativeComponent
2026-10-24T10:35:58.0943752Z 36 │ key={index}
2026-10-24T10:35:58.0943829Z · ───────────
2026-10-24T10:35:58.0943902Z 37 │ style={flattenedStyle}
2026-10-24T10:35:58.0943952Z ╰────
2026-10-24T10:35:58.0944097Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T10:35:58.0944100Z
2026-10-24T10:35:58.0944246Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.0944361Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36]
2026-10-24T10:35:58.0944550Z 53 │ const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
2026-10-24T10:35:58.0944727Z 54 │ ╭─▶ children = cloneElement(child, {
2026-10-24T10:35:58.0944831Z 55 │ │ onTouchStart: (event) => {
2026-10-24T10:35:58.0944992Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a
2026-10-24T10:35:58.0945150Z 57 │ │ // finger moves out of the row and back during the same gesture.
2026-10-24T10:35:58.0945344Z 58 │ │ menuPress.current.isPreparing = false;
2026-10-24T10:35:58.0945513Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen;
2026-10-24T10:35:58.0945626Z 60 │ │ pendingPress.current = null;
2026-10-24T10:35:58.0945746Z 61 │ │ child.props.onTouchStart?.(event);
2026-10-24T10:35:58.0945828Z 62 │ │ },
2026-10-24T10:35:58.0945933Z 63 │ │ onPress: (event) => {
2026-10-24T10:35:58.0946104Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit
2026-10-24T10:35:58.0946240Z 65 │ │ // cancellation from a previous physical gesture.
2026-10-24T10:35:58.0946407Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number";
2026-10-24T10:35:58.0946600Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
2026-10-24T10:35:58.0946686Z 68 │ │ return;
2026-10-24T10:35:58.0946762Z 69 │ │ }
2026-10-24T10:35:58.0946901Z 70 │ │ if (isTouch && menuPress.current.isPreparing) {
2026-10-24T10:35:58.0947079Z 71 │ │ // A release can arrive between native menu preparation and display.
2026-10-24T10:35:58.0947249Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome.
2026-10-24T10:35:58.0947349Z 73 │ │ event.persist();
2026-10-24T10:35:58.0947510Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event);
2026-10-24T10:35:58.0947596Z 75 │ │ return;
2026-10-24T10:35:58.0947671Z 76 │ │ }
2026-10-24T10:35:58.0947783Z 77 │ │ child.props.onPress?.(event);
2026-10-24T10:35:58.0947858Z 78 │ │ },
2026-10-24T10:35:58.0947987Z 79 │ ├─▶ });
2026-10-24T10:35:58.0948305Z · ╰──── Passing a ref to a function may read its value during render
2026-10-24T10:35:58.0948449Z 80 │ menuProps.onMenuInteractionStart = () => {
2026-10-24T10:35:58.0948501Z ╰────
2026-10-24T10:35:58.0948972Z 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-24T10:35:58.0949265Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.0949267Z
2026-10-24T10:35:58.0949425Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0949595Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5]
2026-10-24T10:35:58.0949652Z 107 │ );
2026-10-24T10:35:58.0949805Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0);
2026-10-24T10:35:58.0949894Z · ─────────┬────────
2026-10-24T10:35:58.0950048Z · ╰── `separationProgress` originates here
2026-10-24T10:35:58.0950101Z 109 │
2026-10-24T10:35:58.0950166Z 110 │ useEffect(() => {
2026-10-24T10:35:58.0950340Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING);
2026-10-24T10:35:58.0950423Z · ─────────┬────────
2026-10-24T10:35:58.0950578Z · ╰── `separationProgress` cannot be modified
2026-10-24T10:35:58.0950693Z 112 │ }, [props.showScrollToEnd, separationProgress]);
2026-10-24T10:35:58.0950747Z ╰────
2026-10-24T10:35:58.0951018Z 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-24T10:35:58.0951350Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0951353Z
2026-10-24T10:35:58.0951509Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0951674Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-24T10:35:58.0951786Z 128 │ // and repeatedly retargets the animation as it grows.
2026-10-24T10:35:58.0951902Z 129 │ const capsuleWidth = useSharedValue<number | null>(null);
2026-10-24T10:35:58.0951988Z · ──────┬─────
2026-10-24T10:35:58.0952128Z · ╰── `capsuleWidth` originates here
2026-10-24T10:35:58.0952239Z 130 │ const measuredWidthRef = useRef<number | null>(null);
2026-10-24T10:35:58.0952354Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-24T10:35:58.0952458Z 132 │ const width = event.nativeEvent.layout.width;
2026-10-24T10:35:58.0952555Z 133 │ if (width === measuredWidthRef.current) {
2026-10-24T10:35:58.0952614Z 134 │ return;
2026-10-24T10:35:58.0952666Z 135 │ }
2026-10-24T10:35:58.0952772Z 136 │ const first = measuredWidthRef.current === null;
2026-10-24T10:35:58.0952857Z 137 │ measuredWidthRef.current = width;
2026-10-24T10:35:58.0952999Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-24T10:35:58.0953074Z · ──────┬─────
2026-10-24T10:35:58.0953283Z · ╰── `capsuleWidth` cannot be modified
2026-10-24T10:35:58.0953367Z 139 │ };
2026-10-24T10:35:58.0953416Z ╰────
2026-10-24T10:35:58.0953686Z 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-24T10:35:58.0953997Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0953999Z
2026-10-24T10:35:58.0954155Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0954317Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-24T10:35:58.0954427Z 128 │ // and repeatedly retargets the animation as it grows.
2026-10-24T10:35:58.0954547Z 129 │ const capsuleWidth = useSharedValue<number | null>(null);
2026-10-24T10:35:58.0954627Z · ──────┬─────
2026-10-24T10:35:58.0954764Z · ╰── `capsuleWidth` originates here
2026-10-24T10:35:58.0954873Z 130 │ const measuredWidthRef = useRef<number | null>(null);
2026-10-24T10:35:58.0954987Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-24T10:35:58.0955092Z 132 │ const width = event.nativeEvent.layout.width;
2026-10-24T10:35:58.0955187Z 133 │ if (width === measuredWidthRef.current) {
2026-10-24T10:35:58.0955244Z 134 │ return;
2026-10-24T10:35:58.0955297Z 135 │ }
2026-10-24T10:35:58.0955401Z 136 │ const first = measuredWidthRef.current === null;
2026-10-24T10:35:58.0955486Z 137 │ measuredWidthRef.current = width;
2026-10-24T10:35:58.0955631Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-24T10:35:58.0955686Z 139 │ };
2026-10-24T10:35:58.0955776Z 140 │ const hasStatus = props.status !== null;
2026-10-24T10:35:58.0955910Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-24T10:35:58.0955973Z 142 │ useEffect(() => {
2026-10-24T10:35:58.0956039Z 143 │ if (!hasStatus) {
2026-10-24T10:35:58.0956124Z 144 │ measuredWidthRef.current = null;
2026-10-24T10:35:58.0956201Z 145 │ capsuleWidth.value = null;
2026-10-24T10:35:58.0956276Z · ──────┬─────
2026-10-24T10:35:58.0956419Z · ╰── `capsuleWidth` cannot be modified
2026-10-24T10:35:58.0956473Z 146 │ }
2026-10-24T10:35:58.0956521Z ╰────
2026-10-24T10:35:58.0956862Z 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-24T10:35:58.0957202Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0957204Z
2026-10-24T10:35:58.0957408Z ⚠ react(immutability): Cannot modify local variables after render completes
2026-10-24T10:35:58.0957573Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-24T10:35:58.0957707Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-24T10:35:58.0957772Z 142 │ useEffect(() => {
2026-10-24T10:35:58.0957849Z · ───┬───
2026-10-24T10:35:58.0958076Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-24T10:35:58.0958141Z 143 │ if (!hasStatus) {
2026-10-24T10:35:58.0958228Z 144 │ measuredWidthRef.current = null;
2026-10-24T10:35:58.0958304Z 145 │ capsuleWidth.value = null;
2026-10-24T10:35:58.0958381Z · ──────┬─────
2026-10-24T10:35:58.0958515Z · ╰── This modifies `capsuleWidth`
2026-10-24T10:35:58.0958568Z 146 │ }
2026-10-24T10:35:58.0958619Z ╰────
2026-10-24T10:35:58.0958967Z help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T10:35:58.0959276Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0959280Z
2026-10-24T10:35:58.0959486Z ⚠ react(immutability): Cannot modify local variables after render completes
2026-10-24T10:35:58.0959652Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-24T10:35:58.0959765Z 130 │ const measuredWidthRef = useRef<number | null>(null);
2026-10-24T10:35:58.0959880Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-24T10:35:58.0960002Z · ───────────────┬───────────────
2026-10-24T10:35:58.0960248Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-24T10:35:58.0960353Z 132 │ const width = event.nativeEvent.layout.width;
2026-10-24T10:35:58.0960448Z 133 │ if (width === measuredWidthRef.current) {
2026-10-24T10:35:58.0960511Z 134 │ return;
2026-10-24T10:35:58.0960568Z 135 │ }
2026-10-24T10:35:58.0960673Z 136 │ const first = measuredWidthRef.current === null;
2026-10-24T10:35:58.0960759Z 137 │ measuredWidthRef.current = width;
2026-10-24T10:35:58.0960898Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-24T10:35:58.0960974Z · ──────┬─────
2026-10-24T10:35:58.0961135Z · ╰── This modifies `capsuleWidth`
2026-10-24T10:35:58.0961188Z 139 │ };
2026-10-24T10:35:58.0961237Z ╰────
2026-10-24T10:35:58.0961577Z help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-24T10:35:58.0961959Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0961994Z
2026-10-24T10:35:58.0962150Z ⚠ react(immutability): This value cannot be modified
2026-10-24T10:35:58.0962297Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5]
2026-10-24T10:35:58.0962442Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180;
2026-10-24T10:35:58.0962579Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0);
2026-10-24T10:35:58.0962654Z · ────┬───
2026-10-24T10:35:58.0962784Z · ╰── `rotation` originates here
2026-10-24T10:35:58.0962835Z 172 │
2026-10-24T10:35:58.0962906Z 173 │ useLayoutEffect(() => {
2026-10-24T10:35:58.0963040Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, {
2026-10-24T10:35:58.0963116Z · ────┬───
2026-10-24T10:35:58.0963250Z · ╰── `rotation` cannot be modified
2026-10-24T10:35:58.0963349Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS,
2026-10-24T10:35:58.0963399Z ╰────
2026-10-24T10:35:58.0963662Z 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-24T10:35:58.0963965Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T10:35:58.0963968Z
2026-10-24T10:35:58.0964162Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T10:35:58.0964320Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23]
2026-10-24T10:35:58.0964388Z 1245 │ <Text
2026-10-24T10:35:58.0964482Z 1246 │ key={`${index}:${line}`}
2026-10-24T10:35:58.0964595Z · ────────────────────────
2026-10-24T10:35:58.0964671Z 1247 │ selectable
2026-10-24T10:35:58.0964723Z ╰────
2026-10-24T10:35:58.0964868Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T10:35:58.0964870Z
2026-10-24T10:35:58.0965131Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T10:35:58.0965273Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7]
2026-10-24T10:35:58.0965326Z 3754 │
2026-10-24T10:35:58.0965535Z 3755 │ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, OpenCodeAdapterV2DriverEnv> =
2026-10-24T10:35:58.0965608Z · ──┬──
2026-10-24T10:35:58.0965734Z · ╰── 'layer' is declared here
2026-10-24T10:35:58.0965797Z 3756 │ Layer.effect(
2026-10-24T10:35:58.0965846Z ╰────
2026-10-24T10:35:58.0965951Z help: Consider removing this declaration.
2026-10-24T10:35:58.0965953Z
2026-10-24T10:35:58.0966211Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0966372Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5]
2026-10-24T10:35:58.0966431Z 434 │ : null;
2026-10-24T10:35:58.0966496Z 435 │ useEffect(() => {
2026-10-24T10:35:58.0966566Z · ────┬────
2026-10-24T10:35:58.0966767Z · ╰── This is the containing effect
2026-10-24T10:35:58.0966863Z 436 │ if (
2026-10-24T10:35:58.0966940Z 437 │ props.active === false ||
2026-10-24T10:35:58.0967016Z 438 │ activeDraftKey !== null ||
2026-10-24T10:35:58.0967098Z 439 │ editingPendingTask !== null ||
2026-10-24T10:35:58.0967171Z 440 │ selectedProject === null
2026-10-24T10:35:58.0967226Z 441 │ ) {
2026-10-24T10:35:58.0967285Z 442 │ return;
2026-10-24T10:35:58.0967338Z 443 │ }
2026-10-24T10:35:58.0967405Z 444 │ setActiveDraftKey(
2026-10-24T10:35:58.0967487Z · ────────┬────────
2026-10-24T10:35:58.0967658Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0967729Z 445 │ createNewTaskDraft({
2026-10-24T10:35:58.0967778Z ╰────
2026-10-24T10:35:58.0968390Z 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-24T10:35:58.0968724Z 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-24T10:35:58.0968727Z
2026-10-24T10:35:58.0968975Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T10:35:58.0969141Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36]
2026-10-24T10:35:58.0969245Z 1243 │ <ActiveNewTaskContext value={activeNewTask}>
2026-10-24T10:35:58.0969448Z 1244 │ <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
2026-10-24T10:35:58.0969562Z · ─────────────
2026-10-24T10:35:58.0969636Z 1245 │ </ActiveNewTaskContext>
2026-10-24T10:35:58.0969687Z ╰────
2026-10-24T10:35:58.0969913Z help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T10:35:58.0970051Z Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T10:35:58.0970053Z
2026-10-24T10:35:58.0970313Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0970477Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7]
2026-10-24T10:35:58.0970536Z 211 │ };
2026-10-24T10:35:58.0970601Z 212 │ useEffect(() => {
2026-10-24T10:35:58.0970672Z · ────┬────
2026-10-24T10:35:58.0970800Z · ╰── This is the containing effect
2026-10-24T10:35:58.0970976Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null;
2026-10-24T10:35:58.0971039Z 214 │ if (inserted) {
2026-10-24T10:35:58.0971148Z 215 │ setSelection((current) =>
2026-10-24T10:35:58.0971224Z · ──────┬─────
2026-10-24T10:35:58.0971393Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0971564Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted,
2026-10-24T10:35:58.0971614Z ╰────
2026-10-24T10:35:58.0972302Z 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-24T10:35:58.0972670Z 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-24T10:35:58.0972672Z
2026-10-24T10:35:58.0972936Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0973101Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7]
2026-10-24T10:35:58.0973178Z 284 │ }, [hasWorkspaceSnapshot]);
2026-10-24T10:35:58.0973240Z 285 │ useEffect(() => {
2026-10-24T10:35:58.0973315Z · ────┬────
2026-10-24T10:35:58.0973445Z · ╰── This is the containing effect
2026-10-24T10:35:58.0973594Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return;
2026-10-24T10:35:58.0973745Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`;
2026-10-24T10:35:58.0973815Z 288 │ const now = Date.now();
2026-10-24T10:35:58.0973931Z 289 │ const lastRequest = workspaceRefreshKeyRef.current;
2026-10-24T10:35:58.0973988Z 290 │ if (
2026-10-24T10:35:58.0974063Z 291 │ lastRequest?.key === key &&
2026-10-24T10:35:58.0974202Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS
2026-10-24T10:35:58.0974255Z 293 │ )
2026-10-24T10:35:58.0974314Z 294 │ return;
2026-10-24T10:35:58.0974497Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) {
2026-10-24T10:35:58.0974586Z 296 │ setWorkspaceRefreshRetry(null);
2026-10-24T10:35:58.0974680Z · ────────────┬───────────
2026-10-24T10:35:58.0974857Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0974915Z 297 │ return;
2026-10-24T10:35:58.0974967Z ╰────
2026-10-24T10:35:58.0975584Z 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-24T10:35:58.0975919Z 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-24T10:35:58.0975925Z
2026-10-24T10:35:58.0976130Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.0976293Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5]
2026-10-24T10:35:58.0976347Z 325 │ }, [
2026-10-24T10:35:58.0976411Z 326 │ draftMessage,
2026-10-24T10:35:58.0976487Z · ──────┬─────
2026-10-24T10:35:58.0976632Z · ╰── Unnecessary dependency `draftMessage`
2026-10-24T10:35:58.0976697Z 327 │ environmentId,
2026-10-24T10:35:58.0976747Z ╰────
2026-10-24T10:35:58.0977048Z 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-24T10:35:58.0977433Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0977464Z
2026-10-24T10:35:58.0977653Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T10:35:58.0977828Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70]
2026-10-24T10:35:58.0977909Z 554 │ assert.deepStrictEqual(
2026-10-24T10:35:58.0978075Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-24T10:35:58.0978197Z · ┬
2026-10-24T10:35:58.0978366Z · ╰── '_' is declared here
2026-10-24T10:35:58.0978427Z 556 │ [
2026-10-24T10:35:58.0978477Z ╰────
2026-10-24T10:35:58.0978579Z help: Consider removing this parameter.
2026-10-24T10:35:58.0978581Z
2026-10-24T10:35:58.0978770Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T10:35:58.0978946Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70]
2026-10-24T10:35:58.0979028Z 1154 │ assert.deepStrictEqual(
2026-10-24T10:35:58.0979195Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-24T10:35:58.0979318Z · ┬
2026-10-24T10:35:58.0979489Z · ╰── '_' is declared here
2026-10-24T10:35:58.0979553Z 1156 │ [
2026-10-24T10:35:58.0979603Z ╰────
2026-10-24T10:35:58.0979707Z help: Consider removing this parameter.
2026-10-24T10:35:58.0979710Z
2026-10-24T10:35:58.0979972Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0980148Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5]
2026-10-24T10:35:58.0980198Z 58 │
2026-10-24T10:35:58.0980262Z 59 │ useEffect(() => {
2026-10-24T10:35:58.0980332Z · ────┬────
2026-10-24T10:35:58.0980462Z · ╰── This is the containing effect
2026-10-24T10:35:58.0980541Z 60 │ setMountedModes((current) => {
2026-10-24T10:35:58.0980620Z · ───────┬───────
2026-10-24T10:35:58.0980794Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0980878Z 61 │ if (current.has(props.mode)) {
2026-10-24T10:35:58.0980928Z ╰────
2026-10-24T10:35:58.0981576Z 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-24T10:35:58.0981904Z 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-24T10:35:58.0981906Z
2026-10-24T10:35:58.0982143Z ⚠ eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T10:35:58.0982362Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14]
2026-10-24T10:35:58.0982413Z 52 │
2026-10-24T10:35:58.0982477Z 53 │ for (const {} of [
2026-10-24T10:35:58.0982548Z · ──
2026-10-24T10:35:58.0982613Z 54 │ { healthy: true },
2026-10-24T10:35:58.0982663Z ╰────
2026-10-24T10:35:58.0982893Z help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T10:35:58.0982896Z
2026-10-24T10:35:58.0983116Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T10:35:58.0983291Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7]
2026-10-24T10:35:58.0983369Z 248 │ mountedRef.current = false;
2026-10-24T10:35:58.0983452Z 249 │ flow.setBranchQuery("");
2026-10-24T10:35:58.0983523Z · ──┬─
2026-10-24T10:35:58.0983648Z · ╰── Missing dependency `flow`
2026-10-24T10:35:58.0983702Z 250 │ };
2026-10-24T10:35:58.0983774Z 251 │ }, [flow.setBranchQuery]);
2026-10-24T10:35:58.0983862Z · ─────────┬─────────
2026-10-24T10:35:58.0984070Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead
2026-10-24T10:35:58.0984121Z 252 │
2026-10-24T10:35:58.0984171Z ╰────
2026-10-24T10:35:58.0984601Z 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-24T10:35:58.0984928Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0984933Z
2026-10-24T10:35:58.0985102Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.0985313Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76]
2026-10-24T10:35:58.0985495Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() }));
2026-10-24T10:35:58.0985663Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() });
2026-10-24T10:35:58.0985801Z · ─────┬────
2026-10-24T10:35:58.0986086Z · ╰── Cannot call impure function
2026-10-24T10:35:58.0986265Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString();
2026-10-24T10:35:58.0986316Z ╰────
2026-10-24T10:35:58.0986608Z 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-24T10:35:58.0986910Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.0986913Z
2026-10-24T10:35:58.0987080Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.0987237Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71]
2026-10-24T10:35:58.0987316Z 717 │ const snoozePresets = useMemo(
2026-10-24T10:35:58.0987505Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-24T10:35:58.0987638Z · ─────┬────
2026-10-24T10:35:58.0987821Z · ╰── Cannot call impure function
2026-10-24T10:35:58.0987938Z 719 │ [props.snoozePresetMinute, swipeActions.secondary],
2026-10-24T10:35:58.0987988Z ╰────
2026-10-24T10:35:58.0988268Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T10:35:58.0988569Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.0988576Z
2026-10-24T10:35:58.0988762Z ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-24T10:35:58.0988918Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6]
2026-10-24T10:35:58.0989097Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-24T10:35:58.0989210Z 719 │ [props.snoozePresetMinute, swipeActions.secondary],
2026-10-24T10:35:58.0989304Z · ────────────┬───────────
2026-10-24T10:35:58.0989484Z · ╰── Unnecessary dependency `props.snoozePresetMinute`
2026-10-24T10:35:58.0989537Z 720 │ );
2026-10-24T10:35:58.0989586Z ╰────
2026-10-24T10:35:58.0989907Z 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-24T10:35:58.0990223Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0990226Z
2026-10-24T10:35:58.0990407Z ⚠ react(memo-dependencies): Found extra memoization dependencies
2026-10-24T10:35:58.0990561Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7]
2026-10-24T10:35:58.0990630Z 764 │ thread.pinnedAt,
2026-10-24T10:35:58.0990692Z 765 │ variant,
2026-10-24T10:35:58.0990764Z · ───┬───
2026-10-24T10:35:58.0990900Z · ╰── Unnecessary dependency `variant`
2026-10-24T10:35:58.0990955Z 766 │ ],
2026-10-24T10:35:58.0991005Z ╰────
2026-10-24T10:35:58.0991420Z 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-24T10:35:58.0991776Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.0991779Z
2026-10-24T10:35:58.0991974Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T10:35:58.0992135Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21]
2026-10-24T10:35:58.0992265Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => (
2026-10-24T10:35:58.0992401Z 1215 │ <View key={`${driver}:${index}`} className="-mr-1 opacity-30">
2026-10-24T10:35:58.0992520Z · ──────────────────────────
2026-10-24T10:35:58.0992635Z 1216 │ <ProviderIcon provider={driver} size={12} />
2026-10-24T10:35:58.0992687Z ╰────
2026-10-24T10:35:58.0992832Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T10:35:58.0992835Z
2026-10-24T10:35:58.0993095Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0993246Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7]
2026-10-24T10:35:58.0993384Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]);
2026-10-24T10:35:58.0993450Z 356 │ useEffect(() => {
2026-10-24T10:35:58.0993520Z · ────┬────
2026-10-24T10:35:58.0993649Z · ╰── This is the containing effect
2026-10-24T10:35:58.0993744Z 357 │ if (!isReturningToProjectPicker) {
2026-10-24T10:35:58.0993807Z 358 │ return;
2026-10-24T10:35:58.0993860Z 359 │ }
2026-10-24T10:35:58.0993957Z 360 │ if (requestedInitialProjectAvailable) {
2026-10-24T10:35:58.0994050Z 361 │ setIsReturningToProjectPicker(false);
2026-10-24T10:35:58.0994154Z · ──────────────┬──────────────
2026-10-24T10:35:58.0994330Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.0994389Z 362 │ return;
2026-10-24T10:35:58.0994440Z ╰────
2026-10-24T10:35:58.0995064Z 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-24T10:35:58.0995395Z 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-24T10:35:58.0995398Z
2026-10-24T10:35:58.0995660Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.0995813Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9]
2026-10-24T10:35:58.0995865Z 447 │
2026-10-24T10:35:58.0995929Z 448 │ useEffect(() => {
2026-10-24T10:35:58.0995999Z · ────┬────
2026-10-24T10:35:58.0996127Z · ╰── This is the containing effect
2026-10-24T10:35:58.0996228Z 449 │ if (props.pendingTaskId || props.draftId) {
2026-10-24T10:35:58.0996359Z 450 │ return;
2026-10-24T10:35:58.0996444Z 451 │ }
2026-10-24T10:35:58.0996589Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) {
2026-10-24T10:35:58.0996722Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef;
2026-10-24T10:35:58.0996829Z 454 │ appliedInitialProjectKeyRef.current = null;
2026-10-24T10:35:58.0996881Z 455 │ }
2026-10-24T10:35:58.0997024Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-24T10:35:58.0997153Z 457 │ const initialProjectId = props.initialProjectRef?.projectId;
2026-10-24T10:35:58.0997257Z 458 │ if (initialEnvironmentId && initialProjectId) {
2026-10-24T10:35:58.0997328Z 459 │ const directProject =
2026-10-24T10:35:58.0997395Z 460 │ projects.find(
2026-10-24T10:35:58.0997460Z 461 │ (project) =>
2026-10-24T10:35:58.0997643Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId,
2026-10-24T10:35:58.0997705Z 463 │ ) ?? null;
2026-10-24T10:35:58.0997758Z 464 │
2026-10-24T10:35:58.0997827Z 465 │ if (directProject) {
2026-10-24T10:35:58.0997966Z 466 │ // Apply the route's project once. Re-applying on every change would
2026-10-24T10:35:58.0998102Z 467 │ // instantly revert environment/project switches made in the picker.
2026-10-24T10:35:58.0998263Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`;
2026-10-24T10:35:58.0998402Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) {
2026-10-24T10:35:58.0998463Z 470 │ return;
2026-10-24T10:35:58.0998519Z 471 │ }
2026-10-24T10:35:58.0998616Z 472 │ if (props.initialProjectRef?.branch) {
2026-10-24T10:35:58.0998683Z 473 │ if (
2026-10-24T10:35:58.0998830Z 474 │ selectedProject?.environmentId !== directProject.environmentId ||
2026-10-24T10:35:58.0998929Z 475 │ selectedProject.id !== directProject.id
2026-10-24T10:35:58.0998986Z 476 │ ) {
2026-10-24T10:35:58.0999071Z 477 │ setProject(directProject);
2026-10-24T10:35:58.0999131Z 478 │ return;
2026-10-24T10:35:58.0999188Z 479 │ }
2026-10-24T10:35:58.0999270Z 480 │ if (!flow.draftKey) return;
2026-10-24T10:35:58.0999411Z 481 │ // The route completes checkout before mounting this composer. Local
2026-10-24T10:35:58.0999554Z 482 │ // mode reuses an existing worktree; worktree mode would create another.
2026-10-24T10:35:58.0999664Z 483 │ updateComposerDraftSettings(flow.draftKey, {
2026-10-24T10:35:58.0999741Z 484 │ workspaceSelection: {
2026-10-24T10:35:58.0999816Z 485 │ mode: "local",
2026-10-24T10:35:58.0999923Z 486 │ branch: props.initialProjectRef.branch,
2026-10-24T10:35:58.1000060Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null,
2026-10-24T10:35:58.1000143Z 488 │ startFromOrigin: false,
2026-10-24T10:35:58.1000201Z 489 │ },
2026-10-24T10:35:58.1000258Z 490 │ });
2026-10-24T10:35:58.1000315Z 491 │ }
2026-10-24T10:35:58.1000443Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey;
2026-10-24T10:35:58.1000501Z 493 │ if (
2026-10-24T10:35:58.1000640Z 494 │ selectedProject?.environmentId === directProject.environmentId &&
2026-10-24T10:35:58.1000740Z 495 │ selectedProject.id === directProject.id
2026-10-24T10:35:58.1000797Z 496 │ ) {
2026-10-24T10:35:58.1000859Z 497 │ return;
2026-10-24T10:35:58.1000984Z 498 │ }
2026-10-24T10:35:58.1001126Z 499 │ setProject(directProject);
2026-10-24T10:35:58.1001187Z 500 │ return;
2026-10-24T10:35:58.1001242Z 501 │ }
2026-10-24T10:35:58.1001291Z 502 │
2026-10-24T10:35:58.1001370Z 503 │ if (projects.length > 0) {
2026-10-24T10:35:58.1001467Z 504 │ setIsReturningToProjectPicker(true);
2026-10-24T10:35:58.1001574Z · ──────────────┬──────────────
2026-10-24T10:35:58.1001759Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.1001816Z 505 │ }
2026-10-24T10:35:58.1001868Z ╰────
2026-10-24T10:35:58.1002489Z 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-24T10:35:58.1002823Z 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-24T10:35:58.1002826Z
2026-10-24T10:35:58.1003086Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.1003241Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5]
2026-10-24T10:35:58.1003294Z 545 │
2026-10-24T10:35:58.1003357Z 546 │ useEffect(() => {
2026-10-24T10:35:58.1003428Z · ────┬────
2026-10-24T10:35:58.1003556Z · ╰── This is the containing effect
2026-10-24T10:35:58.1003655Z 547 │ const shareId = props.incomingShareId;
2026-10-24T10:35:58.1003737Z 548 │ const draftKey = flow.draftKey;
2026-10-24T10:35:58.1003837Z 549 │ const destinationProject = selectedProject;
2026-10-24T10:35:58.1003981Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-24T10:35:58.1004110Z 551 │ const initialProjectId = props.initialProjectRef?.projectId;
2026-10-24T10:35:58.1004197Z 552 │ const selectedProjectMatchesRoute =
2026-10-24T10:35:58.1004273Z 553 │ !initialEnvironmentId ||
2026-10-24T10:35:58.1004343Z 554 │ !initialProjectId ||
2026-10-24T10:35:58.1004476Z 555 │ (destinationProject?.environmentId === initialEnvironmentId &&
2026-10-24T10:35:58.1004580Z 556 │ destinationProject.id === initialProjectId);
2026-10-24T10:35:58.1004638Z 557 │ if (
2026-10-24T10:35:58.1004707Z 558 │ !shareId ||
2026-10-24T10:35:58.1004773Z 559 │ !draftKey ||
2026-10-24T10:35:58.1004845Z 560 │ !destinationProject ||
2026-10-24T10:35:58.1004932Z 561 │ !selectedProjectMatchesRoute ||
2026-10-24T10:35:58.1005022Z 562 │ cancelledIncomingShareId === shareId
2026-10-24T10:35:58.1005077Z 563 │ ) {
2026-10-24T10:35:58.1005135Z 564 │ return;
2026-10-24T10:35:58.1005188Z 565 │ }
2026-10-24T10:35:58.1005284Z 566 │ const importKey = `${shareId}:${draftKey}`;
2026-10-24T10:35:58.1005339Z 567 │ if (
2026-10-24T10:35:58.1005450Z 568 │ startedShareImportKeyRef.current === importKey ||
2026-10-24T10:35:58.1005562Z 569 │ cancellingShareImportKeyRef.current === importKey
2026-10-24T10:35:58.1005617Z 570 │ ) {
2026-10-24T10:35:58.1005675Z 571 │ return;
2026-10-24T10:35:58.1005729Z 572 │ }
2026-10-24T10:35:58.1005779Z 573 │
2026-10-24T10:35:58.1005928Z 574 │ if (!incomingShare) {
2026-10-24T10:35:58.1006160Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
2026-10-24T10:35:58.1006291Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId;
2026-10-24T10:35:58.1006357Z 577 │ Dialog.alert(
2026-10-24T10:35:58.1006442Z 578 │ "Shared content unavailable",
2026-10-24T10:35:58.1006615Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.",
2026-10-24T10:35:58.1006673Z 580 │ );
2026-10-24T10:35:58.1006728Z 581 │ }
2026-10-24T10:35:58.1006787Z 582 │ return;
2026-10-24T10:35:58.1006839Z 583 │ }
2026-10-24T10:35:58.1006890Z 584 │
2026-10-24T10:35:58.1006945Z 585 │ if (
2026-10-24T10:35:58.1007112Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") &&
2026-10-24T10:35:58.1007216Z 587 │ selectedEnvironmentServerConfig === null
2026-10-24T10:35:58.1007273Z 588 │ ) {
2026-10-24T10:35:58.1007330Z 589 │ return;
2026-10-24T10:35:58.1007384Z 590 │ }
2026-10-24T10:35:58.1007435Z 591 │
2026-10-24T10:35:58.1007573Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) {
2026-10-24T10:35:58.1007695Z 593 │ alertedUnavailableIncomingShareIdRef.current = null;
2026-10-24T10:35:58.1007747Z 594 │ }
2026-10-24T10:35:58.1007855Z 595 │ startedShareImportKeyRef.current = importKey;
2026-10-24T10:35:58.1007923Z 596 │ const draftBackup =
2026-10-24T10:35:58.1008112Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
2026-10-24T10:35:58.1008249Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup);
2026-10-24T10:35:58.1008345Z 599 │ const importToken = Symbol(importKey);
2026-10-24T10:35:58.1008427Z 600 │ let didReserveShare = false;
2026-10-24T10:35:58.1008504Z 601 │ let didConsumeShare = false;
2026-10-24T10:35:58.1008582Z 602 │ let needsDraftRestore = false;
2026-10-24T10:35:58.1008694Z 603 │ activeShareImportTokenRef.current = importToken;
2026-10-24T10:35:58.1008779Z 604 │ setImportingShareKey(importKey);
2026-10-24T10:35:58.1008866Z · ──────────┬─────────
2026-10-24T10:35:58.1009041Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.1009109Z 605 │ void (async () => {
2026-10-24T10:35:58.1009161Z ╰────
2026-10-24T10:35:58.1009782Z 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-24T10:35:58.1010117Z 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-24T10:35:58.1010120Z
2026-10-24T10:35:58.1010325Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.1010479Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5]
2026-10-24T10:35:58.1010555Z 523 │ props.initialProjectRef,
2026-10-24T10:35:58.1010628Z 524 │ props.incomingShareId,
2026-10-24T10:35:58.1010714Z · ──────────┬──────────
2026-10-24T10:35:58.1010964Z · ╰── Unnecessary dependency `props.incomingShareId`
2026-10-24T10:35:58.1011095Z 525 │ props.pendingTaskId,
2026-10-24T10:35:58.1011147Z ╰────
2026-10-24T10:35:58.1011444Z 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-24T10:35:58.1011766Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.1011769Z
2026-10-24T10:35:58.1011990Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T10:35:58.1012143Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5]
2026-10-24T10:35:58.1012258Z 542 │ loadedBranchesProjectKeyRef.current = projectKey;
2026-10-24T10:35:58.1012331Z 543 │ flow.loadBranches();
2026-10-24T10:35:58.1012403Z · ──┬─
2026-10-24T10:35:58.1012527Z · ╰── Missing dependency `flow`
2026-10-24T10:35:58.1012621Z 544 │ }, [flow.loadBranches, selectedProject]);
2026-10-24T10:35:58.1012705Z · ────────┬────────
2026-10-24T10:35:58.1012909Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead
2026-10-24T10:35:58.1012963Z 545 │
2026-10-24T10:35:58.1013014Z ╰────
2026-10-24T10:35:58.1013446Z 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-24T10:35:58.1013772Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.1013778Z
2026-10-24T10:35:58.1013984Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.1014138Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
2026-10-24T10:35:58.1014201Z 765 │ flow.draftKey,
2026-10-24T10:35:58.1014278Z 766 │ hasImportedIncomingShare,
2026-10-24T10:35:58.1014371Z · ────────────┬───────────
2026-10-24T10:35:58.1014553Z · ╰── Unnecessary dependency `hasImportedIncomingShare`
2026-10-24T10:35:58.1014615Z 767 │ incomingShare,
2026-10-24T10:35:58.1014697Z 768 │ isIncomingShareInboxLoading,
2026-10-24T10:35:58.1014867Z · ─────────────┬─────────────
2026-10-24T10:35:58.1015092Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading`
2026-10-24T10:35:58.1015171Z 769 │ isIncomingShareUnavailable,
2026-10-24T10:35:58.1015244Z 770 │ props.incomingShareId,
2026-10-24T10:35:58.1015338Z 771 │ props.initialProjectRef?.environmentId,
2026-10-24T10:35:58.1015427Z 772 │ props.initialProjectRef?.projectId,
2026-10-24T10:35:58.1015499Z 773 │ releaseShareReservation,
2026-10-24T10:35:58.1015561Z 774 │ reserveShare,
2026-10-24T10:35:58.1015646Z 775 │ selectedEnvironmentServerConfig,
2026-10-24T10:35:58.1015713Z 776 │ selectedProject,
2026-10-24T10:35:58.1015781Z 777 │ shareImportAttempt,
2026-10-24T10:35:58.1015867Z · ─────────┬────────
2026-10-24T10:35:58.1016043Z · ╰── Unnecessary dependency `shareImportAttempt`
2026-10-24T10:35:58.1016101Z 778 │ ]);
2026-10-24T10:35:58.1016149Z ╰────
2026-10-24T10:35:58.1016448Z 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-24T10:35:58.1016766Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.1016769Z
2026-10-24T10:35:58.1017035Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.1017196Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T10:35:58.1017257Z 259 │ .join("|");
2026-10-24T10:35:58.1017325Z 260 │ useEffect(() => {
2026-10-24T10:35:58.1017399Z · ────┬────
2026-10-24T10:35:58.1017529Z · ╰── This is the containing effect
2026-10-24T10:35:58.1017588Z 261 │ stop();
2026-10-24T10:35:58.1017657Z · ──┬─
2026-10-24T10:35:58.1017820Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.1017885Z 262 │ }, [orderVersion]);
2026-10-24T10:35:58.1017935Z ╰────
2026-10-24T10:35:58.1018536Z 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-24T10:35:58.1018870Z 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-24T10:35:58.1018876Z
2026-10-24T10:35:58.1019097Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T10:35:58.1019257Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T10:35:58.1019319Z 260 │ useEffect(() => {
2026-10-24T10:35:58.1019379Z 261 │ stop();
2026-10-24T10:35:58.1019447Z · ──┬─
2026-10-24T10:35:58.1019570Z · ╰── Missing dependency `stop`
2026-10-24T10:35:58.1019636Z 262 │ }, [orderVersion]);
2026-10-24T10:35:58.1019714Z · ──────┬─────
2026-10-24T10:35:58.1020026Z · ╰── Unnecessary dependency `orderVersion`
2026-10-24T10:35:58.1020124Z 263 │ useEffect(
2026-10-24T10:35:58.1020175Z ╰────
2026-10-24T10:35:58.1020601Z 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-24T10:35:58.1020911Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.1020913Z
2026-10-24T10:35:58.1021059Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.1021249Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
2026-10-24T10:35:58.1021327Z 95 │ const latest = useRef(props);
2026-10-24T10:35:58.1021402Z 96 │ latest.current = props;
2026-10-24T10:35:58.1021510Z · ───┬──────┬───
2026-10-24T10:35:58.1021689Z · │ ╰── Cannot update ref value during render
2026-10-24T10:35:58.1021804Z · ╰── This value is a ref
2026-10-24T10:35:58.1021873Z 97 │ const gesture = useMemo(
2026-10-24T10:35:58.1021924Z ╰────
2026-10-24T10:35:58.1022391Z 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-24T10:35:58.1022685Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.1022693Z
2026-10-24T10:35:58.1022842Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.1023006Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
2026-10-24T10:35:58.1023071Z 103 │ .runOnJS(true)
2026-10-24T10:35:58.1023170Z 104 │ .onStart(() => latest.current.onStart())
2026-10-24T10:35:58.1023288Z · ───────────────┬──────────────
2026-10-24T10:35:58.1023495Z · ╰── Passing a ref to a function may read its value during render
2026-10-24T10:35:58.1023631Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T10:35:58.1023680Z ╰────
2026-10-24T10:35:58.1024163Z 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-24T10:35:58.1024468Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.1024470Z
2026-10-24T10:35:58.1024615Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.1024776Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
2026-10-24T10:35:58.1024874Z 104 │ .onStart(() => latest.current.onStart())
2026-10-24T10:35:58.1025008Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T10:35:58.1025151Z · ──────────────────────────┬─────────────────────────
2026-10-24T10:35:58.1025497Z · ╰── Passing a ref to a function may read its value during render
2026-10-24T10:35:58.1025668Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T10:35:58.1025718Z ╰────
2026-10-24T10:35:58.1026194Z 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-24T10:35:58.1026490Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.1026493Z
2026-10-24T10:35:58.1026636Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.1026800Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
2026-10-24T10:35:58.1026932Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T10:35:58.1027056Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T10:35:58.1027196Z · ──────────────────────────┬─────────────────────────
2026-10-24T10:35:58.1027405Z · ╰── Passing a ref to a function may read its value during render
2026-10-24T10:35:58.1027530Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T10:35:58.1027582Z ╰────
2026-10-24T10:35:58.1028053Z 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-24T10:35:58.1028352Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.1028354Z
2026-10-24T10:35:58.1028499Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.1028660Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
2026-10-24T10:35:58.1028783Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T10:35:58.1028906Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T10:35:58.1029043Z · ───────────────────────┬──────────────────────
2026-10-24T10:35:58.1029260Z · ╰── Passing a ref to a function may read its value during render
2026-10-24T10:35:58.1029332Z 108 │ [props.disabled],
2026-10-24T10:35:58.1029384Z ╰────
2026-10-24T10:35:58.1029862Z 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-24T10:35:58.1030159Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.1030161Z
2026-10-24T10:35:58.1030305Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.1030466Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
2026-10-24T10:35:58.1030652Z 248 │ const latest = useRef({ rows, planners, moveThread });
2026-10-24T10:35:58.1030792Z 249 │ latest.current = { rows, planners, moveThread };
2026-10-24T10:35:58.1030898Z · ───┬──────┬───
2026-10-24T10:35:58.1031108Z · │ ╰── Cannot update ref value during render
2026-10-24T10:35:58.1031223Z · ╰── This value is a ref
2026-10-24T10:35:58.1031274Z 250 │
2026-10-24T10:35:58.1031325Z ╰────
2026-10-24T10:35:58.1031789Z 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-24T10:35:58.1032091Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.1032096Z
2026-10-24T10:35:58.1032239Z ⚠ react(refs): Cannot access refs during render
2026-10-24T10:35:58.1032395Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
2026-10-24T10:35:58.1032514Z 246 │ const [preview, setPreview] = useState<Drag | null>(null);
2026-10-24T10:35:58.1032633Z 247 │ const translateY = useRef(new Animated.Value(0)).current;
2026-10-24T10:35:58.1032759Z · ──────────────────┬──────────────────
2026-10-24T10:35:58.1032927Z · ╰── Cannot access ref value during render
2026-10-24T10:35:58.1033040Z 248 │ const latest = useRef({ rows, planners, moveThread });
2026-10-24T10:35:58.1033097Z ╰────
2026-10-24T10:35:58.1033572Z 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-24T10:35:58.1033866Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T10:35:58.1033870Z
2026-10-24T10:35:58.1034039Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.1034201Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
2026-10-24T10:35:58.1034265Z 323 │ update(0);
2026-10-24T10:35:58.1034346Z 324 │ let last = performance.now();
2026-10-24T10:35:58.1034507Z · ────────┬────────
2026-10-24T10:35:58.1034677Z · ╰── Cannot call impure function
2026-10-24T10:35:58.1034746Z 325 │ const tick = () => {
2026-10-24T10:35:58.1034796Z ╰────
2026-10-24T10:35:58.1035096Z help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T10:35:58.1035390Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.1035393Z
2026-10-24T10:35:58.1035585Z ⚠ react(capitalized-calls): Capitalized function called without JSX
2026-10-24T10:35:58.1035747Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
2026-10-24T10:35:58.1035810Z 98 │ () =>
2026-10-24T10:35:58.1035878Z 99 │ Gesture.Pan()
2026-10-24T10:35:58.1035953Z · ─┬─
2026-10-24T10:35:58.1036085Z · ╰── `Pan` may be a component
2026-10-24T10:35:58.1036163Z 100 │ .enabled(!props.disabled)
2026-10-24T10:35:58.1036215Z ╰────
2026-10-24T10:35:58.1036493Z help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
2026-10-24T10:35:58.1036948Z note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T10:35:58.1036950Z
2026-10-24T10:35:58.1037145Z ⚠ react(memo-dependencies): Found missing memoization dependencies
2026-10-24T10:35:58.1037305Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
2026-10-24T10:35:58.1037372Z 103 │ .runOnJS(true)
2026-10-24T10:35:58.1037473Z 104 │ .onStart(() => latest.current.onStart())
2026-10-24T10:35:58.1037561Z · ───┬──
2026-10-24T10:35:58.1038006Z · ╰── Missing dependency `latest`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-24T10:35:58.1038139Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T10:35:58.1038263Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T10:35:58.1038392Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T10:35:58.1038460Z 108 │ [props.disabled],
2026-10-24T10:35:58.1038541Z · ────────┬───────
2026-10-24T10:35:58.1038731Z · ╰── This dependency list is missing values used by the callback
2026-10-24T10:35:58.1038786Z 109 │ );
2026-10-24T10:35:58.1038835Z ╰────
2026-10-24T10:35:58.1039043Z help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T10:35:58.1039363Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.1039365Z
2026-10-24T10:35:58.1039538Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.1039759Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
2026-10-24T10:35:58.1039920Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props;
2026-10-24T10:35:58.1040078Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
2026-10-24T10:35:58.1040195Z · ─────┬────
2026-10-24T10:35:58.1040361Z · ╰── Cannot call impure function
2026-10-24T10:35:58.1040420Z 373 │ return (
2026-10-24T10:35:58.1040471Z ╰────
2026-10-24T10:35:58.1040755Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T10:35:58.1041061Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.1041066Z
2026-10-24T10:35:58.1041261Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.1041408Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39]
2026-10-24T10:35:58.1041502Z 852 │ if (snoozeGateClock.thread !== thread) {
2026-10-24T10:35:58.1041631Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() });
2026-10-24T10:35:58.1041742Z · ─────┬────
2026-10-24T10:35:58.1041899Z · ╰── Cannot call impure function
2026-10-24T10:35:58.1041954Z 854 │ }
2026-10-24T10:35:58.1042004Z ╰────
2026-10-24T10:35:58.1042290Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T10:35:58.1042590Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.1042592Z
2026-10-24T10:35:58.1042852Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.1044186Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5]
2026-10-24T10:35:58.1044313Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
2026-10-24T10:35:58.1044377Z 284 │ useEffect(() => {
2026-10-24T10:35:58.1044451Z · ────┬────
2026-10-24T10:35:58.1044589Z · ╰── This is the containing effect
2026-10-24T10:35:58.1044681Z 285 │ setNow(new Date().toISOString());
2026-10-24T10:35:58.1044750Z · ───┬──
2026-10-24T10:35:58.1044916Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.1045054Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
2026-10-24T10:35:58.1045105Z ╰────
2026-10-24T10:35:58.1045707Z 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-24T10:35:58.1046120Z 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-24T10:35:58.1046162Z
2026-10-24T10:35:58.1046369Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.1046538Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25]
2026-10-24T10:35:58.1046670Z 364 │ // range) the boundary string is identical and the chain would die.
2026-10-24T10:35:58.1046759Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-24T10:35:58.1046862Z · ───────┬──────
2026-10-24T10:35:58.1047028Z · ╰── Unnecessary dependency `snoozeWakeTick`
2026-10-24T10:35:58.1047141Z 366 │ const listItems = ((): readonly SidebarListItem[] => {
2026-10-24T10:35:58.1047191Z ╰────
2026-10-24T10:35:58.1047493Z 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-24T10:35:58.1047814Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.1047816Z
2026-10-24T10:35:58.1047984Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.1048150Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53]
2026-10-24T10:35:58.1048236Z 355 │ if (Number.isNaN(wakeAtMs)) return;
2026-10-24T10:35:58.1048394Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-24T10:35:58.1048516Z · ─────┬────
2026-10-24T10:35:58.1048690Z · ╰── Cannot call impure function
2026-10-24T10:35:58.1048771Z 357 │ const id = setTimeout(() => {
2026-10-24T10:35:58.1048821Z ╰────
2026-10-24T10:35:58.1049108Z 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-24T10:35:58.1049402Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.1049404Z
2026-10-24T10:35:58.1049648Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-24T10:35:58.1049812Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9]
2026-10-24T10:35:58.1049878Z 264 │ ): boolean {
2026-10-24T10:35:58.1050034Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase());
2026-10-24T10:35:58.1050201Z · ─────────────────────────────────────────────────────────────────────
2026-10-24T10:35:58.1050346Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase());
2026-10-24T10:35:58.1050397Z ╰────
2026-10-24T10:35:58.1050473Z help: Switch to `Set`
2026-10-24T10:35:58.1050475Z
2026-10-24T10:35:58.1050670Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T10:35:58.1050835Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17]
2026-10-24T10:35:58.1050898Z 813 │ <div
2026-10-24T10:35:58.1051012Z 814 │ key={`${index}:${check.name}:${check.url ?? ""}`}
2026-10-24T10:35:58.1051246Z · ─────────────────────────────────────────────────
2026-10-24T10:35:58.1051445Z 815 │ className="group flex items-center gap-2 rounded-md pr-1 hover:bg-accent/60"
2026-10-24T10:35:58.1051496Z ╰────
2026-10-24T10:35:58.1051643Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T10:35:58.1051645Z
2026-10-24T10:35:58.1051851Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T10:35:58.1051966Z ╭─[apps/mobile/src/state/thread-order.ts:29:7]
2026-10-24T10:35:58.1052041Z 28 │ getPendingThreadOrder();
2026-10-24T10:35:58.1052122Z 29 │ }, [nowMinute, snoozeWakeTick]);
2026-10-24T10:35:58.1052245Z · ────┬──── ───────┬──────
2026-10-24T10:35:58.1052447Z · │ ╰── Unnecessary dependency `snoozeWakeTick`
2026-10-24T10:35:58.1052591Z · ╰── Unnecessary dependency `nowMinute`
2026-10-24T10:35:58.1052656Z 30 │ return pending;
2026-10-24T10:35:58.1052707Z ╰────
2026-10-24T10:35:58.1053006Z 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-24T10:35:58.1053324Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T10:35:58.1053326Z
2026-10-24T10:35:58.1053588Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T10:35:58.1053746Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5]
2026-10-24T10:35:58.1053801Z 398 │
2026-10-24T10:35:58.1053865Z 399 │ useEffect(() => {
2026-10-24T10:35:58.1053938Z · ────┬────
2026-10-24T10:35:58.1054067Z · ╰── This is the containing effect
2026-10-24T10:35:58.1054160Z 400 │ setInspectorSelection((current) => {
2026-10-24T10:35:58.1054246Z · ──────────┬──────────
2026-10-24T10:35:58.1054421Z · ╰── Avoid calling setState() directly within an effect
2026-10-24T10:35:58.1054524Z 401 │ if (props.renderInspector === undefined) {
2026-10-24T10:35:58.1054575Z ╰────
2026-10-24T10:35:58.1055243Z 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-24T10:35:58.1055603Z 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-24T10:35:58.1055606Z
2026-10-24T10:35:58.1055826Z ⚠ react(no-unstable-nested-components): Do not define components during render.
2026-10-24T10:35:58.1055978Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24]
2026-10-24T10:35:58.1056141Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
2026-10-24T10:35:58.1056312Z 528 │ ╭─▶ const GitInspector = () => (
2026-10-24T10:35:58.1056416Z 529 │ │ <GitOverviewSheet
2026-10-24T10:35:58.1056539Z 530 │ │ headerInset={inspectorHeaderInset}
2026-10-24T10:35:58.1056647Z 531 │ │ presentation="inspector"
2026-10-24T10:35:58.1056829Z 532 │ │ route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
2026-10-24T10:35:58.1056904Z 533 │ │ />
2026-10-24T10:35:58.1057032Z 534 │ ╰─▶ );
2026-10-24T10:35:58.1057113Z 535 │ const FilesInspector = () =>
2026-10-24T10:35:58.1057163Z ╰────
2026-10-24T10:35:58.1057383Z help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-24T10:35:58.1057386Z
2026-10-24T10:35:58.1057608Z ⚠ react(no-unstable-nested-components): Do not define components during render.
2026-10-24T10:35:58.1057762Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26]
2026-10-24T10:35:58.1057819Z 534 │ );
2026-10-24T10:35:58.1057985Z 535 │ ╭─▶ const FilesInspector = () =>
2026-10-24T10:35:58.1058137Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? (
2026-10-24T10:35:58.1058245Z 537 │ │ <ThreadFileNavigatorPane
2026-10-24T10:35:58.1058351Z 538 │ │ cwd={selectedThreadCwd}
2026-10-24T10:35:58.1058487Z 539 │ │ environmentId={selectedThread.environmentId}
2026-10-24T10:35:58.1058611Z 540 │ │ headerInset={inspectorHeaderInset}
2026-10-24T10:35:58.1058766Z 541 │ │ projectName={selectedThreadProject?.title ?? "Files"}
2026-10-24T10:35:58.1058873Z 542 │ │ selectedPath={null}
2026-10-24T10:35:58.1059002Z 543 │ │ onSelectFile={handleSelectInspectorFile}
2026-10-24T10:35:58.1059079Z 544 │ │ />
2026-10-24T10:35:58.1059218Z 545 │ ╰─▶ ) : null;
2026-10-24T10:35:58.1059372Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
2026-10-24T10:35:58.1059421Z ╰────
2026-10-24T10:35:58.1059641Z help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-24T10:35:58.1059644Z
2026-10-24T10:35:58.1060005Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T10:35:58.1060195Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
2026-10-24T10:35:58.1060251Z 162 │ keys,
2026-10-24T10:35:58.1060322Z 163 │ overridingProjects = [],
2026-10-24T10:35:58.1060404Z · ──
2026-10-24T10:35:58.1060469Z 164 │ onClearOverrides,
2026-10-24T10:35:58.1060518Z ╰────
2026-10-24T10:35:58.1060840Z 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-24T10:35:58.1060842Z
2026-10-24T10:35:58.1061150Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T10:35:58.1061324Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19]
2026-10-24T10:35:58.1061388Z 472 │ onFilters,
2026-10-24T10:35:58.1061454Z 473 │ authorOptions = [],
2026-10-24T10:35:58.1061530Z · ──
2026-10-24T10:35:58.1061597Z 474 │ labelOptions = [],
2026-10-24T10:35:58.1061647Z ╰────
2026-10-24T10:35:58.1061967Z 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-24T10:35:58.1061969Z
2026-10-24T10:35:58.1062254Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T10:35:58.1062422Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18]
2026-10-24T10:35:58.1062488Z 473 │ authorOptions = [],
2026-10-24T10:35:58.1062557Z 474 │ labelOptions = [],
2026-10-24T10:35:58.1062634Z · ──
2026-10-24T10:35:58.1062697Z 475 │ optionScope,
2026-10-24T10:35:58.1062747Z ╰────
2026-10-24T10:35:58.1063066Z 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-24T10:35:58.1063068Z
2026-10-24T10:35:58.1063274Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T10:35:58.1063441Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
2026-10-24T10:35:58.1063515Z 3 │ AuthProvidersManageScope,
2026-10-24T10:35:58.1063582Z 4 │ type AuthSessionState,
2026-10-24T10:35:58.1063666Z · ────────┬───────
2026-10-24T10:35:58.1063820Z · ╰── 'AuthSessionState' is imported here
2026-10-24T10:35:58.1063890Z 5 │ type EnvironmentId,
2026-10-24T10:35:58.1063939Z ╰────
2026-10-24T10:35:58.1064039Z help: Consider removing this import.
2026-10-24T10:35:58.1064042Z
2026-10-24T10:35:58.1064212Z ⚠ react(purity): Cannot call impure function during render
2026-10-24T10:35:58.1064345Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20]
2026-10-24T10:35:58.1064464Z 1995 │ title: inferProjectTitleFromPath(destinationPath),
2026-10-24T10:35:58.1064558Z 1996 │ createdAt: new Date().toISOString(),
2026-10-24T10:35:58.1064650Z · ─────┬────
2026-10-24T10:35:58.1064796Z · ╰── Cannot call impure function
2026-10-24T10:35:58.1064973Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl,
2026-10-24T10:35:58.1065062Z ╰────
2026-10-24T10:35:58.1065390Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T10:35:58.1065687Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T10:35:58.1065689Z
2026-10-24T10:35:58.1065770Z Found 0 errors and 362 warnings in 5420 files (6.9s, 8 threads)
2026-10-24T10:35:58.1564656Z Post job cleanup.
2026-10-24T10:35:58.2161853Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-24T10:35:58.2244032Z Post job cleanup.
2026-10-24T10:35:58.2256471Z ##[start-action display=Cache full pnpm store;id=__b845a95d-d47e-4079-bc78-a4a9859d6589.__actions_cache]
2026-10-24T10:35:58.2614159Z Post job cleanup.
2026-10-24T10:35:58.3254574Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d, not saving cache.
2026-10-24T10:35:58.3290260Z ##[end-action id=__b845a95d-d47e-4079-bc78-a4a9859d6589.__actions_cache;outcome=success;conclusion=success;duration_ms=103]
2026-10-24T10:35:58.3292563Z ##[start-action display=Cache Vite+;id=__b845a95d-d47e-4079-bc78-a4a9859d6589.vp_cache]
2026-10-24T10:35:58.3316248Z Post job cleanup.
2026-10-24T10:35:58.3953659Z 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-24T10:35:58.3986328Z ##[end-action id=__b845a95d-d47e-4079-bc78-a4a9859d6589.vp_cache;outcome=success;conclusion=success;duration_ms=69]
2026-10-24T10:35:58.4030509Z Post job cleanup.
2026-10-24T10:35:58.4471712Z [command]/usr/local/bin/git version
2026-10-24T10:35:58.4505475Z git version 2.55.0
2026-10-24T10:35:58.4525013Z Temporarily overriding HOME='/home/runner/_work/_temp/d0ab4df1-b12a-47e0-a10f-1ae6f47bcd5b' before making global git config changes
2026-10-24T10:35:58.4525440Z Adding repository directory to the temporary git global config as a safe directory
2026-10-24T10:35:58.4528238Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-24T10:35:58.4661314Z Removing SSH command configuration
2026-10-24T10:35:58.4664434Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-24T10:35:58.4689812Z [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-24T10:35:58.4830847Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-24T10:35:58.4858945Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-24T10:35:58.4902776Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-24T10:35:58.4916302Z ##[group]Run '/job_completed.sh'
2026-10-24T10:35:58.4921839Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-24T10:35:58.4922008Z env:
2026-10-24T10:35:58.4922121Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 182
2026-10-24T10:35:58.4922270Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 428
2026-10-24T10:35:58.4922412Z BLACKSMITH_CHECK_RUN_ID: 120850399005
2026-10-24T10:35:58.4922556Z BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-24T10:35:58.4922695Z GITHUB_ACTIONS_CACHE_MODE: write
2026-10-24T10:35:58.4922833Z ##[endgroup]
2026-10-24T10:35:58.5000051Z Docker container cache not activated, skipping hash computation.
2026-10-24T10:35:58.5276647Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-24T10:35:58.5319802Z Cleaning up orphan processes