GitHub check

256 KB of 604 KB loaded Download the full log (604 KB)
348 KB of earlier output not loaded
691250Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T11:06:37.7691365Z      ยท                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7691533Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7691632Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T11:06:37.7691683Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7692202Z   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-24T11:06:37.7692527Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7692529Z
2026-10-24T11:06:37.7692672Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7692830Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-24T11:06:37.7692940Z  126 โ”‚       if (!sessionRef.current || !recorderRef.current) {
2026-10-24T11:06:37.7693135Z  127 โ”‚ โ•ญโ”€โ–ถ     const recorder = createLazyVoiceRecorder({
2026-10-24T11:06:37.7693310Z  128 โ”‚ โ”‚         create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T11:06:37.7693442Z  129 โ”‚ โ”‚         onStatus: (status: RecordingStatus) => {
2026-10-24T11:06:37.7693599Z  130 โ”‚ โ”‚           sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T11:06:37.7693717Z  131 โ”‚ โ”‚             isFinished: status.isFinished,
2026-10-24T11:06:37.7693895Z  132 โ”‚ โ”‚             hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T11:06:37.7693999Z  133 โ”‚ โ”‚             error: status.error,
2026-10-24T11:06:37.7694096Z  134 โ”‚ โ”‚             url: status.url,
2026-10-24T11:06:37.7694178Z  135 โ”‚ โ”‚           });
2026-10-24T11:06:37.7694255Z  136 โ”‚ โ”‚         },
2026-10-24T11:06:37.7694454Z  137 โ”‚ โ”‚         // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T11:06:37.7694568Z  138 โ”‚ โ”‚         selectInput: (inputs) => {
2026-10-24T11:06:37.7694727Z  139 โ”‚ โ”‚           const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T11:06:37.7694872Z  140 โ”‚ โ”‚           if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T11:06:37.7695040Z  141 โ”‚ โ”‚           const known = microphoneOrder(preferences.value.microphones);
2026-10-24T11:06:37.7695180Z  142 โ”‚ โ”‚           const order = rememberMicrophones(known, inputs);
2026-10-24T11:06:37.7695282Z  143 โ”‚ โ”‚           if (order !== known) {
2026-10-24T11:06:37.7695421Z  144 โ”‚ โ”‚             registry.set(updateMobilePreferencesAtom, {
2026-10-24T11:06:37.7695537Z  145 โ”‚ โ”‚               transform: (current) => ({
2026-10-24T11:06:37.7695748Z  146 โ”‚ โ”‚                 microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T11:06:37.7695835Z  147 โ”‚ โ”‚               }),
2026-10-24T11:06:37.7695917Z  148 โ”‚ โ”‚             });
2026-10-24T11:06:37.7695996Z  149 โ”‚ โ”‚           }
2026-10-24T11:06:37.7696136Z  150 โ”‚ โ”‚           return preferredMicrophoneInput(inputs, order);
2026-10-24T11:06:37.7696212Z  151 โ”‚ โ”‚         },
2026-10-24T11:06:37.7696346Z  152 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T11:06:37.7696585Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7696674Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T11:06:37.7696727Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7697249Z   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-24T11:06:37.7697571Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7697573Z
2026-10-24T11:06:37.7697719Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7697881Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-24T11:06:37.7697938Z  152 โ”‚     });
2026-10-24T11:06:37.7698019Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T11:06:37.7698134Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7698353Z      ยท          โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T11:06:37.7698474Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T11:06:37.7698580Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T11:06:37.7698633Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7699099Z   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-24T11:06:37.7699389Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7699393Z
2026-10-24T11:06:37.7699535Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7699699Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-24T11:06:37.7699791Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T11:06:37.7699989Z  154 โ”‚ โ•ญโ”€โ–ถ     sessionRef.current = new VoiceInputSession({
2026-10-24T11:06:37.7700073Z  155 โ”‚ โ”‚         recorder,
2026-10-24T11:06:37.7700203Z  156 โ”‚ โ”‚         getTranscriber: getLocalVoiceTranscriber,
2026-10-24T11:06:37.7700321Z  157 โ”‚ โ”‚         requestPermission: async () => {
2026-10-24T11:06:37.7700486Z  158 โ”‚ โ”‚           const permission = await requestRecordingPermissionsAsync();
2026-10-24T11:06:37.7700677Z  159 โ”‚ โ”‚           return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T11:06:37.7700763Z  160 โ”‚ โ”‚         },
2026-10-24T11:06:37.7700909Z  161 โ”‚ โ”‚         configureRecording: configureVoiceRecordingAudio,
2026-10-24T11:06:37.7701045Z  162 โ”‚ โ”‚         releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T11:06:37.7701179Z  163 โ”‚ โ”‚         deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T11:06:37.7701293Z  164 โ”‚ โ”‚         onStateChange: (nextState) =>
2026-10-24T11:06:37.7701387Z  165 โ”‚ โ”‚           setState({
2026-10-24T11:06:37.7701491Z  166 โ”‚ โ”‚             state: nextState,
2026-10-24T11:06:37.7701627Z  167 โ”‚ โ”‚             ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T11:06:37.7701757Z  168 โ”‚ โ”‚             label: sessionRef.current?.label ?? null,
2026-10-24T11:06:37.7701839Z  169 โ”‚ โ”‚           }),
2026-10-24T11:06:37.7702025Z  170 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T11:06:37.7702252Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7702310Z  171 โ”‚       }
2026-10-24T11:06:37.7702364Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7702840Z   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-24T11:06:37.7703256Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7703259Z
2026-10-24T11:06:37.7703408Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7703571Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-24T11:06:37.7703655Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T11:06:37.7703759Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T11:06:37.7703872Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7704056Z      ยท          โ”‚        โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T11:06:37.7704173Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T11:06:37.7704238Z  155 โ”‚       recorder,
2026-10-24T11:06:37.7704291Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7704768Z   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-24T11:06:37.7705064Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7705067Z
2026-10-24T11:06:37.7705212Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7705371Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-24T11:06:37.7705457Z  184 โ”‚     return () => subscription.remove();
2026-10-24T11:06:37.7705524Z  185 โ”‚   }, [controller]);
2026-10-24T11:06:37.7705604Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7705750Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7705803Z  186 โ”‚
2026-10-24T11:06:37.7705856Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7706329Z   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-24T11:06:37.7706623Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7706625Z
2026-10-24T11:06:37.7706768Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7706926Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-24T11:06:37.7707013Z  184 โ”‚     return () => subscription.remove();
2026-10-24T11:06:37.7707077Z  185 โ”‚   }, [controller]);
2026-10-24T11:06:37.7707153Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7707369Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7707470Z  186 โ”‚
2026-10-24T11:06:37.7707522Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7707990Z   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-24T11:06:37.7708306Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7708308Z
2026-10-24T11:06:37.7708451Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7708609Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-24T11:06:37.7708670Z  191 โ”‚     },
2026-10-24T11:06:37.7708744Z  192 โ”‚     [controller, recorder],
2026-10-24T11:06:37.7708821Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7708965Z      ยท           โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7709021Z  193 โ”‚   );
2026-10-24T11:06:37.7709071Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7709535Z   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-24T11:06:37.7709827Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7709829Z
2026-10-24T11:06:37.7709976Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7710140Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-24T11:06:37.7710231Z  174 โ”‚   const controller = session.controller;
2026-10-24T11:06:37.7710319Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T11:06:37.7710424Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7710584Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7710636Z  176 โ”‚
2026-10-24T11:06:37.7710688Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7711155Z   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-24T11:06:37.7711453Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7711458Z
2026-10-24T11:06:37.7711600Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7711762Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-24T11:06:37.7711819Z  191 โ”‚     },
2026-10-24T11:06:37.7711890Z  192 โ”‚     [controller, recorder],
2026-10-24T11:06:37.7711979Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7712128Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7712184Z  193 โ”‚   );
2026-10-24T11:06:37.7712236Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7712771Z   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-24T11:06:37.7713101Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7713104Z
2026-10-24T11:06:37.7713245Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7713402Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-24T11:06:37.7713495Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T11:06:37.7713605Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T11:06:37.7713694Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7713854Z      ยท                         โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7713912Z  247 โ”‚
2026-10-24T11:06:37.7713963Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7714434Z   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-24T11:06:37.7714726Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7714729Z
2026-10-24T11:06:37.7714871Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7715029Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-24T11:06:37.7715124Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T11:06:37.7715237Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T11:06:37.7715371Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7715532Z      ยท                              โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7715583Z  247 โ”‚
2026-10-24T11:06:37.7715635Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7716103Z   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-24T11:06:37.7716394Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7716466Z
2026-10-24T11:06:37.7716648Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7716804Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-24T11:06:37.7716872Z  260 โ”‚     setOwnerFocused,
2026-10-24T11:06:37.7716934Z  261 โ”‚     session,
2026-10-24T11:06:37.7717006Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7717144Z      ยท        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7717204Z  262 โ”‚     stop,
2026-10-24T11:06:37.7717256Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7717727Z   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-24T11:06:37.7718021Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7718027Z
2026-10-24T11:06:37.7718169Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7718350Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-24T11:06:37.7718405Z  250 โ”‚
2026-10-24T11:06:37.7718545Z  251 โ”‚ โ•ญโ”€โ–ถ   return {
2026-10-24T11:06:37.7718757Z  252 โ”‚ โ”‚       isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-24T11:06:37.7718838Z  253 โ”‚ โ”‚       state,
2026-10-24T11:06:37.7718928Z  254 โ”‚ โ”‚       audioLevels,
2026-10-24T11:06:37.7719025Z  255 โ”‚ โ”‚       elapsedSeconds,
2026-10-24T11:06:37.7719159Z  256 โ”‚ โ”‚       isBusy: voiceInputBlocksSubmission(state),
2026-10-24T11:06:37.7719240Z  257 โ”‚ โ”‚       ownerKey,
2026-10-24T11:06:37.7719318Z  258 โ”‚ โ”‚       label,
2026-10-24T11:06:37.7719409Z  259 โ”‚ โ”‚       focusedOwners,
2026-10-24T11:06:37.7719504Z  260 โ”‚ โ”‚       setOwnerFocused,
2026-10-24T11:06:37.7719586Z  261 โ”‚ โ”‚       session,
2026-10-24T11:06:37.7719664Z  262 โ”‚ โ”‚       stop,
2026-10-24T11:06:37.7719742Z  263 โ”‚ โ”‚       cancel,
2026-10-24T11:06:37.7719873Z  264 โ”‚ โ”œโ”€โ–ถ   };
2026-10-24T11:06:37.7720079Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7720138Z  265 โ”‚     }
2026-10-24T11:06:37.7720189Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7720663Z   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-24T11:06:37.7720957Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7720960Z
2026-10-24T11:06:37.7721117Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:06:37.7721277Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T11:06:37.7721495Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T11:06:37.7721654Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T11:06:37.7721736Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7721873Z      ยท              โ•ฐโ”€โ”€ `audioLevels` originates here
2026-10-24T11:06:37.7721992Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T11:06:37.7722138Z  124 โ”‚   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-24T11:06:37.7722191Z  125 โ”‚
2026-10-24T11:06:37.7722298Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T11:06:37.7722398Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T11:06:37.7722540Z  128 โ”‚       create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T11:06:37.7722635Z  129 โ”‚       onStatus: (status: RecordingStatus) => {
2026-10-24T11:06:37.7722763Z  130 โ”‚         sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T11:06:37.7722852Z  131 โ”‚           isFinished: status.isFinished,
2026-10-24T11:06:37.7722997Z  132 โ”‚           hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T11:06:37.7723071Z  133 โ”‚           error: status.error,
2026-10-24T11:06:37.7723139Z  134 โ”‚           url: status.url,
2026-10-24T11:06:37.7723199Z  135 โ”‚         });
2026-10-24T11:06:37.7723257Z  136 โ”‚       },
2026-10-24T11:06:37.7723424Z  137 โ”‚       // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T11:06:37.7723504Z  138 โ”‚       selectInput: (inputs) => {
2026-10-24T11:06:37.7723627Z  139 โ”‚         const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T11:06:37.7723739Z  140 โ”‚         if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T11:06:37.7723877Z  141 โ”‚         const known = microphoneOrder(preferences.value.microphones);
2026-10-24T11:06:37.7723988Z  142 โ”‚         const order = rememberMicrophones(known, inputs);
2026-10-24T11:06:37.7724060Z  143 โ”‚         if (order !== known) {
2026-10-24T11:06:37.7724168Z  144 โ”‚           registry.set(updateMobilePreferencesAtom, {
2026-10-24T11:06:37.7724251Z  145 โ”‚             transform: (current) => ({
2026-10-24T11:06:37.7724425Z  146 โ”‚               microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T11:06:37.7724487Z  147 โ”‚             }),
2026-10-24T11:06:37.7724548Z  148 โ”‚           });
2026-10-24T11:06:37.7724607Z  149 โ”‚         }
2026-10-24T11:06:37.7724717Z  150 โ”‚         return preferredMicrophoneInput(inputs, order);
2026-10-24T11:06:37.7724774Z  151 โ”‚       },
2026-10-24T11:06:37.7724833Z  152 โ”‚     });
2026-10-24T11:06:37.7724916Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T11:06:37.7725024Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T11:06:37.7725088Z  155 โ”‚       recorder,
2026-10-24T11:06:37.7725187Z  156 โ”‚       getTranscriber: getLocalVoiceTranscriber,
2026-10-24T11:06:37.7725271Z  157 โ”‚       requestPermission: async () => {
2026-10-24T11:06:37.7725404Z  158 โ”‚         const permission = await requestRecordingPermissionsAsync();
2026-10-24T11:06:37.7725559Z  159 โ”‚         return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T11:06:37.7725617Z  160 โ”‚       },
2026-10-24T11:06:37.7725727Z  161 โ”‚       configureRecording: configureVoiceRecordingAudio,
2026-10-24T11:06:37.7725832Z  162 โ”‚       releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T11:06:37.7725936Z  163 โ”‚       deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T11:06:37.7726016Z  164 โ”‚       onStateChange: (nextState) =>
2026-10-24T11:06:37.7726143Z  165 โ”‚         setState({
2026-10-24T11:06:37.7726248Z  166 โ”‚           state: nextState,
2026-10-24T11:06:37.7726356Z  167 โ”‚           ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T11:06:37.7726455Z  168 โ”‚           label: sessionRef.current?.label ?? null,
2026-10-24T11:06:37.7726514Z  169 โ”‚         }),
2026-10-24T11:06:37.7726570Z  170 โ”‚     });
2026-10-24T11:06:37.7726624Z  171 โ”‚   }
2026-10-24T11:06:37.7726677Z  172 โ”‚
2026-10-24T11:06:37.7726762Z  173 โ”‚   const session = sessionRef.current;
2026-10-24T11:06:37.7726849Z  174 โ”‚   const controller = session.controller;
2026-10-24T11:06:37.7726934Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T11:06:37.7726987Z  176 โ”‚
2026-10-24T11:06:37.7727053Z  177 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7727200Z  178 โ”‚     const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-24T11:06:37.7727348Z  179 โ”‚       // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-24T11:06:37.7727491Z  180 โ”‚       // real background state cancels preparation; recorder status handles
2026-10-24T11:06:37.7727596Z  181 โ”‚       // calls and route interruptions during capture.
2026-10-24T11:06:37.7727731Z  182 โ”‚       if (nextState === "background") controller.appMovedToBackground();
2026-10-24T11:06:37.7727789Z  183 โ”‚     });
2026-10-24T11:06:37.7727878Z  184 โ”‚     return () => subscription.remove();
2026-10-24T11:06:37.7727947Z  185 โ”‚   }, [controller]);
2026-10-24T11:06:37.7728000Z  186 โ”‚
2026-10-24T11:06:37.7728064Z  187 โ”‚   useEffect(
2026-10-24T11:06:37.7728130Z  188 โ”‚     () => () => {
2026-10-24T11:06:37.7728203Z  189 โ”‚       controller.dispose();
2026-10-24T11:06:37.7728297Z  190 โ”‚       recorder.release();
2026-10-24T11:06:37.7728356Z  191 โ”‚     },
2026-10-24T11:06:37.7728436Z  192 โ”‚     [controller, recorder],
2026-10-24T11:06:37.7728496Z  193 โ”‚   );
2026-10-24T11:06:37.7728553Z  194 โ”‚
2026-10-24T11:06:37.7728620Z  195 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7728720Z  196 โ”‚     if (state.phase !== "recording") return;
2026-10-24T11:06:37.7728773Z  197 โ”‚
2026-10-24T11:06:37.7728925Z  198 โ”‚     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-24T11:06:37.7729033Z  199 โ”‚     const activation = activateKeepAwakeAsync(tag);
2026-10-24T11:06:37.7729120Z  200 โ”‚     void activation.catch(() => {});
2026-10-24T11:06:37.7729185Z  201 โ”‚     return () => {
2026-10-24T11:06:37.7729339Z  202 โ”‚       // Release after activation settles, even if the recording ends immediately.
2026-10-24T11:06:37.7729482Z  203 โ”‚       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-24T11:06:37.7729541Z  204 โ”‚     };
2026-10-24T11:06:37.7729627Z  205 โ”‚   }, [keepAwakeId, state.phase]);
2026-10-24T11:06:37.7729686Z  206 โ”‚
2026-10-24T11:06:37.7729754Z  207 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7729892Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T11:06:37.7729946Z  209 โ”‚
2026-10-24T11:06:37.7730072Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T11:06:37.7730232Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T11:06:37.7730338Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T11:06:37.7730418Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7730566Z      ยท            โ•ฐโ”€โ”€ `audioLevels` cannot be modified
2026-10-24T11:06:37.7730626Z  213 โ”‚     }
2026-10-24T11:06:37.7730680Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7731022Z   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-24T11:06:37.7731375Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:06:37.7731377Z
2026-10-24T11:06:37.7731583Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T11:06:37.7731748Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T11:06:37.7731801Z  206 โ”‚
2026-10-24T11:06:37.7731871Z  207 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7731955Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7732180Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-24T11:06:37.7732323Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T11:06:37.7732384Z  209 โ”‚
2026-10-24T11:06:37.7732511Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T11:06:37.7732670Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T11:06:37.7732774Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T11:06:37.7732856Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7732997Z      ยท            โ•ฐโ”€โ”€ This modifies `audioLevels`
2026-10-24T11:06:37.7733084Z  213 โ”‚     }
2026-10-24T11:06:37.7733153Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7733565Z   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-24T11:06:37.7733926Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:06:37.7733932Z
2026-10-24T11:06:37.7734171Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7734350Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7]
2026-10-24T11:06:37.7734432Z  154 โ”‚     }
2026-10-24T11:06:37.7734563Z  155 โ”‚   }, [wrappedRender]);
2026-10-24T11:06:37.7734682Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7734848Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `wrappedRender`
2026-10-24T11:06:37.7734937Z  156 โ”‚
2026-10-24T11:06:37.7735028Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7735376Z   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-24T11:06:37.7735724Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7735727Z
2026-10-24T11:06:37.7735987Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T11:06:37.7736181Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42]
2026-10-24T11:06:37.7736291Z  799 โ”‚     >
2026-10-24T11:06:37.7736454Z  800 โ”‚       <AdaptiveWorkspaceContext.Provider value={contextValue}>
2026-10-24T11:06:37.7736593Z      ยท                                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7736733Z  801 โ”‚         <WindowHingeContext value={windowHinge}>
2026-10-24T11:06:37.7736891Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7737198Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T11:06:37.7737355Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T11:06:37.7737376Z
2026-10-24T11:06:37.7737554Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:06:37.7737742Z     โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5]
2026-10-24T11:06:37.7737849Z  35 โ”‚
2026-10-24T11:06:37.7738022Z  36 โ”‚   const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0);
2026-10-24T11:06:37.7738127Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7738334Z     ยท                 โ•ฐโ”€โ”€ `inspectorProgress` originates here
2026-10-24T11:06:37.7738476Z  37 โ”‚   const { renderedInspectorWidth } = props;
2026-10-24T11:06:37.7738653Z  38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-24T11:06:37.7738721Z  39 โ”‚
2026-10-24T11:06:37.7738843Z  40 โ”‚   const onClosed = props.onClosed;
2026-10-24T11:06:37.7738937Z  41 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7739080Z  42 โ”‚     inspectorProgress.value = withTiming(
2026-10-24T11:06:37.7739179Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7739364Z     ยท             โ•ฐโ”€โ”€ `inspectorProgress` cannot be modified
2026-10-24T11:06:37.7739582Z  43 โ”‚       inspectorVisible ? 1 : 0,
2026-10-24T11:06:37.7739673Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7739966Z   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-24T11:06:37.7740317Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:06:37.7740324Z
2026-10-24T11:06:37.7740515Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:06:37.7740701Z     โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7]
2026-10-24T11:06:37.7740845Z  37 โ”‚   const { renderedInspectorWidth } = props;
2026-10-24T11:06:37.7740994Z  38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-24T11:06:37.7741123Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7741313Z     ยท                   โ•ฐโ”€โ”€ `renderedContentWidth` originates here
2026-10-24T11:06:37.7741402Z  39 โ”‚
2026-10-24T11:06:37.7741507Z  40 โ”‚   const onClosed = props.onClosed;
2026-10-24T11:06:37.7741616Z  41 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7741746Z  42 โ”‚     inspectorProgress.value = withTiming(
2026-10-24T11:06:37.7741849Z  43 โ”‚       inspectorVisible ? 1 : 0,
2026-10-24T11:06:37.7742298Z  44 โ”‚       WORKSPACE_PANE_TIMING,
2026-10-24T11:06:37.7742399Z  45 โ”‚       (finished) => {
2026-10-24T11:06:37.7742577Z  46 โ”‚         if (finished === true && !inspectorVisible && onClosed !== undefined) {
2026-10-24T11:06:37.7742697Z  47 โ”‚           runOnJS(onClosed)();
2026-10-24T11:06:37.7742769Z  48 โ”‚         }
2026-10-24T11:06:37.7742863Z  49 โ”‚       },
2026-10-24T11:06:37.7742944Z  50 โ”‚     );
2026-10-24T11:06:37.7743208Z  51 โ”‚     const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
2026-10-24T11:06:37.7743305Z  52 โ”‚     renderedInspectorWidth.set(
2026-10-24T11:06:37.7743486Z  53 โ”‚       resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
2026-10-24T11:06:37.7743655Z  54 โ”‚     );
2026-10-24T11:06:37.7743792Z  55 โ”‚   }, [
2026-10-24T11:06:37.7743885Z  56 โ”‚     inspectorProgress,
2026-10-24T11:06:37.7743985Z  57 โ”‚     inspectorVisible,
2026-10-24T11:06:37.7744080Z  58 โ”‚     inspectorWidth,
2026-10-24T11:06:37.7744163Z  59 โ”‚     onClosed,
2026-10-24T11:06:37.7744274Z  60 โ”‚     renderedInspectorWidth,
2026-10-24T11:06:37.7744483Z  61 โ”‚     resizing,
2026-10-24T11:06:37.7744573Z  62 โ”‚   ]);
2026-10-24T11:06:37.7744649Z  63 โ”‚
2026-10-24T11:06:37.7744737Z  64 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7744883Z  65 โ”‚     const targetWidth = inspectorWidth ?? 0;
2026-10-24T11:06:37.7745001Z  66 โ”‚     if (!inspectorVisible || resizing) {
2026-10-24T11:06:37.7745116Z  67 โ”‚       renderedContentWidth.value = targetWidth;
2026-10-24T11:06:37.7745245Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7745453Z     ยท                 โ•ฐโ”€โ”€ `renderedContentWidth` cannot be modified
2026-10-24T11:06:37.7745558Z  68 โ”‚       return;
2026-10-24T11:06:37.7745626Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7745931Z   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-24T11:06:37.7746263Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:06:37.7746266Z
2026-10-24T11:06:37.7746503Z   โš  eslint(no-unused-vars): Type 'Scope' is imported but never used.
2026-10-24T11:06:37.7746676Z     โ•ญโ”€[apps/server/src/provider/ProviderAuthService.ts:15:18]
2026-10-24T11:06:37.7746782Z  14 โ”‚ import * as Layer from "effect/Layer";
2026-10-24T11:06:37.7746908Z  15 โ”‚ import type * as Scope from "effect/Scope";
2026-10-24T11:06:37.7747032Z     ยท                  โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:06:37.7747307Z     ยท                    โ•ฐโ”€โ”€ 'Scope' is imported here
2026-10-24T11:06:37.7747416Z  16 โ”‚ import * as Stream from "effect/Stream";
2026-10-24T11:06:37.7747501Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7747635Z   help: Consider removing this import.
2026-10-24T11:06:37.7747638Z
2026-10-24T11:06:37.7747861Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T11:06:37.7747998Z      โ•ญโ”€[apps/server/src/processRunner.test.ts:266:14]
2026-10-24T11:06:37.7748089Z  265 โ”‚
2026-10-24T11:06:37.7748230Z  266 โ”‚   for (const {} of ["timeout", "success"] as const) {
2026-10-24T11:06:37.7748378Z      ยท              โ”€โ”€
2026-10-24T11:06:37.7748458Z  267 โ”‚   }
2026-10-24T11:06:37.7748549Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7748875Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T11:06:37.7748915Z
2026-10-24T11:06:37.7749172Z   โš  eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used.
2026-10-24T11:06:37.7749346Z     โ•ญโ”€[apps/server/src/checkpointing/Utils.ts:12:10]
2026-10-24T11:06:37.7749416Z  11 โ”‚
2026-10-24T11:06:37.7749545Z  12 โ”‚ function resolveThreadWorkspaceCwd(input: {
2026-10-24T11:06:37.7749683Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7749999Z     ยท                      โ•ฐโ”€โ”€ 'resolveThreadWorkspaceCwd' is declared here
2026-10-24T11:06:37.7750091Z  13 โ”‚   readonly thread: {
2026-10-24T11:06:37.7750179Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7750317Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7750327Z
2026-10-24T11:06:37.7750566Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7750710Z     โ•ญโ”€[apps/mobile/src/state/thread-order.ts:29:7]
2026-10-24T11:06:37.7750829Z  28 โ”‚     getPendingThreadOrder();
2026-10-24T11:06:37.7750942Z  29 โ”‚   }, [nowMinute, snoozeWakeTick]);
2026-10-24T11:06:37.7751105Z     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7751308Z     ยท           โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-24T11:06:37.7751504Z     ยท           โ•ฐโ”€โ”€ Unnecessary dependency `nowMinute`
2026-10-24T11:06:37.7751605Z  30 โ”‚   return pending;
2026-10-24T11:06:37.7751694Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7752017Z   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-24T11:06:37.7752379Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7752381Z
2026-10-24T11:06:37.7752617Z   โš  eslint(no-unused-vars): Identifier 'Fiber' is imported but never used.
2026-10-24T11:06:37.7752746Z     โ•ญโ”€[apps/server/src/ws.ts:10:13]
2026-10-24T11:06:37.7752969Z   9 โ”‚ import * as Effect from "effect/Effect";
2026-10-24T11:06:37.7753060Z  10 โ”‚ import * as Fiber from "effect/Fiber";
2026-10-24T11:06:37.7753192Z     ยท             โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:06:37.7753356Z     ยท               โ•ฐโ”€โ”€ 'Fiber' is imported here
2026-10-24T11:06:37.7753500Z  11 โ”‚ import * as FileSystem from "effect/FileSystem";
2026-10-24T11:06:37.7753572Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7753709Z   help: Consider removing this import.
2026-10-24T11:06:37.7753711Z
2026-10-24T11:06:37.7753954Z   โš  eslint(no-unused-vars): Identifier 'Schedule' is imported but never used.
2026-10-24T11:06:37.7754086Z     โ•ญโ”€[apps/server/src/ws.ts:17:13]
2026-10-24T11:06:37.7754182Z  16 โ”‚ import * as Ref from "effect/Ref";
2026-10-24T11:06:37.7754302Z  17 โ”‚ import * as Schedule from "effect/Schedule";
2026-10-24T11:06:37.7754434Z     ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7754602Z     ยท                 โ•ฐโ”€โ”€ 'Schedule' is imported here
2026-10-24T11:06:37.7754708Z  18 โ”‚ import * as Schema from "effect/Schema";
2026-10-24T11:06:37.7754795Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7754992Z   help: Consider removing this import.
2026-10-24T11:06:37.7755027Z
2026-10-24T11:06:37.7755376Z   โš  eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:06:37.7755609Z       โ•ญโ”€[apps/server/src/ws.ts:1285:13]
2026-10-24T11:06:37.7755783Z  1284 โ”‚       const usageLimitSources = yield* UsageLimitSources.UsageLimitSources;
2026-10-24T11:06:37.7756008Z  1285 โ”‚       const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner;
2026-10-24T11:06:37.7756172Z       ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7756377Z       ยท                         โ•ฐโ”€โ”€ 'projectSetupScriptRunner' is declared here
2026-10-24T11:06:37.7756565Z  1286 โ”‚       const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker;
2026-10-24T11:06:37.7756658Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7756806Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7756809Z
2026-10-24T11:06:37.7757100Z   โš  unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret.
2026-10-24T11:06:37.7757244Z      โ•ญโ”€[apps/server/src/vcs/GitVcsDriverCore.ts:509:11]
2026-10-24T11:06:37.7757380Z  508 โ”‚         GIT_DIAGNOSTIC_LINE_PATTERN.test(line) ||
2026-10-24T11:06:37.7757545Z  509 โ”‚         (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)),
2026-10-24T11:06:37.7757693Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7757783Z  510 โ”‚     )
2026-10-24T11:06:37.7757852Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7758041Z   help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`.
2026-10-24T11:06:37.7758045Z
2026-10-24T11:06:37.7758385Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7758561Z     โ•ญโ”€[apps/mobile/src/state/use-vcs-action-state.ts:86:5]
2026-10-24T11:06:37.7758785Z  83 โ”‚   const [nowMs, setNowMs] = useState(() => Date.now());
2026-10-24T11:06:37.7758884Z  84 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7758986Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7759169Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7759273Z  85 โ”‚     if (!actionState.isRunning) return;
2026-10-24T11:06:37.7759377Z  86 โ”‚     setNowMs(Date.now());
2026-10-24T11:06:37.7759489Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7759692Z     ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7759849Z  87 โ”‚     const interval = setInterval(() => setNowMs(Date.now()), 1000);
2026-10-24T11:06:37.7759938Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7760576Z   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-24T11:06:37.7760936Z   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-24T11:06:37.7760939Z
2026-10-24T11:06:37.7761357Z   โš  t3code(no-inline-schema-compile): Hoist Schema.decodeEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T11:06:37.7761569Z       โ•ญโ”€[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34]
2026-10-24T11:06:37.7761776Z  1785 โ”‚           const stat = branch.files!.find((file) => file.path === path)!;
2026-10-24T11:06:37.7761958Z  1786 โ”‚           const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({
2026-10-24T11:06:37.7762114Z       ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7762322Z  1787 โ”‚             cwd,
2026-10-24T11:06:37.7762397Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7762400Z
2026-10-24T11:06:37.7762601Z   โš  eslint(no-empty-pattern): Empty array binding pattern
2026-10-24T11:06:37.7762785Z       โ•ญโ”€[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12]
2026-10-24T11:06:37.7762900Z  1525 โ”‚
2026-10-24T11:06:37.7762986Z  1526 โ”‚ for (const [] of [
2026-10-24T11:06:37.7763094Z       ยท            โ”€โ”€
2026-10-24T11:06:37.7763209Z  1527 โ”‚   ["github", "github.com"],
2026-10-24T11:06:37.7763303Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7763607Z   help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable.
2026-10-24T11:06:37.7763610Z
2026-10-24T11:06:37.7763933Z   โš  eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-24T11:06:37.7764098Z      โ•ญโ”€[apps/server/src/provider/AntigravityAuth.ts:285:20]
2026-10-24T11:06:37.7764182Z  284 โ”‚     },
2026-10-24T11:06:37.7764293Z  285 โ”‚     (effect, flow, stopSessions) =>
2026-10-24T11:06:37.7764436Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7764624Z      ยท                          โ•ฐโ”€โ”€ 'stopSessions' is declared here
2026-10-24T11:06:37.7764729Z  286 โ”‚       effect.pipe(
2026-10-24T11:06:37.7764792Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7765061Z   help: Consider removing this parameter.
2026-10-24T11:06:37.7765064Z
2026-10-24T11:06:37.7765242Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7765394Z     โ•ญโ”€[apps/mobile/src/components/ui/Menu.tsx:54:36]
2026-10-24T11:06:37.7765589Z  53 โ”‚         const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
2026-10-24T11:06:37.7765806Z  54 โ”‚ โ•ญโ”€โ–ถ     children = cloneElement(child, {
2026-10-24T11:06:37.7765961Z  55 โ”‚ โ”‚         onTouchStart: (event) => {
2026-10-24T11:06:37.7766153Z  56 โ”‚ โ”‚           // Reset for a new touch, not onPressIn, which also fires when a
2026-10-24T11:06:37.7766354Z  57 โ”‚ โ”‚           // finger moves out of the row and back during the same gesture.
2026-10-24T11:06:37.7766491Z  58 โ”‚ โ”‚           menuPress.current.isPreparing = false;
2026-10-24T11:06:37.7766717Z  59 โ”‚ โ”‚           menuPress.current.suppressPress = menuPress.current.isOpen;
2026-10-24T11:06:37.7766863Z  60 โ”‚ โ”‚           pendingPress.current = null;
2026-10-24T11:06:37.7767018Z  61 โ”‚ โ”‚           child.props.onTouchStart?.(event);
2026-10-24T11:06:37.7767111Z  62 โ”‚ โ”‚         },
2026-10-24T11:06:37.7767255Z  63 โ”‚ โ”‚         onPress: (event) => {
2026-10-24T11:06:37.7767468Z  64 โ”‚ โ”‚           // Accessibility clicks have no touch identifier and must not inherit
2026-10-24T11:06:37.7767640Z  65 โ”‚ โ”‚           // cancellation from a previous physical gesture.
2026-10-24T11:06:37.7767887Z  66 โ”‚ โ”‚           const isTouch = typeof event.nativeEvent.identifier === "number";
2026-10-24T11:06:37.7768261Z  67 โ”‚ โ”‚           if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
2026-10-24T11:06:37.7768426Z  68 โ”‚ โ”‚             return;
2026-10-24T11:06:37.7768540Z  69 โ”‚ โ”‚           }
2026-10-24T11:06:37.7768721Z  70 โ”‚ โ”‚           if (isTouch && menuPress.current.isPreparing) {
2026-10-24T11:06:37.7768913Z  71 โ”‚ โ”‚             // A release can arrive between native menu preparation and display.
2026-10-24T11:06:37.7769120Z  72 โ”‚ โ”‚             // Let UIKit's display/cancel callback decide this press's outcome.
2026-10-24T11:06:37.7769262Z  73 โ”‚ โ”‚             event.persist();
2026-10-24T11:06:37.7769467Z  74 โ”‚ โ”‚             pendingPress.current = () => child.props.onPress?.(event);
2026-10-24T11:06:37.7769574Z  75 โ”‚ โ”‚             return;
2026-10-24T11:06:37.7769679Z  76 โ”‚ โ”‚           }
2026-10-24T11:06:37.7769849Z  77 โ”‚ โ”‚           child.props.onPress?.(event);
2026-10-24T11:06:37.7769965Z  78 โ”‚ โ”‚         },
2026-10-24T11:06:37.7770113Z  79 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T11:06:37.7770385Z     ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7770528Z  80 โ”‚         menuProps.onMenuInteractionStart = () => {
2026-10-24T11:06:37.7770625Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7771145Z   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-24T11:06:37.7771557Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7771560Z
2026-10-24T11:06:37.7771800Z   โš  eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
2026-10-24T11:06:37.7771980Z     โ•ญโ”€[apps/server/src/scheduledTasks/Schedule.ts:79:10]
2026-10-24T11:06:37.7772072Z  78 โ”‚
2026-10-24T11:06:37.7772224Z  79 โ”‚ function describeSchedule(schedule: ScheduledTaskSchedule): string {
2026-10-24T11:06:37.7772347Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7772538Z     ยท                  โ•ฐโ”€โ”€ 'describeSchedule' is declared here
2026-10-24T11:06:37.7772695Z  80 โ”‚   if (schedule.type === "webhook") return "On webhook";
2026-10-24T11:06:37.7772782Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7772904Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7772906Z
2026-10-24T11:06:37.7776494Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7776676Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27]
2026-10-24T11:06:37.7776861Z  151 โ”‚         <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
2026-10-24T11:06:37.7776944Z  152 โ”‚           {props.children(open)}
2026-10-24T11:06:37.7777037Z      ยท                           โ”€โ”€โ”ฌโ”€
2026-10-24T11:06:37.7777199Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7777347Z  153 โ”‚         </View>
2026-10-24T11:06:37.7777445Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7777919Z   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-24T11:06:37.7778214Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7778219Z
2026-10-24T11:06:37.7778457Z   โš  react(memo-dependencies): Found missing/extra memoization dependencies
2026-10-24T11:06:37.7778612Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9]
2026-10-24T11:06:37.7778695Z  139 โ”‚       if (action.id !== undefined) {
2026-10-24T11:06:37.7778780Z  140 โ”‚         props.onPressAction?.({
2026-10-24T11:06:37.7778859Z      ยท         โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:06:37.7778995Z      ยท           โ•ฐโ”€โ”€ Missing dependency `props`
2026-10-24T11:06:37.7779091Z  141 โ”‚           nativeEvent: { event: action.id },
2026-10-24T11:06:37.7779241Z  142 โ”‚         } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
2026-10-24T11:06:37.7779298Z  143 โ”‚       }
2026-10-24T11:06:37.7779355Z  144 โ”‚     },
2026-10-24T11:06:37.7779439Z  145 โ”‚     [close, props.onPressAction],
2026-10-24T11:06:37.7779534Z      ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7779755Z      ยท                      โ•ฐโ”€โ”€ Overly precise dependency `props.onPressAction`, use `props` instead
2026-10-24T11:06:37.7779812Z  146 โ”‚   );
2026-10-24T11:06:37.7779865Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7780362Z   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-24T11:06:37.7780685Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7780688Z
2026-10-24T11:06:37.7781166Z   โš  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-24T11:06:37.7781355Z      โ•ญโ”€[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
2026-10-24T11:06:37.7781432Z  520 โ”‚                 })).delivery;
2026-10-24T11:06:37.7781635Z  521 โ”‚ โ•ญโ”€โ–ถ             while (delivery.outcome === "accepted") {
2026-10-24T11:06:37.7781751Z  522 โ”‚ โ”‚                 yield* Effect.yieldNow;
2026-10-24T11:06:37.7781901Z  523 โ”‚ โ”‚                 delivery = (yield* service.getWebhookDelivery({
2026-10-24T11:06:37.7782004Z  524 โ”‚ โ”‚                   id: task.id,
2026-10-24T11:06:37.7782123Z  525 โ”‚ โ”‚                   deliveryId: deliveryId!,
2026-10-24T11:06:37.7782222Z  526 โ”‚ โ”‚                 })).delivery;
2026-10-24T11:06:37.7782365Z  527 โ”‚ โ•ฐโ”€โ–ถ             }
2026-10-24T11:06:37.7782482Z  528 โ”‚                 assert.equal(delivery.outcome, "dispatch_failed");
2026-10-24T11:06:37.7782536Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7782607Z
2026-10-24T11:06:37.7782826Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T11:06:37.7782991Z      โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85]
2026-10-24T11:06:37.7783098Z   99 โ”‚   const startEditor = startScheduledTaskEditor;
2026-10-24T11:06:37.7783369Z  100 โ”‚   const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
2026-10-24T11:06:37.7783518Z      ยท                                                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7783726Z      ยท                                                                                          โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
2026-10-24T11:06:37.7783808Z  101 โ”‚   const readEditor = useCallback(
2026-10-24T11:06:37.7783862Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7784189Z   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-24T11:06:37.7784509Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7784512Z
2026-10-24T11:06:37.7784698Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T11:06:37.7784861Z      โ•ญโ”€[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7]
2026-10-24T11:06:37.7784925Z  120 โ”‚       setEditor,
2026-10-24T11:06:37.7784990Z  121 โ”‚       startEditor,
2026-10-24T11:06:37.7785070Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7785222Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `startEditor`
2026-10-24T11:06:37.7785291Z  122 โ”‚       hasChanges,
2026-10-24T11:06:37.7785343Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7785662Z   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-24T11:06:37.7785975Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7785977Z
2026-10-24T11:06:37.7786201Z   โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T11:06:37.7786341Z       โ•ญโ”€[apps/mobile/src/state/use-composer-drafts.ts:1022:15]
2026-10-24T11:06:37.7786409Z  1021 โ”‚             instanceId,
2026-10-24T11:06:37.7786634Z  1022 โ”‚             { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models },
2026-10-24T11:06:37.7786823Z       ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7786887Z  1023 โ”‚           ]),
2026-10-24T11:06:37.7786940Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7787209Z   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-24T11:06:37.7787212Z
2026-10-24T11:06:37.7787473Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7787665Z      โ•ญโ”€[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10]
2026-10-24T11:06:37.7787719Z  117 โ”‚
2026-10-24T11:06:37.7787785Z  118 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7787860Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7788001Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7788086Z  119 โ”‚     void refreshNotifications();
2026-10-24T11:06:37.7788179Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7788401Z      ยท                    โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7788547Z  120 โ”‚     const subscription = AppState.addEventListener("change", (state) => {
2026-10-24T11:06:37.7788598Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7789210Z   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-24T11:06:37.7789543Z   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-24T11:06:37.7789549Z
2026-10-24T11:06:37.7789808Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7789998Z      โ•ญโ”€[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7]
2026-10-24T11:06:37.7790051Z  125 โ”‚
2026-10-24T11:06:37.7790117Z  126 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7790191Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7790322Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7790388Z  127 โ”‚     if (!isLoaded) {
2026-10-24T11:06:37.7790481Z  128 โ”‚       setLiveActivityStatus("checking");
2026-10-24T11:06:37.7790577Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7790756Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7790818Z  129 โ”‚       return;
2026-10-24T11:06:37.7790871Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7791478Z   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-24T11:06:37.7791806Z   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-24T11:06:37.7791808Z
2026-10-24T11:06:37.7792088Z   โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T11:06:37.7792260Z     โ•ญโ”€[apps/mobile/src/state/use-model-option-memory.ts:21:7]
2026-10-24T11:06:37.7792327Z  20 โ”‚     [instanceId]: {
2026-10-24T11:06:37.7792408Z  21 โ”‚       ...(state[instanceId] ?? {}),
2026-10-24T11:06:37.7792513Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7792581Z  22 โ”‚       [model]: options,
2026-10-24T11:06:37.7792634Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7792902Z   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-24T11:06:37.7792905Z
2026-10-24T11:06:37.7793164Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7793305Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
2026-10-24T11:06:37.7793363Z  57 โ”‚
2026-10-24T11:06:37.7793426Z  58 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7793498Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7793626Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7793724Z  59 โ”‚     const controller = new AbortController();
2026-10-24T11:06:37.7793798Z  60 โ”‚     setLoadState("pending");
2026-10-24T11:06:37.7793877Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7794045Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7794208Z  61 โ”‚     // A renewed signature is used on Retry, not as a reason to reset the native player.
2026-10-24T11:06:37.7794261Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7794878Z   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-24T11:06:37.7795205Z   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-24T11:06:37.7795208Z
2026-10-24T11:06:37.7795409Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7795546Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
2026-10-24T11:06:37.7795629Z  70 โ”‚     return () => controller.abort();
2026-10-24T11:06:37.7795726Z  71 โ”‚   }, [player, props.playRequested, attempt]);
2026-10-24T11:06:37.7795906Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7796139Z     ยท          โ”‚             โ”‚              โ•ฐโ”€โ”€ Unnecessary dependency `attempt`
2026-10-24T11:06:37.7796342Z     ยท          โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `props.playRequested`
2026-10-24T11:06:37.7796483Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `player_0`
2026-10-24T11:06:37.7796536Z  72 โ”‚
2026-10-24T11:06:37.7796589Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7796886Z   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-24T11:06:37.7797255Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7797289Z
2026-10-24T11:06:37.7797550Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7797682Z      โ•ญโ”€[apps/mobile/src/components/ProjectFavicon.tsx:172:5]
2026-10-24T11:06:37.7797878Z  167 โ”‚   const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
2026-10-24T11:06:37.7797950Z  168 โ”‚   useLayoutEffect(() => {
2026-10-24T11:06:37.7798031Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7798164Z      ยท          โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7798252Z  169 โ”‚     if (faviconRequest === null) return;
2026-10-24T11:06:37.7798334Z  170 โ”‚
2026-10-24T11:06:37.7798467Z  171 โ”‚     const endRequest = beginProjectFaviconRequest(faviconRequest);
2026-10-24T11:06:37.7798569Z  172 โ”‚     setActiveFaviconRequest(faviconRequest);
2026-10-24T11:06:37.7798665Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7798840Z      ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7798908Z  173 โ”‚     return endRequest;
2026-10-24T11:06:37.7798959Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7799568Z   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-24T11:06:37.7799891Z   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-24T11:06:37.7799898Z
2026-10-24T11:06:37.7800097Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:06:37.7800247Z      โ•ญโ”€[apps/mobile/src/components/ComposerContextSheet.tsx:267:25]
2026-10-24T11:06:37.7800356Z  266 โ”‚                 {record.elements?.map((element, index) => (
2026-10-24T11:06:37.7800524Z  267 โ”‚                   <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
2026-10-24T11:06:37.7800684Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7800762Z  268 โ”‚                     <ContextField
2026-10-24T11:06:37.7800813Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7800963Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:06:37.7800966Z
2026-10-24T11:06:37.7801318Z   โš  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-24T11:06:37.7801443Z     โ•ญโ”€[packages/effect-acp/src/schema.test.ts:18:12]
2026-10-24T11:06:37.7801607Z  17 โ”‚     const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
2026-10-24T11:06:37.7801730Z  18 โ”‚     expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
2026-10-24T11:06:37.7801809Z     ยท            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7801871Z  19 โ”‚     expect(
2026-10-24T11:06:37.7801923Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7801926Z
2026-10-24T11:06:37.7802260Z   โš  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-24T11:06:37.7802442Z     โ•ญโ”€[packages/effect-acp/src/schema.test.ts:20:7]
2026-10-24T11:06:37.7802548Z  19 โ”‚     expect(
2026-10-24T11:06:37.7802718Z  20 โ”‚       Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
2026-10-24T11:06:37.7802793Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7802857Z  21 โ”‚     ).toBe(true);
2026-10-24T11:06:37.7802909Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7802911Z
2026-10-24T11:06:37.7803114Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7803256Z       โ•ญโ”€[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5]
2026-10-24T11:06:37.7803338Z  1314 โ”‚     queuedMessagesByThreadKey,
2026-10-24T11:06:37.7803402Z  1315 โ”‚     retryTick,
2026-10-24T11:06:37.7803476Z       ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7803627Z       ยท         โ•ฐโ”€โ”€ Unnecessary dependency `retryTick`
2026-10-24T11:06:37.7803703Z  1316 โ”‚     restoreQueuedMessage,
2026-10-24T11:06:37.7803758Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7804059Z   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-24T11:06:37.7804373Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7804376Z
2026-10-24T11:06:37.7804845Z   โš  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-24T11:06:37.7804970Z      โ•ญโ”€[packages/effect-acp/src/errors.test.ts:129:28]
2026-10-24T11:06:37.7805071Z  128 โ”‚       const secret = "acp-summary-secret";
2026-10-24T11:06:37.7805186Z  129 โ”‚       const cause = yield* Schema.decodeUnknownEffect(
2026-10-24T11:06:37.7805304Z      ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7805374Z  130 โ”‚         Schema.Struct({
2026-10-24T11:06:37.7805427Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7805430Z
2026-10-24T11:06:37.7805631Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7805759Z     โ•ญโ”€[apps/mobile/src/components/ComposerEditor.tsx:82:6]
2026-10-24T11:06:37.7805816Z  81 โ”‚     },
2026-10-24T11:06:37.7805880Z  82 โ”‚     [draftKey],
2026-10-24T11:06:37.7805952Z     ยท      โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7806091Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `draftKey`
2026-10-24T11:06:37.7806202Z  83 โ”‚   );
2026-10-24T11:06:37.7806289Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7806586Z   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-24T11:06:37.7806898Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7806901Z
2026-10-24T11:06:37.7807278Z   โš  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-24T11:06:37.7807397Z       โ•ญโ”€[packages/effect-acp/src/client.ts:1269:11]
2026-10-24T11:06:37.7807551Z  1268 โ”‚         extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
2026-10-24T11:06:37.7807728Z  1269 โ”‚           Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
2026-10-24T11:06:37.7807838Z       ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7807988Z  1270 โ”‚             Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
2026-10-24T11:06:37.7808042Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7808045Z
2026-10-24T11:06:37.7808252Z   โš  eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used.
2026-10-24T11:06:37.7808442Z     โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13]
2026-10-24T11:06:37.7808531Z  24 โ”‚ import * as Schema from "effect/Schema";
2026-10-24T11:06:37.7808651Z  25 โ”‚ import * as HostProcess from "@t3tools/shared/HostProcess";
2026-10-24T11:06:37.7808734Z     ยท             โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7808883Z     ยท                  โ•ฐโ”€โ”€ 'HostProcess' is imported here
2026-10-24T11:06:37.7808942Z  26 โ”‚
2026-10-24T11:06:37.7808995Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7809095Z   help: Consider removing this import.
2026-10-24T11:06:37.7809098Z
2026-10-24T11:06:37.7809373Z   โš  eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:06:37.7809542Z      โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11]
2026-10-24T11:06:37.7809626Z  123 โ”‚     const path = yield* Path.Path;
2026-10-24T11:06:37.7809745Z  124 โ”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-24T11:06:37.7809826Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7809967Z      ยท                 โ•ฐโ”€โ”€ 'serverConfig' is declared here
2026-10-24T11:06:37.7810118Z  125 โ”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-24T11:06:37.7810174Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7810279Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7810282Z
2026-10-24T11:06:37.7810560Z   โš  eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:06:37.7810726Z      โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11]
2026-10-24T11:06:37.7810842Z  124 โ”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-24T11:06:37.7810982Z  125 โ”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-24T11:06:37.7811069Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7811214Z      ยท                  โ•ฐโ”€โ”€ 'serverSettings' is declared here
2026-10-24T11:06:37.7811501Z  126 โ”‚     const gitWorkflow = yield* GitWorkflowService.GitWorkflowService;
2026-10-24T11:06:37.7811588Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7811691Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7811694Z
2026-10-24T11:06:37.7811955Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7812116Z      โ•ญโ”€[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5]
2026-10-24T11:06:37.7812178Z  434 โ”‚       : null;
2026-10-24T11:06:37.7812244Z  435 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7812318Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7812449Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7812509Z  436 โ”‚     if (
2026-10-24T11:06:37.7812585Z  437 โ”‚       props.active === false ||
2026-10-24T11:06:37.7812668Z  438 โ”‚       activeDraftKey !== null ||
2026-10-24T11:06:37.7812754Z  439 โ”‚       editingPendingTask !== null ||
2026-10-24T11:06:37.7812830Z  440 โ”‚       selectedProject === null
2026-10-24T11:06:37.7812887Z  441 โ”‚     ) {
2026-10-24T11:06:37.7812948Z  442 โ”‚       return;
2026-10-24T11:06:37.7813004Z  443 โ”‚     }
2026-10-24T11:06:37.7813074Z  444 โ”‚     setActiveDraftKey(
2026-10-24T11:06:37.7813157Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7813330Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7813403Z  445 โ”‚       createNewTaskDraft({
2026-10-24T11:06:37.7813455Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7814070Z   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-24T11:06:37.7814398Z   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-24T11:06:37.7814401Z
2026-10-24T11:06:37.7814647Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T11:06:37.7814813Z       โ•ญโ”€[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36]
2026-10-24T11:06:37.7814919Z  1243 โ”‚     <ActiveNewTaskContext value={activeNewTask}>
2026-10-24T11:06:37.7815116Z  1244 โ”‚       <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
2026-10-24T11:06:37.7815234Z       ยท                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7815313Z  1245 โ”‚     </ActiveNewTaskContext>
2026-10-24T11:06:37.7815364Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7815591Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T11:06:37.7815732Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T11:06:37.7815735Z
2026-10-24T11:06:37.7816184Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T11:06:37.7816312Z       โ•ญโ”€[apps/server/src/serverSettings.test.ts:1741:32]
2026-10-24T11:06:37.7816483Z  1740 โ”‚       const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
2026-10-24T11:06:37.7816726Z  1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-24T11:06:37.7816878Z       ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7816987Z  1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
2026-10-24T11:06:37.7817041Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7817044Z
2026-10-24T11:06:37.7817492Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T11:06:37.7817614Z       โ•ญโ”€[apps/server/src/serverSettings.test.ts:1742:34]
2026-10-24T11:06:37.7817799Z  1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-24T11:06:37.7817912Z  1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
2026-10-24T11:06:37.7818031Z       ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7818150Z  1743 โ”‚         Schema.fromJsonString(Schema.Array(ProjectScript)),
2026-10-24T11:06:37.7818202Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7818205Z
2026-10-24T11:06:37.7818427Z   โš  eslint(no-unused-vars): Identifier 'Image' is imported but never used.
2026-10-24T11:06:37.7818570Z     โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10]
2026-10-24T11:06:37.7818706Z  16 โ”‚ import type { NativeSyntheticEvent, ViewProps } from "react-native";
2026-10-24T11:06:37.7818821Z  17 โ”‚ import { Image, Platform, StyleSheet } from "react-native";
2026-10-24T11:06:37.7818893Z     ยท          โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:06:37.7819021Z     ยท            โ•ฐโ”€โ”€ 'Image' is imported here
2026-10-24T11:06:37.7819081Z  18 โ”‚
2026-10-24T11:06:37.7819136Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7819236Z   help: Consider removing this import.
2026-10-24T11:06:37.7819238Z
2026-10-24T11:06:37.7819443Z   โš  react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T11:06:37.7819589Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6]
2026-10-24T11:06:37.7819753Z  225 โ”‚     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-24T11:06:37.7819845Z  226 โ”‚       nativeEventSnapshotsRef.current,
2026-10-24T11:06:37.7819937Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7820416Z      ยท                  โ•ฐโ”€โ”€ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-24T11:06:37.7820493Z  227 โ”‚       mostRecentEventCount,
2026-10-24T11:06:37.7820550Z  228 โ”‚     );
2026-10-24T11:06:37.7820671Z  229 โ”‚   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-24T11:06:37.7820819Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7821022Z      ยท                                โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T11:06:37.7821106Z  230 โ”‚   const assumedValue = props.value;
2026-10-24T11:06:37.7821159Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7821327Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T11:06:37.7821701Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7821736Z
2026-10-24T11:06:37.7821951Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T11:06:37.7822094Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7]
2026-10-24T11:06:37.7822238Z  236 โ”‚     nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-24T11:06:37.7822329Z  237 โ”‚       nativeEventSnapshotsRef.current,
2026-10-24T11:06:37.7822422Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7822892Z      ยท                  โ•ฐโ”€โ”€ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-24T11:06:37.7822965Z  238 โ”‚       controlledEventCount,
2026-10-24T11:06:37.7823036Z  239 โ”‚       assumedValue,
2026-10-24T11:06:37.7823095Z  240 โ”‚     );
2026-10-24T11:06:37.7823311Z  241 โ”‚   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-24T11:06:37.7823449Z      ยท                                                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7823660Z      ยท                                                                    โ•ฐโ”€โ”€ Unnecessary dependency `controlledDocumentJson`
2026-10-24T11:06:37.7823751Z  242 โ”‚   const acceptNativeEvent = useCallback(
2026-10-24T11:06:37.7823803Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7824227Z   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-24T11:06:37.7824545Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7824550Z
2026-10-24T11:06:37.7824696Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7824842Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
2026-10-24T11:06:37.7824966Z  161 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T11:06:37.7825078Z  162 โ”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T11:06:37.7825198Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7825368Z      ยท                                          โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7825425Z  163 โ”‚     });
2026-10-24T11:06:37.7825477Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7826018Z   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-24T11:06:37.7826350Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7826353Z
2026-10-24T11:06:37.7826499Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7826644Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
2026-10-24T11:06:37.7826766Z  161 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T11:06:37.7826877Z  162 โ”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T11:06:37.7826997Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7827209Z      ยท                                          โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7827265Z  163 โ”‚     });
2026-10-24T11:06:37.7827320Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7827790Z   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-24T11:06:37.7828083Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7828085Z
2026-10-24T11:06:37.7828236Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7828407Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23]
2026-10-24T11:06:37.7828464Z  163 โ”‚     });
2026-10-24T11:06:37.7828554Z  164 โ”‚     confirmedTokensRef.current = tokens;
2026-10-24T11:06:37.7828680Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7828872Z      ยท              โ”‚            โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T11:06:37.7828994Z      ยท              โ•ฐโ”€โ”€ This value is a ref
2026-10-24T11:06:37.7829068Z  165 โ”‚     return JSON.stringify(
2026-10-24T11:06:37.7829120Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7829596Z   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-24T11:06:37.7829888Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7829891Z
2026-10-24T11:06:37.7830035Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7830179Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5]
2026-10-24T11:06:37.7830251Z  205 โ”‚     mostRecentEventCount,
2026-10-24T11:06:37.7830337Z  206 โ”‚     nativeEventSnapshotsRef.current,
2026-10-24T11:06:37.7830444Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7830635Z      ยท                    โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7830691Z  207 โ”‚   );
2026-10-24T11:06:37.7830799Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7831298Z   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-24T11:06:37.7831591Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7831594Z
2026-10-24T11:06:37.7831738Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7831880Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5]
2026-10-24T11:06:37.7831950Z  211 โ”‚     mostRecentEventCount,
2026-10-24T11:06:37.7832037Z  212 โ”‚     nativeEventSnapshotsRef.current,
2026-10-24T11:06:37.7832144Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7832335Z      ยท                    โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7832389Z  213 โ”‚   );
2026-10-24T11:06:37.7832441Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7832909Z   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-24T11:06:37.7833200Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7833203Z
2026-10-24T11:06:37.7833390Z   โš  react(memo-dependencies): Found missing memoization dependencies
2026-10-24T11:06:37.7833536Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6]
2026-10-24T11:06:37.7833664Z  161 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T11:06:37.7833777Z  162 โ”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T11:06:37.7833887Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7834355Z      ยท                                      โ•ฐโ”€โ”€ Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-24T11:06:37.7834413Z  163 โ”‚     });
2026-10-24T11:06:37.7834505Z  164 โ”‚     confirmedTokensRef.current = tokens;
2026-10-24T11:06:37.7834577Z  165 โ”‚     return JSON.stringify(
2026-10-24T11:06:37.7834747Z  166 โ”‚       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-24T11:06:37.7834818Z  167 โ”‚         const record =
2026-10-24T11:06:37.7834899Z  168 โ”‚           token.type === "context"
2026-10-24T11:06:37.7835064Z  169 โ”‚             ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-24T11:06:37.7835129Z  170 โ”‚             : undefined;
2026-10-24T11:06:37.7835238Z  171 โ”‚         const presentation = contextChipPresentation(
2026-10-24T11:06:37.7835348Z  172 โ”‚           token.type === "context" ? token.kind : token.type,
2026-10-24T11:06:37.7835411Z  173 โ”‚           record,
2026-10-24T11:06:37.7835469Z  174 โ”‚         );
2026-10-24T11:06:37.7835555Z  175 โ”‚         const icon = contextChipIcon(
2026-10-24T11:06:37.7835625Z  176 โ”‚           presentation,
2026-10-24T11:06:37.7835769Z  177 โ”‚           token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-24T11:06:37.7835885Z  178 โ”‚         );
2026-10-24T11:06:37.7835990Z  179 โ”‚         return {
2026-10-24T11:06:37.7836062Z  180 โ”‚           type: token.type,
2026-10-24T11:06:37.7836136Z  181 โ”‚           source: token.source,
2026-10-24T11:06:37.7836210Z  182 โ”‚           start: token.start,
2026-10-24T11:06:37.7836277Z  183 โ”‚           end: token.end,
2026-10-24T11:06:37.7836426Z  184 โ”‚           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-24T11:06:37.7836487Z  185 โ”‚           label:
2026-10-24T11:06:37.7836567Z  186 โ”‚             token.type === "skill"
2026-10-24T11:06:37.7836676Z  187 โ”‚               ? (skillLabels.get(token.value) ?? token.value)
2026-10-24T11:06:37.7836761Z  188 โ”‚               : token.type === "context"
2026-10-24T11:06:37.7836998Z  189 โ”‚                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " ยท unavailable"}`
2026-10-24T11:06:37.7837087Z  190 โ”‚                 : basename(token.value),
2026-10-24T11:06:37.7837234Z  191 โ”‚           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-24T11:06:37.7837327Z  192 โ”‚           iconUri: contextChipIconUri(icon),
2026-10-24T11:06:37.7837414Z  193 โ”‚           tintsIcon: icon.kind === "chip",
2026-10-24T11:06:37.7837473Z  194 โ”‚         };
2026-10-24T11:06:37.7837530Z  195 โ”‚       }),
2026-10-24T11:06:37.7837586Z  196 โ”‚     );
2026-10-24T11:06:37.7837720Z  197 โ”‚   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-24T11:06:37.7837876Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7838084Z      ยท                                     โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T11:06:37.7838230Z  198 โ”‚   // Every render resolves against the snapshot history, so a render whose
2026-10-24T11:06:37.7838321Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7838528Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T11:06:37.7838844Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7838847Z
2026-10-24T11:06:37.7839035Z   โš  react(memo-dependencies): Found missing memoization dependencies
2026-10-24T11:06:37.7839178Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5]
2026-10-24T11:06:37.7839308Z  251 โ”‚       mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-24T11:06:37.7839411Z  252 โ”‚       nativeEventSnapshotsRef.current.push({
2026-10-24T11:06:37.7839509Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7839978Z      ยท                  โ•ฐโ”€โ”€ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-24T11:06:37.7840069Z  253 โ”‚         eventCount: acknowledgedEventCount,
2026-10-24T11:06:37.7840131Z  254 โ”‚         value,
2026-10-24T11:06:37.7840210Z  255 โ”‚         selection: nextSelection,
2026-10-24T11:06:37.7840267Z  256 โ”‚       });
2026-10-24T11:06:37.7840351Z  257 โ”‚       return acknowledgedEventCount;
2026-10-24T11:06:37.7840407Z  258 โ”‚     },
2026-10-24T11:06:37.7840462Z  259 โ”‚     [],
2026-10-24T11:06:37.7840532Z      ยท     โ”€โ”ฌ
2026-10-24T11:06:37.7840713Z      ยท      โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T11:06:37.7840830Z  260 โ”‚   );
2026-10-24T11:06:37.7840915Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7841122Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T11:06:37.7841433Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7841436Z
2026-10-24T11:06:37.7841697Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7841868Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
2026-10-24T11:06:37.7841921Z  638 โ”‚
2026-10-24T11:06:37.7841986Z  639 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7842059Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7842194Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7842307Z  640 โ”‚     if (pendingLaunchEntry.key === launchTargetKey) {
2026-10-24T11:06:37.7842368Z  641 โ”‚       return;
2026-10-24T11:06:37.7842424Z  642 โ”‚     }
2026-10-24T11:06:37.7842499Z  643 โ”‚     setPendingLaunchEntry({
2026-10-24T11:06:37.7842588Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7842760Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7842831Z  644 โ”‚       key: launchTargetKey,
2026-10-24T11:06:37.7842882Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7843498Z   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-24T11:06:37.7843826Z   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-24T11:06:37.7843829Z
2026-10-24T11:06:37.7844089Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7844261Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
2026-10-24T11:06:37.7844315Z  648 โ”‚
2026-10-24T11:06:37.7844381Z  649 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7844452Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7844582Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7844703Z  650 โ”‚     if (initialAttachGridEntry.key === launchTargetKey) {
2026-10-24T11:06:37.7844766Z  651 โ”‚       return;
2026-10-24T11:06:37.7844820Z  652 โ”‚     }
2026-10-24T11:06:37.7844903Z  653 โ”‚     setInitialAttachGridEntry({
2026-10-24T11:06:37.7844998Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7845174Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7845245Z  654 โ”‚       key: launchTargetKey,
2026-10-24T11:06:37.7845298Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7845903Z   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-24T11:06:37.7846290Z   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-24T11:06:37.7846324Z
2026-10-24T11:06:37.7846582Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7846750Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
2026-10-24T11:06:37.7846804Z  743 โ”‚
2026-10-24T11:06:37.7846869Z  744 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7846939Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7847066Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7847169Z  745 โ”‚     if (!routeEnvironmentId || !routeThreadId) {
2026-10-24T11:06:37.7847238Z  746 โ”‚       setLastGridSize({
2026-10-24T11:06:37.7847326Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7847498Z      ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7847579Z  747 โ”‚         cols: DEFAULT_TERMINAL_COLS,
2026-10-24T11:06:37.7847631Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7848238Z   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-24T11:06:37.7848591Z   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-24T11:06:37.7848594Z
2026-10-24T11:06:37.7848801Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7848976Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
2026-10-24T11:06:37.7849033Z  537 โ”‚     });
2026-10-24T11:06:37.7849156Z  538 โ”‚   }, [terminal.buffer, terminal.buffer.length, terminalKey]);
2026-10-24T11:06:37.7849268Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7849517Z      ยท                                   โ•ฐโ”€โ”€ Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
2026-10-24T11:06:37.7849681Z  539 โ”‚   const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
2026-10-24T11:06:37.7849734Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7850030Z   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-24T11:06:37.7850400Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7850442Z
2026-10-24T11:06:37.7850644Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7850814Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
2026-10-24T11:06:37.7850910Z  708 โ”‚     sentInitialInputKeyRef.current = null;
2026-10-24T11:06:37.7850976Z  709 โ”‚   }, [terminalKey]);
2026-10-24T11:06:37.7851053Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7851197Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-24T11:06:37.7851251Z  710 โ”‚
2026-10-24T11:06:37.7851302Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7851600Z   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-24T11:06:37.7851915Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7851918Z
2026-10-24T11:06:37.7852119Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7852289Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
2026-10-24T11:06:37.7852345Z  799 โ”‚     };
2026-10-24T11:06:37.7852527Z  800 โ”‚   }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
2026-10-24T11:06:37.7852712Z      ยท                                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7852948Z      ยท                                                                โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-24T11:06:37.7853159Z      ยท                                                                โ•ฐโ”€โ”€ Unnecessary dependency `terminal.lifecycleVersion`
2026-10-24T11:06:37.7853213Z  801 โ”‚
2026-10-24T11:06:37.7853264Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7853559Z   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-24T11:06:37.7853870Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7853872Z
2026-10-24T11:06:37.7854023Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7854196Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
2026-10-24T11:06:37.7854253Z  792 โ”‚   }
2026-10-24T11:06:37.7854360Z  793 โ”‚   const pasteSession = pasteSessionRef.current;
2026-10-24T11:06:37.7854473Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7854635Z      ยท                                   โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7854689Z  794 โ”‚
2026-10-24T11:06:37.7854739Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7855271Z   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-24T11:06:37.7855591Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7855593Z
2026-10-24T11:06:37.7855854Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:06:37.7856020Z      โ•ญโ”€[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7]
2026-10-24T11:06:37.7856072Z  412 โ”‚
2026-10-24T11:06:37.7856198Z  413 โ”‚ const layer = Layer.effect(ThreadPullRequestServiceV2, make);
2026-10-24T11:06:37.7856269Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:06:37.7856395Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T11:06:37.7856446Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7856557Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7856564Z
2026-10-24T11:06:37.7856832Z   โš  eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:06:37.7856966Z      โ•ญโ”€[apps/server/src/telemetry/AnalyticsService.ts:340:7]
2026-10-24T11:06:37.7857019Z  339 โ”‚
2026-10-24T11:06:37.7857121Z  340 โ”‚ const layerTest = AnalyticsService.layerTest;
2026-10-24T11:06:37.7857198Z      ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7857330Z      ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
2026-10-24T11:06:37.7857381Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7857485Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7857487Z
2026-10-24T11:06:37.7857632Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7857756Z      โ•ญโ”€[apps/mobile/src/native/StackHeader.tsx:185:9]
2026-10-24T11:06:37.7857825Z  184 โ”‚         "options",
2026-10-24T11:06:37.7857920Z  185 โ”‚         latestOptionFunctionsRef.current,
2026-10-24T11:06:37.7858031Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7858226Z      ยท                         โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7858346Z  186 โ”‚         optionFunctionWrappersRef.current,
2026-10-24T11:06:37.7858398Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7858872Z   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-24T11:06:37.7859170Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7859175Z
2026-10-24T11:06:37.7859319Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7859437Z      โ•ญโ”€[apps/mobile/src/native/StackHeader.tsx:186:9]
2026-10-24T11:06:37.7859531Z  185 โ”‚         latestOptionFunctionsRef.current,
2026-10-24T11:06:37.7859626Z  186 โ”‚         optionFunctionWrappersRef.current,
2026-10-24T11:06:37.7859737Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7859929Z      ยท                         โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7860023Z  187 โ”‚       ) as NativeStackNavigationOptions)
2026-10-24T11:06:37.7860076Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7860604Z   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-24T11:06:37.7860928Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7860931Z
2026-10-24T11:06:37.7861132Z   โš  eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining
2026-10-24T11:06:37.7861302Z       โ•ญโ”€[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8]
2026-10-24T11:06:37.7861368Z  1782 โ”‚     assert.equal(
2026-10-24T11:06:37.7861516Z  1783 โ”‚       (stored.context?.records[0] as { attachmentId: string }).attachmentId,
2026-10-24T11:06:37.7861618Z       ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7861704Z  1784 โ”‚       stored.attachments[0]?.id,
2026-10-24T11:06:37.7861761Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7861934Z   help: If this short-circuits with 'undefined' the evaluation will throw TypeError
2026-10-24T11:06:37.7861937Z
2026-10-24T11:06:37.7862196Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7862359Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T11:06:37.7862423Z  259 โ”‚     .join("|");
2026-10-24T11:06:37.7862489Z  260 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7862560Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7862690Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7862751Z  261 โ”‚     stop();
2026-10-24T11:06:37.7862826Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-24T11:06:37.7862995Z      ยท       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7863062Z  262 โ”‚   }, [orderVersion]);
2026-10-24T11:06:37.7863114Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7863810Z   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-24T11:06:37.7864134Z   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-24T11:06:37.7864136Z
2026-10-24T11:06:37.7864357Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T11:06:37.7864522Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5]
2026-10-24T11:06:37.7864586Z  260 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7864648Z  261 โ”‚     stop();
2026-10-24T11:06:37.7864715Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-24T11:06:37.7864842Z      ยท       โ•ฐโ”€โ”€ Missing dependency `stop`
2026-10-24T11:06:37.7864909Z  262 โ”‚   }, [orderVersion]);
2026-10-24T11:06:37.7864990Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7865138Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `orderVersion`
2026-10-24T11:06:37.7865200Z  263 โ”‚   useEffect(
2026-10-24T11:06:37.7865254Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7865758Z   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-24T11:06:37.7866113Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7866117Z
2026-10-24T11:06:37.7866261Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7866422Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9]
2026-10-24T11:06:37.7866499Z  95 โ”‚   const latest = useRef(props);
2026-10-24T11:06:37.7866569Z  96 โ”‚   latest.current = props;
2026-10-24T11:06:37.7866674Z     ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7866853Z     ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T11:06:37.7866973Z     ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-24T11:06:37.7867047Z  97 โ”‚   const gesture = useMemo(
2026-10-24T11:06:37.7867097Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7867568Z   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-24T11:06:37.7867861Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7867863Z
2026-10-24T11:06:37.7868008Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7868168Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18]
2026-10-24T11:06:37.7868239Z  103 โ”‚         .runOnJS(true)
2026-10-24T11:06:37.7868370Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T11:06:37.7868489Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7868688Z      ยท                                 โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7868824Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T11:06:37.7868875Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7869346Z   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-24T11:06:37.7869690Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7869724Z
2026-10-24T11:06:37.7869867Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7870029Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19]
2026-10-24T11:06:37.7870127Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T11:06:37.7870258Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T11:06:37.7870402Z      ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7870614Z      ยท                                             โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7870741Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T11:06:37.7870800Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7871272Z   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-24T11:06:37.7871561Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7871564Z
2026-10-24T11:06:37.7871707Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7871866Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16]
2026-10-24T11:06:37.7871996Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T11:06:37.7872122Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T11:06:37.7872267Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7872474Z      ยท                                          โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7872600Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T11:06:37.7872653Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7873121Z   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-24T11:06:37.7873413Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7873421Z
2026-10-24T11:06:37.7873567Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7873729Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21]
2026-10-24T11:06:37.7873850Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T11:06:37.7873972Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T11:06:37.7874111Z      ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7874318Z      ยท                                            โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7874387Z  108 โ”‚     [props.disabled],
2026-10-24T11:06:37.7874438Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7874971Z   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-24T11:06:37.7875292Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7875295Z
2026-10-24T11:06:37.7875438Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7875598Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9]
2026-10-24T11:06:37.7875711Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-24T11:06:37.7875817Z  249 โ”‚   latest.current = { rows, planners, moveThread };
2026-10-24T11:06:37.7875923Z      ยท   โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7876108Z      ยท      โ”‚      โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T11:06:37.7876226Z      ยท      โ•ฐโ”€โ”€ This value is a ref
2026-10-24T11:06:37.7876280Z  250 โ”‚
2026-10-24T11:06:37.7876332Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7876803Z   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-24T11:06:37.7877094Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7877096Z
2026-10-24T11:06:37.7877239Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7877404Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22]
2026-10-24T11:06:37.7877525Z  246 โ”‚   const [preview, setPreview] = useState<Drag | null>(null);
2026-10-24T11:06:37.7877639Z  247 โ”‚   const translateY = useRef(new Animated.Value(0)).current;
2026-10-24T11:06:37.7877766Z      ยท                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7877936Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7878048Z  248 โ”‚   const latest = useRef({ rows, planners, moveThread });
2026-10-24T11:06:37.7878100Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7878597Z   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-24T11:06:37.7878892Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7878894Z
2026-10-24T11:06:37.7879064Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:06:37.7879223Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16]
2026-10-24T11:06:37.7879288Z  323 โ”‚     update(0);
2026-10-24T11:06:37.7879370Z  324 โ”‚     let last = performance.now();
2026-10-24T11:06:37.7879468Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7879608Z      ยท                        โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:06:37.7879676Z  325 โ”‚     const tick = () => {
2026-10-24T11:06:37.7879728Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7880087Z   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-24T11:06:37.7880420Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:06:37.7880423Z
2026-10-24T11:06:37.7880612Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T11:06:37.7880772Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15]
2026-10-24T11:06:37.7880832Z   98 โ”‚     () =>
2026-10-24T11:06:37.7880898Z   99 โ”‚       Gesture.Pan()
2026-10-24T11:06:37.7880975Z      ยท               โ”€โ”ฌโ”€
2026-10-24T11:06:37.7881107Z      ยท                โ•ฐโ”€โ”€ `Pan` may be a component
2026-10-24T11:06:37.7881193Z  100 โ”‚         .enabled(!props.disabled)
2026-10-24T11:06:37.7881248Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7881524Z   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-24T11:06:37.7881975Z   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-24T11:06:37.7881978Z
2026-10-24T11:06:37.7882165Z   โš  react(memo-dependencies): Found missing memoization dependencies
2026-10-24T11:06:37.7882326Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5]
2026-10-24T11:06:37.7882393Z  103 โ”‚         .runOnJS(true)
2026-10-24T11:06:37.7882497Z  104 โ”‚         .onStart(() => latest.current.onStart())
2026-10-24T11:06:37.7882587Z      ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:06:37.7883026Z      ยท                           โ•ฐโ”€โ”€ 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-24T11:06:37.7883159Z  105 โ”‚         .onUpdate((event) => latest.current.onMove(event.translationY))
2026-10-24T11:06:37.7883282Z  106 โ”‚         .onEnd((event) => latest.current.onMove(event.translationY))
2026-10-24T11:06:37.7883404Z  107 โ”‚         .onFinalize((_, success) => latest.current.onEnd(!success)),
2026-10-24T11:06:37.7883472Z  108 โ”‚     [props.disabled],
2026-10-24T11:06:37.7883555Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7883748Z      ยท             โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T11:06:37.7883807Z  109 โ”‚   );
2026-10-24T11:06:37.7883860Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7884067Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T11:06:37.7884379Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7884382Z
2026-10-24T11:06:37.7884538Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:06:37.7884695Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T11:06:37.7884748Z   86 โ”‚
2026-10-24T11:06:37.7884842Z   87 โ”‚   const cardCoverage = props.cardCoverage;
2026-10-24T11:06:37.7884979Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7885248Z      ยท               โ•ฐโ”€โ”€ `cardCoverage` originates here
2026-10-24T11:06:37.7885329Z   88 โ”‚   const barHeightRef = useRef(0);
2026-10-24T11:06:37.7885409Z   89 โ”‚   const cardHeightRef = useRef(0);
2026-10-24T11:06:37.7885493Z   90 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T11:06:37.7885586Z   91 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T11:06:37.7885654Z   92 โ”‚     if (!cardCoverage) {
2026-10-24T11:06:37.7885716Z   93 โ”‚       return;
2026-10-24T11:06:37.7885770Z   94 โ”‚     }
2026-10-24T11:06:37.7885924Z   95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T11:06:37.7886012Z   96 โ”‚     if (coverage === cardCoverage.value) {
2026-10-24T11:06:37.7886071Z   97 โ”‚       return;
2026-10-24T11:06:37.7886126Z   98 โ”‚     }
2026-10-24T11:06:37.7886214Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T11:06:37.7886300Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T11:06:37.7886379Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7886522Z      ยท             โ•ฐโ”€โ”€ `cardCoverage` cannot be modified
2026-10-24T11:06:37.7886583Z  101 โ”‚       return;
2026-10-24T11:06:37.7886635Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7886934Z   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-24T11:06:37.7887239Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:06:37.7887241Z
2026-10-24T11:06:37.7887398Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:06:37.7887558Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
2026-10-24T11:06:37.7887643Z   89 โ”‚   const cardHeightRef = useRef(0);
2026-10-24T11:06:37.7887727Z   90 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T11:06:37.7887806Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7887940Z      ยท              โ•ฐโ”€โ”€ `cardHeight` originates here
2026-10-24T11:06:37.7888037Z   91 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T11:06:37.7888105Z   92 โ”‚     if (!cardCoverage) {
2026-10-24T11:06:37.7888167Z   93 โ”‚       return;
2026-10-24T11:06:37.7888222Z   94 โ”‚     }
2026-10-24T11:06:37.7888396Z   95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T11:06:37.7888484Z   96 โ”‚     if (coverage === cardCoverage.value) {
2026-10-24T11:06:37.7888543Z   97 โ”‚       return;
2026-10-24T11:06:37.7888602Z   98 โ”‚     }
2026-10-24T11:06:37.7888686Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T11:06:37.7888767Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T11:06:37.7888830Z  101 โ”‚       return;
2026-10-24T11:06:37.7888885Z  102 โ”‚     }
2026-10-24T11:06:37.7888987Z  103 โ”‚     cardCoverage.value = withTiming(coverage, {
2026-10-24T11:06:37.7889083Z  104 โ”‚       duration: USER_INPUT_TOGGLE_DURATION_MS,
2026-10-24T11:06:37.7889169Z  105 โ”‚       easing: Easing.out(Easing.cubic),
2026-10-24T11:06:37.7889227Z  106 โ”‚     });
2026-10-24T11:06:37.7889294Z  107 โ”‚   }, [cardCoverage]);
2026-10-24T11:06:37.7889380Z  108 โ”‚   const handleBarLayout = useCallback(
2026-10-24T11:06:37.7889462Z  109 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T11:06:37.7889590Z  110 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T11:06:37.7889658Z  111 โ”‚       notifyCoverage();
2026-10-24T11:06:37.7889772Z  112 โ”‚     },
2026-10-24T11:06:37.7889880Z  113 โ”‚     [notifyCoverage],
2026-10-24T11:06:37.7889934Z  114 โ”‚   );
2026-10-24T11:06:37.7890020Z  115 โ”‚   const handleCardLayout = useCallback(
2026-10-24T11:06:37.7890101Z  116 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T11:06:37.7890229Z  117 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T11:06:37.7890343Z  118 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T11:06:37.7890420Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7890560Z      ยท            โ•ฐโ”€โ”€ `cardHeight` cannot be modified
2026-10-24T11:06:37.7890628Z  119 โ”‚       notifyCoverage();
2026-10-24T11:06:37.7890680Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7890955Z   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-24T11:06:37.7891268Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:06:37.7891271Z
2026-10-24T11:06:37.7891474Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T11:06:37.7891631Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T11:06:37.7891718Z   90 โ”‚   const cardHeight = useSharedValue(0);
2026-10-24T11:06:37.7891811Z   91 โ”‚   const notifyCoverage = useCallback(() => {
2026-10-24T11:06:37.7891918Z      ยท                                      โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7892157Z      ยท                                         โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T11:06:37.7892231Z   92 โ”‚     if (!cardCoverage) {
2026-10-24T11:06:37.7892294Z   93 โ”‚       return;
2026-10-24T11:06:37.7892349Z   94 โ”‚     }
2026-10-24T11:06:37.7892499Z   95 โ”‚     const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-24T11:06:37.7892587Z   96 โ”‚     if (coverage === cardCoverage.value) {
2026-10-24T11:06:37.7892645Z   97 โ”‚       return;
2026-10-24T11:06:37.7892700Z   98 โ”‚     }
2026-10-24T11:06:37.7892780Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T11:06:37.7892862Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T11:06:37.7892943Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7893080Z      ยท             โ•ฐโ”€โ”€ This modifies `cardCoverage`
2026-10-24T11:06:37.7893140Z  101 โ”‚       return;
2026-10-24T11:06:37.7893193Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7893604Z   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-24T11:06:37.7893945Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:06:37.7893948Z
2026-10-24T11:06:37.7894149Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T11:06:37.7894306Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7]
2026-10-24T11:06:37.7894388Z   99 โ”‚     if (cardCoverage.value === 0) {
2026-10-24T11:06:37.7894471Z  100 โ”‚       cardCoverage.value = coverage;
2026-10-24T11:06:37.7894549Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7894686Z      ยท             โ•ฐโ”€โ”€ This modifies `cardCoverage`
2026-10-24T11:06:37.7894749Z  101 โ”‚       return;
2026-10-24T11:06:37.7894805Z  102 โ”‚     }
2026-10-24T11:06:37.7894907Z  103 โ”‚     cardCoverage.value = withTiming(coverage, {
2026-10-24T11:06:37.7895003Z  104 โ”‚       duration: USER_INPUT_TOGGLE_DURATION_MS,
2026-10-24T11:06:37.7895087Z  105 โ”‚       easing: Easing.out(Easing.cubic),
2026-10-24T11:06:37.7895144Z  106 โ”‚     });
2026-10-24T11:06:37.7895210Z  107 โ”‚   }, [cardCoverage]);
2026-10-24T11:06:37.7895296Z  108 โ”‚   const handleBarLayout = useCallback(
2026-10-24T11:06:37.7895375Z  109 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T11:06:37.7895482Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7895707Z      ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-24T11:06:37.7895839Z  110 โ”‚       barHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T11:06:37.7895895Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7896235Z   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-24T11:06:37.7896542Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:06:37.7896544Z
2026-10-24T11:06:37.7896744Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T11:06:37.7896901Z      โ•ญโ”€[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7]
2026-10-24T11:06:37.7896987Z  115 โ”‚   const handleCardLayout = useCallback(
2026-10-24T11:06:37.7897069Z  116 โ”‚     (event: LayoutChangeEvent) => {
2026-10-24T11:06:37.7897178Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7897398Z      ยท                    โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `cardHeight` after render
2026-10-24T11:06:37.7897524Z  117 โ”‚       cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-24T11:06:37.7897639Z  118 โ”‚       cardHeight.value = event.nativeEvent.layout.height;
2026-10-24T11:06:37.7897715Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7897845Z      ยท            โ•ฐโ”€โ”€ This modifies `cardHeight`
2026-10-24T11:06:37.7897913Z  119 โ”‚       notifyCoverage();
2026-10-24T11:06:37.7897967Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7898327Z   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-24T11:06:37.7898686Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:06:37.7898723Z
2026-10-24T11:06:37.7899189Z   โš  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-24T11:06:37.7899317Z      โ•ญโ”€[packages/effect-acp/src/protocol.test.ts:500:31]
2026-10-24T11:06:37.7899371Z  499 โ”‚
2026-10-24T11:06:37.7899487Z  500 โ”‚       const response = yield* Schema.decodeUnknownEffect(
2026-10-24T11:06:37.7899607Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7899716Z  501 โ”‚         Schema.fromJsonString(JsonRpcErrorResponse),
2026-10-24T11:06:37.7899769Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7899778Z
2026-10-24T11:06:37.7900043Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:06:37.7900167Z      โ•ญโ”€[apps/server/src/serverRuntimeStartup.ts:728:7]
2026-10-24T11:06:37.7900220Z  727 โ”‚
2026-10-24T11:06:37.7900302Z  728 โ”‚ const layer = layerWithOptions();
2026-10-24T11:06:37.7900374Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:06:37.7900497Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T11:06:37.7900549Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7900654Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7900656Z
2026-10-24T11:06:37.7900948Z   โš  eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:06:37.7901079Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:218:7]
2026-10-24T11:06:37.7901136Z  217 โ”‚
2026-10-24T11:06:37.7901288Z  218 โ”‚ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect<void> =>
2026-10-24T11:06:37.7901379Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7901537Z      ยท                 โ•ฐโ”€โ”€ 'revokeActiveMcpThread' is declared here
2026-10-24T11:06:37.7901726Z  219 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void;
2026-10-24T11:06:37.7901779Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7901883Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7901886Z
2026-10-24T11:06:37.7902197Z   โš  eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:06:37.7902326Z      โ•ญโ”€[apps/server/src/mcp/McpSessionRegistry.ts:221:7]
2026-10-24T11:06:37.7902382Z  220 โ”‚
2026-10-24T11:06:37.7902516Z  221 โ”‚ const revokeAllActiveMcpCredentials = (): Effect.Effect<void> =>
2026-10-24T11:06:37.7902619Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7902795Z      ยท                     โ•ฐโ”€โ”€ 'revokeAllActiveMcpCredentials' is declared here
2026-10-24T11:06:37.7902957Z  222 โ”‚   activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void;
2026-10-24T11:06:37.7903009Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7903113Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7903115Z
2026-10-24T11:06:37.7903431Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7903665Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:217:7]
2026-10-24T11:06:37.7903779Z  213 โ”‚   };
2026-10-24T11:06:37.7903847Z  214 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7903918Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7904049Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7904222Z  215 โ”‚     const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null;
2026-10-24T11:06:37.7904289Z  216 โ”‚     if (inserted) {
2026-10-24T11:06:37.7904366Z  217 โ”‚       setSelection((current) =>
2026-10-24T11:06:37.7904444Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7904616Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7904794Z  218 โ”‚         current.start === inserted.start && current.end === inserted.end ? current : inserted,
2026-10-24T11:06:37.7904849Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7905464Z   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-24T11:06:37.7905790Z   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-24T11:06:37.7905792Z
2026-10-24T11:06:37.7906052Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7906218Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:298:7]
2026-10-24T11:06:37.7906299Z  286 โ”‚   }, [hasWorkspaceSnapshot]);
2026-10-24T11:06:37.7906366Z  287 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7906439Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7906568Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7906716Z  288 โ”‚     if (!environmentId || !projectCwd || !selectedProviderInstanceId) return;
2026-10-24T11:06:37.7906866Z  289 โ”‚     const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`;
2026-10-24T11:06:37.7906938Z  290 โ”‚     const now = Date.now();
2026-10-24T11:06:37.7907053Z  291 โ”‚     const lastRequest = workspaceRefreshKeyRef.current;
2026-10-24T11:06:37.7907110Z  292 โ”‚     if (
2026-10-24T11:06:37.7907191Z  293 โ”‚       lastRequest?.key === key &&
2026-10-24T11:06:37.7907331Z  294 โ”‚       now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS
2026-10-24T11:06:37.7907387Z  295 โ”‚     )
2026-10-24T11:06:37.7907454Z  296 โ”‚       return;
2026-10-24T11:06:37.7907633Z  297 โ”‚     if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) {
2026-10-24T11:06:37.7907720Z  298 โ”‚       setWorkspaceRefreshRetry(null);
2026-10-24T11:06:37.7907817Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7907994Z      ยท                   โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7908056Z  299 โ”‚       return;
2026-10-24T11:06:37.7908109Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7908746Z   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-24T11:06:37.7909128Z   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-24T11:06:37.7909172Z
2026-10-24T11:06:37.7909374Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7909540Z      โ•ญโ”€[apps/mobile/src/features/threads/use-composer-command-menu.ts:328:5]
2026-10-24T11:06:37.7909597Z  327 โ”‚   }, [
2026-10-24T11:06:37.7909663Z  328 โ”‚     draftMessage,
2026-10-24T11:06:37.7909740Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7909887Z      ยท           โ•ฐโ”€โ”€ Unnecessary dependency `draftMessage`
2026-10-24T11:06:37.7909953Z  329 โ”‚     environmentId,
2026-10-24T11:06:37.7910007Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7910310Z   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-24T11:06:37.7910626Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7910629Z
2026-10-24T11:06:37.7910834Z   โš  unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-24T11:06:37.7911003Z     โ•ญโ”€[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13]
2026-10-24T11:06:37.7911077Z  14 โ”‚ } from "@t3tools/contracts";
2026-10-24T11:06:37.7911167Z  15 โ”‚ import type {} from "@t3tools/contracts";
2026-10-24T11:06:37.7911239Z     ยท             โ”€โ”€
2026-10-24T11:06:37.7911422Z  16 โ”‚ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl";
2026-10-24T11:06:37.7911480Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7911566Z   help: Remove empty braces
2026-10-24T11:06:37.7911569Z
2026-10-24T11:06:37.7911943Z   โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T11:06:37.7912070Z      โ•ญโ”€[apps/server/src/auth/RpcAuthorization.ts:237:17]
2026-10-24T11:06:37.7912207Z  236 โ”‚ const requiredScopesForSettingsUpdate = (payload: unknown) => {
2026-10-24T11:06:37.7912340Z  237 โ”‚   const input = Schema.decodeUnknownSync(SettingsUpdate)(payload);
2026-10-24T11:06:37.7912448Z      ยท                 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7912588Z  238 โ”‚   const scopes = requiredScopesForServerSettingsPatch(input.patch);
2026-10-24T11:06:37.7912641Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7912644Z
2026-10-24T11:06:37.7913067Z   โš  t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const.
2026-10-24T11:06:37.7913227Z      โ•ญโ”€[apps/server/src/auth/RpcAuthorization.ts:256:26]
2026-10-24T11:06:37.7913328Z  255 โ”‚   if (method === WS_METHODS.assetsCreateUrl) {
2026-10-24T11:06:37.7913482Z  256 โ”‚     const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload);
2026-10-24T11:06:37.7913596Z      ยท                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7913656Z  257 โ”‚     return [
2026-10-24T11:06:37.7913708Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7913711Z
2026-10-24T11:06:37.7913911Z   โš  eslint(no-unused-vars): Identifier 'identity' is imported but never used.
2026-10-24T11:06:37.7914023Z     โ•ญโ”€[apps/server/src/auth/http.ts:28:10]
2026-10-24T11:06:37.7914113Z  27 โ”‚ import * as Schema from "effect/Schema";
2026-10-24T11:06:37.7914206Z  28 โ”‚ import { identity } from "effect/Function";
2026-10-24T11:06:37.7914282Z     ยท          โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7914418Z     ยท              โ•ฐโ”€โ”€ 'identity' is imported here
2026-10-24T11:06:37.7914503Z  29 โ”‚ import * as Layer from "effect/Layer";
2026-10-24T11:06:37.7914558Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7914655Z   help: Consider removing this import.
2026-10-24T11:06:37.7914658Z
2026-10-24T11:06:37.7914863Z   โš  react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-24T11:06:37.7914999Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6]
2026-10-24T11:06:37.7915163Z  227 โ”‚     nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-24T11:06:37.7915259Z  228 โ”‚       nativeEventSnapshotsRef.current,
2026-10-24T11:06:37.7915357Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7915827Z      ยท                  โ•ฐโ”€โ”€ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-24T11:06:37.7915901Z  229 โ”‚       mostRecentEventCount,
2026-10-24T11:06:37.7915958Z  230 โ”‚     );
2026-10-24T11:06:37.7916081Z  231 โ”‚   }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-24T11:06:37.7916217Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7916421Z      ยท                                โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T11:06:37.7916512Z  232 โ”‚   const assumedValue = props.value;
2026-10-24T11:06:37.7916567Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7916735Z   help: Missing dependencies can cause an effect to fire less often than it should
2026-10-24T11:06:37.7917050Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7917053Z
2026-10-24T11:06:37.7917272Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-24T11:06:37.7917409Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7]
2026-10-24T11:06:37.7917556Z  238 โ”‚     nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-24T11:06:37.7917644Z  239 โ”‚       nativeEventSnapshotsRef.current,
2026-10-24T11:06:37.7917790Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7918322Z      ยท                  โ•ฐโ”€โ”€ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-24T11:06:37.7918398Z  240 โ”‚       controlledEventCount,
2026-10-24T11:06:37.7918462Z  241 โ”‚       assumedValue,
2026-10-24T11:06:37.7918518Z  242 โ”‚     );
2026-10-24T11:06:37.7918675Z  243 โ”‚   }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-24T11:06:37.7918815Z      ยท                                                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7919024Z      ยท                                                                    โ•ฐโ”€โ”€ Unnecessary dependency `controlledDocumentJson`
2026-10-24T11:06:37.7919119Z  244 โ”‚   const acceptNativeEvent = useCallback(
2026-10-24T11:06:37.7919175Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7919599Z   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-24T11:06:37.7919915Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7919918Z
2026-10-24T11:06:37.7920064Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7920201Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
2026-10-24T11:06:37.7920327Z  163 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T11:06:37.7920444Z  164 โ”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T11:06:37.7920564Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7920733Z      ยท                                          โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:06:37.7920792Z  165 โ”‚     });
2026-10-24T11:06:37.7920845Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7921319Z   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-24T11:06:37.7921612Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7921615Z
2026-10-24T11:06:37.7921765Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7921908Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
2026-10-24T11:06:37.7922031Z  163 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T11:06:37.7922142Z  164 โ”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T11:06:37.7922263Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7922470Z      ยท                                          โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7922529Z  165 โ”‚     });
2026-10-24T11:06:37.7922580Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7923104Z   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-24T11:06:37.7923429Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7923431Z
2026-10-24T11:06:37.7923578Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7923715Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23]
2026-10-24T11:06:37.7923771Z  165 โ”‚     });
2026-10-24T11:06:37.7923861Z  166 โ”‚     confirmedTokensRef.current = tokens;
2026-10-24T11:06:37.7923986Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7924177Z      ยท              โ”‚            โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T11:06:37.7924298Z      ยท              โ•ฐโ”€โ”€ This value is a ref
2026-10-24T11:06:37.7924375Z  167 โ”‚     return JSON.stringify(
2026-10-24T11:06:37.7924428Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7924898Z   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-24T11:06:37.7925188Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7925193Z
2026-10-24T11:06:37.7925336Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7925471Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5]
2026-10-24T11:06:37.7925547Z  207 โ”‚     mostRecentEventCount,
2026-10-24T11:06:37.7925637Z  208 โ”‚     nativeEventSnapshotsRef.current,
2026-10-24T11:06:37.7925741Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7925930Z      ยท                    โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7925986Z  209 โ”‚   );
2026-10-24T11:06:37.7926038Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7926512Z   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-24T11:06:37.7926807Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7926809Z
2026-10-24T11:06:37.7926957Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7927095Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5]
2026-10-24T11:06:37.7927165Z  213 โ”‚     mostRecentEventCount,
2026-10-24T11:06:37.7927252Z  214 โ”‚     nativeEventSnapshotsRef.current,
2026-10-24T11:06:37.7927356Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7927544Z      ยท                    โ•ฐโ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7927598Z  215 โ”‚   );
2026-10-24T11:06:37.7927651Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7928120Z   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-24T11:06:37.7928495Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7928529Z
2026-10-24T11:06:37.7928717Z   โš  react(memo-dependencies): Found missing memoization dependencies
2026-10-24T11:06:37.7928852Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6]
2026-10-24T11:06:37.7928976Z  163 โ”‚     const tokens = collectComposerInlineTokens(props.value, {
2026-10-24T11:06:37.7929086Z  164 โ”‚       preserveTrailingFrom: confirmedTokensRef.current,
2026-10-24T11:06:37.7929196Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7929671Z      ยท                                      โ•ฐโ”€โ”€ Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-24T11:06:37.7929732Z  165 โ”‚     });
2026-10-24T11:06:37.7929823Z  166 โ”‚     confirmedTokensRef.current = tokens;
2026-10-24T11:06:37.7929895Z  167 โ”‚     return JSON.stringify(
2026-10-24T11:06:37.7930061Z  168 โ”‚       composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-24T11:06:37.7930128Z  169 โ”‚         const record =
2026-10-24T11:06:37.7930209Z  170 โ”‚           token.type === "context"
2026-10-24T11:06:37.7930375Z  171 โ”‚             ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-24T11:06:37.7930441Z  172 โ”‚             : undefined;
2026-10-24T11:06:37.7930552Z  173 โ”‚         const presentation = contextChipPresentation(
2026-10-24T11:06:37.7930663Z  174 โ”‚           token.type === "context" ? token.kind : token.type,
2026-10-24T11:06:37.7930732Z  175 โ”‚           record,
2026-10-24T11:06:37.7930792Z  176 โ”‚         );
2026-10-24T11:06:37.7930880Z  177 โ”‚         const icon = contextChipIcon(
2026-10-24T11:06:37.7930948Z  178 โ”‚           presentation,
2026-10-24T11:06:37.7931094Z  179 โ”‚           token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-24T11:06:37.7931151Z  180 โ”‚         );
2026-10-24T11:06:37.7931214Z  181 โ”‚         return {
2026-10-24T11:06:37.7931286Z  182 โ”‚           type: token.type,
2026-10-24T11:06:37.7931363Z  183 โ”‚           source: token.source,
2026-10-24T11:06:37.7931436Z  184 โ”‚           start: token.start,
2026-10-24T11:06:37.7931504Z  185 โ”‚           end: token.end,
2026-10-24T11:06:37.7931653Z  186 โ”‚           accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-24T11:06:37.7931715Z  187 โ”‚           label:
2026-10-24T11:06:37.7931799Z  188 โ”‚             token.type === "skill"
2026-10-24T11:06:37.7931910Z  189 โ”‚               ? (skillLabels.get(token.value) ?? token.value)
2026-10-24T11:06:37.7931994Z  190 โ”‚               : token.type === "context"
2026-10-24T11:06:37.7932230Z  191 โ”‚                 ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " ยท unavailable"}`
2026-10-24T11:06:37.7932313Z  192 โ”‚                 : basename(token.value),
2026-10-24T11:06:37.7932460Z  193 โ”‚           detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-24T11:06:37.7932555Z  194 โ”‚           iconUri: contextChipIconUri(icon),
2026-10-24T11:06:37.7932643Z  195 โ”‚           tintsIcon: icon.kind === "chip",
2026-10-24T11:06:37.7932701Z  196 โ”‚         };
2026-10-24T11:06:37.7932760Z  197 โ”‚       }),
2026-10-24T11:06:37.7932816Z  198 โ”‚     );
2026-10-24T11:06:37.7933007Z  199 โ”‚   }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-24T11:06:37.7933196Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7933403Z      ยท                                     โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T11:06:37.7933544Z  200 โ”‚   // Every render resolves against the snapshot history, so a render whose
2026-10-24T11:06:37.7933597Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7933803Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T11:06:37.7934119Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7934122Z
2026-10-24T11:06:37.7934317Z   โš  react(memo-dependencies): Found missing memoization dependencies
2026-10-24T11:06:37.7934461Z      โ•ญโ”€[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5]
2026-10-24T11:06:37.7934593Z  253 โ”‚       mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-24T11:06:37.7934694Z  254 โ”‚       nativeEventSnapshotsRef.current.push({
2026-10-24T11:06:37.7934787Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7935251Z      ยท                  โ•ฐโ”€โ”€ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-24T11:06:37.7935344Z  255 โ”‚         eventCount: acknowledgedEventCount,
2026-10-24T11:06:37.7935406Z  256 โ”‚         value,
2026-10-24T11:06:37.7935485Z  257 โ”‚         selection: nextSelection,
2026-10-24T11:06:37.7935549Z  258 โ”‚       });
2026-10-24T11:06:37.7935638Z  259 โ”‚       return acknowledgedEventCount;
2026-10-24T11:06:37.7935692Z  260 โ”‚     },
2026-10-24T11:06:37.7935748Z  261 โ”‚     [],
2026-10-24T11:06:37.7935818Z      ยท     โ”€โ”ฌ
2026-10-24T11:06:37.7935999Z      ยท      โ•ฐโ”€โ”€ This dependency list is missing values used by the callback
2026-10-24T11:06:37.7936055Z  262 โ”‚   );
2026-10-24T11:06:37.7936107Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7936314Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-24T11:06:37.7936627Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7936630Z
2026-10-24T11:06:37.7936940Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7937151Z      โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7]
2026-10-24T11:06:37.7937205Z  118 โ”‚
2026-10-24T11:06:37.7937270Z  119 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7937342Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7937474Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7937559Z  120 โ”‚     if (orientationSettled) return;
2026-10-24T11:06:37.7937672Z  121 โ”‚     const orientation = getNativeShowcaseOrientation();
2026-10-24T11:06:37.7937747Z  122 โ”‚     if (orientation === null) {
2026-10-24T11:06:37.7937829Z  123 โ”‚       setOrientationSettled(true);
2026-10-24T11:06:37.7937919Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7938101Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7938167Z  124 โ”‚       return;
2026-10-24T11:06:37.7938220Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7938851Z   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-24T11:06:37.7939176Z   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-24T11:06:37.7939179Z
2026-10-24T11:06:37.7939437Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7939613Z      โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7]
2026-10-24T11:06:37.7939671Z  292 โ”‚
2026-10-24T11:06:37.7939737Z  293 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7939810Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7939938Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7939999Z  294 โ”‚     if (
2026-10-24T11:06:37.7940066Z  295 โ”‚       scene === null ||
2026-10-24T11:06:37.7940145Z  296 โ”‚       requestedScene === null ||
2026-10-24T11:06:37.7940222Z  297 โ”‚       scene !== requestedScene ||
2026-10-24T11:06:37.7940287Z  298 โ”‚       !hasFixture ||
2026-10-24T11:06:37.7940362Z  299 โ”‚       !orientationSettled ||
2026-10-24T11:06:37.7940429Z  300 โ”‚       !themeApplied ||
2026-10-24T11:06:37.7940545Z  301 โ”‚       (scene === "agent-activity" && !agentActivityStaged) ||
2026-10-24T11:06:37.7940686Z  302 โ”‚       !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
2026-10-24T11:06:37.7940745Z  303 โ”‚     ) {
2026-10-24T11:06:37.7940814Z  304 โ”‚       setReadyScene(null);
2026-10-24T11:06:37.7940895Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7941067Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7941130Z  305 โ”‚       return;
2026-10-24T11:06:37.7941181Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7941786Z   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-24T11:06:37.7942168Z   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-24T11:06:37.7942204Z
2026-10-24T11:06:37.7942479Z   โš  eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:06:37.7942652Z      โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9]
2026-10-24T11:06:37.7942721Z  127 โ”‚     let cancelled = false;
2026-10-24T11:06:37.7942812Z  128 โ”‚     let lastOutcome: string | null = null;
2026-10-24T11:06:37.7942893Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7943031Z      ยท              โ•ฐโ”€โ”€ 'lastOutcome' is declared here
2026-10-24T11:06:37.7943398Z  129 โ”‚     void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
2026-10-24T11:06:37.7943451Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7943563Z   help: Consider removing this declaration.
2026-10-24T11:06:37.7943571Z
2026-10-24T11:06:37.7943757Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T11:06:37.7943895Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27]
2026-10-24T11:06:37.7944057Z  120 โ”‚   const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"]));
2026-10-24T11:06:37.7944145Z  121 โ”‚   const dispatch = vi.fn((_: unknown) =>
2026-10-24T11:06:37.7944231Z      ยท                           โ”ฌ
2026-10-24T11:06:37.7944362Z      ยท                           โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T11:06:37.7944463Z  122 โ”‚     (options.dispatchGate ?? Effect.void).pipe(
2026-10-24T11:06:37.7944517Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7944620Z   help: Consider removing this parameter.
2026-10-24T11:06:37.7944629Z
2026-10-24T11:06:37.7944818Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T11:06:37.7944954Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39]
2026-10-24T11:06:37.7945010Z  133 โ”‚   );
2026-10-24T11:06:37.7945117Z  134 โ”‚   const listLocalBranchNames = vi.fn((_: string) =>
2026-10-24T11:06:37.7945215Z      ยท                                       โ”ฌ
2026-10-24T11:06:37.7945355Z      ยท                                       โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T11:06:37.7945423Z  135 โ”‚     Effect.succeed(
2026-10-24T11:06:37.7945476Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7945577Z   help: Consider removing this parameter.
2026-10-24T11:06:37.7945580Z
2026-10-24T11:06:37.7945766Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T11:06:37.7945904Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31]
2026-10-24T11:06:37.7945961Z  177 โ”‚   });
2026-10-24T11:06:37.7946060Z  178 โ”‚   const sendToThread = vi.fn((_: unknown) => {
2026-10-24T11:06:37.7946147Z      ยท                               โ”ฌ
2026-10-24T11:06:37.7946281Z      ยท                               โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T11:06:37.7946381Z  179 โ”‚     switch (options.continuation ?? "queued") {
2026-10-24T11:06:37.7946433Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7946531Z   help: Consider removing this parameter.
2026-10-24T11:06:37.7946534Z
2026-10-24T11:06:37.7946718Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T11:06:37.7946852Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33]
2026-10-24T11:06:37.7946983Z  202 โ”‚   );
2026-10-24T11:06:37.7947123Z  203 โ”‚   const removeWorktree = vi.fn((_: unknown) =>
2026-10-24T11:06:37.7947214Z      ยท                                 โ”ฌ
2026-10-24T11:06:37.7947351Z      ยท                                 โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T11:06:37.7947433Z  204 โ”‚     options.removeWorktreeFails
2026-10-24T11:06:37.7947484Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7947584Z   help: Consider removing this parameter.
2026-10-24T11:06:37.7947587Z
2026-10-24T11:06:37.7948949Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T11:06:37.7949098Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36]
2026-10-24T11:06:37.7949155Z  207 โ”‚   );
2026-10-24T11:06:37.7949259Z  208 โ”‚   const deleteLocalBranch = vi.fn((_: unknown) =>
2026-10-24T11:06:37.7949363Z      ยท                                    โ”ฌ
2026-10-24T11:06:37.7949512Z      ยท                                    โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T11:06:37.7949597Z  209 โ”‚     options.deleteLocalBranchFails
2026-10-24T11:06:37.7949650Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7949749Z   help: Consider removing this parameter.
2026-10-24T11:06:37.7949752Z
2026-10-24T11:06:37.7949935Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T11:06:37.7950069Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42]
2026-10-24T11:06:37.7950126Z  212 โ”‚   );
2026-10-24T11:06:37.7950239Z  213 โ”‚   const fetchWorktreeBaseCommit = vi.fn((_: unknown) =>
2026-10-24T11:06:37.7950340Z      ยท                                          โ”ฌ
2026-10-24T11:06:37.7950488Z      ยท                                          โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T11:06:37.7950576Z  214 โ”‚     options.fetchWorktreeBaseFails
2026-10-24T11:06:37.7950629Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7950728Z   help: Consider removing this parameter.
2026-10-24T11:06:37.7950730Z
2026-10-24T11:06:37.7950910Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T11:06:37.7951046Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30]
2026-10-24T11:06:37.7951102Z  253 โ”‚   );
2026-10-24T11:06:37.7951193Z  254 โ”‚   const localStatus = vi.fn((_: unknown) =>
2026-10-24T11:06:37.7951280Z      ยท                              โ”ฌ
2026-10-24T11:06:37.7951414Z      ยท                              โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T11:06:37.7951488Z  255 โ”‚     Effect.succeed({
2026-10-24T11:06:37.7951543Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7951642Z   help: Consider removing this parameter.
2026-10-24T11:06:37.7951644Z
2026-10-24T11:06:37.7951824Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-24T11:06:37.7951959Z      โ•ญโ”€[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32]
2026-10-24T11:06:37.7952014Z  263 โ”‚   );
2026-10-24T11:06:37.7952163Z  264 โ”‚   const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub"));
2026-10-24T11:06:37.7952253Z      ยท                                โ”ฌ
2026-10-24T11:06:37.7952388Z      ยท                                โ•ฐโ”€โ”€ '_' is declared here
2026-10-24T11:06:37.7952536Z  265 โ”‚   const runForThread = vi.fn((input: { readonly worktreePath: string }) => {
2026-10-24T11:06:37.7952588Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7952756Z   help: Consider removing this parameter.
2026-10-24T11:06:37.7952795Z
2026-10-24T11:06:37.7952962Z   โš  eslint(no-control-regex): Unexpected control character
2026-10-24T11:06:37.7953159Z      โ•ญโ”€[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46]
2026-10-24T11:06:37.7953299Z  219 โ”‚               <Text selectable className="font-mono text-sm text-foreground">
2026-10-24T11:06:37.7953441Z  220 โ”‚                 {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")}
2026-10-24T11:06:37.7953550Z      ยท                                              โ”€โ”€โ”ฌโ”€
2026-10-24T11:06:37.7953717Z      ยท                                                โ•ฐโ”€โ”€ 'U+001B' is a control character.
2026-10-24T11:06:37.7953783Z  221 โ”‚               </Text>
2026-10-24T11:06:37.7953834Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7954073Z   help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression.
2026-10-24T11:06:37.7954081Z
2026-10-24T11:06:37.7954237Z   โš  eslint(no-new): Do not use 'new' for side effects.
2026-10-24T11:06:37.7954363Z      โ•ญโ”€[apps/server/src/mcp/McpToolAccess.test.ts:168:3]
2026-10-24T11:06:37.7954475Z  167 โ”‚   // @ts-expect-error a declaration constructed directly
2026-10-24T11:06:37.7954571Z  168 โ”‚   new McpToolAccess.Declaration(unchecked);
2026-10-24T11:06:37.7954668Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7954796Z  169 โ”‚   // @ts-expect-error a handlers layer built outside McpToolAccess
2026-10-24T11:06:37.7954847Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7955006Z   help: Assign the result of 'new' to a variable or compare it to a reference.
2026-10-24T11:06:37.7955009Z
2026-10-24T11:06:37.7955162Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:06:37.7955326Z      โ•ญโ”€[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39]
2026-10-24T11:06:37.7955380Z  276 โ”‚
2026-10-24T11:06:37.7955562Z  277 โ”‚ โ•ญโ”€โ–ถ   return createElement(RawNativeView, {
2026-10-24T11:06:37.7955655Z  278 โ”‚ โ”‚       ...nativeProps,
2026-10-24T11:06:37.7955802Z  279 โ”‚ โ”‚       refreshEnabled: props.onPullToRefresh !== undefined,
2026-10-24T11:06:37.7955892Z  280 โ”‚ โ”‚       ref: nativeRef,
2026-10-24T11:06:37.7956023Z  281 โ”‚ โ”œโ”€โ–ถ   });
2026-10-24T11:06:37.7956270Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:06:37.7956330Z  282 โ”‚     }
2026-10-24T11:06:37.7956381Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7956853Z   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-24T11:06:37.7957149Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:06:37.7957152Z
2026-10-24T11:06:37.7957353Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7957488Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:454:7]
2026-10-24T11:06:37.7957626Z  453 โ”‚     showAuxiliaryPane("inspector");
2026-10-24T11:06:37.7957769Z  454 โ”‚   }, [environmentId, showAuxiliaryPane, threadId]);
2026-10-24T11:06:37.7957914Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€                     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:06:37.7958114Z      ยท             โ”‚                               โ•ฐโ”€โ”€ Unnecessary dependency `threadId`
2026-10-24T11:06:37.7958264Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `environmentId`
2026-10-24T11:06:37.7958359Z  455 โ”‚   const {
2026-10-24T11:06:37.7958411Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7958706Z   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-24T11:06:37.7959025Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7959031Z
2026-10-24T11:06:37.7959217Z   โš  react(static-components): Cannot create components during render
2026-10-24T11:06:37.7959353Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:725:20]
2026-10-24T11:06:37.7959417Z  492 โ”‚   // same check.
2026-10-24T11:06:37.7959543Z  493 โ”‚   const NativeReviewDiffView = resolveNativeReviewDiffView();
2026-10-24T11:06:37.7959664Z      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7959847Z      ยท                                             โ•ฐโ”€โ”€ The component is created during render here
2026-10-24T11:06:37.7959998Z  494 โ”‚   const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
2026-10-24T11:06:37.7960125Z  495 โ”‚   const showcasedReviewDrawRef = useRef<string | null>(null);
2026-10-24T11:06:37.7960258Z  496 โ”‚   const [isPullRefreshing, setIsPullRefreshing] = useState(false);
2026-10-24T11:06:37.7960351Z  497 โ”‚   const handlePullToRefresh = async () => {
2026-10-24T11:06:37.7960429Z  498 โ”‚     setIsPullRefreshing(true);
2026-10-24T11:06:37.7960512Z  499 โ”‚     await refreshSelectedSection();
2026-10-24T11:06:37.7960587Z  500 โ”‚     setIsPullRefreshing(false);
2026-10-24T11:06:37.7960642Z  501 โ”‚   };
2026-10-24T11:06:37.7960785Z  502 โ”‚   const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
2026-10-24T11:06:37.7960927Z  503 โ”‚   const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
2026-10-24T11:06:37.7961032Z  504 โ”‚   const fileVisibility = useReviewFileVisibility({
2026-10-24T11:06:37.7961118Z  505 โ”‚     threadKey: reviewCache.threadKey,
2026-10-24T11:06:37.7961207Z  506 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-24T11:06:37.7961428Z  507 โ”‚     files: reviewFiles,
2026-10-24T11:06:37.7961580Z  508 โ”‚     cachedExpandedFileIds: selectedSection?.id
2026-10-24T11:06:37.7961712Z  509 โ”‚       ? reviewCache.expandedFileIdsBySection[selectedSection.id]
2026-10-24T11:06:37.7961776Z  510 โ”‚       : undefined,
2026-10-24T11:06:37.7961872Z  511 โ”‚     cachedViewedFileIds: selectedSection?.id
2026-10-24T11:06:37.7961995Z  512 โ”‚       ? reviewCache.viewedFileIdsBySection[selectedSection.id]
2026-10-24T11:06:37.7962059Z  513 โ”‚       : undefined,
2026-10-24T11:06:37.7962115Z  514 โ”‚   });
2026-10-24T11:06:37.7962306Z  515 โ”‚   const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
2026-10-24T11:06:37.7962436Z  516 โ”‚   const commentSelection = useReviewCommentSelectionController({
2026-10-24T11:06:37.7962499Z  517 โ”‚     environmentId,
2026-10-24T11:06:37.7962562Z  518 โ”‚     threadId,
2026-10-24T11:06:37.7962634Z  519 โ”‚     selectedSection,
2026-10-24T11:06:37.7962708Z  520 โ”‚     nativeReviewDiffData,
2026-10-24T11:06:37.7962762Z  521 โ”‚   });
2026-10-24T11:06:37.7962867Z  522 โ”‚   const nativeBridge = useNativeReviewDiffBridge({
2026-10-24T11:06:37.7962953Z  523 โ”‚     threadKey: reviewCache.threadKey,
2026-10-24T11:06:37.7963041Z  524 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-24T11:06:37.7963117Z  525 โ”‚     diff: selectedSection?.diff,
2026-10-24T11:06:37.7963193Z  526 โ”‚     data: nativeReviewDiffData,
2026-10-24T11:06:37.7963260Z  527 โ”‚     collapsedFileIds,
2026-10-24T11:06:37.7963323Z  528 โ”‚     viewedFileIds,
2026-10-24T11:06:37.7963434Z  529 โ”‚     selectedRowIds: commentSelection.selectedRowIds,
2026-10-24T11:06:37.7963530Z  530 โ”‚     canHighlight: parsedDiff.kind === "files",
2026-10-24T11:06:37.7963583Z  531 โ”‚   });
2026-10-24T11:06:37.7963657Z  532 โ”‚   const showcaseReviewKey =
2026-10-24T11:06:37.7963795Z  533 โ”‚     SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
2026-10-24T11:06:37.7964007Z  534 โ”‚       ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
2026-10-24T11:06:37.7964068Z  535 โ”‚       : null;
2026-10-24T11:06:37.7964235Z  536 โ”‚   const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
2026-10-24T11:06:37.7964314Z  537 โ”‚     nativeBridge.onDebug(event);
2026-10-24T11:06:37.7964371Z  538 โ”‚     if (
2026-10-24T11:06:37.7964450Z  539 โ”‚       showcaseReviewKey === null ||
2026-10-24T11:06:37.7964572Z  540 โ”‚       showcasedReviewDrawRef.current === showcaseReviewKey ||
2026-10-24T11:06:37.7964681Z  541 โ”‚       !isNativeReviewDiffDrawEvent(event.nativeEvent)
2026-10-24T11:06:37.7964738Z  542 โ”‚     ) {
2026-10-24T11:06:37.7964797Z  543 โ”‚       return;
2026-10-24T11:06:37.7964852Z  544 โ”‚     }
2026-10-24T11:06:37.7964969Z  545 โ”‚     showcasedReviewDrawRef.current = showcaseReviewKey;
2026-10-24T11:06:37.7965134Z  546 โ”‚     reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
2026-10-24T11:06:37.7965188Z  547 โ”‚   };
2026-10-24T11:06:37.7965241Z  548 โ”‚
2026-10-24T11:06:37.7965358Z  549 โ”‚   const handleSelectFile = async (fileId: string | null) => {
2026-10-24T11:06:37.7965438Z  550 โ”‚     loadVisibleFile(fileId, true);
2026-10-24T11:06:37.7965525Z  551 โ”‚     commentSelection.clearSelection();
2026-10-24T11:06:37.7965646Z  552 โ”‚     if (fileId !== null && collapsedFileIds.includes(fileId)) {
2026-10-24T11:06:37.7965726Z  553 โ”‚       toggleExpandedFile(fileId);
2026-10-24T11:06:37.7965780Z  554 โ”‚     }
2026-10-24T11:06:37.7965891Z  555 โ”‚     const nativeView = nativeReviewDiffViewRef.current;
2026-10-24T11:06:37.7965962Z  556 โ”‚     if (!nativeView) return;
2026-10-24T11:06:37.7966111Z  557 โ”‚     const result = await settlePromise(() =>
2026-10-24T11:06:37.7966322Z  558 โ”‚       fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
2026-10-24T11:06:37.7966376Z  559 โ”‚     );
2026-10-24T11:06:37.7966465Z  560 โ”‚     if (AsyncResult.isFailure(result)) {
2026-10-24T11:06:37.7966646Z  561 โ”‚       console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
2026-10-24T11:06:37.7966699Z  562 โ”‚     }
2026-10-24T11:06:37.7966754Z  563 โ”‚   };
2026-10-24T11:06:37.7966837Z  564 โ”‚   const handleVisibleFileChange = (
2026-10-24T11:06:37.7966969Z  565 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
2026-10-24T11:06:37.7967025Z  566 โ”‚   ) => {
2026-10-24T11:06:37.7967134Z  567 โ”‚     loadVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-24T11:06:37.7967309Z  568 โ”‚     reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-24T11:06:37.7967367Z  569 โ”‚   };
2026-10-24T11:06:37.7967445Z  570 โ”‚   const renderInspector = () => (
2026-10-24T11:06:37.7967515Z  571 โ”‚     <ReviewFileNavigator
2026-10-24T11:06:37.7967596Z  572 โ”‚       ref={reviewFileNavigatorRef}
2026-10-24T11:06:37.7967686Z  573 โ”‚       files={nativeReviewDiffData.files}
2026-10-24T11:06:37.7967760Z  574 โ”‚       headerInset={insets.top}
2026-10-24T11:06:37.7967853Z  575 โ”‚       sectionId={selectedSection?.id ?? null}
2026-10-24T11:06:37.7967971Z  576 โ”‚       onSelectFile={(fileId) => void handleSelectFile(fileId)}
2026-10-24T11:06:37.7968027Z  577 โ”‚     />
2026-10-24T11:06:37.7968079Z  578 โ”‚   );
2026-10-24T11:06:37.7968132Z  579 โ”‚
2026-10-24T11:06:37.7968347Z  580 โ”‚   const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
2026-10-24T11:06:37.7968434Z  581 โ”‚     const { fileId } = event.nativeEvent;
2026-10-24T11:06:37.7968501Z  582 โ”‚     if (fileId) {
2026-10-24T11:06:37.7968586Z  583 โ”‚       loadVisibleFile(fileId, true);
2026-10-24T11:06:37.7968665Z  584 โ”‚       toggleExpandedFile(fileId);
2026-10-24T11:06:37.7968720Z  585 โ”‚     }
2026-10-24T11:06:37.7968773Z  586 โ”‚   };
2026-10-24T11:06:37.7968825Z  587 โ”‚
2026-10-24T11:06:37.7968914Z  588 โ”‚   const handleNativeToggleViewedFile = (
2026-10-24T11:06:37.7969032Z  589 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string }>,
2026-10-24T11:06:37.7969088Z  590 โ”‚   ) => {
2026-10-24T11:06:37.7969176Z  591 โ”‚     const { fileId } = event.nativeEvent;
2026-10-24T11:06:37.7969239Z  592 โ”‚     if (fileId) {
2026-10-24T11:06:37.7969314Z  593 โ”‚       toggleViewedFile(fileId);
2026-10-24T11:06:37.7969368Z  594 โ”‚     }
2026-10-24T11:06:37.7969422Z  595 โ”‚   };
2026-10-24T11:06:37.7969474Z  596 โ”‚
2026-10-24T11:06:37.7969552Z  597 โ”‚   const parsedDiffNotice =
2026-10-24T11:06:37.7969717Z  598 โ”‚     parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
2026-10-24T11:06:37.7969839Z  599 โ”‚   const hasCachedSelectedDiff = selectedSection?.diff != null;
2026-10-24T11:06:37.7969996Z  600 โ”‚   const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
2026-10-24T11:06:37.7970115Z  601 โ”‚   const sectionMenu = buildReviewSectionMenu(reviewSections);
2026-10-24T11:06:37.7970274Z  602 โ”‚   const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
2026-10-24T11:06:37.7970384Z  603 โ”‚     hasEnvironmentPresentation: environment.isReady,
2026-10-24T11:06:37.7970484Z  604 โ”‚     isEnvironmentConnected: isEnvironmentReady,
2026-10-24T11:06:37.7970554Z  605 โ”‚     hasCachedSelectedDiff,
2026-10-24T11:06:37.7970621Z  606 โ”‚     hasAnyCachedDiff,
2026-10-24T11:06:37.7970676Z  607 โ”‚   });
2026-10-24T11:06:37.7970818Z  608 โ”‚   const handleRetryEnvironment = () => {
2026-10-24T11:06:37.7970942Z  609 โ”‚     void retryEnvironment(environmentId);
2026-10-24T11:06:37.7970996Z  610 โ”‚   };
2026-10-24T11:06:37.7971080Z  611 โ”‚   const handleReturnToThread = () => {
2026-10-24T11:06:37.7971159Z  612 โ”‚     if (navigation.canGoBack()) {
2026-10-24T11:06:37.7971228Z  613 โ”‚       navigation.goBack();
2026-10-24T11:06:37.7971290Z  614 โ”‚       return;
2026-10-24T11:06:37.7971344Z  615 โ”‚     }
2026-10-24T11:06:37.7971424Z  616 โ”‚     navigation.navigate("Thread", {
2026-10-24T11:06:37.7971514Z  617 โ”‚       environmentId: String(environmentId),
2026-10-24T11:06:37.7971591Z  618 โ”‚       threadId: String(threadId),
2026-10-24T11:06:37.7971647Z  619 โ”‚     });
2026-10-24T11:06:37.7971699Z  620 โ”‚   };
2026-10-24T11:06:37.7971778Z  621 โ”‚   const androidHeaderSubtitle = [
2026-10-24T11:06:37.7971856Z  622 โ”‚     selectedSection?.title,
2026-10-24T11:06:37.7971938Z  623 โ”‚     headerDiffSummary.additions,
2026-10-24T11:06:37.7972016Z  624 โ”‚     headerDiffSummary.deletions,
2026-10-24T11:06:37.7972070Z  625 โ”‚   ]
2026-10-24T11:06:37.7972176Z  626 โ”‚     .filter((part): part is string => Boolean(part))
2026-10-24T11:06:37.7972239Z  627 โ”‚     .join(" ยท ");
2026-10-24T11:06:37.7972291Z  628 โ”‚
2026-10-24T11:06:37.7972369Z  629 โ”‚   const showChangedFilesPane =
2026-10-24T11:06:37.7972442Z  630 โ”‚     !showConnectionNotice &&
2026-10-24T11:06:37.7972517Z  631 โ”‚     selectedSection !== null &&
2026-10-24T11:06:37.7972596Z  632 โ”‚     parsedDiff.kind === "files" &&
2026-10-24T11:06:37.7972675Z  633 โ”‚     NativeReviewDiffView !== null;
2026-10-24T11:06:37.7972847Z  634 โ”‚   useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
2026-10-24T11:06:37.7973023Z  635 โ”‚   const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
2026-10-24T11:06:37.7973080Z  636 โ”‚
2026-10-24T11:06:37.7973153Z  637 โ”‚   const listHeader = (() => {
2026-10-24T11:06:37.7973238Z  638 โ”‚     const children: ReactElement[] = [];
2026-10-24T11:06:37.7973290Z  639 โ”‚
2026-10-24T11:06:37.7973353Z  640 โ”‚     if (error) {
2026-10-24T11:06:37.7973421Z  641 โ”‚       children.push(
2026-10-24T11:06:37.7973482Z  642 โ”‚         <View
2026-10-24T11:06:37.7973552Z  643 โ”‚           key="review-error"
2026-10-24T11:06:37.7973619Z  644 โ”‚           className={cn(
2026-10-24T11:06:37.7973697Z  645 โ”‚             "bg-card px-4 py-3",
2026-10-24T11:06:37.7973851Z  646 โ”‚             Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
2026-10-24T11:06:37.7973910Z  647 โ”‚           )}
2026-10-24T11:06:37.7973968Z  648 โ”‚         >
2026-10-24T11:06:37.7974137Z  649 โ”‚           <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
2026-10-24T11:06:37.7974298Z  650 โ”‚           <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
2026-10-24T11:06:37.7974358Z  651 โ”‚         </View>,
2026-10-24T11:06:37.7974415Z  652 โ”‚       );
2026-10-24T11:06:37.7974469Z  653 โ”‚     }
2026-10-24T11:06:37.7974520Z  654 โ”‚
2026-10-24T11:06:37.7974591Z  655 โ”‚     if (parsedDiffNotice) {
2026-10-24T11:06:37.7974752Z  656 โ”‚       children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
2026-10-24T11:06:37.7974806Z  657 โ”‚     }
2026-10-24T11:06:37.7974857Z  658 โ”‚
2026-10-24T11:06:37.7974934Z  659 โ”‚     if (children.length === 0) {
2026-10-24T11:06:37.7974998Z  660 โ”‚       return null;
2026-10-24T11:06:37.7975052Z  661 โ”‚     }
2026-10-24T11:06:37.7975103Z  662 โ”‚
2026-10-24T11:06:37.7975175Z  663 โ”‚     return <>{children}</>;
2026-10-24T11:06:37.7975292Z  664 โ”‚   })();
2026-10-24T11:06:37.7975422Z  665 โ”‚   const headerSubtitle = [
2026-10-24T11:06:37.7975501Z  666 โ”‚     headerDiffSummary.additions,
2026-10-24T11:06:37.7975578Z  667 โ”‚     headerDiffSummary.deletions,
2026-10-24T11:06:37.7975659Z  668 โ”‚     pendingReviewCommentCount > 0
2026-10-24T11:06:37.7975833Z  669 โ”‚       ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
2026-10-24T11:06:37.7975893Z  670 โ”‚       : null,
2026-10-24T11:06:37.7975947Z  671 โ”‚   ]
2026-10-24T11:06:37.7976012Z  672 โ”‚     .filter(Boolean)
2026-10-24T11:06:37.7976075Z  673 โ”‚     .join(" ยท ");
2026-10-24T11:06:37.7976210Z  674 โ”‚   const headerTitleText = selectedSection?.title ?? "Review changes";
2026-10-24T11:06:37.7976262Z  675 โ”‚
2026-10-24T11:06:37.7976321Z  676 โ”‚   return (
2026-10-24T11:06:37.7976376Z  677 โ”‚     <>
2026-10-24T11:06:37.7976441Z  678 โ”‚       <ReviewHeader
2026-10-24T11:06:37.7976531Z  679 โ”‚         environmentId={environmentId}
2026-10-24T11:06:37.7976605Z  680 โ”‚         threadId={threadId}
2026-10-24T11:06:37.7976679Z  681 โ”‚         title={headerTitleText}
2026-10-24T11:06:37.7976756Z  682 โ”‚         subtitle={headerSubtitle}
2026-10-24T11:06:37.7976854Z  683 โ”‚         androidSubtitle={androidHeaderSubtitle}
2026-10-24T11:06:37.7976927Z  684 โ”‚         iconColor={headerIcon}
2026-10-24T11:06:37.7977021Z  685 โ”‚         selectedThreadCwd={selectedThreadCwd}
2026-10-24T11:06:37.7977097Z  686 โ”‚         sectionMenu={sectionMenu}
2026-10-24T11:06:37.7977184Z  687 โ”‚         selectedSection={selectedSection}
2026-10-24T11:06:37.7977281Z  688 โ”‚         showSectionToolbar={showSectionToolbar}
2026-10-24T11:06:37.7977391Z  689 โ”‚         showChangedFilesToggle={showChangedFilesToggle}
2026-10-24T11:06:37.7977477Z  690 โ”‚         onRefresh={handlePullToRefresh}
2026-10-24T11:06:37.7977565Z  691 โ”‚         onSelectSection={selectSection}
2026-10-24T11:06:37.7977665Z  692 โ”‚         onReturnToThread={handleReturnToThread}
2026-10-24T11:06:37.7977720Z  693 โ”‚       />
2026-10-24T11:06:37.7977773Z  694 โ”‚
2026-10-24T11:06:37.7977839Z  695 โ”‚       <ScreenContent>
2026-10-24T11:06:37.7977961Z  696 โ”‚         <View className="flex-1 bg-sheet android:bg-sheet-solid">
2026-10-24T11:06:37.7978041Z  697 โ”‚           {showConnectionNotice ? (
2026-10-24T11:06:37.7978180Z  698 โ”‚             <View className="flex-1" style={{ paddingTop: topContentInset }}>
2026-10-24T11:06:37.7978270Z  699 โ”‚               <EnvironmentConnectionNotice
2026-10-24T11:06:37.7978472Z  700 โ”‚                 environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
2026-10-24T11:06:37.7978542Z  701 โ”‚                 connection={
2026-10-24T11:06:37.7978649Z  702 โ”‚                   environment.presentation?.connection ?? {
2026-10-24T11:06:37.7978738Z  703 โ”‚                     phase: "available",
2026-10-24T11:06:37.7978814Z  704 โ”‚                     error: null,
2026-10-24T11:06:37.7978889Z  705 โ”‚                     traceId: null,
2026-10-24T11:06:37.7978953Z  706 โ”‚                   }
2026-10-24T11:06:37.7979015Z  707 โ”‚                 }
2026-10-24T11:06:37.7979095Z  708 โ”‚                 resourceName="review"
2026-10-24T11:06:37.7979193Z  709 โ”‚                 onRetry={handleRetryEnvironment}
2026-10-24T11:06:37.7979254Z  710 โ”‚               />
2026-10-24T11:06:37.7979317Z  711 โ”‚             </View>
2026-10-24T11:06:37.7979473Z  712 โ”‚           ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
2026-10-24T11:06:37.7979535Z  713 โ”‚             <View
2026-10-24T11:06:37.7979610Z  714 โ”‚               className="flex-1"
2026-10-24T11:06:37.7979676Z  715 โ”‚               style={{
2026-10-24T11:06:37.7979853Z  716 โ”‚                 backgroundColor: nativeBridge.theme.background,
2026-10-24T11:06:37.7979947Z  717 โ”‚               }}
2026-10-24T11:06:37.7980007Z  718 โ”‚             >
2026-10-24T11:06:37.7980069Z  719 โ”‚               <View
2026-10-24T11:06:37.7980156Z  720 โ”‚                 className="min-w-0 flex-1"
2026-10-24T11:06:37.7980295Z  721 โ”‚                 style={listHeader ? { paddingTop: topContentInset } : undefined}
2026-10-24T11:06:37.7980356Z  722 โ”‚               >
2026-10-24T11:06:37.7980425Z  723 โ”‚                 {listHeader}
2026-10-24T11:06:37.7980544Z  724 โ”‚                 <View className="min-w-0 flex-1" collapsable={false}>
2026-10-24T11:06:37.7980627Z  725 โ”‚                   <NativeReviewDiffView
2026-10-24T11:06:37.7980734Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7980911Z      ยท                              โ•ฐโ”€โ”€ This component is created during render
2026-10-24T11:06:37.7980996Z  726 โ”‚                     collapsable={false}
2026-10-24T11:06:37.7981049Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7981300Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-24T11:06:37.7981622Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T11:06:37.7981625Z
2026-10-24T11:06:37.7981886Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7982029Z      โ•ญโ”€[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-24T11:06:37.7982083Z  150 โ”‚
2026-10-24T11:06:37.7982148Z  151 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7982226Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7982361Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7982445Z  152 โ”‚     if (!controlledSelectedPath) {
2026-10-24T11:06:37.7982506Z  153 โ”‚       return;
2026-10-24T11:06:37.7982559Z  154 โ”‚     }
2026-10-24T11:06:37.7982642Z  155 โ”‚     setExpandedPaths((current) => {
2026-10-24T11:06:37.7982723Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7982895Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7983017Z  156 โ”‚       const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-24T11:06:37.7983070Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7983786Z   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-24T11:06:37.7984115Z   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-24T11:06:37.7984118Z
2026-10-24T11:06:37.7984323Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7984470Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-24T11:06:37.7984568Z  256 โ”‚     return () => cancelAnimationFrame(frame);
2026-10-24T11:06:37.7984647Z  257 โ”‚   }, [props.path, targetIndex]);
2026-10-24T11:06:37.7984723Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7984945Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `props.path`
2026-10-24T11:06:37.7985040Z  258 โ”‚
2026-10-24T11:06:37.7985093Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7985390Z   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-24T11:06:37.7985703Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7985707Z
2026-10-24T11:06:37.7985901Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:06:37.7986051Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-24T11:06:37.7986124Z  292 โ”‚                     <SourceText
2026-10-24T11:06:37.7986229Z  293 โ”‚                       key={`${index}:${tokenIndex}`}
2026-10-24T11:06:37.7986352Z      ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7986424Z  294 โ”‚                       style={{
2026-10-24T11:06:37.7986477Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7986626Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:06:37.7986628Z
2026-10-24T11:06:37.7986821Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:06:37.7986969Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-24T11:06:37.7987034Z  308 โ”‚             return (
2026-10-24T11:06:37.7987119Z  309 โ”‚               <SourceText key={index}>
2026-10-24T11:06:37.7987220Z      ยท                           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7987286Z  310 โ”‚                 {body}
2026-10-24T11:06:37.7987338Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7987491Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:06:37.7987497Z
2026-10-24T11:06:37.7987683Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-24T11:06:37.7987801Z    โ•ญโ”€[apps/mobile/src/lib/useHoverGesture.ts:8:15]
2026-10-24T11:06:37.7987859Z  7 โ”‚     () =>
2026-10-24T11:06:37.7987925Z  8 โ”‚       Gesture.Hover()
2026-10-24T11:06:37.7988001Z    ยท               โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:06:37.7988136Z    ยท                 โ•ฐโ”€โ”€ `Hover` may be a component
2026-10-24T11:06:37.7988211Z  9 โ”‚         .manualActivation(true)
2026-10-24T11:06:37.7988264Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7988582Z   help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
2026-10-24T11:06:37.7989037Z   note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-24T11:06:37.7989040Z
2026-10-24T11:06:37.7989299Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7989489Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
2026-10-24T11:06:37.7989542Z  104 โ”‚
2026-10-24T11:06:37.7989606Z  105 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7989680Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7989810Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7989942Z  106 โ”‚     clearReviewCommentTarget();
2026-10-24T11:06:37.7990075Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-24T11:06:37.7990181Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7990360Z      ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7990433Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-24T11:06:37.7990485Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7991092Z   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-24T11:06:37.7991423Z   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-24T11:06:37.7991429Z
2026-10-24T11:06:37.7991686Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.7991874Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
2026-10-24T11:06:37.7991927Z  109 โ”‚
2026-10-24T11:06:37.7991992Z  110 โ”‚   useEffect(() => {
2026-10-24T11:06:37.7992065Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7992193Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.7992281Z  111 โ”‚     if (activeCommentTarget === null) {
2026-10-24T11:06:37.7992382Z  112 โ”‚       setPendingNativeCommentSelection(null);
2026-10-24T11:06:37.7992490Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7992674Z      ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.7992734Z  113 โ”‚     }
2026-10-24T11:06:37.7992786Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7993395Z   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-24T11:06:37.7993719Z   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-24T11:06:37.7993721Z
2026-10-24T11:06:37.7993922Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.7994161Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
2026-10-24T11:06:37.7994292Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-24T11:06:37.7994365Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-24T11:06:37.7994452Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7994615Z      ยท                โ•ฐโ”€โ”€ Unnecessary dependency `selectedSection?.id`
2026-10-24T11:06:37.7994668Z  109 โ”‚
2026-10-24T11:06:37.7994720Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7995014Z   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-24T11:06:37.7995328Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.7995336Z
2026-10-24T11:06:37.7995533Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:06:37.7995684Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
2026-10-24T11:06:37.7995792Z  222 โ”‚               ? snippetTokens.map((line, lineIndex) => (
2026-10-24T11:06:37.7995886Z  223 โ”‚                   <NativeText key={lineIndex}>
2026-10-24T11:06:37.7995996Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7996088Z  224 โ”‚                     {lineIndex > 0 ? "\n" : ""}
2026-10-24T11:06:37.7996141Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7996286Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:06:37.7996289Z
2026-10-24T11:06:37.7996491Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:06:37.7996645Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25]
2026-10-24T11:06:37.7996722Z  226 โ”‚                       <NativeText
2026-10-24T11:06:37.7996805Z  227 โ”‚                         key={tokenIndex}
2026-10-24T11:06:37.7996909Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7996983Z  228 โ”‚                         style={{
2026-10-24T11:06:37.7997036Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7997178Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:06:37.7997180Z
2026-10-24T11:06:37.7997393Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T11:06:37.7997517Z      โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:259:28]
2026-10-24T11:06:37.7997617Z  258 โ”‚   visit(parser.parse(markdown), false, false);
2026-10-24T11:06:37.7997707Z  259 โ”‚   for (const edit of edits.reverse())
2026-10-24T11:06:37.7997805Z      ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7997969Z  260 โ”‚     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T11:06:37.7998022Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7998321Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T11:06:37.7998325Z
2026-10-24T11:06:37.7998535Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T11:06:37.7998659Z      โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:290:28]
2026-10-24T11:06:37.7998739Z  289 โ”‚   visit(parser.parse(markdown));
2026-10-24T11:06:37.7998824Z  290 โ”‚   for (const edit of edits.reverse())
2026-10-24T11:06:37.7998977Z      ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7999174Z  291 โ”‚     markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end);
2026-10-24T11:06:37.7999226Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.7999485Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T11:06:37.7999488Z
2026-10-24T11:06:37.7999696Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T11:06:37.7999817Z      โ•ญโ”€[apps/mobile/src/lib/markdownDocument.ts:344:38]
2026-10-24T11:06:37.7999896Z  343 โ”‚   visit(parser.parse(markdown));
2026-10-24T11:06:37.8000002Z  344 โ”‚   for (const lineStart of lineStarts.reverse()) {
2026-10-24T11:06:37.8000106Z      ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8000277Z  345 โ”‚     // The header row may be a lazy line without its container markers (`>` or list indent),
2026-10-24T11:06:37.8000332Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8000593Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T11:06:37.8000596Z
2026-10-24T11:06:37.8000854Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.8001029Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5]
2026-10-24T11:06:37.8001084Z  55 โ”‚
2026-10-24T11:06:37.8001150Z  56 โ”‚   useEffect(() => {
2026-10-24T11:06:37.8001223Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8001352Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.8001425Z  57 โ”‚     scheduler.reset();
2026-10-24T11:06:37.8001530Z  58 โ”‚     highlightedRowIdsRef.current = new Set();
2026-10-24T11:06:37.8001616Z  59 โ”‚     visibleChunkIndexRef.current = 0;
2026-10-24T11:06:37.8001734Z  60 โ”‚     setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 });
2026-10-24T11:06:37.8001814Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8001985Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.8002098Z  61 โ”‚     setTokensPatchJson(createEmptyTokenPatch(resetKey));
2026-10-24T11:06:37.8002151Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8002765Z   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-24T11:06:37.8003091Z   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-24T11:06:37.8003094Z
2026-10-24T11:06:37.8003297Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:06:37.8003473Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7]
2026-10-24T11:06:37.8003556Z  62 โ”‚     return () => scheduler.cancel();
2026-10-24T11:06:37.8003657Z  63 โ”‚   }, [enabled, resetKey, rows.length, scheduler]);
2026-10-24T11:06:37.8003785Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8004032Z     ยท          โ”‚                    โ•ฐโ”€โ”€ Unnecessary dependency `rows.length`
2026-10-24T11:06:37.8004205Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `enabled`
2026-10-24T11:06:37.8004259Z  64 โ”‚
2026-10-24T11:06:37.8004313Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8004607Z   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-24T11:06:37.8004919Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-24T11:06:37.8004922Z
2026-10-24T11:06:37.8005182Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:06:37.8005352Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7]
2026-10-24T11:06:37.8005411Z  100 โ”‚
2026-10-24T11:06:37.8005478Z  101 โ”‚   useEffect(() => {
2026-10-24T11:06:37.8005550Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8005681Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:06:37.8005784Z  102 โ”‚     if (!target || selectedLines.length === 0) {
2026-10-24T11:06:37.8005867Z  103 โ”‚       setHighlightedLinesById({});
2026-10-24T11:06:37.8005960Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8006136Z      ยท                  โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:06:37.8006199Z  104 โ”‚       return;
2026-10-24T11:06:37.8006250Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8006863Z   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-24T11:06:37.8007190Z   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-24T11:06:37.8007192Z
2026-10-24T11:06:37.8007403Z   โš  eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used.
2026-10-24T11:06:37.8007507Z     โ•ญโ”€[infra/relay/src/http/Api.ts:69:13]
2026-10-24T11:06:37.8007649Z  68 โ”‚ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts";
2026-10-24T11:06:37.8007766Z  69 โ”‚ import * as HookForwarder from "../hooks/HookForwarder.ts";
2026-10-24T11:06:37.8007853Z     ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8008003Z     ยท                   โ•ฐโ”€โ”€ 'HookForwarder' is imported here
2026-10-24T11:06:37.8008108Z  70 โ”‚ import * as HeldHooks from "../hooks/HeldHooks.ts";
2026-10-24T11:06:37.8008161Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:06:37.8008259Z   help: Consider removing this import.
2026-10-24T11:06:37.8008261Z
2026-10-24T11:06:37.8008381Z Found 0 errors and 367 warnings in 5430 files (5.2s, 8 threads)
2026-10-24T11:06:37.8477764Z Post job cleanup.
2026-10-24T11:06:37.9128685Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-24T11:06:37.9205322Z Post job cleanup.
2026-10-24T11:06:37.9218920Z ##[start-action display=Cache full pnpm store;id=__73693574-1795-4b11-8fc9-9394aed66614.__actions_cache]
2026-10-24T11:06:37.9721208Z Post job cleanup.
2026-10-24T11:06:38.0370305Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d, not saving cache.
2026-10-24T11:06:38.0410846Z ##[end-action id=__73693574-1795-4b11-8fc9-9394aed66614.__actions_cache;outcome=success;conclusion=success;duration_ms=119]
2026-10-24T11:06:38.0412667Z ##[start-action display=Cache Vite+;id=__73693574-1795-4b11-8fc9-9394aed66614.vp_cache]
2026-10-24T11:06:38.0440410Z Post job cleanup.
2026-10-24T11:06:38.1075850Z 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-24T11:06:38.1111209Z ##[end-action id=__73693574-1795-4b11-8fc9-9394aed66614.vp_cache;outcome=success;conclusion=success;duration_ms=69]
2026-10-24T11:06:38.1155288Z Post job cleanup.
2026-10-24T11:06:38.1621102Z [command]/usr/local/bin/git version
2026-10-24T11:06:38.1651110Z git version 2.55.0
2026-10-24T11:06:38.1671199Z Temporarily overriding HOME='/home/runner/_work/_temp/81b43f6e-e4e1-49b0-9348-2813b2fdd40f' before making global git config changes
2026-10-24T11:06:38.1671826Z Adding repository directory to the temporary git global config as a safe directory
2026-10-24T11:06:38.1674888Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-24T11:06:38.1705415Z Removing SSH command configuration
2026-10-24T11:06:38.1708952Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-24T11:06:38.1735207Z [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-24T11:06:38.1862920Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-24T11:06:38.1916032Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-24T11:06:38.1959985Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-24T11:06:38.1983032Z ##[group]Run '/job_completed.sh'
2026-10-24T11:06:38.1994905Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-24T11:06:38.1995094Z env:
2026-10-24T11:06:38.1995215Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152
2026-10-24T11:06:38.1995368Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 359
2026-10-24T11:06:38.1995511Z   BLACKSMITH_CHECK_RUN_ID: 120856234521
2026-10-24T11:06:38.1995659Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-24T11:06:38.1995803Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-24T11:06:38.1995943Z ##[endgroup]
2026-10-24T11:06:38.2079958Z Docker container cache not activated, skipping hash computation.
2026-10-24T11:06:38.2393159Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-24T11:06:38.2437033Z Cleaning up orphan processes