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