GitHub check

256 KB of 604 KB loaded Download the full log (604 KB)
348 KB of earlier output not loaded
44;191;117;1mreact(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-24T11:42:05.6426543Z       โ•ญโ”€[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36]
2026-10-24T11:42:05.6426674Z  1243 โ”‚     <ActiveNewTaskContext value={activeNewTask}>
2026-10-24T11:42:05.6426903Z  1244 โ”‚       <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
2026-10-24T11:42:05.6427053Z       ยท                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6427184Z  1245 โ”‚     </ActiveNewTaskContext>
2026-10-24T11:42:05.6427258Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6427520Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-24T11:42:05.6427694Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-24T11:42:05.6427697Z
2026-10-24T11:42:05.6428028Z   โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T11:42:05.6428198Z      โ•ญโ”€[packages/shared/src/serverSettings.ts:346:9]
2026-10-24T11:42:05.6428319Z  345 โ”‚       const entry: ProjectSettingsOverrides = {
2026-10-24T11:42:05.6428488Z  346 โ”‚         ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}),
2026-10-24T11:42:05.6428668Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6428784Z  347 โ”‚       };
2026-10-24T11:42:05.6428853Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6429157Z   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:42:05.6429160Z
2026-10-24T11:42:05.6429415Z   โš  oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce()
2026-10-24T11:42:05.6429643Z      โ•ญโ”€[packages/shared/src/serverSettings.ts:448:24]
2026-10-24T11:42:05.6429787Z  447 โ”‚   const favorites =
2026-10-24T11:42:05.6429912Z  448 โ”‚     setModelFavorites?.reduce((current, change) => {
2026-10-24T11:42:05.6430037Z      ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:42:05.6430195Z      ยท                           โ•ฐโ”€โ”€ For this reduce
2026-10-24T11:42:05.6430328Z  449 โ”‚       const exists = current.some(
2026-10-24T11:42:05.6430519Z  450 โ”‚         (favorite) => favorite.provider === change.provider && favorite.model === change.model,
2026-10-24T11:42:05.6430670Z  451 โ”‚       );
2026-10-24T11:42:05.6430781Z  452 โ”‚       return change.favorite
2026-10-24T11:42:05.6430882Z  453 โ”‚         ? exists
2026-10-24T11:42:05.6430971Z  454 โ”‚           ? current
2026-10-24T11:42:05.6431167Z  455 โ”‚           : [...current, { provider: change.provider, model: change.model }]
2026-10-24T11:42:05.6431298Z      ยท              โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6431449Z      ยท                   โ•ฐโ”€โ”€ From this spread
2026-10-24T11:42:05.6431546Z  456 โ”‚         : current.filter(
2026-10-24T11:42:05.6431641Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6431881Z   help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead.
2026-10-24T11:42:05.6432084Z   note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-24T11:42:05.6432087Z
2026-10-24T11:42:05.6432285Z   โš  oxc(no-accumulating-spread): Do not spread accumulators in loops
2026-10-24T11:42:05.6432455Z      โ•ญโ”€[packages/shared/src/serverSettings.ts:466:3]
2026-10-24T11:42:05.6432549Z  464 โ”‚     null;
2026-10-24T11:42:05.6432706Z  465 โ”‚   let nextModelPreferences = initialModelPreferences;
2026-10-24T11:42:05.6432816Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6432983Z      ยท                 โ•ฐโ”€โ”€ From this accumulator
2026-10-24T11:42:05.6433129Z  466 โ”‚   for (const change of setModelsHidden ?? []) {
2026-10-24T11:42:05.6433306Z      ยท   โ”€โ”ฌโ”€
2026-10-24T11:42:05.6433430Z      ยท    โ•ฐโ”€โ”€ For this loop
2026-10-24T11:42:05.6433592Z  467 โ”‚     const preferences = nextModelPreferences?.[change.provider] ?? {
2026-10-24T11:42:05.6433714Z  468 โ”‚       hiddenModels: [],
2026-10-24T11:42:05.6433823Z  469 โ”‚       modelOrder: [],
2026-10-24T11:42:05.6433894Z  470 โ”‚     };
2026-10-24T11:42:05.6434111Z  471 โ”‚     const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model);
2026-10-24T11:42:05.6434257Z  472 โ”‚     if (change.hidden) hiddenModels.push(change.model);
2026-10-24T11:42:05.6434380Z  473 โ”‚     nextModelPreferences = {
2026-10-24T11:42:05.6434481Z  474 โ”‚       ...nextModelPreferences,
2026-10-24T11:42:05.6434614Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6434766Z      ยท                  โ•ฐโ”€โ”€ From this spread
2026-10-24T11:42:05.6434930Z  475 โ”‚       [change.provider]: { ...preferences, hiddenModels },
2026-10-24T11:42:05.6435004Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6435197Z   help: Consider using `Object.assign()` to mutate the accumulator instead.
2026-10-24T11:42:05.6435386Z   note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-24T11:42:05.6435389Z
2026-10-24T11:42:05.6435594Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6435799Z      โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:698:76]
2026-10-24T11:42:05.6436117Z  697 โ”‚   const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() }));
2026-10-24T11:42:05.6436362Z  698 โ”‚   if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() });
2026-10-24T11:42:05.6436528Z      ยท                                                                            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6436778Z      ยท                                                                                 โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6436929Z  699 โ”‚   const snoozeGateNow = new Date(snoozeGateClock.now).toISOString();
2026-10-24T11:42:05.6437019Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6437342Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6437700Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6437707Z
2026-10-24T11:42:05.6437914Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6438089Z      โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:71]
2026-10-24T11:42:05.6438208Z  718 โ”‚   const snoozePresets = useMemo(
2026-10-24T11:42:05.6438416Z  719 โ”‚     () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-24T11:42:05.6438602Z      ยท                                                                       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6438821Z      ยท                                                                            โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6438958Z  720 โ”‚     [props.snoozePresetMinute, swipeActions.secondary],
2026-10-24T11:42:05.6439055Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6439371Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6439775Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6439779Z
2026-10-24T11:42:05.6439977Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T11:42:05.6440172Z      โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:6]
2026-10-24T11:42:05.6440375Z  719 โ”‚     () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-24T11:42:05.6440598Z  720 โ”‚     [props.snoozePresetMinute, swipeActions.secondary],
2026-10-24T11:42:05.6440769Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6440965Z      ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `props.snoozePresetMinute`
2026-10-24T11:42:05.6441073Z  721 โ”‚   );
2026-10-24T11:42:05.6441376Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6441747Z   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:42:05.6442078Z   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:42:05.6442081Z
2026-10-24T11:42:05.6442300Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-24T11:42:05.6442493Z      โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:766:7]
2026-10-24T11:42:05.6442621Z  765 โ”‚       thread.pinnedAt,
2026-10-24T11:42:05.6442704Z  766 โ”‚       variant,
2026-10-24T11:42:05.6442815Z      ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6443048Z      ยท          โ•ฐโ”€โ”€ Unnecessary dependency `variant`
2026-10-24T11:42:05.6443140Z  767 โ”‚     ],
2026-10-24T11:42:05.6443223Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6443571Z   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:42:05.6443921Z   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:42:05.6443924Z
2026-10-24T11:42:05.6444154Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:42:05.6444374Z       โ•ญโ”€[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21]
2026-10-24T11:42:05.6444522Z  1215 โ”‚             {providerDrivers.slice(0, -1).map((driver, index) => (
2026-10-24T11:42:05.6444691Z  1216 โ”‚               <View key={`${driver}:${index}`} className="-mr-1 opacity-30">
2026-10-24T11:42:05.6444841Z       ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6444986Z  1217 โ”‚                 <ProviderIcon provider={driver} size={12} />
2026-10-24T11:42:05.6445070Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6445255Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:42:05.6445258Z
2026-10-24T11:42:05.6445563Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6445750Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:568:5]
2026-10-24T11:42:05.6445867Z  566 โ”‚   }, []);
2026-10-24T11:42:05.6445951Z  567 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6446057Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6446282Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6446408Z  568 โ”‚     setKeyboardStateSuspect(false);
2026-10-24T11:42:05.6446524Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6446736Z      ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6446870Z  569 โ”‚   }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-24T11:42:05.6446954Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6447661Z   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:42:05.6448070Z   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:42:05.6448073Z
2026-10-24T11:42:05.6448370Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6448559Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:966:7]
2026-10-24T11:42:05.6448753Z  963 โ”‚   const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
2026-10-24T11:42:05.6448846Z  964 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6448959Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6449134Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6449320Z  965 โ”‚     if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
2026-10-24T11:42:05.6449459Z  966 โ”‚       setLastKnownKeyboardHeight(liveKeyboardHeight);
2026-10-24T11:42:05.6449605Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6449883Z      ยท                    โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6449973Z  967 โ”‚     }
2026-10-24T11:42:05.6450033Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6450698Z   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:42:05.6451082Z   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:42:05.6451086Z
2026-10-24T11:42:05.6451380Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6451562Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1213:5]
2026-10-24T11:42:05.6451665Z  1211 โ”‚
2026-10-24T11:42:05.6451753Z  1212 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6451861Z       ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6452030Z       ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6452149Z  1213 โ”‚     setAnchorMessageId(null);
2026-10-24T11:42:05.6452262Z       ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6452473Z       ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6452591Z  1214 โ”‚     setSubmittedMessageId(null);
2026-10-24T11:42:05.6452671Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6453300Z   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:42:05.6453670Z   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:42:05.6453673Z
2026-10-24T11:42:05.6454040Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6454260Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:569:7]
2026-10-24T11:42:05.6458390Z  568 โ”‚     setKeyboardStateSuspect(false);
2026-10-24T11:42:05.6458511Z  569 โ”‚   }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-24T11:42:05.6458659Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6458872Z      ยท               โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `liveKeyboardHeight`
2026-10-24T11:42:05.6459032Z      ยท               โ•ฐโ”€โ”€ Unnecessary dependency `isKeyboardVisible`
2026-10-24T11:42:05.6459160Z  570 โ”‚   const handleOwnedInputFocusChange = (focused: boolean) => {
2026-10-24T11:42:05.6459225Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6459531Z   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:42:05.6459845Z   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:42:05.6459848Z
2026-10-24T11:42:05.6460055Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6460214Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1161:7]
2026-10-24T11:42:05.6460305Z  1160 โ”‚     userInputInsetProgress.set(1);
2026-10-24T11:42:05.6460467Z  1161 โ”‚   }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
2026-10-24T11:42:05.6460573Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6460760Z       ยท                   โ•ฐโ”€โ”€ Unnecessary dependency `activeUserInputRequestId`
2026-10-24T11:42:05.6460868Z  1162 โ”‚   const showContent = props.showContent ?? true;
2026-10-24T11:42:05.6460921Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6461264Z   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:42:05.6461577Z   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:42:05.6461580Z
2026-10-24T11:42:05.6461784Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6461945Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1219:15]
2026-10-24T11:42:05.6462021Z  1218 โ”‚     freeze.set(false);
2026-10-24T11:42:05.6462104Z  1219 โ”‚   }, [freeze, selectedThreadKey]);
2026-10-24T11:42:05.6462202Z       ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6462367Z       ยท                       โ•ฐโ”€โ”€ Unnecessary dependency `selectedThreadKey`
2026-10-24T11:42:05.6462424Z  1220 โ”‚
2026-10-24T11:42:05.6462478Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6462771Z   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:42:05.6463084Z   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:42:05.6463086Z
2026-10-24T11:42:05.6463328Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:42:05.6463516Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1049:5]
2026-10-24T11:42:05.6463630Z  1044 โ”‚   const composerPopoverHeight = useSharedValue(0);
2026-10-24T11:42:05.6463740Z  1045 โ”‚   const floatingControlCoverage = useSharedValue(
2026-10-24T11:42:05.6463836Z       ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6464002Z       ยท                    โ•ฐโ”€โ”€ `floatingControlCoverage` originates here
2026-10-24T11:42:05.6464134Z  1046 โ”‚     showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-24T11:42:05.6464192Z  1047 โ”‚   );
2026-10-24T11:42:05.6464258Z  1048 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6464365Z  1049 โ”‚     floatingControlCoverage.value = withTiming(
2026-10-24T11:42:05.6464458Z       ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6464633Z       ยท                โ•ฐโ”€โ”€ `floatingControlCoverage` cannot be modified
2026-10-24T11:42:05.6464767Z  1050 โ”‚       showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-24T11:42:05.6464821Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6465093Z   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:42:05.6465401Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:42:05.6465403Z
2026-10-24T11:42:05.6465563Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:42:05.6465715Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7]
2026-10-24T11:42:05.6465909Z  1057 โ”‚   const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
2026-10-24T11:42:05.6466040Z  1058 โ”‚   const combinedContentInsetEndAdjustment = useSharedValue(
2026-10-24T11:42:05.6466157Z       ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6466348Z       ยท                         โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` originates here
2026-10-24T11:42:05.6466481Z  1059 โ”‚     Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
2026-10-24T11:42:05.6466538Z  1060 โ”‚   );
2026-10-24T11:42:05.6466613Z  1061 โ”‚   useAnimatedReaction(
2026-10-24T11:42:05.6466674Z  1062 โ”‚     () =>
2026-10-24T11:42:05.6466769Z  1063 โ”‚       contentInsetEndAdjustment.value +
2026-10-24T11:42:05.6466859Z  1064 โ”‚       floatingControlCoverage.value +
2026-10-24T11:42:05.6467065Z  1065 โ”‚       (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
2026-10-24T11:42:05.6467134Z  1066 โ”‚     (value) => {
2026-10-24T11:42:05.6467251Z  1067 โ”‚       combinedContentInsetEndAdjustment.value = value;
2026-10-24T11:42:05.6467364Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6467558Z       ยท                       โ•ฐโ”€โ”€ `combinedContentInsetEndAdjustment` cannot be modified
2026-10-24T11:42:05.6467615Z  1068 โ”‚     },
2026-10-24T11:42:05.6467669Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6467938Z   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:42:05.6468247Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:42:05.6468250Z
2026-10-24T11:42:05.6468789Z   โš  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:42:05.6468953Z      โ•ญโ”€[packages/shared/src/atomicWrite.test.ts:139:5]
2026-10-24T11:42:05.6469032Z  138 โ”‚       Effect.gen(function* () {
2026-10-24T11:42:05.6469230Z  139 โ”‚ โ•ญโ”€โ–ถ     while (fiber.pollUnsafe() === undefined) {
2026-10-24T11:42:05.6469360Z  140 โ”‚ โ”‚         yield* TestClock.adjust("100 millis");
2026-10-24T11:42:05.6469685Z  141 โ”‚ โ”‚         // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock
2026-10-24T11:42:05.6469880Z  142 โ”‚ โ”‚         yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve)));
2026-10-24T11:42:05.6470018Z  143 โ”‚ โ•ฐโ”€โ–ถ     }
2026-10-24T11:42:05.6470106Z  144 โ”‚         return yield* Fiber.join(fiber);
2026-10-24T11:42:05.6470159Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6470161Z
2026-10-24T11:42:05.6470372Z   โš  eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used.
2026-10-24T11:42:05.6470524Z      โ•ญโ”€[packages/client-runtime/src/work-log/presentation.ts:237:10]
2026-10-24T11:42:05.6470579Z  236 โ”‚
2026-10-24T11:42:05.6470694Z  237 โ”‚ function nonEmptyString(value: unknown): string | null {
2026-10-24T11:42:05.6470781Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6470929Z      ยท                 โ•ฐโ”€โ”€ 'nonEmptyString' is declared here
2026-10-24T11:42:05.6471098Z  238 โ”‚   return typeof value === "string" && value.trim().length > 0 ? value : null;
2026-10-24T11:42:05.6471153Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6471262Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6471265Z
2026-10-24T11:42:05.6471527Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:42:05.6471693Z      โ•ญโ”€[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:410:7]
2026-10-24T11:42:05.6471747Z  409 โ”‚
2026-10-24T11:42:05.6471874Z  410 โ”‚ const layer = Layer.effect(ThreadPullRequestServiceV2, make);
2026-10-24T11:42:05.6471948Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:42:05.6472078Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T11:42:05.6472129Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6472295Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6472328Z
2026-10-24T11:42:05.6472590Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6472752Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:279:5]
2026-10-24T11:42:05.6472875Z  277 โ”‚   const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
2026-10-24T11:42:05.6472941Z  278 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6473015Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6473149Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6473236Z  279 โ”‚     setNow(new Date().toISOString());
2026-10-24T11:42:05.6473306Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:42:05.6473484Z      ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6473627Z  280 โ”‚     const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
2026-10-24T11:42:05.6473681Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6474288Z   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:42:05.6474615Z   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:42:05.6474617Z
2026-10-24T11:42:05.6474848Z   โš  eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used.
2026-10-24T11:42:05.6475015Z     โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:13:8]
2026-10-24T11:42:05.6475089Z  12 โ”‚   threadSearchMatchKey,
2026-10-24T11:42:05.6475175Z  13 โ”‚   type EnvironmentThreadSearchMatch,
2026-10-24T11:42:05.6475280Z     ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6475458Z     ยท                      โ•ฐโ”€โ”€ 'EnvironmentThreadSearchMatch' is imported here
2026-10-24T11:42:05.6475571Z  14 โ”‚ } from "@t3tools/client-runtime/state/thread-search";
2026-10-24T11:42:05.6475623Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6475723Z   help: Consider removing this import.
2026-10-24T11:42:05.6475726Z
2026-10-24T11:42:05.6475928Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6476099Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:359:25]
2026-10-24T11:42:05.6476236Z  358 โ”‚     // range) the boundary string is identical and the chain would die.
2026-10-24T11:42:05.6476328Z  359 โ”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-24T11:42:05.6476432Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6476599Z      ยท                                โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-24T11:42:05.6476713Z  360 โ”‚   const listItems = ((): readonly SidebarListItem[] => {
2026-10-24T11:42:05.6476766Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6477065Z   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:42:05.6477379Z   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:42:05.6477437Z
2026-10-24T11:42:05.6477644Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6477808Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:350:53]
2026-10-24T11:42:05.6477896Z  349 โ”‚     if (Number.isNaN(wakeAtMs)) return;
2026-10-24T11:42:05.6478056Z  350 โ”‚     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-24T11:42:05.6478178Z      ยท                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6478344Z      ยท                                                          โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6478425Z  351 โ”‚     const id = setTimeout(() => {
2026-10-24T11:42:05.6478478Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6478770Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6479071Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6479074Z
2026-10-24T11:42:05.6479304Z   โš  eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used.
2026-10-24T11:42:05.6479423Z     โ•ญโ”€[apps/server/src/checkpointing/Utils.ts:12:10]
2026-10-24T11:42:05.6479477Z  11 โ”‚
2026-10-24T11:42:05.6479575Z  12 โ”‚ function resolveThreadWorkspaceCwd(input: {
2026-10-24T11:42:05.6479677Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6479846Z     ยท                      โ•ฐโ”€โ”€ 'resolveThreadWorkspaceCwd' is declared here
2026-10-24T11:42:05.6479920Z  13 โ”‚   readonly thread: {
2026-10-24T11:42:05.6479975Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6480080Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6480083Z
2026-10-24T11:42:05.6480355Z   โš  eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:42:05.6480495Z      โ•ญโ”€[apps/server/src/orchestration-v2/EffectWorker.ts:914:7]
2026-10-24T11:42:05.6480550Z  913 โ”‚
2026-10-24T11:42:05.6480739Z  914 โ”‚ const layerDaemon: Layer.Layer<never, never, OrchestrationEffectWorkerV2> = Layer.effectDiscard(
2026-10-24T11:42:05.6480818Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6480958Z      ยท            โ•ฐโ”€โ”€ 'layerDaemon' is declared here
2026-10-24T11:42:05.6481063Z  915 โ”‚   runDaemon.pipe(Effect.forkScoped),
2026-10-24T11:42:05.6481171Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6481286Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6481293Z
2026-10-24T11:42:05.6481557Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6481710Z     โ•ญโ”€[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
2026-10-24T11:42:05.6481872Z  28 โ”‚   const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
2026-10-24T11:42:05.6481940Z  29 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6482013Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6482144Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6482269Z  30 โ”‚     if (snapshot && snapshot !== live) setHeld({ key, snapshot });
2026-10-24T11:42:05.6482459Z     ยท                                        โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6482697Z     ยท                                           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6482773Z  31 โ”‚   }, [key, live, snapshot]);
2026-10-24T11:42:05.6482825Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6483431Z   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:42:05.6483761Z   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:42:05.6483763Z
2026-10-24T11:42:05.6483975Z   โš  eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining
2026-10-24T11:42:05.6484148Z       โ•ญโ”€[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8]
2026-10-24T11:42:05.6484214Z  1782 โ”‚     assert.equal(
2026-10-24T11:42:05.6484363Z  1783 โ”‚       (stored.context?.records[0] as { attachmentId: string }).attachmentId,
2026-10-24T11:42:05.6484468Z       ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6484550Z  1784 โ”‚       stored.attachments[0]?.id,
2026-10-24T11:42:05.6484603Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6484778Z   help: If this short-circuits with 'undefined' the evaluation will throw TypeError
2026-10-24T11:42:05.6484781Z
2026-10-24T11:42:05.6485010Z   โš  unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T11:42:05.6485163Z      โ•ญโ”€[packages/client-runtime/src/operations/projects.ts:238:51]
2026-10-24T11:42:05.6485229Z  237 โ”‚ ): string {
2026-10-24T11:42:05.6485387Z  238 โ”‚   const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? "";
2026-10-24T11:42:05.6485502Z      ยท                                                   โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6485635Z  239 โ”‚   return target.owner ? `${target.owner}/${folderName}` : folderName;
2026-10-24T11:42:05.6485687Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6485860Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T11:42:05.6485863Z
2026-10-24T11:42:05.6486123Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6486288Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
2026-10-24T11:42:05.6486408Z  37 โ”‚   const [initialized, setInitialized] = useState(false);
2026-10-24T11:42:05.6486482Z  38 โ”‚   useLayoutEffect(() => {
2026-10-24T11:42:05.6486561Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6486694Z     ยท          โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6486756Z  39 โ”‚     reset();
2026-10-24T11:42:05.6486824Z  40 โ”‚     setInitialized(true);
2026-10-24T11:42:05.6486904Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6487075Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6487138Z  41 โ”‚   }, [reset]);
2026-10-24T11:42:05.6487190Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6487851Z   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:42:05.6488209Z   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:42:05.6488211Z
2026-10-24T11:42:05.6488471Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6488633Z     โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
2026-10-24T11:42:05.6488685Z  88 โ”‚
2026-10-24T11:42:05.6488750Z  89 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6488821Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6488951Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6489116Z  90 โ”‚     if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
2026-10-24T11:42:05.6489223Z  91 โ”‚     const branchName = initialProjectRef.branch;
2026-10-24T11:42:05.6489291Z  92 โ”‚     let active = true;
2026-10-24T11:42:05.6489387Z  93 โ”‚     setPendingCheckouts((count) => count + 1);
2026-10-24T11:42:05.6489473Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6489646Z     ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6489800Z  94 โ”‚     // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
2026-10-24T11:42:05.6489851Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6490464Z   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:42:05.6490792Z   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:42:05.6490794Z
2026-10-24T11:42:05.6490992Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:42:05.6491160Z     โ•ญโ”€[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-24T11:42:05.6491248Z  35 โ”‚       <T3SourceTextRunNativeComponent
2026-10-24T11:42:05.6491310Z  36 โ”‚         key={index}
2026-10-24T11:42:05.6491391Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6491466Z  37 โ”‚         style={flattenedStyle}
2026-10-24T11:42:05.6491517Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6491723Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:42:05.6491761Z
2026-10-24T11:42:05.6491991Z   โš  eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used.
2026-10-24T11:42:05.6492157Z       โ•ญโ”€[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10]
2026-10-24T11:42:05.6492212Z  1397 โ”‚
2026-10-24T11:42:05.6492300Z  1398 โ”‚ function assertUserMessagesExclude(
2026-10-24T11:42:05.6492405Z       ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6492575Z       ยท                      โ•ฐโ”€โ”€ 'assertUserMessagesExclude' is declared here
2026-10-24T11:42:05.6492685Z  1399 โ”‚   projection: OrchestrationV2ThreadProjection,
2026-10-24T11:42:05.6492737Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6492843Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6492845Z
2026-10-24T11:42:05.6493079Z   โš  eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used.
2026-10-24T11:42:05.6493214Z     โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:15:8]
2026-10-24T11:42:05.6493284Z  14 โ”‚   threadSearchMatchKey,
2026-10-24T11:42:05.6493371Z  15 โ”‚   type EnvironmentThreadSearchMatch,
2026-10-24T11:42:05.6493475Z     ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6493652Z     ยท                      โ•ฐโ”€โ”€ 'EnvironmentThreadSearchMatch' is imported here
2026-10-24T11:42:05.6493760Z  16 โ”‚ } from "@t3tools/client-runtime/state/thread-search";
2026-10-24T11:42:05.6493814Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6493913Z   help: Consider removing this import.
2026-10-24T11:42:05.6493916Z
2026-10-24T11:42:05.6494122Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6494256Z      โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:527:25]
2026-10-24T11:42:05.6494390Z  526 โ”‚     // range) the boundary string is identical and the chain would die.
2026-10-24T11:42:05.6494481Z  527 โ”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-24T11:42:05.6494585Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6494753Z      ยท                                โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-24T11:42:05.6494894Z  528 โ”‚   const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase();
2026-10-24T11:42:05.6494947Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6495246Z   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:42:05.6495563Z   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:42:05.6495570Z
2026-10-24T11:42:05.6495738Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6495868Z      โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:518:53]
2026-10-24T11:42:05.6495955Z  517 โ”‚     if (Number.isNaN(wakeAtMs)) return;
2026-10-24T11:42:05.6496115Z  518 โ”‚     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-24T11:42:05.6496235Z      ยท                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6496404Z      ยท                                                          โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6496485Z  519 โ”‚     const id = setTimeout(() => {
2026-10-24T11:42:05.6496594Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6496914Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6497210Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6497212Z
2026-10-24T11:42:05.6497360Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6497514Z      โ•ญโ”€[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27]
2026-10-24T11:42:05.6497575Z  493 โ”‚         >
2026-10-24T11:42:05.6497653Z  494 โ”‚           {props.children(close)}
2026-10-24T11:42:05.6497743Z      ยท                           โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:42:05.6497910Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6497990Z  495 โ”‚         </ReanimatedSwipeable>
2026-10-24T11:42:05.6498043Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6498521Z   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:42:05.6498816Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6498818Z
2026-10-24T11:42:05.6498964Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6499082Z     โ•ญโ”€[apps/mobile/src/components/ui/Menu.tsx:54:36]
2026-10-24T11:42:05.6499268Z  53 โ”‚         const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
2026-10-24T11:42:05.6499445Z  54 โ”‚ โ•ญโ”€โ–ถ     children = cloneElement(child, {
2026-10-24T11:42:05.6499553Z  55 โ”‚ โ”‚         onTouchStart: (event) => {
2026-10-24T11:42:05.6499712Z  56 โ”‚ โ”‚           // Reset for a new touch, not onPressIn, which also fires when a
2026-10-24T11:42:05.6499872Z  57 โ”‚ โ”‚           // finger moves out of the row and back during the same gesture.
2026-10-24T11:42:05.6500001Z  58 โ”‚ โ”‚           menuPress.current.isPreparing = false;
2026-10-24T11:42:05.6500169Z  59 โ”‚ โ”‚           menuPress.current.suppressPress = menuPress.current.isOpen;
2026-10-24T11:42:05.6500281Z  60 โ”‚ โ”‚           pendingPress.current = null;
2026-10-24T11:42:05.6500410Z  61 โ”‚ โ”‚           child.props.onTouchStart?.(event);
2026-10-24T11:42:05.6500490Z  62 โ”‚ โ”‚         },
2026-10-24T11:42:05.6500591Z  63 โ”‚ โ”‚         onPress: (event) => {
2026-10-24T11:42:05.6500763Z  64 โ”‚ โ”‚           // Accessibility clicks have no touch identifier and must not inherit
2026-10-24T11:42:05.6500899Z  65 โ”‚ โ”‚           // cancellation from a previous physical gesture.
2026-10-24T11:42:05.6501089Z  66 โ”‚ โ”‚           const isTouch = typeof event.nativeEvent.identifier === "number";
2026-10-24T11:42:05.6501281Z  67 โ”‚ โ”‚           if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
2026-10-24T11:42:05.6501368Z  68 โ”‚ โ”‚             return;
2026-10-24T11:42:05.6501446Z  69 โ”‚ โ”‚           }
2026-10-24T11:42:05.6501640Z  70 โ”‚ โ”‚           if (isTouch && menuPress.current.isPreparing) {
2026-10-24T11:42:05.6501842Z  71 โ”‚ โ”‚             // A release can arrive between native menu preparation and display.
2026-10-24T11:42:05.6502013Z  72 โ”‚ โ”‚             // Let UIKit's display/cancel callback decide this press's outcome.
2026-10-24T11:42:05.6502113Z  73 โ”‚ โ”‚             event.persist();
2026-10-24T11:42:05.6502274Z  74 โ”‚ โ”‚             pendingPress.current = () => child.props.onPress?.(event);
2026-10-24T11:42:05.6502360Z  75 โ”‚ โ”‚             return;
2026-10-24T11:42:05.6502438Z  76 โ”‚ โ”‚           }
2026-10-24T11:42:05.6502553Z  77 โ”‚ โ”‚           child.props.onPress?.(event);
2026-10-24T11:42:05.6502629Z  78 โ”‚ โ”‚         },
2026-10-24T11:42:05.6502765Z  79 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T11:42:05.6503007Z     ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:42:05.6503110Z  80 โ”‚         menuProps.onMenuInteractionStart = () => {
2026-10-24T11:42:05.6503163Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6503634Z   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:42:05.6503926Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6503928Z
2026-10-24T11:42:05.6504205Z   โš  eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:42:05.6504339Z      โ•ญโ”€[apps/server/src/telemetry/AnalyticsService.ts:340:7]
2026-10-24T11:42:05.6504393Z  339 โ”‚
2026-10-24T11:42:05.6504497Z  340 โ”‚ const layerTest = AnalyticsService.layerTest;
2026-10-24T11:42:05.6504574Z      ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6504707Z      ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
2026-10-24T11:42:05.6504760Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6504865Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6504867Z
2026-10-24T11:42:05.6505153Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T11:42:05.6505329Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19]
2026-10-24T11:42:05.6505396Z  472 โ”‚   onFilters,
2026-10-24T11:42:05.6505465Z  473 โ”‚   authorOptions = [],
2026-10-24T11:42:05.6505543Z      ยท                   โ”€โ”€
2026-10-24T11:42:05.6505609Z  474 โ”‚   labelOptions = [],
2026-10-24T11:42:05.6505662Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6505981Z   help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
2026-10-24T11:42:05.6505984Z
2026-10-24T11:42:05.6506264Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-24T11:42:05.6506433Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18]
2026-10-24T11:42:05.6506500Z  473 โ”‚   authorOptions = [],
2026-10-24T11:42:05.6506622Z  474 โ”‚   labelOptions = [],
2026-10-24T11:42:05.6506733Z      ยท                  โ”€โ”€
2026-10-24T11:42:05.6506799Z  475 โ”‚   optionScope,
2026-10-24T11:42:05.6506850Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6507166Z   help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it.
2026-10-24T11:42:05.6507169Z
2026-10-24T11:42:05.6507599Z   โš  t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-24T11:42:05.6507748Z      โ•ญโ”€[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20]
2026-10-24T11:42:05.6507830Z  262 โ”‚       ...(update._meta !== undefined
2026-10-24T11:42:05.6508004Z  263 โ”‚         ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null }
2026-10-24T11:42:05.6508095Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6508157Z  264 โ”‚         : {}),
2026-10-24T11:42:05.6508208Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6508211Z
2026-10-24T11:42:05.6508399Z   โš  eslint(no-unused-vars): Type 'Scope' is imported but never used.
2026-10-24T11:42:05.6508537Z     โ•ญโ”€[apps/server/src/provider/ProviderAuthService.ts:15:18]
2026-10-24T11:42:05.6508622Z  14 โ”‚ import * as Layer from "effect/Layer";
2026-10-24T11:42:05.6508714Z  15 โ”‚ import type * as Scope from "effect/Scope";
2026-10-24T11:42:05.6508794Z     ยท                  โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:42:05.6508930Z     ยท                    โ•ฐโ”€โ”€ 'Scope' is imported here
2026-10-24T11:42:05.6509019Z  16 โ”‚ import * as Stream from "effect/Stream";
2026-10-24T11:42:05.6509078Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6509181Z   help: Consider removing this import.
2026-10-24T11:42:05.6509184Z
2026-10-24T11:42:05.6509444Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6509586Z      โ•ญโ”€[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-24T11:42:05.6509641Z  150 โ”‚
2026-10-24T11:42:05.6509707Z  151 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6509780Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6509912Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6509996Z  152 โ”‚     if (!controlledSelectedPath) {
2026-10-24T11:42:05.6510057Z  153 โ”‚       return;
2026-10-24T11:42:05.6510114Z  154 โ”‚     }
2026-10-24T11:42:05.6510197Z  155 โ”‚     setExpandedPaths((current) => {
2026-10-24T11:42:05.6510282Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6510459Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6510584Z  156 โ”‚       const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-24T11:42:05.6510636Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6511268Z   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:42:05.6511595Z   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:42:05.6511597Z
2026-10-24T11:42:05.6511859Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6512040Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-24T11:42:05.6512138Z  256 โ”‚     return () => cancelAnimationFrame(frame);
2026-10-24T11:42:05.6512217Z  257 โ”‚   }, [props.path, targetIndex]);
2026-10-24T11:42:05.6512293Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6512440Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `props.path`
2026-10-24T11:42:05.6512495Z  258 โ”‚
2026-10-24T11:42:05.6512545Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6512842Z   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:42:05.6513159Z   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:42:05.6513166Z
2026-10-24T11:42:05.6513362Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:42:05.6513511Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-24T11:42:05.6513584Z  292 โ”‚                     <SourceText
2026-10-24T11:42:05.6513686Z  293 โ”‚                       key={`${index}:${tokenIndex}`}
2026-10-24T11:42:05.6513806Z      ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6513879Z  294 โ”‚                       style={{
2026-10-24T11:42:05.6513930Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6514078Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:42:05.6514081Z
2026-10-24T11:42:05.6514281Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:42:05.6514432Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-24T11:42:05.6514498Z  308 โ”‚             return (
2026-10-24T11:42:05.6514583Z  309 โ”‚               <SourceText key={index}>
2026-10-24T11:42:05.6514684Z      ยท                           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6514752Z  310 โ”‚                 {body}
2026-10-24T11:42:05.6514802Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6514949Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:42:05.6514952Z
2026-10-24T11:42:05.6515229Z   โš  eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:42:05.6515382Z     โ•ญโ”€[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9]
2026-10-24T11:42:05.6515439Z  60 โ”‚ ) {
2026-10-24T11:42:05.6515610Z  61 โ”‚   const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded";
2026-10-24T11:42:05.6515692Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6515834Z     ยท               โ•ฐโ”€โ”€ 'useDragRegion' is declared here
2026-10-24T11:42:05.6515925Z  62 โ”‚   const isInline = props.mode === "inline";
2026-10-24T11:42:05.6515978Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6516083Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6516085Z
2026-10-24T11:42:05.6516367Z   โš  eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-24T11:42:05.6516497Z      โ•ญโ”€[apps/server/src/provider/AntigravityAuth.ts:285:20]
2026-10-24T11:42:05.6516620Z  284 โ”‚     },
2026-10-24T11:42:05.6516736Z  285 โ”‚     (effect, flow, stopSessions) =>
2026-10-24T11:42:05.6516829Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6516978Z      ยท                          โ•ฐโ”€โ”€ 'stopSessions' is declared here
2026-10-24T11:42:05.6517044Z  286 โ”‚       effect.pipe(
2026-10-24T11:42:05.6517096Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6517199Z   help: Consider removing this parameter.
2026-10-24T11:42:05.6517201Z
2026-10-24T11:42:05.6517403Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6517564Z      โ•ญโ”€[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33]
2026-10-24T11:42:05.6517660Z  113 โ”‚     return () => cancelAnimationFrame(frame);
2026-10-24T11:42:05.6517758Z  114 โ”‚   }, [restoreSearch, tabActive, bottomSearch]);
2026-10-24T11:42:05.6517872Z      ยท                                 โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6518045Z      ยท                                       โ•ฐโ”€โ”€ Unnecessary dependency `bottomSearch`
2026-10-24T11:42:05.6518150Z  115 โ”‚   const composeButton = nativeToolbarCompose ? (
2026-10-24T11:42:05.6518203Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6518501Z   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:42:05.6518815Z   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:42:05.6518817Z
2026-10-24T11:42:05.6519030Z   โš  eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
2026-10-24T11:42:05.6519161Z     โ•ญโ”€[apps/server/src/scheduledTasks/Schedule.ts:79:10]
2026-10-24T11:42:05.6519217Z  78 โ”‚
2026-10-24T11:42:05.6519354Z  79 โ”‚ function describeSchedule(schedule: ScheduledTaskSchedule): string {
2026-10-24T11:42:05.6519442Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6519594Z     ยท                  โ•ฐโ”€โ”€ 'describeSchedule' is declared here
2026-10-24T11:42:05.6519702Z  80 โ”‚   if (schedule.type === "webhook") return "On webhook";
2026-10-24T11:42:05.6519754Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6519857Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6519859Z
2026-10-24T11:42:05.6520385Z   โš  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:42:05.6520675Z      โ•ญโ”€[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
2026-10-24T11:42:05.6520748Z  520 โ”‚                 })).delivery;
2026-10-24T11:42:05.6520948Z  521 โ”‚ โ•ญโ”€โ–ถ             while (delivery.outcome === "accepted") {
2026-10-24T11:42:05.6521086Z  522 โ”‚ โ”‚                 yield* Effect.yieldNow;
2026-10-24T11:42:05.6521285Z  523 โ”‚ โ”‚                 delivery = (yield* service.getWebhookDelivery({
2026-10-24T11:42:05.6521388Z  524 โ”‚ โ”‚                   id: task.id,
2026-10-24T11:42:05.6521505Z  525 โ”‚ โ”‚                   deliveryId: deliveryId!,
2026-10-24T11:42:05.6521605Z  526 โ”‚ โ”‚                 })).delivery;
2026-10-24T11:42:05.6521753Z  527 โ”‚ โ•ฐโ”€โ–ถ             }
2026-10-24T11:42:05.6521877Z  528 โ”‚                 assert.equal(delivery.outcome, "dispatch_failed");
2026-10-24T11:42:05.6521929Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6521931Z
2026-10-24T11:42:05.6522115Z   โš  unicorn(no-new-array): Do not use `new Array(singleArgument)`.
2026-10-24T11:42:05.6522236Z      โ•ญโ”€[apps/web/src/terminal/ghostty/core.ts:194:19]
2026-10-24T11:42:05.6522359Z  193 โ”‚     const count = Math.min(CHUNK_SIZE, graphemeLength - start);
2026-10-24T11:42:05.6522449Z  194 โ”‚     const codes = new Array<number>(count);
2026-10-24T11:42:05.6522560Z      ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6522664Z  195 โ”‚     for (let index = 0; index < count; index += 1) {
2026-10-24T11:42:05.6522716Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6523150Z   help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`.
2026-10-24T11:42:05.6523159Z
2026-10-24T11:42:05.6523329Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T11:42:05.6523471Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:186:12]
2026-10-24T11:42:05.6523527Z  185 โ”‚
2026-10-24T11:42:05.6523628Z  186 โ”‚ for (const {} of ["darwin", "linux"] as const) {
2026-10-24T11:42:05.6523699Z      ยท            โ”€โ”€
2026-10-24T11:42:05.6523754Z  187 โ”‚ }
2026-10-24T11:42:05.6523806Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6524040Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T11:42:05.6524043Z
2026-10-24T11:42:05.6524213Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T11:42:05.6524357Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:189:12]
2026-10-24T11:42:05.6524410Z  188 โ”‚
2026-10-24T11:42:05.6524476Z  189 โ”‚ for (const {} of [
2026-10-24T11:42:05.6524546Z      ยท            โ”€โ”€
2026-10-24T11:42:05.6524638Z  190 โ”‚   { kind: "browser", folderVerb: "none" },
2026-10-24T11:42:05.6524691Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6524919Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T11:42:05.6524922Z
2026-10-24T11:42:05.6525087Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T11:42:05.6525226Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:311:12]
2026-10-24T11:42:05.6525279Z  310 โ”‚
2026-10-24T11:42:05.6525482Z  311 โ”‚ for (const {} of ["rejected", "spawn-error", "stalled"] as const) {
2026-10-24T11:42:05.6525590Z      ยท            โ”€โ”€
2026-10-24T11:42:05.6525643Z  312 โ”‚ }
2026-10-24T11:42:05.6525695Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6525923Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T11:42:05.6525926Z
2026-10-24T11:42:05.6526090Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T11:42:05.6526228Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:314:12]
2026-10-24T11:42:05.6526281Z  313 โ”‚
2026-10-24T11:42:05.6526345Z  314 โ”‚ for (const {} of [
2026-10-24T11:42:05.6526414Z      ยท            โ”€โ”€
2026-10-24T11:42:05.6526469Z  315 โ”‚   {
2026-10-24T11:42:05.6526522Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6526755Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T11:42:05.6526762Z
2026-10-24T11:42:05.6526927Z   โš  eslint(no-empty-pattern): Empty array binding pattern
2026-10-24T11:42:05.6527084Z       โ•ญโ”€[apps/server/src/pullRequest/PullRequestService.test.ts:1437:12]
2026-10-24T11:42:05.6527138Z  1436 โ”‚
2026-10-24T11:42:05.6527204Z  1437 โ”‚ for (const [] of [
2026-10-24T11:42:05.6527277Z       ยท            โ”€โ”€
2026-10-24T11:42:05.6527350Z  1438 โ”‚   ["github", "github.com"],
2026-10-24T11:42:05.6527404Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6527687Z   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:42:05.6527689Z
2026-10-24T11:42:05.6527890Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:42:05.6528044Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
2026-10-24T11:42:05.6528152Z  222 โ”‚               ? snippetTokens.map((line, lineIndex) => (
2026-10-24T11:42:05.6528247Z  223 โ”‚                   <NativeText key={lineIndex}>
2026-10-24T11:42:05.6528354Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6528449Z  224 โ”‚                     {lineIndex > 0 ? "\n" : ""}
2026-10-24T11:42:05.6528501Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6528649Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:42:05.6528651Z
2026-10-24T11:42:05.6528846Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:42:05.6529001Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25]
2026-10-24T11:42:05.6529081Z  226 โ”‚                       <NativeText
2026-10-24T11:42:05.6529166Z  227 โ”‚                         key={tokenIndex}
2026-10-24T11:42:05.6529269Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6529343Z  228 โ”‚                         style={{
2026-10-24T11:42:05.6529396Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6529540Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:42:05.6529543Z
2026-10-24T11:42:05.6529707Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-24T11:42:05.6529852Z      โ•ญโ”€[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14]
2026-10-24T11:42:05.6529905Z  465 โ”‚
2026-10-24T11:42:05.6530010Z  466 โ”‚   for (const {} of ["direct", "wrapper"] as const) {
2026-10-24T11:42:05.6530278Z      ยท              โ”€โ”€
2026-10-24T11:42:05.6530361Z  467 โ”‚   }
2026-10-24T11:42:05.6530413Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6530642Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-24T11:42:05.6530645Z
2026-10-24T11:42:05.6530839Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:42:05.6531011Z     โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15]
2026-10-24T11:42:05.6531094Z  87 โ”‚             <li
2026-10-24T11:42:05.6531182Z  88 โ”‚               key={`${index}:${check.name}`}
2026-10-24T11:42:05.6531296Z     ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6531445Z  89 โ”‚               className="col-span-full grid grid-cols-subgrid items-center text-xs"
2026-10-24T11:42:05.6531503Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6531652Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:42:05.6531654Z
2026-10-24T11:42:05.6531915Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6532082Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7]
2026-10-24T11:42:05.6532136Z  100 โ”‚
2026-10-24T11:42:05.6532203Z  101 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6532276Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6532408Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6532511Z  102 โ”‚     if (!target || selectedLines.length === 0) {
2026-10-24T11:42:05.6532595Z  103 โ”‚       setHighlightedLinesById({});
2026-10-24T11:42:05.6532695Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6532873Z      ยท                  โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6532937Z  104 โ”‚       return;
2026-10-24T11:42:05.6532989Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6533599Z   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:42:05.6533925Z   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:42:05.6533929Z
2026-10-24T11:42:05.6534193Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6534386Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
2026-10-24T11:42:05.6534439Z  104 โ”‚
2026-10-24T11:42:05.6534506Z  105 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6534577Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6534710Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6534790Z  106 โ”‚     clearReviewCommentTarget();
2026-10-24T11:42:05.6534888Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-24T11:42:05.6534993Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6535171Z      ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6535244Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-24T11:42:05.6535366Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6535996Z   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:42:05.6536319Z   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:42:05.6536321Z
2026-10-24T11:42:05.6536580Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6536767Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
2026-10-24T11:42:05.6536820Z  109 โ”‚
2026-10-24T11:42:05.6536888Z  110 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6536961Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6537091Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6537180Z  111 โ”‚     if (activeCommentTarget === null) {
2026-10-24T11:42:05.6537280Z  112 โ”‚       setPendingNativeCommentSelection(null);
2026-10-24T11:42:05.6537388Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6537568Z      ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6537625Z  113 โ”‚     }
2026-10-24T11:42:05.6537677Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6538284Z   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:42:05.6538611Z   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:42:05.6538613Z
2026-10-24T11:42:05.6538815Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6539000Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
2026-10-24T11:42:05.6539097Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-24T11:42:05.6539170Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-24T11:42:05.6539258Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6539429Z      ยท                โ•ฐโ”€โ”€ Unnecessary dependency `selectedSection?.id`
2026-10-24T11:42:05.6539484Z  109 โ”‚
2026-10-24T11:42:05.6539536Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6539831Z   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:42:05.6540145Z   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:42:05.6540147Z
2026-10-24T11:42:05.6540524Z   โš  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:42:05.6540654Z      โ•ญโ”€[apps/server/src/assets/AssetAccess.test.ts:975:35]
2026-10-24T11:42:05.6540860Z  974 โ”‚       // Every client and server release spells the resource this way on the wire.
2026-10-24T11:42:05.6541071Z  975 โ”‚       const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({
2026-10-24T11:42:05.6541194Z      ยท                                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6541310Z  976 โ”‚         resource: { _tag: "github-media", cwd: "/repo", url },
2026-10-24T11:42:05.6541363Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6541365Z
2026-10-24T11:42:05.6541823Z   โš  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:42:05.6541955Z       โ•ญโ”€[apps/server/src/assets/AssetAccess.test.ts:1012:32]
2026-10-24T11:42:05.6542093Z  1011 โ”‚         expect(error._tag).toBe("AssetGitHubMediaUrlValidationError");
2026-10-24T11:42:05.6542292Z  1012 โ”‚         const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error);
2026-10-24T11:42:05.6542411Z       ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6542506Z  1013 โ”‚         expect(encoded).not.toContain(url);
2026-10-24T11:42:05.6542558Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6542561Z
2026-10-24T11:42:05.6542792Z   โš  unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result.
2026-10-24T11:42:05.6542917Z      โ•ญโ”€[apps/server/src/terminal/Manager.test.ts:731:31]
2026-10-24T11:42:05.6542977Z  730 โ”‚       );
2026-10-24T11:42:05.6543153Z  731 โ”‚       const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot;
2026-10-24T11:42:05.6543250Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6543373Z  732 โ”‚       expect(snapshot?.history).toBe("aa๐Ÿ˜€\rEND");
2026-10-24T11:42:05.6543430Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6543603Z   help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns.
2026-10-24T11:42:05.6543607Z
2026-10-24T11:42:05.6543815Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6543952Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:454:7]
2026-10-24T11:42:05.6544040Z  453 โ”‚     showAuxiliaryPane("inspector");
2026-10-24T11:42:05.6544150Z  454 โ”‚   }, [environmentId, showAuxiliaryPane, threadId]);
2026-10-24T11:42:05.6544294Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€                     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6544498Z      ยท             โ”‚                               โ•ฐโ”€โ”€ Unnecessary dependency `threadId`
2026-10-24T11:42:05.6544708Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `environmentId`
2026-10-24T11:42:05.6544802Z  455 โ”‚   const {
2026-10-24T11:42:05.6544853Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6545153Z   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:42:05.6545468Z   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:42:05.6545471Z
2026-10-24T11:42:05.6545661Z   โš  react(static-components): Cannot create components during render
2026-10-24T11:42:05.6545797Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:725:20]
2026-10-24T11:42:05.6545861Z  492 โ”‚   // same check.
2026-10-24T11:42:05.6545994Z  493 โ”‚   const NativeReviewDiffView = resolveNativeReviewDiffView();
2026-10-24T11:42:05.6546119Z      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6546304Z      ยท                                             โ•ฐโ”€โ”€ The component is created during render here
2026-10-24T11:42:05.6546454Z  494 โ”‚   const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
2026-10-24T11:42:05.6546577Z  495 โ”‚   const showcasedReviewDrawRef = useRef<string | null>(null);
2026-10-24T11:42:05.6546708Z  496 โ”‚   const [isPullRefreshing, setIsPullRefreshing] = useState(false);
2026-10-24T11:42:05.6546802Z  497 โ”‚   const handlePullToRefresh = async () => {
2026-10-24T11:42:05.6546879Z  498 โ”‚     setIsPullRefreshing(true);
2026-10-24T11:42:05.6546964Z  499 โ”‚     await refreshSelectedSection();
2026-10-24T11:42:05.6547043Z  500 โ”‚     setIsPullRefreshing(false);
2026-10-24T11:42:05.6547106Z  501 โ”‚   };
2026-10-24T11:42:05.6547250Z  502 โ”‚   const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
2026-10-24T11:42:05.6547394Z  503 โ”‚   const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
2026-10-24T11:42:05.6547501Z  504 โ”‚   const fileVisibility = useReviewFileVisibility({
2026-10-24T11:42:05.6547588Z  505 โ”‚     threadKey: reviewCache.threadKey,
2026-10-24T11:42:05.6547678Z  506 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-24T11:42:05.6547749Z  507 โ”‚     files: reviewFiles,
2026-10-24T11:42:05.6547848Z  508 โ”‚     cachedExpandedFileIds: selectedSection?.id
2026-10-24T11:42:05.6547981Z  509 โ”‚       ? reviewCache.expandedFileIdsBySection[selectedSection.id]
2026-10-24T11:42:05.6548045Z  510 โ”‚       : undefined,
2026-10-24T11:42:05.6548141Z  511 โ”‚     cachedViewedFileIds: selectedSection?.id
2026-10-24T11:42:05.6548272Z  512 โ”‚       ? reviewCache.viewedFileIdsBySection[selectedSection.id]
2026-10-24T11:42:05.6548336Z  513 โ”‚       : undefined,
2026-10-24T11:42:05.6548392Z  514 โ”‚   });
2026-10-24T11:42:05.6548584Z  515 โ”‚   const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
2026-10-24T11:42:05.6548717Z  516 โ”‚   const commentSelection = useReviewCommentSelectionController({
2026-10-24T11:42:05.6548781Z  517 โ”‚     environmentId,
2026-10-24T11:42:05.6548844Z  518 โ”‚     threadId,
2026-10-24T11:42:05.6548909Z  519 โ”‚     selectedSection,
2026-10-24T11:42:05.6548979Z  520 โ”‚     nativeReviewDiffData,
2026-10-24T11:42:05.6549033Z  521 โ”‚   });
2026-10-24T11:42:05.6549139Z  522 โ”‚   const nativeBridge = useNativeReviewDiffBridge({
2026-10-24T11:42:05.6549225Z  523 โ”‚     threadKey: reviewCache.threadKey,
2026-10-24T11:42:05.6549315Z  524 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-24T11:42:05.6549452Z  525 โ”‚     diff: selectedSection?.diff,
2026-10-24T11:42:05.6549567Z  526 โ”‚     data: nativeReviewDiffData,
2026-10-24T11:42:05.6549636Z  527 โ”‚     collapsedFileIds,
2026-10-24T11:42:05.6549700Z  528 โ”‚     viewedFileIds,
2026-10-24T11:42:05.6549809Z  529 โ”‚     selectedRowIds: commentSelection.selectedRowIds,
2026-10-24T11:42:05.6549907Z  530 โ”‚     canHighlight: parsedDiff.kind === "files",
2026-10-24T11:42:05.6549962Z  531 โ”‚   });
2026-10-24T11:42:05.6550035Z  532 โ”‚   const showcaseReviewKey =
2026-10-24T11:42:05.6550166Z  533 โ”‚     SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
2026-10-24T11:42:05.6550376Z  534 โ”‚       ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
2026-10-24T11:42:05.6550437Z  535 โ”‚       : null;
2026-10-24T11:42:05.6550605Z  536 โ”‚   const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
2026-10-24T11:42:05.6550689Z  537 โ”‚     nativeBridge.onDebug(event);
2026-10-24T11:42:05.6550750Z  538 โ”‚     if (
2026-10-24T11:42:05.6550830Z  539 โ”‚       showcaseReviewKey === null ||
2026-10-24T11:42:05.6550953Z  540 โ”‚       showcasedReviewDrawRef.current === showcaseReviewKey ||
2026-10-24T11:42:05.6551086Z  541 โ”‚       !isNativeReviewDiffDrawEvent(event.nativeEvent)
2026-10-24T11:42:05.6551144Z  542 โ”‚     ) {
2026-10-24T11:42:05.6551204Z  543 โ”‚       return;
2026-10-24T11:42:05.6551258Z  544 โ”‚     }
2026-10-24T11:42:05.6551370Z  545 โ”‚     showcasedReviewDrawRef.current = showcaseReviewKey;
2026-10-24T11:42:05.6551533Z  546 โ”‚     reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
2026-10-24T11:42:05.6551588Z  547 โ”‚   };
2026-10-24T11:42:05.6551639Z  548 โ”‚
2026-10-24T11:42:05.6551759Z  549 โ”‚   const handleSelectFile = async (fileId: string | null) => {
2026-10-24T11:42:05.6551845Z  550 โ”‚     loadVisibleFile(fileId, true);
2026-10-24T11:42:05.6551939Z  551 โ”‚     commentSelection.clearSelection();
2026-10-24T11:42:05.6552058Z  552 โ”‚     if (fileId !== null && collapsedFileIds.includes(fileId)) {
2026-10-24T11:42:05.6552139Z  553 โ”‚       toggleExpandedFile(fileId);
2026-10-24T11:42:05.6552194Z  554 โ”‚     }
2026-10-24T11:42:05.6552306Z  555 โ”‚     const nativeView = nativeReviewDiffViewRef.current;
2026-10-24T11:42:05.6552379Z  556 โ”‚     if (!nativeView) return;
2026-10-24T11:42:05.6552475Z  557 โ”‚     const result = await settlePromise(() =>
2026-10-24T11:42:05.6552650Z  558 โ”‚       fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
2026-10-24T11:42:05.6552706Z  559 โ”‚     );
2026-10-24T11:42:05.6552793Z  560 โ”‚     if (AsyncResult.isFailure(result)) {
2026-10-24T11:42:05.6552980Z  561 โ”‚       console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
2026-10-24T11:42:05.6553037Z  562 โ”‚     }
2026-10-24T11:42:05.6553092Z  563 โ”‚   };
2026-10-24T11:42:05.6553174Z  564 โ”‚   const handleVisibleFileChange = (
2026-10-24T11:42:05.6553306Z  565 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
2026-10-24T11:42:05.6553364Z  566 โ”‚   ) => {
2026-10-24T11:42:05.6553473Z  567 โ”‚     loadVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-24T11:42:05.6553641Z  568 โ”‚     reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-24T11:42:05.6553696Z  569 โ”‚   };
2026-10-24T11:42:05.6553775Z  570 โ”‚   const renderInspector = () => (
2026-10-24T11:42:05.6553845Z  571 โ”‚     <ReviewFileNavigator
2026-10-24T11:42:05.6553925Z  572 โ”‚       ref={reviewFileNavigatorRef}
2026-10-24T11:42:05.6554015Z  573 โ”‚       files={nativeReviewDiffData.files}
2026-10-24T11:42:05.6554091Z  574 โ”‚       headerInset={insets.top}
2026-10-24T11:42:05.6554243Z  575 โ”‚       sectionId={selectedSection?.id ?? null}
2026-10-24T11:42:05.6554392Z  576 โ”‚       onSelectFile={(fileId) => void handleSelectFile(fileId)}
2026-10-24T11:42:05.6554448Z  577 โ”‚     />
2026-10-24T11:42:05.6554502Z  578 โ”‚   );
2026-10-24T11:42:05.6554554Z  579 โ”‚
2026-10-24T11:42:05.6554740Z  580 โ”‚   const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
2026-10-24T11:42:05.6554828Z  581 โ”‚     const { fileId } = event.nativeEvent;
2026-10-24T11:42:05.6554891Z  582 โ”‚     if (fileId) {
2026-10-24T11:42:05.6554971Z  583 โ”‚       loadVisibleFile(fileId, true);
2026-10-24T11:42:05.6555050Z  584 โ”‚       toggleExpandedFile(fileId);
2026-10-24T11:42:05.6555105Z  585 โ”‚     }
2026-10-24T11:42:05.6555159Z  586 โ”‚   };
2026-10-24T11:42:05.6555210Z  587 โ”‚
2026-10-24T11:42:05.6555300Z  588 โ”‚   const handleNativeToggleViewedFile = (
2026-10-24T11:42:05.6555426Z  589 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string }>,
2026-10-24T11:42:05.6555487Z  590 โ”‚   ) => {
2026-10-24T11:42:05.6555573Z  591 โ”‚     const { fileId } = event.nativeEvent;
2026-10-24T11:42:05.6555636Z  592 โ”‚     if (fileId) {
2026-10-24T11:42:05.6555714Z  593 โ”‚       toggleViewedFile(fileId);
2026-10-24T11:42:05.6555769Z  594 โ”‚     }
2026-10-24T11:42:05.6555821Z  595 โ”‚   };
2026-10-24T11:42:05.6555874Z  596 โ”‚
2026-10-24T11:42:05.6555946Z  597 โ”‚   const parsedDiffNotice =
2026-10-24T11:42:05.6556107Z  598 โ”‚     parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
2026-10-24T11:42:05.6556228Z  599 โ”‚   const hasCachedSelectedDiff = selectedSection?.diff != null;
2026-10-24T11:42:05.6556386Z  600 โ”‚   const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
2026-10-24T11:42:05.6556513Z  601 โ”‚   const sectionMenu = buildReviewSectionMenu(reviewSections);
2026-10-24T11:42:05.6556674Z  602 โ”‚   const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
2026-10-24T11:42:05.6556785Z  603 โ”‚     hasEnvironmentPresentation: environment.isReady,
2026-10-24T11:42:05.6556887Z  604 โ”‚     isEnvironmentConnected: isEnvironmentReady,
2026-10-24T11:42:05.6556959Z  605 โ”‚     hasCachedSelectedDiff,
2026-10-24T11:42:05.6557026Z  606 โ”‚     hasAnyCachedDiff,
2026-10-24T11:42:05.6557080Z  607 โ”‚   });
2026-10-24T11:42:05.6557167Z  608 โ”‚   const handleRetryEnvironment = () => {
2026-10-24T11:42:05.6557255Z  609 โ”‚     void retryEnvironment(environmentId);
2026-10-24T11:42:05.6557308Z  610 โ”‚   };
2026-10-24T11:42:05.6557394Z  611 โ”‚   const handleReturnToThread = () => {
2026-10-24T11:42:05.6557473Z  612 โ”‚     if (navigation.canGoBack()) {
2026-10-24T11:42:05.6557544Z  613 โ”‚       navigation.goBack();
2026-10-24T11:42:05.6557610Z  614 โ”‚       return;
2026-10-24T11:42:05.6557668Z  615 โ”‚     }
2026-10-24T11:42:05.6557749Z  616 โ”‚     navigation.navigate("Thread", {
2026-10-24T11:42:05.6557840Z  617 โ”‚       environmentId: String(environmentId),
2026-10-24T11:42:05.6557915Z  618 โ”‚       threadId: String(threadId),
2026-10-24T11:42:05.6557971Z  619 โ”‚     });
2026-10-24T11:42:05.6558025Z  620 โ”‚   };
2026-10-24T11:42:05.6558104Z  621 โ”‚   const androidHeaderSubtitle = [
2026-10-24T11:42:05.6558177Z  622 โ”‚     selectedSection?.title,
2026-10-24T11:42:05.6558257Z  623 โ”‚     headerDiffSummary.additions,
2026-10-24T11:42:05.6558336Z  624 โ”‚     headerDiffSummary.deletions,
2026-10-24T11:42:05.6558388Z  625 โ”‚   ]
2026-10-24T11:42:05.6558494Z  626 โ”‚     .filter((part): part is string => Boolean(part))
2026-10-24T11:42:05.6558558Z  627 โ”‚     .join(" ยท ");
2026-10-24T11:42:05.6558611Z  628 โ”‚
2026-10-24T11:42:05.6558746Z  629 โ”‚   const showChangedFilesPane =
2026-10-24T11:42:05.6558853Z  630 โ”‚     !showConnectionNotice &&
2026-10-24T11:42:05.6558929Z  631 โ”‚     selectedSection !== null &&
2026-10-24T11:42:05.6559008Z  632 โ”‚     parsedDiff.kind === "files" &&
2026-10-24T11:42:05.6559087Z  633 โ”‚     NativeReviewDiffView !== null;
2026-10-24T11:42:05.6559256Z  634 โ”‚   useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
2026-10-24T11:42:05.6559427Z  635 โ”‚   const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
2026-10-24T11:42:05.6559478Z  636 โ”‚
2026-10-24T11:42:05.6559550Z  637 โ”‚   const listHeader = (() => {
2026-10-24T11:42:05.6559635Z  638 โ”‚     const children: ReactElement[] = [];
2026-10-24T11:42:05.6559687Z  639 โ”‚
2026-10-24T11:42:05.6559750Z  640 โ”‚     if (error) {
2026-10-24T11:42:05.6559815Z  641 โ”‚       children.push(
2026-10-24T11:42:05.6559883Z  642 โ”‚         <View
2026-10-24T11:42:05.6559958Z  643 โ”‚           key="review-error"
2026-10-24T11:42:05.6560023Z  644 โ”‚           className={cn(
2026-10-24T11:42:05.6560103Z  645 โ”‚             "bg-card px-4 py-3",
2026-10-24T11:42:05.6560258Z  646 โ”‚             Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
2026-10-24T11:42:05.6560319Z  647 โ”‚           )}
2026-10-24T11:42:05.6560376Z  648 โ”‚         >
2026-10-24T11:42:05.6560542Z  649 โ”‚           <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
2026-10-24T11:42:05.6560702Z  650 โ”‚           <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
2026-10-24T11:42:05.6560764Z  651 โ”‚         </View>,
2026-10-24T11:42:05.6560819Z  652 โ”‚       );
2026-10-24T11:42:05.6560874Z  653 โ”‚     }
2026-10-24T11:42:05.6560927Z  654 โ”‚
2026-10-24T11:42:05.6561000Z  655 โ”‚     if (parsedDiffNotice) {
2026-10-24T11:42:05.6561420Z  656 โ”‚       children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
2026-10-24T11:42:05.6561482Z  657 โ”‚     }
2026-10-24T11:42:05.6561535Z  658 โ”‚
2026-10-24T11:42:05.6561614Z  659 โ”‚     if (children.length === 0) {
2026-10-24T11:42:05.6561677Z  660 โ”‚       return null;
2026-10-24T11:42:05.6561731Z  661 โ”‚     }
2026-10-24T11:42:05.6561784Z  662 โ”‚
2026-10-24T11:42:05.6561855Z  663 โ”‚     return <>{children}</>;
2026-10-24T11:42:05.6561910Z  664 โ”‚   })();
2026-10-24T11:42:05.6561979Z  665 โ”‚   const headerSubtitle = [
2026-10-24T11:42:05.6562058Z  666 โ”‚     headerDiffSummary.additions,
2026-10-24T11:42:05.6562135Z  667 โ”‚     headerDiffSummary.deletions,
2026-10-24T11:42:05.6562218Z  668 โ”‚     pendingReviewCommentCount > 0
2026-10-24T11:42:05.6562391Z  669 โ”‚       ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
2026-10-24T11:42:05.6562458Z  670 โ”‚       : null,
2026-10-24T11:42:05.6562514Z  671 โ”‚   ]
2026-10-24T11:42:05.6562580Z  672 โ”‚     .filter(Boolean)
2026-10-24T11:42:05.6562643Z  673 โ”‚     .join(" ยท ");
2026-10-24T11:42:05.6562779Z  674 โ”‚   const headerTitleText = selectedSection?.title ?? "Review changes";
2026-10-24T11:42:05.6562831Z  675 โ”‚
2026-10-24T11:42:05.6562890Z  676 โ”‚   return (
2026-10-24T11:42:05.6562946Z  677 โ”‚     <>
2026-10-24T11:42:05.6563011Z  678 โ”‚       <ReviewHeader
2026-10-24T11:42:05.6563095Z  679 โ”‚         environmentId={environmentId}
2026-10-24T11:42:05.6563165Z  680 โ”‚         threadId={threadId}
2026-10-24T11:42:05.6563239Z  681 โ”‚         title={headerTitleText}
2026-10-24T11:42:05.6563316Z  682 โ”‚         subtitle={headerSubtitle}
2026-10-24T11:42:05.6563413Z  683 โ”‚         androidSubtitle={androidHeaderSubtitle}
2026-10-24T11:42:05.6563567Z  684 โ”‚         iconColor={headerIcon}
2026-10-24T11:42:05.6563705Z  685 โ”‚         selectedThreadCwd={selectedThreadCwd}
2026-10-24T11:42:05.6563780Z  686 โ”‚         sectionMenu={sectionMenu}
2026-10-24T11:42:05.6563868Z  687 โ”‚         selectedSection={selectedSection}
2026-10-24T11:42:05.6563964Z  688 โ”‚         showSectionToolbar={showSectionToolbar}
2026-10-24T11:42:05.6564074Z  689 โ”‚         showChangedFilesToggle={showChangedFilesToggle}
2026-10-24T11:42:05.6564159Z  690 โ”‚         onRefresh={handlePullToRefresh}
2026-10-24T11:42:05.6564242Z  691 โ”‚         onSelectSection={selectSection}
2026-10-24T11:42:05.6564340Z  692 โ”‚         onReturnToThread={handleReturnToThread}
2026-10-24T11:42:05.6564398Z  693 โ”‚       />
2026-10-24T11:42:05.6564450Z  694 โ”‚
2026-10-24T11:42:05.6564518Z  695 โ”‚       <ScreenContent>
2026-10-24T11:42:05.6564640Z  696 โ”‚         <View className="flex-1 bg-sheet android:bg-sheet-solid">
2026-10-24T11:42:05.6564727Z  697 โ”‚           {showConnectionNotice ? (
2026-10-24T11:42:05.6564869Z  698 โ”‚             <View className="flex-1" style={{ paddingTop: topContentInset }}>
2026-10-24T11:42:05.6564960Z  699 โ”‚               <EnvironmentConnectionNotice
2026-10-24T11:42:05.6565135Z  700 โ”‚                 environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
2026-10-24T11:42:05.6565205Z  701 โ”‚                 connection={
2026-10-24T11:42:05.6565310Z  702 โ”‚                   environment.presentation?.connection ?? {
2026-10-24T11:42:05.6565395Z  703 โ”‚                     phase: "available",
2026-10-24T11:42:05.6565468Z  704 โ”‚                     error: null,
2026-10-24T11:42:05.6565543Z  705 โ”‚                     traceId: null,
2026-10-24T11:42:05.6565605Z  706 โ”‚                   }
2026-10-24T11:42:05.6565668Z  707 โ”‚                 }
2026-10-24T11:42:05.6565748Z  708 โ”‚                 resourceName="review"
2026-10-24T11:42:05.6565851Z  709 โ”‚                 onRetry={handleRetryEnvironment}
2026-10-24T11:42:05.6565913Z  710 โ”‚               />
2026-10-24T11:42:05.6565976Z  711 โ”‚             </View>
2026-10-24T11:42:05.6566134Z  712 โ”‚           ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
2026-10-24T11:42:05.6566196Z  713 โ”‚             <View
2026-10-24T11:42:05.6566270Z  714 โ”‚               className="flex-1"
2026-10-24T11:42:05.6566335Z  715 โ”‚               style={{
2026-10-24T11:42:05.6566451Z  716 โ”‚                 backgroundColor: nativeBridge.theme.background,
2026-10-24T11:42:05.6566512Z  717 โ”‚               }}
2026-10-24T11:42:05.6566570Z  718 โ”‚             >
2026-10-24T11:42:05.6566633Z  719 โ”‚               <View
2026-10-24T11:42:05.6566720Z  720 โ”‚                 className="min-w-0 flex-1"
2026-10-24T11:42:05.6566866Z  721 โ”‚                 style={listHeader ? { paddingTop: topContentInset } : undefined}
2026-10-24T11:42:05.6566931Z  722 โ”‚               >
2026-10-24T11:42:05.6567000Z  723 โ”‚                 {listHeader}
2026-10-24T11:42:05.6567121Z  724 โ”‚                 <View className="min-w-0 flex-1" collapsable={false}>
2026-10-24T11:42:05.6567202Z  725 โ”‚                   <NativeReviewDiffView
2026-10-24T11:42:05.6567311Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6567483Z      ยท                              โ•ฐโ”€โ”€ This component is created during render
2026-10-24T11:42:05.6567566Z  726 โ”‚                     collapsable={false}
2026-10-24T11:42:05.6567619Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6567872Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-24T11:42:05.6568257Z   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:42:05.6568298Z
2026-10-24T11:42:05.6568536Z   โš  unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-24T11:42:05.6568703Z      โ•ญโ”€[apps/web/src/components/pullRequest/pullRequestList.logic.ts:262:9]
2026-10-24T11:42:05.6568766Z  261 โ”‚ ): boolean {
2026-10-24T11:42:05.6568919Z  262 โ”‚   const labels = entry.labels.map((label) => label.name.trim().toLowerCase());
2026-10-24T11:42:05.6569090Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6569239Z  263 โ”‚   const holds = (label: string) => labels.includes(label.trim().toLowerCase());
2026-10-24T11:42:05.6569291Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6569369Z   help: Switch to `Set`
2026-10-24T11:42:05.6569381Z
2026-10-24T11:42:05.6569649Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6569825Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5]
2026-10-24T11:42:05.6569878Z  55 โ”‚
2026-10-24T11:42:05.6569944Z  56 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6570016Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6570149Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6570216Z  57 โ”‚     scheduler.reset();
2026-10-24T11:42:05.6570315Z  58 โ”‚     highlightedRowIdsRef.current = new Set();
2026-10-24T11:42:05.6570403Z  59 โ”‚     visibleChunkIndexRef.current = 0;
2026-10-24T11:42:05.6570520Z  60 โ”‚     setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 });
2026-10-24T11:42:05.6570606Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6570783Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6570897Z  61 โ”‚     setTokensPatchJson(createEmptyTokenPatch(resetKey));
2026-10-24T11:42:05.6570950Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6571581Z   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:42:05.6571907Z   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:42:05.6571909Z
2026-10-24T11:42:05.6572165Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6572373Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7]
2026-10-24T11:42:05.6572455Z  62 โ”‚     return () => scheduler.cancel();
2026-10-24T11:42:05.6572556Z  63 โ”‚   }, [enabled, resetKey, rows.length, scheduler]);
2026-10-24T11:42:05.6572684Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6572882Z     ยท          โ”‚                    โ•ฐโ”€โ”€ Unnecessary dependency `rows.length`
2026-10-24T11:42:05.6573042Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `enabled`
2026-10-24T11:42:05.6573095Z  64 โ”‚
2026-10-24T11:42:05.6573149Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6573453Z   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:42:05.6573773Z   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:42:05.6573775Z
2026-10-24T11:42:05.6573986Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T11:42:05.6574151Z    โ•ญโ”€[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
2026-10-24T11:42:05.6574229Z  3 โ”‚   AuthProvidersManageScope,
2026-10-24T11:42:05.6574299Z  4 โ”‚   type AuthSessionState,
2026-10-24T11:42:05.6574383Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6574527Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T11:42:05.6574594Z  5 โ”‚   type EnvironmentId,
2026-10-24T11:42:05.6574652Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6574755Z   help: Consider removing this import.
2026-10-24T11:42:05.6574758Z
2026-10-24T11:42:05.6575211Z   โš  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:42:05.6575340Z       โ•ญโ”€[apps/server/src/serverSettings.test.ts:1741:32]
2026-10-24T11:42:05.6575515Z  1740 โ”‚       const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
2026-10-24T11:42:05.6575703Z  1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-24T11:42:05.6575817Z       ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6575934Z  1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
2026-10-24T11:42:05.6575991Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6575994Z
2026-10-24T11:42:05.6576443Z   โš  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:42:05.6576565Z       โ•ญโ”€[apps/server/src/serverSettings.test.ts:1742:34]
2026-10-24T11:42:05.6576748Z  1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-24T11:42:05.6576857Z  1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
2026-10-24T11:42:05.6576974Z       ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6577094Z  1743 โ”‚         Schema.fromJsonString(Schema.Array(ProjectScript)),
2026-10-24T11:42:05.6577147Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6577203Z
2026-10-24T11:42:05.6577454Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-24T11:42:05.6577589Z     โ•ญโ”€[apps/web/src/lib/composerContextReferences.ts:90:40]
2026-10-24T11:42:05.6577667Z  89 โ”‚   let cursor = prompt.length;
2026-10-24T11:42:05.6577775Z  90 โ”‚   for (const occurrence of occurrences.reverse()) {
2026-10-24T11:42:05.6577881Z     ยท                                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6577962Z  91 โ”‚     let { start, end } = occurrence;
2026-10-24T11:42:05.6578014Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6578279Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-24T11:42:05.6578283Z
2026-10-24T11:42:05.6578536Z   โš  eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used.
2026-10-24T11:42:05.6578655Z     โ•ญโ”€[apps/web/src/lib/terminalContext.ts:56:10]
2026-10-24T11:42:05.6578708Z  55 โ”‚
2026-10-24T11:42:05.6578810Z  56 โ”‚ function normalizeTerminalContextSelection(
2026-10-24T11:42:05.6578919Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6579111Z     ยท                          โ•ฐโ”€โ”€ 'normalizeTerminalContextSelection' is declared here
2026-10-24T11:42:05.6579201Z  57 โ”‚   selection: TerminalContextSelection,
2026-10-24T11:42:05.6579254Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6579359Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6579363Z
2026-10-24T11:42:05.6579568Z   โš  typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-24T11:42:05.6579699Z     โ•ญโ”€[apps/web/src/contextMenuFallback.test.ts:38:9]
2026-10-24T11:42:05.6579772Z  37 โ”‚   get isConnected() {
2026-10-24T11:42:05.6579861Z  38 โ”‚     let current: FakeElement | null = this;
2026-10-24T11:42:05.6579938Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6580012Z  39 โ”‚     while (current?.parent) {
2026-10-24T11:42:05.6580063Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6580340Z   help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well.
2026-10-24T11:42:05.6580343Z
2026-10-24T11:42:05.6580539Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:42:05.6580708Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17]
2026-10-24T11:42:05.6580772Z  817 โ”‚               <div
2026-10-24T11:42:05.6580890Z  818 โ”‚                 key={`${index}:${check.name}:${check.url ?? ""}`}
2026-10-24T11:42:05.6581055Z      ยท                 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6581223Z  819 โ”‚                 className="group flex items-center gap-2 rounded-md pr-1 hover:bg-accent/60"
2026-10-24T11:42:05.6581278Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6581424Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:42:05.6581427Z
2026-10-24T11:42:05.6581622Z   โš  eslint(no-unused-vars): Identifier 'Fiber' is imported but never used.
2026-10-24T11:42:05.6581718Z     โ•ญโ”€[apps/server/src/ws.ts:10:13]
2026-10-24T11:42:05.6581807Z   9 โ”‚ import * as Effect from "effect/Effect";
2026-10-24T11:42:05.6581890Z  10 โ”‚ import * as Fiber from "effect/Fiber";
2026-10-24T11:42:05.6581967Z     ยท             โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:42:05.6582157Z     ยท               โ•ฐโ”€โ”€ 'Fiber' is imported here
2026-10-24T11:42:05.6582290Z  11 โ”‚ import * as FileSystem from "effect/FileSystem";
2026-10-24T11:42:05.6582341Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6582440Z   help: Consider removing this import.
2026-10-24T11:42:05.6582443Z
2026-10-24T11:42:05.6582642Z   โš  eslint(no-unused-vars): Identifier 'Schedule' is imported but never used.
2026-10-24T11:42:05.6582736Z     โ•ญโ”€[apps/server/src/ws.ts:17:13]
2026-10-24T11:42:05.6582815Z  16 โ”‚ import * as Ref from "effect/Ref";
2026-10-24T11:42:05.6582909Z  17 โ”‚ import * as Schedule from "effect/Schedule";
2026-10-24T11:42:05.6582987Z     ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6583123Z     ยท                 โ•ฐโ”€โ”€ 'Schedule' is imported here
2026-10-24T11:42:05.6583214Z  18 โ”‚ import * as Schema from "effect/Schema";
2026-10-24T11:42:05.6583270Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6583368Z   help: Consider removing this import.
2026-10-24T11:42:05.6583370Z
2026-10-24T11:42:05.6583673Z   โš  eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:42:05.6583774Z       โ•ญโ”€[apps/server/src/ws.ts:1286:13]
2026-10-24T11:42:05.6583928Z  1285 โ”‚       const usageLimitSources = yield* UsageLimitSources.UsageLimitSources;
2026-10-24T11:42:05.6584128Z  1286 โ”‚       const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner;
2026-10-24T11:42:05.6584234Z       ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6584406Z       ยท                         โ•ฐโ”€โ”€ 'projectSetupScriptRunner' is declared here
2026-10-24T11:42:05.6584581Z  1287 โ”‚       const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker;
2026-10-24T11:42:05.6584638Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6584744Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6584747Z
2026-10-24T11:42:05.6584945Z   โš  eslint(no-unused-vars): Identifier 'identity' is imported but never used.
2026-10-24T11:42:05.6585047Z     โ•ญโ”€[apps/server/src/auth/http.ts:28:10]
2026-10-24T11:42:05.6585135Z  27 โ”‚ import * as Schema from "effect/Schema";
2026-10-24T11:42:05.6585228Z  28 โ”‚ import { identity } from "effect/Function";
2026-10-24T11:42:05.6585303Z     ยท          โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6585435Z     ยท              โ•ฐโ”€โ”€ 'identity' is imported here
2026-10-24T11:42:05.6585520Z  29 โ”‚ import * as Layer from "effect/Layer";
2026-10-24T11:42:05.6585573Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6585676Z   help: Consider removing this import.
2026-10-24T11:42:05.6585682Z
2026-10-24T11:42:05.6585939Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:42:05.6586065Z      โ•ญโ”€[apps/server/src/serverRuntimeStartup.ts:728:7]
2026-10-24T11:42:05.6586118Z  727 โ”‚
2026-10-24T11:42:05.6586201Z  728 โ”‚ const layer = layerWithOptions();
2026-10-24T11:42:05.6586272Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:42:05.6586398Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T11:42:05.6586450Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6586555Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6586557Z
2026-10-24T11:42:05.6587096Z   โš  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:42:05.6587263Z     โ•ญโ”€[apps/server/src/project/ProjectService.test.ts:94:3]
2026-10-24T11:42:05.6587321Z  93 โ”‚     ) {
2026-10-24T11:42:05.6587528Z  94 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T11:42:05.6587703Z  95 โ”‚ โ”‚       const project = Option.getOrThrow(yield* service.getById(projectId));
2026-10-24T11:42:05.6587826Z  96 โ”‚ โ”‚       if (predicate(project)) return project;
2026-10-24T11:42:05.6587930Z  97 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T11:42:05.6588054Z  98 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T11:42:05.6588212Z  99 โ”‚       return yield* Effect.die(`Project ${projectId} was not enriched in time.`);
2026-10-24T11:42:05.6588267Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6588269Z
2026-10-24T11:42:05.6588741Z   โš  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:42:05.6588900Z     โ•ญโ”€[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3]
2026-10-24T11:42:05.6588957Z  27 โ”‚     ) {
2026-10-24T11:42:05.6589157Z  28 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T11:42:05.6589302Z  29 โ”‚ โ”‚       const available = yield* service.peek(workspaceRoot);
2026-10-24T11:42:05.6589433Z  30 โ”‚ โ”‚       if (predicate(available)) return available;
2026-10-24T11:42:05.6589536Z  31 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T11:42:05.6589656Z  32 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T11:42:05.6589835Z  33 โ”‚       return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`);
2026-10-24T11:42:05.6589889Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6589891Z
2026-10-24T11:42:05.6590262Z   โš  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:42:05.6590389Z      โ•ญโ”€[apps/server/src/auth/RpcAuthorization.ts:237:17]
2026-10-24T11:42:05.6590524Z  236 โ”‚ const requiredScopesForSettingsUpdate = (payload: unknown) => {
2026-10-24T11:42:05.6590657Z  237 โ”‚   const input = Schema.decodeUnknownSync(SettingsUpdate)(payload);
2026-10-24T11:42:05.6590771Z      ยท                 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6590914Z  238 โ”‚   const scopes = requiredScopesForServerSettingsPatch(input.patch);
2026-10-24T11:42:05.6590967Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6590969Z
2026-10-24T11:42:05.6591355Z   โš  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:42:05.6591479Z      โ•ญโ”€[apps/server/src/auth/RpcAuthorization.ts:256:26]
2026-10-24T11:42:05.6591579Z  255 โ”‚   if (method === WS_METHODS.assetsCreateUrl) {
2026-10-24T11:42:05.6591735Z  256 โ”‚     const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload);
2026-10-24T11:42:05.6591852Z      ยท                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6591915Z  257 โ”‚     return [
2026-10-24T11:42:05.6592026Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6592061Z
2026-10-24T11:42:05.6592231Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6592386Z      โ•ญโ”€[apps/web/src/components/CommandPaletteThreadItems.tsx:152:58]
2026-10-24T11:42:05.6592569Z  151 โ”‚       if (threadSearchQuery.trim().length > 0 && !threadSearchQuery.startsWith(">") && !isOpen) {
2026-10-24T11:42:05.6592702Z  152 โ”‚         claimThreadOpen(thread.environmentId, thread.id, Date.now());
2026-10-24T11:42:05.6592826Z      ยท                                                          โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6592999Z      ยท                                                               โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6593059Z  153 โ”‚       }
2026-10-24T11:42:05.6593112Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6593409Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6593711Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6593714Z
2026-10-24T11:42:05.6594184Z   โš  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:42:05.6594340Z      โ•ญโ”€[packages/client-runtime/src/connection/supervisor.test.ts:135:3]
2026-10-24T11:42:05.6594453Z  134 โ”‚       let lastState = yield* SubscriptionRef.get(state);
2026-10-24T11:42:05.6594671Z  135 โ”‚ โ•ญโ”€โ–ถ   for (let iteration = 0; iteration < 100; iteration += 1) {
2026-10-24T11:42:05.6594808Z  136 โ”‚ โ”‚       lastState = yield* SubscriptionRef.get(state);
2026-10-24T11:42:05.6594918Z  137 โ”‚ โ”‚       if (predicate(lastState)) {
2026-10-24T11:42:05.6595019Z  138 โ”‚ โ”‚         return lastState;
2026-10-24T11:42:05.6595095Z  139 โ”‚ โ”‚       }
2026-10-24T11:42:05.6595196Z  140 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T11:42:05.6595324Z  141 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T11:42:05.6595403Z  142 โ”‚       return yield* Effect.die(
2026-10-24T11:42:05.6595458Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6595461Z
2026-10-24T11:42:05.6595629Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6595816Z       โ•ญโ”€[apps/web/src/components/CommandPalette.tsx:2037:20]
2026-10-24T11:42:05.6596040Z  2036 โ”‚         title: inferProjectTitleFromPath(destinationPath),
2026-10-24T11:42:05.6596135Z  2037 โ”‚         createdAt: new Date().toISOString(),
2026-10-24T11:42:05.6596228Z       ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6596372Z       ยท                         โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6596479Z  2038 โ”‚         remoteUrl: addProjectCloneFlow.remoteUrl,
2026-10-24T11:42:05.6596534Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6596816Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6597119Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6597127Z
2026-10-24T11:42:05.6597594Z   โš  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:42:05.6597729Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:131:9]
2026-10-24T11:42:05.6597792Z  130 โ”‚           ) {
2026-10-24T11:42:05.6598004Z  131 โ”‚ โ•ญโ”€โ–ถ         for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T11:42:05.6598130Z  132 โ”‚ โ”‚             if (subscriptions.length >= count) {
2026-10-24T11:42:05.6598223Z  133 โ”‚ โ”‚               return;
2026-10-24T11:42:05.6598306Z  134 โ”‚ โ”‚             }
2026-10-24T11:42:05.6598419Z  135 โ”‚ โ”‚             yield* Effect.yieldNow;
2026-10-24T11:42:05.6598559Z  136 โ”‚ โ•ฐโ”€โ–ถ         }
2026-10-24T11:42:05.6598723Z  137 โ”‚             return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`));
2026-10-24T11:42:05.6598777Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6598780Z
2026-10-24T11:42:05.6599241Z   โš  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:42:05.6599374Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:252:7]
2026-10-24T11:42:05.6599540Z  251 โ”‚           yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient)));
2026-10-24T11:42:05.6599798Z  252 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) {
2026-10-24T11:42:05.6599908Z  253 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T11:42:05.6600040Z  254 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T11:42:05.6600165Z  255 โ”‚           yield* SubscriptionRef.set(activeSession, Option.none());
2026-10-24T11:42:05.6600219Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6600222Z
2026-10-24T11:42:05.6600685Z   โš  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:42:05.6600819Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:258:7]
2026-10-24T11:42:05.6600874Z  257 โ”‚
2026-10-24T11:42:05.6601272Z  258 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-24T11:42:05.6601423Z  259 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T11:42:05.6601555Z  260 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T11:42:05.6601660Z  261 โ”‚           yield* Fiber.interrupt(subscriptionFiber);
2026-10-24T11:42:05.6601714Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6601716Z
2026-10-24T11:42:05.6602178Z   โš  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:42:05.6602310Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:322:7]
2026-10-24T11:42:05.6602374Z  321 โ”‚           );
2026-10-24T11:42:05.6602634Z  322 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) {
2026-10-24T11:42:05.6602741Z  323 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T11:42:05.6602875Z  324 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T11:42:05.6602930Z  325 โ”‚
2026-10-24T11:42:05.6602984Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6602987Z
2026-10-24T11:42:05.6603449Z   โš  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:42:05.6603586Z      โ•ญโ”€[packages/client-runtime/src/rpc/client.test.ts:330:7]
2026-10-24T11:42:05.6603755Z  329 โ”‚           yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient)));
2026-10-24T11:42:05.6604004Z  330 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-24T11:42:05.6604109Z  331 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T11:42:05.6604240Z  332 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T11:42:05.6604344Z  333 โ”‚           yield* Fiber.interrupt(subscriptionFiber);
2026-10-24T11:42:05.6604396Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6604398Z
2026-10-24T11:42:05.6604864Z   โš  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:42:05.6605003Z      โ•ญโ”€[packages/client-runtime/src/rpc/session.test.ts:226:3]
2026-10-24T11:42:05.6605061Z  225 โ”‚     ) {
2026-10-24T11:42:05.6605266Z  226 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T11:42:05.6605378Z  227 โ”‚ โ”‚       const socket = sockets[index];
2026-10-24T11:42:05.6605467Z  228 โ”‚ โ”‚       if (socket) {
2026-10-24T11:42:05.6605562Z  229 โ”‚ โ”‚         return socket;
2026-10-24T11:42:05.6605638Z  230 โ”‚ โ”‚       }
2026-10-24T11:42:05.6605740Z  231 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T11:42:05.6605866Z  232 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T11:42:05.6606105Z  233 โ”‚       return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket."));
2026-10-24T11:42:05.6606192Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6606194Z
2026-10-24T11:42:05.6606657Z   โš  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:42:05.6606791Z      โ•ญโ”€[packages/client-runtime/src/rpc/session.test.ts:240:3]
2026-10-24T11:42:05.6606848Z  239 โ”‚     ) {
2026-10-24T11:42:05.6607050Z  240 โ”‚ โ•ญโ”€โ–ถ   for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T11:42:05.6607267Z  241 โ”‚ โ”‚       const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index];
2026-10-24T11:42:05.6607361Z  242 โ”‚ โ”‚       if (request) {
2026-10-24T11:42:05.6607462Z  243 โ”‚ โ”‚         return request;
2026-10-24T11:42:05.6607539Z  244 โ”‚ โ”‚       }
2026-10-24T11:42:05.6607639Z  245 โ”‚ โ”‚       yield* Effect.yieldNow;
2026-10-24T11:42:05.6607765Z  246 โ”‚ โ•ฐโ”€โ–ถ   }
2026-10-24T11:42:05.6607931Z  247 โ”‚       return yield* Effect.die(new Error("Expected the RPC protocol to send a request."));
2026-10-24T11:42:05.6607984Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6607987Z
2026-10-24T11:42:05.6608156Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6608277Z       โ•ญโ”€[apps/web/src/components/Sidebar.tsx:1136:11]
2026-10-24T11:42:05.6608376Z  1135 โ”‚           foldSearchQuery(threadSearchQuery),
2026-10-24T11:42:05.6608445Z  1136 โ”‚           Date.now(),
2026-10-24T11:42:05.6608534Z       ยท           โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6608674Z       ยท                โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6608814Z  1137 โ”‚           // A list filter, as on mobile: a pick would move rows unexplained.
2026-10-24T11:42:05.6608869Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6609159Z   help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6609459Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6609461Z
2026-10-24T11:42:05.6609656Z   โš  eslint(no-unused-vars): Identifier 'Arr' is imported but never used.
2026-10-24T11:42:05.6609797Z    โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:4:13]
2026-10-24T11:42:05.6609919Z  3 โ”‚ import type { EnvironmentThreadShell } from "./models.ts";
2026-10-24T11:42:05.6610000Z  4 โ”‚ import * as Arr from "effect/Array";
2026-10-24T11:42:05.6610074Z    ยท             โ”€โ”ฌโ”€
2026-10-24T11:42:05.6610201Z    ยท              โ•ฐโ”€โ”€ 'Arr' is imported here
2026-10-24T11:42:05.6610285Z  5 โ”‚ import * as Order from "effect/Order";
2026-10-24T11:42:05.6610338Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6610436Z   help: Consider removing this import.
2026-10-24T11:42:05.6610439Z
2026-10-24T11:42:05.6610635Z   โš  eslint(no-unused-vars): Identifier 'Order' is imported but never used.
2026-10-24T11:42:05.6610768Z    โ•ญโ”€[packages/client-runtime/src/state/threadSort.ts:5:13]
2026-10-24T11:42:05.6610848Z  4 โ”‚ import * as Arr from "effect/Array";
2026-10-24T11:42:05.6610988Z  5 โ”‚ import * as Order from "effect/Order";
2026-10-24T11:42:05.6611125Z    ยท             โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:42:05.6611256Z    ยท               โ•ฐโ”€โ”€ 'Order' is imported here
2026-10-24T11:42:05.6611309Z  6 โ”‚
2026-10-24T11:42:05.6611362Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6611460Z   help: Consider removing this import.
2026-10-24T11:42:05.6611463Z
2026-10-24T11:42:05.6611648Z   โš  react(static-components): Cannot create components during render
2026-10-24T11:42:05.6611810Z      โ•ญโ”€[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10]
2026-10-24T11:42:05.6611899Z  196 โ”‚   const { onInput, onResize } = props;
2026-10-24T11:42:05.6612046Z  197 โ”‚   const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView();
2026-10-24T11:42:05.6612188Z      ยท                                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6612384Z      ยท                                                     โ•ฐโ”€โ”€ The component is created during render here
2026-10-24T11:42:05.6612512Z  198 โ”‚   const hasNativeSurface = Boolean(NativeTerminalSurfaceView);
2026-10-24T11:42:05.6612567Z  199 โ”‚
2026-10-24T11:42:05.6612635Z  200 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6612724Z  201 โ”‚     terminalDebugLog("native:surface", {
2026-10-24T11:42:05.6612812Z  202 โ”‚       terminalKey: props.terminalKey,
2026-10-24T11:42:05.6612889Z  203 โ”‚       native: hasNativeSurface,
2026-10-24T11:42:05.6613024Z  204 โ”‚       hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(),
2026-10-24T11:42:05.6613107Z  205 โ”‚       bufferLen: props.buffer.length,
2026-10-24T11:42:05.6613188Z  206 โ”‚       isRunning: props.isRunning,
2026-10-24T11:42:05.6613245Z  207 โ”‚     });
2026-10-24T11:42:05.6613412Z  208 โ”‚   }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]);
2026-10-24T11:42:05.6613502Z  209 โ”‚   const handleNativeInput = useCallback(
2026-10-24T11:42:05.6613619Z  210 โ”‚     (event: NativeSyntheticEvent<TerminalInputEvent>) => {
2026-10-24T11:42:05.6613717Z  211 โ”‚       if (!props.isRunning || props.readOnly) {
2026-10-24T11:42:05.6613781Z  212 โ”‚         return;
2026-10-24T11:42:05.6613837Z  213 โ”‚       }
2026-10-24T11:42:05.6613929Z  214 โ”‚       terminalDebugLog("native:onInput", {
2026-10-24T11:42:05.6615470Z  215 โ”‚         codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)),
2026-10-24T11:42:05.6615537Z  216 โ”‚       });
2026-10-24T11:42:05.6615625Z  217 โ”‚       onInput(event.nativeEvent.data);
2026-10-24T11:42:05.6615683Z  218 โ”‚     },
2026-10-24T11:42:05.6615782Z  219 โ”‚     [onInput, props.isRunning, props.readOnly],
2026-10-24T11:42:05.6615837Z  220 โ”‚   );
2026-10-24T11:42:05.6615934Z  221 โ”‚   const handleNativeResize = useCallback(
2026-10-24T11:42:05.6616054Z  222 โ”‚     (event: NativeSyntheticEvent<TerminalResizeEvent>) => {
2026-10-24T11:42:05.6616117Z  223 โ”‚       onResize({
2026-10-24T11:42:05.6616201Z  224 โ”‚         cols: event.nativeEvent.cols,
2026-10-24T11:42:05.6616283Z  225 โ”‚         rows: event.nativeEvent.rows,
2026-10-24T11:42:05.6616341Z  226 โ”‚       });
2026-10-24T11:42:05.6616396Z  227 โ”‚     },
2026-10-24T11:42:05.6616457Z  228 โ”‚     [onResize],
2026-10-24T11:42:05.6616511Z  229 โ”‚   );
2026-10-24T11:42:05.6616565Z  230 โ”‚
2026-10-24T11:42:05.6616648Z  231 โ”‚   if (NativeTerminalSurfaceView) {
2026-10-24T11:42:05.6616706Z  232 โ”‚     return (
2026-10-24T11:42:05.6616785Z  233 โ”‚       <View style={props.style}>
2026-10-24T11:42:05.6616866Z  234 โ”‚         <NativeTerminalSurfaceView
2026-10-24T11:42:05.6617043Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6617241Z      ยท                      โ•ฐโ”€โ”€ This component is created during render
2026-10-24T11:42:05.6617337Z  235 โ”‚           appearanceScheme={themeAppearance}
2026-10-24T11:42:05.6617391Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6617645Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-24T11:42:05.6617969Z   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:42:05.6617973Z
2026-10-24T11:42:05.6618234Z   โš  unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts.
2026-10-24T11:42:05.6618388Z     โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:12:14]
2026-10-24T11:42:05.6618547Z  11 โ”‚       addEventListener(_type: string, listener: (event: { data: string }) => void) {
2026-10-24T11:42:05.6618626Z  12 โ”‚         this.onmessage = listener;
2026-10-24T11:42:05.6618706Z     ยท              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6618762Z  13 โ”‚       }
2026-10-24T11:42:05.6618815Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6619137Z   help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on<event>` replaces any previously registered handler.
2026-10-24T11:42:05.6619140Z
2026-10-24T11:42:05.6619347Z   โš  typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-24T11:42:05.6619491Z     โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:16:9]
2026-10-24T11:42:05.6619558Z  15 โ”‚       constructor() {
2026-10-24T11:42:05.6619632Z  16 โ”‚         source = this;
2026-10-24T11:42:05.6619709Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6619764Z  17 โ”‚       }
2026-10-24T11:42:05.6619816Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6620092Z   help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well.
2026-10-24T11:42:05.6620095Z
2026-10-24T11:42:05.6620289Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-24T11:42:05.6620448Z     โ•ญโ”€[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15]
2026-10-24T11:42:05.6620514Z  71 โ”‚             <Pressable
2026-10-24T11:42:05.6620580Z  72 โ”‚               key={index}
2026-10-24T11:42:05.6620665Z     ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6620750Z  73 โ”‚               accessibilityRole="button"
2026-10-24T11:42:05.6620860Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6621071Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-24T11:42:05.6621074Z
2026-10-24T11:42:05.6621547Z   โš  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:42:05.6621705Z       โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1680:7]
2026-10-24T11:42:05.6621798Z  1679 โ”‚           yield* harness.replaceSession;
2026-10-24T11:42:05.6622010Z  1680 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T11:42:05.6622165Z  1681 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) {
2026-10-24T11:42:05.6622258Z  1682 โ”‚ โ”‚             break;
2026-10-24T11:42:05.6622340Z  1683 โ”‚ โ”‚           }
2026-10-24T11:42:05.6622449Z  1684 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T11:42:05.6622583Z  1685 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T11:42:05.6622657Z  1686 โ”‚           yield* Queue.offer(
2026-10-24T11:42:05.6622710Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6622712Z
2026-10-24T11:42:05.6623184Z   โš  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:42:05.6623340Z       โ•ญโ”€[packages/client-runtime/src/state/threads-sync.test.ts:1789:7]
2026-10-24T11:42:05.6623434Z  1788 โ”‚           yield* harness.replaceSession;
2026-10-24T11:42:05.6623647Z  1789 โ”‚ โ•ญโ”€โ–ถ       for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-24T11:42:05.6623809Z  1790 โ”‚ โ”‚           if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break;
2026-10-24T11:42:05.6623918Z  1791 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T11:42:05.6624049Z  1792 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T11:42:05.6624179Z  1793 โ”‚           expect(yield* Ref.get(harness.subscriptionCount)).toBe(2);
2026-10-24T11:42:05.6624233Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6624236Z
2026-10-24T11:42:05.6624500Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6624664Z      โ•ญโ”€[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5]
2026-10-24T11:42:05.6624835Z  112 โ”‚   const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate }));
2026-10-24T11:42:05.6624902Z  113 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6624976Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6625111Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6625275Z  114 โ”‚     if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) {
2026-10-24T11:42:05.6625339Z  115 โ”‚       return;
2026-10-24T11:42:05.6625395Z  116 โ”‚     }
2026-10-24T11:42:05.6625513Z  117 โ”‚     setEntry({ key: input.targetKey, location: candidate });
2026-10-24T11:42:05.6625585Z      ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6625758Z      ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6625953Z  118 โ”‚   }, [candidate, entry.key, entry.location, input.targetKey]);
2026-10-24T11:42:05.6626036Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6626644Z   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:42:05.6626973Z   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:42:05.6626976Z
2026-10-24T11:42:05.6627182Z   โš  eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used.
2026-10-24T11:42:05.6627276Z     โ•ญโ”€[apps/web/src/types.ts:22:3]
2026-10-24T11:42:05.6627353Z  21 โ”‚   EnvironmentThreadShell,
2026-10-24T11:42:05.6627420Z  22 โ”‚   ThreadRunSummary,
2026-10-24T11:42:05.6627498Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6627641Z     ยท           โ•ฐโ”€โ”€ 'ThreadRunSummary' is imported here
2026-10-24T11:42:05.6627712Z  23 โ”‚   ThreadRuntimeSummary,
2026-10-24T11:42:05.6627763Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6627860Z   help: Consider removing this import.
2026-10-24T11:42:05.6627863Z
2026-10-24T11:42:05.6628121Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6628291Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5]
2026-10-24T11:42:05.6628343Z  638 โ”‚
2026-10-24T11:42:05.6628409Z  639 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6628487Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6628622Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6628731Z  640 โ”‚     if (pendingLaunchEntry.key === launchTargetKey) {
2026-10-24T11:42:05.6628793Z  641 โ”‚       return;
2026-10-24T11:42:05.6628848Z  642 โ”‚     }
2026-10-24T11:42:05.6628923Z  643 โ”‚     setPendingLaunchEntry({
2026-10-24T11:42:05.6629010Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6629184Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6629256Z  644 โ”‚       key: launchTargetKey,
2026-10-24T11:42:05.6629307Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6629919Z   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:42:05.6630246Z   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:42:05.6630248Z
2026-10-24T11:42:05.6630506Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6630675Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5]
2026-10-24T11:42:05.6630729Z  648 โ”‚
2026-10-24T11:42:05.6630793Z  649 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6630864Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6630995Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6631181Z  650 โ”‚     if (initialAttachGridEntry.key === launchTargetKey) {
2026-10-24T11:42:05.6631274Z  651 โ”‚       return;
2026-10-24T11:42:05.6631329Z  652 โ”‚     }
2026-10-24T11:42:05.6631411Z  653 โ”‚     setInitialAttachGridEntry({
2026-10-24T11:42:05.6631503Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6631677Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6631748Z  654 โ”‚       key: launchTargetKey,
2026-10-24T11:42:05.6631801Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6632402Z   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:42:05.6632731Z   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:42:05.6632737Z
2026-10-24T11:42:05.6632995Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-24T11:42:05.6633163Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7]
2026-10-24T11:42:05.6633217Z  743 โ”‚
2026-10-24T11:42:05.6633281Z  744 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6633352Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6633481Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-24T11:42:05.6633584Z  745 โ”‚     if (!routeEnvironmentId || !routeThreadId) {
2026-10-24T11:42:05.6633653Z  746 โ”‚       setLastGridSize({
2026-10-24T11:42:05.6633740Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6633914Z      ยท              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-24T11:42:05.6633998Z  747 โ”‚         cols: DEFAULT_TERMINAL_COLS,
2026-10-24T11:42:05.6634048Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6634644Z   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:42:05.6634965Z   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:42:05.6634967Z
2026-10-24T11:42:05.6635176Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6635351Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24]
2026-10-24T11:42:05.6635406Z  537 โ”‚     });
2026-10-24T11:42:05.6635531Z  538 โ”‚   }, [terminal.buffer, terminal.buffer.length, terminalKey]);
2026-10-24T11:42:05.6635641Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6635890Z      ยท                                   โ•ฐโ”€โ”€ Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead
2026-10-24T11:42:05.6636054Z  539 โ”‚   const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null;
2026-10-24T11:42:05.6636105Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6636459Z   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:42:05.6636814Z   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:42:05.6636816Z
2026-10-24T11:42:05.6637019Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6637186Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7]
2026-10-24T11:42:05.6637283Z  708 โ”‚     sentInitialInputKeyRef.current = null;
2026-10-24T11:42:05.6637349Z  709 โ”‚   }, [terminalKey]);
2026-10-24T11:42:05.6637427Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6637571Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-24T11:42:05.6637624Z  710 โ”‚
2026-10-24T11:42:05.6637675Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6637975Z   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:42:05.6638287Z   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:42:05.6638290Z
2026-10-24T11:42:05.6638491Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-24T11:42:05.6638661Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52]
2026-10-24T11:42:05.6638717Z  799 โ”‚     };
2026-10-24T11:42:05.6638896Z  800 โ”‚   }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]);
2026-10-24T11:42:05.6639079Z      ยท                                                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6639316Z      ยท                                                                โ”‚                   โ•ฐโ”€โ”€ Unnecessary dependency `terminalKey`
2026-10-24T11:42:05.6639528Z      ยท                                                                โ•ฐโ”€โ”€ Unnecessary dependency `terminal.lifecycleVersion`
2026-10-24T11:42:05.6639580Z  801 โ”‚
2026-10-24T11:42:05.6639631Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6639925Z   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:42:05.6640233Z   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:42:05.6640241Z
2026-10-24T11:42:05.6640391Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6640562Z      โ•ญโ”€[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24]
2026-10-24T11:42:05.6640618Z  792 โ”‚   }
2026-10-24T11:42:05.6640724Z  793 โ”‚   const pasteSession = pasteSessionRef.current;
2026-10-24T11:42:05.6640838Z      ยท                        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6641004Z      ยท                                   โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6641074Z  794 โ”‚
2026-10-24T11:42:05.6641246Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6641808Z   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:42:05.6642145Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6642148Z
2026-10-24T11:42:05.6642352Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T11:42:05.6642488Z    โ•ญโ”€[packages/client-runtime/src/state/usageAccess.ts:3:8]
2026-10-24T11:42:05.6642562Z  2 โ”‚   AuthDiagnosticsReadScope,
2026-10-24T11:42:05.6642632Z  3 โ”‚   type AuthSessionState,
2026-10-24T11:42:05.6642716Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6642861Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T11:42:05.6642929Z  4 โ”‚   sessionGrantsScope,
2026-10-24T11:42:05.6642981Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6643086Z   help: Consider removing this import.
2026-10-24T11:42:05.6643091Z
2026-10-24T11:42:05.6643237Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6643407Z     โ•ญโ”€[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
2026-10-24T11:42:05.6643490Z  26 โ”‚   const latestInput = useRef(input);
2026-10-24T11:42:05.6643566Z  27 โ”‚   latestInput.current = input;
2026-10-24T11:42:05.6643679Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6643864Z     ยท        โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T11:42:05.6643980Z     ยท        โ•ฐโ”€โ”€ This value is a ref
2026-10-24T11:42:05.6644056Z  28 โ”‚   const mounted = useRef(true);
2026-10-24T11:42:05.6644108Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6644587Z   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:42:05.6644883Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6644886Z
2026-10-24T11:42:05.6645359Z   โš  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:42:05.6645510Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:169:7]
2026-10-24T11:42:05.6645571Z  168 โ”‚           });
2026-10-24T11:42:05.6645827Z  169 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-24T11:42:05.6646057Z  170 โ”‚ โ”‚           if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break;
2026-10-24T11:42:05.6646163Z  171 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T11:42:05.6646295Z  172 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T11:42:05.6646351Z  173 โ”‚
2026-10-24T11:42:05.6646404Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6646406Z
2026-10-24T11:42:05.6646872Z   โš  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:42:05.6647024Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:178:7]
2026-10-24T11:42:05.6647138Z  177 โ”‚           yield* Deferred.succeed(releaseSave, undefined);
2026-10-24T11:42:05.6647331Z  178 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-24T11:42:05.6647465Z  179 โ”‚ โ”‚           if ((yield* Ref.get(saved)).length > 0) break;
2026-10-24T11:42:05.6647568Z  180 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T11:42:05.6647699Z  181 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T11:42:05.6647755Z  182 โ”‚
2026-10-24T11:42:05.6647807Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6647809Z
2026-10-24T11:42:05.6648278Z   โš  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:42:05.6648425Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:307:7]
2026-10-24T11:42:05.6648554Z  306 โ”‚           yield* Deferred.succeed(releaseUnenrichedSave, undefined);
2026-10-24T11:42:05.6648747Z  307 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-24T11:42:05.6648869Z  308 โ”‚ โ”‚           const values = yield* Ref.get(saved);
2026-10-24T11:42:05.6649065Z  309 โ”‚ โ”‚           if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) {
2026-10-24T11:42:05.6649152Z  310 โ”‚ โ”‚             break;
2026-10-24T11:42:05.6649230Z  311 โ”‚ โ”‚           }
2026-10-24T11:42:05.6649341Z  312 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-24T11:42:05.6649475Z  313 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-24T11:42:05.6649530Z  314 โ”‚
2026-10-24T11:42:05.6649582Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6649585Z
2026-10-24T11:42:05.6649745Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:42:05.6649914Z     โ•ญโ”€[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5]
2026-10-24T11:42:05.6650019Z  65 โ”‚   const [expanded, setExpanded] = useState(false);
2026-10-24T11:42:05.6650103Z  66 โ”‚   const progress = useSharedValue(0);
2026-10-24T11:42:05.6650179Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6650311Z     ยท             โ•ฐโ”€โ”€ `progress` originates here
2026-10-24T11:42:05.6650377Z  67 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6650557Z  68 โ”‚     progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING);
2026-10-24T11:42:05.6650659Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6650793Z     ยท         โ•ฐโ”€โ”€ `progress` cannot be modified
2026-10-24T11:42:05.6650865Z  69 โ”‚   }, [expanded, progress]);
2026-10-24T11:42:05.6650917Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6651214Z   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:42:05.6651525Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:42:05.6651529Z
2026-10-24T11:42:05.6651687Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:42:05.6651864Z     โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5]
2026-10-24T11:42:05.6651922Z  90 โ”‚ }) {
2026-10-24T11:42:05.6652035Z  91 โ”‚   const rotation = useSharedValue(props.hidden ? 1 : 0);
2026-10-24T11:42:05.6652109Z     ยท         โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6652238Z     ยท             โ•ฐโ”€โ”€ `rotation` originates here
2026-10-24T11:42:05.6652308Z  92 โ”‚   useLayoutEffect(() => {
2026-10-24T11:42:05.6652450Z  93 โ”‚     rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING);
2026-10-24T11:42:05.6652522Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6652653Z     ยท         โ•ฐโ”€โ”€ `rotation` cannot be modified
2026-10-24T11:42:05.6652729Z  94 โ”‚   }, [props.hidden, rotation]);
2026-10-24T11:42:05.6652781Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6653048Z   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:42:05.6653359Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:42:05.6653361Z
2026-10-24T11:42:05.6653519Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:42:05.6653691Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5]
2026-10-24T11:42:05.6653784Z  266 โ”‚   const variant = props.variant ?? "plain";
2026-10-24T11:42:05.6653918Z  267 โ”‚   const loadingVisibility = useSharedValue(props.loading ? 1 : 0);
2026-10-24T11:42:05.6654006Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6654157Z      ยท                 โ•ฐโ”€โ”€ `loadingVisibility` originates here
2026-10-24T11:42:05.6654233Z  268 โ”‚   useLayoutEffect(() => {
2026-10-24T11:42:05.6654397Z  269 โ”‚     loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING);
2026-10-24T11:42:05.6654480Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6654633Z      ยท             โ•ฐโ”€โ”€ `loadingVisibility` cannot be modified
2026-10-24T11:42:05.6654723Z  270 โ”‚   }, [loadingVisibility, props.loading]);
2026-10-24T11:42:05.6654776Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6655039Z   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:42:05.6655343Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:42:05.6655346Z
2026-10-24T11:42:05.6655556Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:42:05.6655757Z      โ•ญโ”€[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5]
2026-10-24T11:42:05.6655811Z  325 โ”‚ }) {
2026-10-24T11:42:05.6655971Z  326 โ”‚   const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0);
2026-10-24T11:42:05.6656061Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6656215Z      ยท                  โ•ฐโ”€โ”€ `recordingVisibility` originates here
2026-10-24T11:42:05.6656284Z  327 โ”‚   useLayoutEffect(() => {
2026-10-24T11:42:05.6656471Z  328 โ”‚     recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING);
2026-10-24T11:42:05.6656558Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6656712Z      ยท              โ•ฐโ”€โ”€ `recordingVisibility` cannot be modified
2026-10-24T11:42:05.6656809Z  329 โ”‚   }, [props.phase, recordingVisibility]);
2026-10-24T11:42:05.6656864Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6657127Z   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:42:05.6657432Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:42:05.6657434Z
2026-10-24T11:42:05.6657581Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6657743Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
2026-10-24T11:42:05.6657903Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T11:42:05.6658027Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T11:42:05.6658153Z      ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6658332Z      ยท                                                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6658450Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T11:42:05.6658505Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6658980Z   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:42:05.6659273Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6659275Z
2026-10-24T11:42:05.6659428Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6659590Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
2026-10-24T11:42:05.6659643Z  125 โ”‚
2026-10-24T11:42:05.6659752Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T11:42:05.6659841Z      ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6659992Z      ยท                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6660094Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T11:42:05.6660145Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6660618Z   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:42:05.6660971Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6661000Z
2026-10-24T11:42:05.6661165Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6661322Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
2026-10-24T11:42:05.6661375Z  125 โ”‚
2026-10-24T11:42:05.6661481Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T11:42:05.6661569Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6661716Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6661820Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T11:42:05.6661872Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6662345Z   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:42:05.6662639Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6662641Z
2026-10-24T11:42:05.6662785Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6662943Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
2026-10-24T11:42:05.6662998Z  125 โ”‚
2026-10-24T11:42:05.6663104Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T11:42:05.6663220Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6663397Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6663500Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T11:42:05.6663552Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6664016Z   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:42:05.6664306Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6664309Z
2026-10-24T11:42:05.6664453Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6664615Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
2026-10-24T11:42:05.6664670Z  125 โ”‚
2026-10-24T11:42:05.6664775Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T11:42:05.6664889Z      ยท                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6665056Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6665156Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T11:42:05.6665208Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6665673Z   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:42:05.6666016Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6666050Z
2026-10-24T11:42:05.6666196Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6666354Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-24T11:42:05.6666465Z  126 โ”‚       if (!sessionRef.current || !recorderRef.current) {
2026-10-24T11:42:05.6666660Z  127 โ”‚ โ•ญโ”€โ–ถ     const recorder = createLazyVoiceRecorder({
2026-10-24T11:42:05.6666836Z  128 โ”‚ โ”‚         create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T11:42:05.6666961Z  129 โ”‚ โ”‚         onStatus: (status: RecordingStatus) => {
2026-10-24T11:42:05.6667120Z  130 โ”‚ โ”‚           sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T11:42:05.6667243Z  131 โ”‚ โ”‚             isFinished: status.isFinished,
2026-10-24T11:42:05.6667422Z  132 โ”‚ โ”‚             hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T11:42:05.6667526Z  133 โ”‚ โ”‚             error: status.error,
2026-10-24T11:42:05.6667624Z  134 โ”‚ โ”‚             url: status.url,
2026-10-24T11:42:05.6667706Z  135 โ”‚ โ”‚           });
2026-10-24T11:42:05.6667784Z  136 โ”‚ โ”‚         },
2026-10-24T11:42:05.6667982Z  137 โ”‚ โ”‚         // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T11:42:05.6668089Z  138 โ”‚ โ”‚         selectInput: (inputs) => {
2026-10-24T11:42:05.6668251Z  139 โ”‚ โ”‚           const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T11:42:05.6668398Z  140 โ”‚ โ”‚           if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T11:42:05.6668564Z  141 โ”‚ โ”‚           const known = microphoneOrder(preferences.value.microphones);
2026-10-24T11:42:05.6668704Z  142 โ”‚ โ”‚           const order = rememberMicrophones(known, inputs);
2026-10-24T11:42:05.6668807Z  143 โ”‚ โ”‚           if (order !== known) {
2026-10-24T11:42:05.6668946Z  144 โ”‚ โ”‚             registry.set(updateMobilePreferencesAtom, {
2026-10-24T11:42:05.6669060Z  145 โ”‚ โ”‚               transform: (current) => ({
2026-10-24T11:42:05.6669269Z  146 โ”‚ โ”‚                 microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T11:42:05.6669354Z  147 โ”‚ โ”‚               }),
2026-10-24T11:42:05.6669441Z  148 โ”‚ โ”‚             });
2026-10-24T11:42:05.6669524Z  149 โ”‚ โ”‚           }
2026-10-24T11:42:05.6669664Z  150 โ”‚ โ”‚           return preferredMicrophoneInput(inputs, order);
2026-10-24T11:42:05.6669741Z  151 โ”‚ โ”‚         },
2026-10-24T11:42:05.6669872Z  152 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T11:42:05.6670111Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-24T11:42:05.6670197Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T11:42:05.6670249Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6670768Z   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:42:05.6671111Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6671114Z
2026-10-24T11:42:05.6671260Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6671420Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-24T11:42:05.6671476Z  152 โ”‚     });
2026-10-24T11:42:05.6671559Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T11:42:05.6671673Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6671860Z      ยท          โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T11:42:05.6671982Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T11:42:05.6672089Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T11:42:05.6672141Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6672607Z   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:42:05.6672896Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6672900Z
2026-10-24T11:42:05.6673043Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6673201Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-24T11:42:05.6673290Z  153 โ”‚         recorderRef.current = recorder;
2026-10-24T11:42:05.6673486Z  154 โ”‚ โ•ญโ”€โ–ถ     sessionRef.current = new VoiceInputSession({
2026-10-24T11:42:05.6673570Z  155 โ”‚ โ”‚         recorder,
2026-10-24T11:42:05.6673699Z  156 โ”‚ โ”‚         getTranscriber: getLocalVoiceTranscriber,
2026-10-24T11:42:05.6673817Z  157 โ”‚ โ”‚         requestPermission: async () => {
2026-10-24T11:42:05.6673982Z  158 โ”‚ โ”‚           const permission = await requestRecordingPermissionsAsync();
2026-10-24T11:42:05.6674173Z  159 โ”‚ โ”‚           return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T11:42:05.6674251Z  160 โ”‚ โ”‚         },
2026-10-24T11:42:05.6674538Z  161 โ”‚ โ”‚         configureRecording: configureVoiceRecordingAudio,
2026-10-24T11:42:05.6674709Z  162 โ”‚ โ”‚         releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T11:42:05.6674842Z  163 โ”‚ โ”‚         deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T11:42:05.6674956Z  164 โ”‚ โ”‚         onStateChange: (nextState) =>
2026-10-24T11:42:05.6675046Z  165 โ”‚ โ”‚           setState({
2026-10-24T11:42:05.6675149Z  166 โ”‚ โ”‚             state: nextState,
2026-10-24T11:42:05.6675288Z  167 โ”‚ โ”‚             ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T11:42:05.6675418Z  168 โ”‚ โ”‚             label: sessionRef.current?.label ?? null,
2026-10-24T11:42:05.6675499Z  169 โ”‚ โ”‚           }),
2026-10-24T11:42:05.6675628Z  170 โ”‚ โ”œโ”€โ–ถ     });
2026-10-24T11:42:05.6675833Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6675894Z  171 โ”‚       }
2026-10-24T11:42:05.6675946Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6676414Z   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:42:05.6676703Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6676705Z
2026-10-24T11:42:05.6676850Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6677014Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-24T11:42:05.6677100Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T11:42:05.6677202Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T11:42:05.6677313Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6677497Z      ยท          โ”‚        โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-24T11:42:05.6677614Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-24T11:42:05.6677679Z  155 โ”‚       recorder,
2026-10-24T11:42:05.6677731Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6678202Z   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:42:05.6678500Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6678506Z
2026-10-24T11:42:05.6678652Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6678812Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-24T11:42:05.6678898Z  184 โ”‚     return () => subscription.remove();
2026-10-24T11:42:05.6678965Z  185 โ”‚   }, [controller]);
2026-10-24T11:42:05.6679042Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6679190Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6679242Z  186 โ”‚
2026-10-24T11:42:05.6679294Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6679810Z   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:42:05.6680133Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6680136Z
2026-10-24T11:42:05.6680279Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6680438Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-24T11:42:05.6680524Z  184 โ”‚     return () => subscription.remove();
2026-10-24T11:42:05.6680589Z  185 โ”‚   }, [controller]);
2026-10-24T11:42:05.6680666Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6680816Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6680872Z  186 โ”‚
2026-10-24T11:42:05.6680923Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6681464Z   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:42:05.6681753Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6681756Z
2026-10-24T11:42:05.6681899Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6682056Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-24T11:42:05.6682113Z  191 โ”‚     },
2026-10-24T11:42:05.6682184Z  192 โ”‚     [controller, recorder],
2026-10-24T11:42:05.6682267Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6682413Z      ยท           โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6682468Z  193 โ”‚   );
2026-10-24T11:42:05.6682518Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6682985Z   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:42:05.6683277Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6683279Z
2026-10-24T11:42:05.6683422Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6683585Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-24T11:42:05.6683678Z  174 โ”‚   const controller = session.controller;
2026-10-24T11:42:05.6683766Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T11:42:05.6683871Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6684030Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6684081Z  176 โ”‚
2026-10-24T11:42:05.6684132Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6684601Z   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:42:05.6684961Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6685001Z
2026-10-24T11:42:05.6685144Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6685302Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-24T11:42:05.6685359Z  191 โ”‚     },
2026-10-24T11:42:05.6685431Z  192 โ”‚     [controller, recorder],
2026-10-24T11:42:05.6685520Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6685667Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6685722Z  193 โ”‚   );
2026-10-24T11:42:05.6685774Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6686245Z   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:42:05.6686539Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6686541Z
2026-10-24T11:42:05.6686685Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6686843Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-24T11:42:05.6686936Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T11:42:05.6687046Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T11:42:05.6687136Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6687293Z      ยท                         โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6687351Z  247 โ”‚
2026-10-24T11:42:05.6687405Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6687870Z   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:42:05.6688160Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6688163Z
2026-10-24T11:42:05.6688307Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6688463Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-24T11:42:05.6688553Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-24T11:42:05.6688665Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-24T11:42:05.6688799Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6688959Z      ยท                              โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6689011Z  247 โ”‚
2026-10-24T11:42:05.6689064Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6689529Z   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:42:05.6689818Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6689821Z
2026-10-24T11:42:05.6690018Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6690206Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-24T11:42:05.6690274Z  260 โ”‚     setOwnerFocused,
2026-10-24T11:42:05.6690336Z  261 โ”‚     session,
2026-10-24T11:42:05.6690407Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6690547Z      ยท        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6690607Z  262 โ”‚     stop,
2026-10-24T11:42:05.6690659Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6691148Z   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:42:05.6691441Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6691446Z
2026-10-24T11:42:05.6691589Z   โš  react(refs): Cannot access refs during render
2026-10-24T11:42:05.6691746Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-24T11:42:05.6691801Z  250 โ”‚
2026-10-24T11:42:05.6691939Z  251 โ”‚ โ•ญโ”€โ–ถ   return {
2026-10-24T11:42:05.6692150Z  252 โ”‚ โ”‚       isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-24T11:42:05.6692230Z  253 โ”‚ โ”‚       state,
2026-10-24T11:42:05.6692319Z  254 โ”‚ โ”‚       audioLevels,
2026-10-24T11:42:05.6692412Z  255 โ”‚ โ”‚       elapsedSeconds,
2026-10-24T11:42:05.6692549Z  256 โ”‚ โ”‚       isBusy: voiceInputBlocksSubmission(state),
2026-10-24T11:42:05.6692633Z  257 โ”‚ โ”‚       ownerKey,
2026-10-24T11:42:05.6692712Z  258 โ”‚ โ”‚       label,
2026-10-24T11:42:05.6692802Z  259 โ”‚ โ”‚       focusedOwners,
2026-10-24T11:42:05.6692896Z  260 โ”‚ โ”‚       setOwnerFocused,
2026-10-24T11:42:05.6692978Z  261 โ”‚ โ”‚       session,
2026-10-24T11:42:05.6693056Z  262 โ”‚ โ”‚       stop,
2026-10-24T11:42:05.6693135Z  263 โ”‚ โ”‚       cancel,
2026-10-24T11:42:05.6693265Z  264 โ”‚ โ”œโ”€โ–ถ   };
2026-10-24T11:42:05.6693466Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-24T11:42:05.6693523Z  265 โ”‚     }
2026-10-24T11:42:05.6693574Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6694052Z   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:42:05.6694347Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-24T11:42:05.6694350Z
2026-10-24T11:42:05.6694508Z   โš  react(immutability): This value cannot be modified
2026-10-24T11:42:05.6694667Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T11:42:05.6694826Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-24T11:42:05.6695007Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-24T11:42:05.6695124Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6695262Z      ยท              โ•ฐโ”€โ”€ `audioLevels` originates here
2026-10-24T11:42:05.6695380Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-24T11:42:05.6695528Z  124 โ”‚   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-24T11:42:05.6695580Z  125 โ”‚
2026-10-24T11:42:05.6695687Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-24T11:42:05.6695786Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-24T11:42:05.6695925Z  128 โ”‚       create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-24T11:42:05.6696020Z  129 โ”‚       onStatus: (status: RecordingStatus) => {
2026-10-24T11:42:05.6696142Z  130 โ”‚         sessionRef.current?.controller.handleRecorderStatus({
2026-10-24T11:42:05.6696234Z  131 โ”‚           isFinished: status.isFinished,
2026-10-24T11:42:05.6696382Z  132 โ”‚           hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-24T11:42:05.6696456Z  133 โ”‚           error: status.error,
2026-10-24T11:42:05.6696526Z  134 โ”‚           url: status.url,
2026-10-24T11:42:05.6696585Z  135 โ”‚         });
2026-10-24T11:42:05.6696642Z  136 โ”‚       },
2026-10-24T11:42:05.6696808Z  137 โ”‚       // Read when recording starts so preference changes do not re-render every composer.
2026-10-24T11:42:05.6696886Z  138 โ”‚       selectInput: (inputs) => {
2026-10-24T11:42:05.6697009Z  139 โ”‚         const preferences = registry.get(mobilePreferencesAtom);
2026-10-24T11:42:05.6697121Z  140 โ”‚         if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-24T11:42:05.6697253Z  141 โ”‚         const known = microphoneOrder(preferences.value.microphones);
2026-10-24T11:42:05.6697367Z  142 โ”‚         const order = rememberMicrophones(known, inputs);
2026-10-24T11:42:05.6697442Z  143 โ”‚         if (order !== known) {
2026-10-24T11:42:05.6697549Z  144 โ”‚           registry.set(updateMobilePreferencesAtom, {
2026-10-24T11:42:05.6697633Z  145 โ”‚             transform: (current) => ({
2026-10-24T11:42:05.6697807Z  146 โ”‚               microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-24T11:42:05.6697869Z  147 โ”‚             }),
2026-10-24T11:42:05.6697930Z  148 โ”‚           });
2026-10-24T11:42:05.6697987Z  149 โ”‚         }
2026-10-24T11:42:05.6698097Z  150 โ”‚         return preferredMicrophoneInput(inputs, order);
2026-10-24T11:42:05.6698153Z  151 โ”‚       },
2026-10-24T11:42:05.6698210Z  152 โ”‚     });
2026-10-24T11:42:05.6698292Z  153 โ”‚     recorderRef.current = recorder;
2026-10-24T11:42:05.6698393Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-24T11:42:05.6698461Z  155 โ”‚       recorder,
2026-10-24T11:42:05.6698565Z  156 โ”‚       getTranscriber: getLocalVoiceTranscriber,
2026-10-24T11:42:05.6698650Z  157 โ”‚       requestPermission: async () => {
2026-10-24T11:42:05.6698780Z  158 โ”‚         const permission = await requestRecordingPermissionsAsync();
2026-10-24T11:42:05.6698937Z  159 โ”‚         return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-24T11:42:05.6698993Z  160 โ”‚       },
2026-10-24T11:42:05.6699104Z  161 โ”‚       configureRecording: configureVoiceRecordingAudio,
2026-10-24T11:42:05.6699209Z  162 โ”‚       releaseRecording: releaseVoiceRecordingAudio,
2026-10-24T11:42:05.6699312Z  163 โ”‚       deleteRecording: (uri) => new File(uri).delete(),
2026-10-24T11:42:05.6699393Z  164 โ”‚       onStateChange: (nextState) =>
2026-10-24T11:42:05.6699456Z  165 โ”‚         setState({
2026-10-24T11:42:05.6699526Z  166 โ”‚           state: nextState,
2026-10-24T11:42:05.6699689Z  167 โ”‚           ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-24T11:42:05.6699819Z  168 โ”‚           label: sessionRef.current?.label ?? null,
2026-10-24T11:42:05.6699878Z  169 โ”‚         }),
2026-10-24T11:42:05.6699933Z  170 โ”‚     });
2026-10-24T11:42:05.6699987Z  171 โ”‚   }
2026-10-24T11:42:05.6700038Z  172 โ”‚
2026-10-24T11:42:05.6700123Z  173 โ”‚   const session = sessionRef.current;
2026-10-24T11:42:05.6700211Z  174 โ”‚   const controller = session.controller;
2026-10-24T11:42:05.6700297Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-24T11:42:05.6700349Z  176 โ”‚
2026-10-24T11:42:05.6700415Z  177 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6700564Z  178 โ”‚     const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-24T11:42:05.6700706Z  179 โ”‚       // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-24T11:42:05.6700850Z  180 โ”‚       // real background state cancels preparation; recorder status handles
2026-10-24T11:42:05.6700956Z  181 โ”‚       // calls and route interruptions during capture.
2026-10-24T11:42:05.6701109Z  182 โ”‚       if (nextState === "background") controller.appMovedToBackground();
2026-10-24T11:42:05.6701166Z  183 โ”‚     });
2026-10-24T11:42:05.6701250Z  184 โ”‚     return () => subscription.remove();
2026-10-24T11:42:05.6701316Z  185 โ”‚   }, [controller]);
2026-10-24T11:42:05.6701367Z  186 โ”‚
2026-10-24T11:42:05.6701427Z  187 โ”‚   useEffect(
2026-10-24T11:42:05.6701490Z  188 โ”‚     () => () => {
2026-10-24T11:42:05.6701561Z  189 โ”‚       controller.dispose();
2026-10-24T11:42:05.6701630Z  190 โ”‚       recorder.release();
2026-10-24T11:42:05.6701687Z  191 โ”‚     },
2026-10-24T11:42:05.6701757Z  192 โ”‚     [controller, recorder],
2026-10-24T11:42:05.6701810Z  193 โ”‚   );
2026-10-24T11:42:05.6701862Z  194 โ”‚
2026-10-24T11:42:05.6701931Z  195 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6702029Z  196 โ”‚     if (state.phase !== "recording") return;
2026-10-24T11:42:05.6702082Z  197 โ”‚
2026-10-24T11:42:05.6702231Z  198 โ”‚     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-24T11:42:05.6702336Z  199 โ”‚     const activation = activateKeepAwakeAsync(tag);
2026-10-24T11:42:05.6702417Z  200 โ”‚     void activation.catch(() => {});
2026-10-24T11:42:05.6702480Z  201 โ”‚     return () => {
2026-10-24T11:42:05.6702632Z  202 โ”‚       // Release after activation settles, even if the recording ends immediately.
2026-10-24T11:42:05.6702770Z  203 โ”‚       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-24T11:42:05.6702825Z  204 โ”‚     };
2026-10-24T11:42:05.6702903Z  205 โ”‚   }, [keepAwakeId, state.phase]);
2026-10-24T11:42:05.6702955Z  206 โ”‚
2026-10-24T11:42:05.6703078Z  207 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6703243Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T11:42:05.6703296Z  209 โ”‚
2026-10-24T11:42:05.6703418Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T11:42:05.6703573Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T11:42:05.6703676Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T11:42:05.6703755Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6703898Z      ยท            โ•ฐโ”€โ”€ `audioLevels` cannot be modified
2026-10-24T11:42:05.6703954Z  213 โ”‚     }
2026-10-24T11:42:05.6704006Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6704276Z   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:42:05.6704594Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:42:05.6704599Z
2026-10-24T11:42:05.6704802Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-24T11:42:05.6704962Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-24T11:42:05.6705014Z  206 โ”‚
2026-10-24T11:42:05.6705078Z  207 โ”‚   useEffect(() => {
2026-10-24T11:42:05.6705158Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6705379Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-24T11:42:05.6705516Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-24T11:42:05.6705575Z  209 โ”‚
2026-10-24T11:42:05.6705699Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-24T11:42:05.6705855Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-24T11:42:05.6705956Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-24T11:42:05.6706033Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6706167Z      ยท            โ•ฐโ”€โ”€ This modifies `audioLevels`
2026-10-24T11:42:05.6706222Z  213 โ”‚     }
2026-10-24T11:42:05.6706273Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6706616Z   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:42:05.6706926Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-24T11:42:05.6706931Z
2026-10-24T11:42:05.6707130Z   โš  eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used.
2026-10-24T11:42:05.6707272Z    โ•ญโ”€[packages/client-runtime/src/state/sharedSettings.ts:2:3]
2026-10-24T11:42:05.6707334Z  1 โ”‚ import type {
2026-10-24T11:42:05.6707398Z  2 โ”‚   EnvironmentId,
2026-10-24T11:42:05.6707474Z    ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6707609Z    ยท         โ•ฐโ”€โ”€ 'EnvironmentId' is imported here
2026-10-24T11:42:05.6707696Z  3 โ”‚   ExecutionEnvironmentCapabilities,
2026-10-24T11:42:05.6707749Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6707848Z   help: Consider removing this import.
2026-10-24T11:42:05.6707850Z
2026-10-24T11:42:05.6708074Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6708255Z      โ•ญโ”€[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47]
2026-10-24T11:42:05.6708389Z  371 โ”‚   const { open, onOpenChange, onSnooze, timestampFormat } = props;
2026-10-24T11:42:05.6708544Z  372 โ”‚   const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : [];
2026-10-24T11:42:05.6708663Z      ยท                                               โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6708826Z      ยท                                                    โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6708887Z  373 โ”‚   return (
2026-10-24T11:42:05.6708940Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6709221Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6709522Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6709528Z
2026-10-24T11:42:05.6709698Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6709846Z      โ•ญโ”€[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39]
2026-10-24T11:42:05.6709941Z  852 โ”‚   if (snoozeGateClock.thread !== thread) {
2026-10-24T11:42:05.6710070Z  853 โ”‚     setSnoozeGateClock({ thread, now: new Date().toISOString() });
2026-10-24T11:42:05.6710181Z      ยท                                       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6710338Z      ยท                                            โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6710393Z  854 โ”‚   }
2026-10-24T11:42:05.6710444Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6710729Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6711048Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6711050Z
2026-10-24T11:42:05.6711219Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6711342Z      โ•ญโ”€[apps/web/src/hooks/useThreadActions.ts:821:56]
2026-10-24T11:42:05.6711445Z  820 โ”‚     const resolved = resolveThreadTarget(target);
2026-10-24T11:42:05.6711603Z  821 โ”‚     if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) {
2026-10-24T11:42:05.6711726Z      ยท                                                        โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6711901Z      ยท                                                             โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6711983Z  822 โ”‚       return AsyncResult.failure(
2026-10-24T11:42:05.6712037Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6712312Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6712605Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6712608Z
2026-10-24T11:42:05.6712774Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6712894Z      โ•ญโ”€[apps/web/src/hooks/useThreadActions.ts:709:46]
2026-10-24T11:42:05.6712968Z  708 โ”‚     const wokeAt = resolved
2026-10-24T11:42:05.6713165Z  709 โ”‚       ? threadWokeAt(resolved.thread, { now: new Date().toISOString() })
2026-10-24T11:42:05.6713313Z      ยท                                              โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6713474Z      ยท                                                   โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6713538Z  710 โ”‚       : null;
2026-10-24T11:42:05.6713590Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6713866Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6714159Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6714161Z
2026-10-24T11:42:05.6714431Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:42:05.6714566Z       โ•ญโ”€[packages/provider-pi/src/server/adapter.ts:3405:7]
2026-10-24T11:42:05.6714621Z  3404 โ”‚
2026-10-24T11:42:05.6714808Z  3405 โ”‚ const layer: Layer.Layer<ProviderAdapter.ProviderAdapterV2, never, PiAdapterV2DriverEnv> =
2026-10-24T11:42:05.6714882Z       ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-24T11:42:05.6715009Z       ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-24T11:42:05.6715074Z  3406 โ”‚   Layer.effect(
2026-10-24T11:42:05.6715126Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6715233Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6715235Z
2026-10-24T11:42:05.6715708Z   โš  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:42:05.6715831Z      โ•ญโ”€[packages/effect-acp/src/errors.test.ts:129:28]
2026-10-24T11:42:05.6715925Z  128 โ”‚       const secret = "acp-summary-secret";
2026-10-24T11:42:05.6716036Z  129 โ”‚       const cause = yield* Schema.decodeUnknownEffect(
2026-10-24T11:42:05.6716156Z      ยท                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6716225Z  130 โ”‚         Schema.Struct({
2026-10-24T11:42:05.6716277Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6716280Z
2026-10-24T11:42:05.6716654Z   โš  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:42:05.6716772Z       โ•ญโ”€[packages/effect-acp/src/client.ts:1269:11]
2026-10-24T11:42:05.6716931Z  1268 โ”‚         extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) =>
2026-10-24T11:42:05.6717108Z  1269 โ”‚           Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe(
2026-10-24T11:42:05.6717214Z       ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6717360Z  1270 โ”‚             Effect.mapError(() => AcpError.AcpRequestError.invalidParams()),
2026-10-24T11:42:05.6717414Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6717416Z
2026-10-24T11:42:05.6717618Z   โš  eslint(no-unused-vars): Identifier 'Duration' is imported but never used.
2026-10-24T11:42:05.6717752Z     โ•ญโ”€[packages/provider-pi/src/server/adapter.test.ts:24:13]
2026-10-24T11:42:05.6717847Z  23 โ”‚ import * as Deferred from "effect/Deferred";
2026-10-24T11:42:05.6717940Z  24 โ”‚ import * as Duration from "effect/Duration";
2026-10-24T11:42:05.6718020Z     ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6718216Z     ยท                 โ•ฐโ”€โ”€ 'Duration' is imported here
2026-10-24T11:42:05.6718340Z  25 โ”‚ import * as Effect from "effect/Effect";
2026-10-24T11:42:05.6718392Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6718491Z   help: Consider removing this import.
2026-10-24T11:42:05.6718493Z
2026-10-24T11:42:05.6718958Z   โš  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:42:05.6719084Z      โ•ญโ”€[packages/effect-acp/src/protocol.test.ts:500:31]
2026-10-24T11:42:05.6719140Z  499 โ”‚
2026-10-24T11:42:05.6719254Z  500 โ”‚       const response = yield* Schema.decodeUnknownEffect(
2026-10-24T11:42:05.6719378Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6719490Z  501 โ”‚         Schema.fromJsonString(JsonRpcErrorResponse),
2026-10-24T11:42:05.6719543Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6719546Z
2026-10-24T11:42:05.6719883Z   โš  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:42:05.6720002Z     โ•ญโ”€[packages/effect-acp/src/schema.test.ts:18:12]
2026-10-24T11:42:05.6720165Z  17 โ”‚     const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } };
2026-10-24T11:42:05.6720288Z  18 โ”‚     expect(Schema.is(V1.AvailableCommand)(command)).toBe(true);
2026-10-24T11:42:05.6720367Z     ยท            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6720428Z  19 โ”‚     expect(
2026-10-24T11:42:05.6720479Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6720481Z
2026-10-24T11:42:05.6720821Z   โš  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:42:05.6720942Z     โ•ญโ”€[packages/effect-acp/src/schema.test.ts:20:7]
2026-10-24T11:42:05.6721001Z  19 โ”‚     expect(
2026-10-24T11:42:05.6721252Z  20 โ”‚       Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }),
2026-10-24T11:42:05.6721328Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6721391Z  21 โ”‚     ).toBe(true);
2026-10-24T11:42:05.6721443Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6721446Z
2026-10-24T11:42:05.6721780Z   โš  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:42:05.6721931Z     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:50:18]
2026-10-24T11:42:05.6722097Z  49 โ”‚   for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) {
2026-10-24T11:42:05.6722270Z  50 โ”‚     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
2026-10-24T11:42:05.6722356Z     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6722534Z  51 โ”‚     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
2026-10-24T11:42:05.6722587Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6722590Z
2026-10-24T11:42:05.6722921Z   โš  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:42:05.6723065Z     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:51:18]
2026-10-24T11:42:05.6723306Z  50 โ”‚     assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true);
2026-10-24T11:42:05.6723522Z  51 โ”‚     assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true);
2026-10-24T11:42:05.6723607Z     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6723660Z  52 โ”‚   }
2026-10-24T11:42:05.6723711Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6723714Z
2026-10-24T11:42:05.6724047Z   โš  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:42:05.6724188Z     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:55:5]
2026-10-24T11:42:05.6724253Z  54 โ”‚   assert.equal(
2026-10-24T11:42:05.6724425Z  55 โ”‚     Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"),
2026-10-24T11:42:05.6724497Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6724561Z  56 โ”‚     true,
2026-10-24T11:42:05.6724618Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6724620Z
2026-10-24T11:42:05.6724952Z   โš  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:42:05.6725090Z     โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:59:5]
2026-10-24T11:42:05.6725152Z  58 โ”‚   assert.equal(
2026-10-24T11:42:05.6725333Z  59 โ”‚     Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"),
2026-10-24T11:42:05.6725404Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6725461Z  60 โ”‚     true,
2026-10-24T11:42:05.6725513Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6725515Z
2026-10-24T11:42:05.6725849Z   โš  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:42:05.6726001Z      โ•ญโ”€[packages/effect-codex-app-server/src/schema.test.ts:103:16]
2026-10-24T11:42:05.6726054Z  102 โ”‚
2026-10-24T11:42:05.6726223Z  103 โ”‚   assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true);
2026-10-24T11:42:05.6726308Z      ยท                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6726365Z  104 โ”‚ });
2026-10-24T11:42:05.6726416Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6726418Z
2026-10-24T11:42:05.6726607Z   โš  oxc(no-accumulating-spread): Do not spread accumulators in loops
2026-10-24T11:42:05.6726733Z      โ•ญโ”€[packages/client-runtime/src/state/shell.ts:189:5]
2026-10-24T11:42:05.6726844Z  186 โ”‚     let waiting = yield* Ref.get(awaitingCompletion);
2026-10-24T11:42:05.6726911Z  187 โ”‚     let next = initial;
2026-10-24T11:42:05.6727033Z      ยท         โ”€โ”€โ”ฌโ”€
2026-10-24T11:42:05.6727192Z      ยท           โ•ฐโ”€โ”€ From this accumulator
2026-10-24T11:42:05.6727274Z  188 โ”‚     let receivedSnapshot = false;
2026-10-24T11:42:05.6727349Z  189 โ”‚     for (const item of items) {
2026-10-24T11:42:05.6727418Z      ยท     โ”€โ”ฌโ”€
2026-10-24T11:42:05.6727524Z      ยท      โ•ฐโ”€โ”€ For this loop
2026-10-24T11:42:05.6727613Z  190 โ”‚       if (item.kind === "synchronized") {
2026-10-24T11:42:05.6727682Z  191 โ”‚         waiting = false;
2026-10-24T11:42:05.6727773Z  192 โ”‚         if (Option.isSome(next.snapshot)) {
2026-10-24T11:42:05.6727894Z  193 โ”‚           next = { ...next, status: "live", error: Option.none() };
2026-10-24T11:42:05.6727979Z      ยท                    โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-24T11:42:05.6728108Z      ยท                       โ•ฐโ”€โ”€ From this spread
2026-10-24T11:42:05.6728174Z  194 โ”‚         }
2026-10-24T11:42:05.6728230Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6728387Z   help: Consider using `Object.assign()` to mutate the accumulator instead.
2026-10-24T11:42:05.6728543Z   note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-24T11:42:05.6728546Z
2026-10-24T11:42:05.6728834Z   โš  eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'.
2026-10-24T11:42:05.6728992Z     โ•ญโ”€[packages/provider-cursor/src/server/credentialStore.test.ts:15:7]
2026-10-24T11:42:05.6729045Z  14 โ”‚
2026-10-24T11:42:05.6729116Z  15 โ”‚ const legacyCredentials = {
2026-10-24T11:42:05.6729201Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6729357Z     ยท               โ•ฐโ”€โ”€ 'legacyCredentials' is declared here
2026-10-24T11:42:05.6729428Z  16 โ”‚   version: 1 as const,
2026-10-24T11:42:05.6729478Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6729584Z   help: Consider removing this declaration.
2026-10-24T11:42:05.6729586Z
2026-10-24T11:42:05.6729791Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-24T11:42:05.6729922Z    โ•ญโ”€[packages/client-runtime/src/state/filesystem.ts:3:8]
2026-10-24T11:42:05.6729994Z  2 โ”‚   AuthFilesystemReadScope,
2026-10-24T11:42:05.6730065Z  3 โ”‚   type AuthSessionState,
2026-10-24T11:42:05.6730150Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6730296Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-24T11:42:05.6730370Z  4 โ”‚   type FilesystemBrowseEntry,
2026-10-24T11:42:05.6730421Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6730527Z   help: Consider removing this import.
2026-10-24T11:42:05.6730533Z
2026-10-24T11:42:05.6730757Z   โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T11:42:05.6730886Z      โ•ญโ”€[scripts/lib/cli-external-packages.test.ts:114:11]
2026-10-24T11:42:05.6730955Z  113 โ”‚         const declared = {
2026-10-24T11:42:05.6731068Z  114 โ”‚           ...(manifest.dependencies ?? {}),
2026-10-24T11:42:05.6731181Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6731285Z  115 โ”‚           ...(manifest.optionalDependencies ?? {}),
2026-10-24T11:42:05.6731339Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6731609Z   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:42:05.6731612Z
2026-10-24T11:42:05.6731908Z   โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T11:42:05.6732073Z      โ•ญโ”€[scripts/lib/cli-external-packages.test.ts:115:11]
2026-10-24T11:42:05.6732163Z  114 โ”‚           ...(manifest.dependencies ?? {}),
2026-10-24T11:42:05.6732266Z  115 โ”‚           ...(manifest.optionalDependencies ?? {}),
2026-10-24T11:42:05.6732389Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6732487Z  116 โ”‚           ...(manifest.peerDependencies ?? {}),
2026-10-24T11:42:05.6732539Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6732804Z   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:42:05.6732807Z
2026-10-24T11:42:05.6733033Z   โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-24T11:42:05.6733163Z      โ•ญโ”€[scripts/lib/cli-external-packages.test.ts:116:11]
2026-10-24T11:42:05.6733263Z  115 โ”‚           ...(manifest.optionalDependencies ?? {}),
2026-10-24T11:42:05.6733360Z  116 โ”‚           ...(manifest.peerDependencies ?? {}),
2026-10-24T11:42:05.6733476Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6733536Z  117 โ”‚         };
2026-10-24T11:42:05.6733587Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6733852Z   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:42:05.6733855Z
2026-10-24T11:42:05.6734136Z   โš  eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-24T11:42:05.6734272Z      โ•ญโ”€[packages/provider-cursor/src/server/auth.ts:249:20]
2026-10-24T11:42:05.6734333Z  248 โ”‚     },
2026-10-24T11:42:05.6734417Z  249 โ”‚     (effect, flow, stopSessions) =>
2026-10-24T11:42:05.6734509Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6734662Z      ยท                          โ•ฐโ”€โ”€ 'stopSessions' is declared here
2026-10-24T11:42:05.6734727Z  250 โ”‚       effect.pipe(
2026-10-24T11:42:05.6734778Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6734883Z   help: Consider removing this parameter.
2026-10-24T11:42:05.6734888Z
2026-10-24T11:42:05.6735124Z   โš  unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-24T11:42:05.6735261Z      โ•ญโ”€[apps/web/src/components/chat/useComposerSend.ts:985:13]
2026-10-24T11:42:05.6735385Z  984 โ”‚           const changedBeforeDecline = draftChangedSinceSend();
2026-10-24T11:42:05.6735633Z  985 โ”‚ โ•ญโ”€โ–ถ       const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
2026-10-24T11:42:05.6735761Z  986 โ”‚ โ”‚           (approval) => approval.requestId,
2026-10-24T11:42:05.6735898Z  987 โ”‚ โ•ฐโ”€โ–ถ       );
2026-10-24T11:42:05.6736036Z  988 โ”‚           const approvalResponding = approvalsToDecline.some((approval) =>
2026-10-24T11:42:05.6736089Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6736167Z   help: Switch to `Set`
2026-10-24T11:42:05.6736170Z
2026-10-24T11:42:05.6736342Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6736487Z      โ•ญโ”€[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58]
2026-10-24T11:42:05.6736664Z  177 โ”‚   if (snoozeClockState.shell !== activeThreadShell) {
2026-10-24T11:42:05.6736857Z  178 โ”‚     setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() });
2026-10-24T11:42:05.6736982Z      ยท                                                          โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6737154Z      ยท                                                               โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6737209Z  179 โ”‚   }
2026-10-24T11:42:05.6737261Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6737542Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6737839Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6737843Z
2026-10-24T11:42:05.6738016Z   โš  react(purity): Cannot call impure function during render
2026-10-24T11:42:05.6738156Z      โ•ญโ”€[apps/web/src/components/CustomSnoozeDialog.tsx:140:58]
2026-10-24T11:42:05.6738290Z  139 โ”‚                             {...(weekStartsOn === undefined ? {} : { weekStartsOn })}
2026-10-24T11:42:05.6738438Z  140 โ”‚                             disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }}
2026-10-24T11:42:05.6738561Z      ยท                                                          โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6738733Z      ยท                                                               โ•ฐโ”€โ”€ Cannot call impure function
2026-10-24T11:42:05.6738832Z  141 โ”‚                             onSelect={(selected) => {
2026-10-24T11:42:05.6738884Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-24T11:42:05.6739166Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-24T11:42:05.6739464Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-24T11:42:05.6739468Z
2026-10-24T11:42:05.6739552Z Found 0 errors and 366 warnings in 5469 files (5.5s, 8 threads)
2026-10-24T11:42:05.7189764Z Post job cleanup.
2026-10-24T11:42:05.7859740Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-24T11:42:05.7943492Z Post job cleanup.
2026-10-24T11:42:05.7956968Z ##[start-action display=Cache full pnpm store;id=__8399704c-948f-4b80-826d-96992f2a20a9.__actions_cache]
2026-10-24T11:42:05.8281955Z Post job cleanup.
2026-10-24T11:42:05.8935150Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074, not saving cache.
2026-10-24T11:42:05.8976096Z ##[end-action id=__8399704c-948f-4b80-826d-96992f2a20a9.__actions_cache;outcome=success;conclusion=success;duration_ms=101]
2026-10-24T11:42:05.8977969Z ##[start-action display=Cache Vite+;id=__8399704c-948f-4b80-826d-96992f2a20a9.vp_cache]
2026-10-24T11:42:05.8999502Z Post job cleanup.
2026-10-24T11:42:05.9758326Z 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:42:05.9794137Z ##[end-action id=__8399704c-948f-4b80-826d-96992f2a20a9.vp_cache;outcome=success;conclusion=success;duration_ms=81]
2026-10-24T11:42:05.9831275Z Post job cleanup.
2026-10-24T11:42:06.0251536Z [command]/usr/local/bin/git version
2026-10-24T11:42:06.0282132Z git version 2.55.0
2026-10-24T11:42:06.0300111Z Temporarily overriding HOME='/home/runner/_work/_temp/04f936ec-ee9c-4112-b6a2-118838589c2c' before making global git config changes
2026-10-24T11:42:06.0300484Z Adding repository directory to the temporary git global config as a safe directory
2026-10-24T11:42:06.0303297Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-24T11:42:06.0324779Z Removing SSH command configuration
2026-10-24T11:42:06.0327778Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-24T11:42:06.0350538Z [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:42:06.0478268Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-24T11:42:06.0498781Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-24T11:42:06.0542604Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-24T11:42:06.0558516Z ##[group]Run '/job_completed.sh'
2026-10-24T11:42:06.0564573Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-24T11:42:06.0564768Z env:
2026-10-24T11:42:06.0564884Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162
2026-10-24T11:42:06.0565038Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412
2026-10-24T11:42:06.0565182Z   BLACKSMITH_CHECK_RUN_ID: 120863167874
2026-10-24T11:42:06.0565326Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-24T11:42:06.0565467Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-24T11:42:06.0565607Z ##[endgroup]
2026-10-24T11:42:06.0644327Z Docker container cache not activated, skipping hash computation.
2026-10-24T11:42:06.0966520Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-24T11:42:06.1565897Z Cleaning up orphan processes