GitHub check

256 KB of 598 KB loaded Download the full log (598 KB)
342 KB of earlier output not loaded
148704Z  233 โ”‚   useAssetUrl,
2026-10-23T23:34:17.9148783Z  234 โ”‚   useAssetUrlState,
2026-10-23T23:34:17.9148879Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9149047Z      ยท           โ•ฐโ”€โ”€ 'useAssetUrlState' is imported here
2026-10-23T23:34:17.9149131Z  235 โ”‚   useRefreshAssetUrl,
2026-10-23T23:34:17.9149189Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9149303Z   help: Consider removing this import.
2026-10-23T23:34:17.9149306Z
2026-10-23T23:34:17.9149545Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9149710Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2123:7]
2026-10-23T23:34:17.9149894Z  2122 โ”‚     setExpandedFile(null);
2026-10-23T23:34:17.9150184Z  2123 โ”‚   }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
2026-10-23T23:34:17.9150503Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9150935Z       ยท                โ”‚                  โ”‚                       โ•ฐโ”€โ”€ Unnecessary dependency `props.contentPresentation.kind`
2026-10-23T23:34:17.9151166Z       ยท                โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `props.threadId`
2026-10-23T23:34:17.9151364Z       ยท                โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
2026-10-23T23:34:17.9151536Z  2124 โ”‚   const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
2026-10-23T23:34:17.9151613Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9151968Z   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-23T23:34:17.9152345Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9152348Z
2026-10-23T23:34:17.9152588Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9152756Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2590:7]
2026-10-23T23:34:17.9152878Z  2589 โ”‚     reportHeaderMaterialVisibility(false);
2026-10-23T23:34:17.9153011Z  2590 โ”‚   }, [feedThreadKey, reportHeaderMaterialVisibility]);
2026-10-23T23:34:17.9153123Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9153311Z       ยท             โ•ฐโ”€โ”€ Unnecessary dependency `feedThreadKey`
2026-10-23T23:34:17.9153384Z  2591 โ”‚
2026-10-23T23:34:17.9153443Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9153789Z   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-23T23:34:17.9154158Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9154161Z
2026-10-23T23:34:17.9154400Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9154571Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2606:7]
2026-10-23T23:34:17.9154643Z  2605 โ”‚     }
2026-10-23T23:34:17.9154812Z  2606 โ”‚   }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
2026-10-23T23:34:17.9154913Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9155092Z       ยท             โ•ฐโ”€โ”€ Unnecessary dependency `listMountKey`
2026-10-23T23:34:17.9155158Z  2607 โ”‚
2026-10-23T23:34:17.9155225Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9155565Z   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-23T23:34:17.9155933Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9155936Z
2026-10-23T23:34:17.9156169Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9156415Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:2763:7]
2026-10-23T23:34:17.9156570Z  2762 โ”‚     }
2026-10-23T23:34:17.9156810Z  2763 โ”‚   }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
2026-10-23T23:34:17.9157049Z       ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9157385Z       ยท              โ”‚                  โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `expandedWorkRows`
2026-10-23T23:34:17.9157693Z       ยท              โ”‚                  โ•ฐโ”€โ”€ Unnecessary dependency `expandedWorkGroups`
2026-10-23T23:34:17.9157874Z       ยท              โ•ฐโ”€โ”€ Unnecessary dependency `expandedTurnIds`
2026-10-23T23:34:17.9157950Z  2764 โ”‚
2026-10-23T23:34:17.9158014Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9158362Z   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-23T23:34:17.9158735Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9158738Z
2026-10-23T23:34:17.9158965Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-23T23:34:17.9159124Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadFeed.tsx:605:9]
2026-10-23T23:34:17.9159203Z  604 โ”‚       };
2026-10-23T23:34:17.9159346Z  605 โ”‚     }, [props.environmentId, attachment.id, httpBaseUrl]),
2026-10-23T23:34:17.9159588Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9159879Z      ยท                  โ”‚                 โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `httpBaseUrl`
2026-10-23T23:34:17.9160120Z      ยท                  โ”‚                 โ•ฐโ”€โ”€ Unnecessary dependency `attachment.id`
2026-10-23T23:34:17.9160326Z      ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `props.environmentId`
2026-10-23T23:34:17.9160440Z  606 โ”‚   );
2026-10-23T23:34:17.9160508Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9160878Z   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-23T23:34:17.9161352Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9161411Z
2026-10-23T23:34:17.9161654Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9161866Z     โ•ญโ”€[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14]
2026-10-23T23:34:17.9161975Z  26 โ”‚   const latestInput = useRef(input);
2026-10-23T23:34:17.9162092Z  27 โ”‚   latestInput.current = input;
2026-10-23T23:34:17.9162242Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9162543Z     ยท        โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-23T23:34:17.9162689Z     ยท        โ•ฐโ”€โ”€ This value is a ref
2026-10-23T23:34:17.9162782Z  28 โ”‚   const mounted = useRef(true);
2026-10-23T23:34:17.9162859Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9163425Z   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-23T23:34:17.9163770Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9163773Z
2026-10-23T23:34:17.9164323Z   โš  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-23T23:34:17.9164508Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:169:7]
2026-10-23T23:34:17.9164590Z  168 โ”‚           });
2026-10-23T23:34:17.9164838Z  169 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-23T23:34:17.9165069Z  170 โ”‚ โ”‚           if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break;
2026-10-23T23:34:17.9165193Z  171 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-23T23:34:17.9165354Z  172 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-23T23:34:17.9165420Z  173 โ”‚
2026-10-23T23:34:17.9165486Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9165489Z
2026-10-23T23:34:17.9166026Z   โš  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-23T23:34:17.9166212Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:178:7]
2026-10-23T23:34:17.9166352Z  177 โ”‚           yield* Deferred.succeed(releaseSave, undefined);
2026-10-23T23:34:17.9166587Z  178 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-23T23:34:17.9166743Z  179 โ”‚ โ”‚           if ((yield* Ref.get(saved)).length > 0) break;
2026-10-23T23:34:17.9166880Z  180 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-23T23:34:17.9167042Z  181 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-23T23:34:17.9167114Z  182 โ”‚
2026-10-23T23:34:17.9167175Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9167182Z
2026-10-23T23:34:17.9167830Z   โš  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-23T23:34:17.9168117Z      โ•ญโ”€[packages/client-runtime/src/state/shell-sync.test.ts:307:7]
2026-10-23T23:34:17.9168277Z  306 โ”‚           yield* Deferred.succeed(releaseUnenrichedSave, undefined);
2026-10-23T23:34:17.9168514Z  307 โ”‚ โ•ญโ”€โ–ถ       for (let index = 0; index < 100; index += 1) {
2026-10-23T23:34:17.9168656Z  308 โ”‚ โ”‚           const values = yield* Ref.get(saved);
2026-10-23T23:34:17.9168974Z  309 โ”‚ โ”‚           if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) {
2026-10-23T23:34:17.9169098Z  310 โ”‚ โ”‚             break;
2026-10-23T23:34:17.9169201Z  311 โ”‚ โ”‚           }
2026-10-23T23:34:17.9169332Z  312 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-23T23:34:17.9169511Z  313 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-23T23:34:17.9169586Z  314 โ”‚
2026-10-23T23:34:17.9169658Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9169671Z
2026-10-23T23:34:17.9169915Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9170099Z       โ•ญโ”€[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5]
2026-10-23T23:34:17.9170211Z  1314 โ”‚     queuedMessagesByThreadKey,
2026-10-23T23:34:17.9170298Z  1315 โ”‚     retryTick,
2026-10-23T23:34:17.9170425Z       ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9170616Z       ยท         โ•ฐโ”€โ”€ Unnecessary dependency `retryTick`
2026-10-23T23:34:17.9170720Z  1316 โ”‚     restoreQueuedMessage,
2026-10-23T23:34:17.9170809Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9171158Z   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-23T23:34:17.9171537Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9171540Z
2026-10-23T23:34:17.9171723Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9171928Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38]
2026-10-23T23:34:17.9172120Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-23T23:34:17.9172265Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-23T23:34:17.9172424Z      ยท                                      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9172636Z      ยท                                                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9172780Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-23T23:34:17.9172840Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9173392Z   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-23T23:34:17.9173745Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9173748Z
2026-10-23T23:34:17.9174017Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9174321Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8]
2026-10-23T23:34:17.9174384Z  125 โ”‚
2026-10-23T23:34:17.9174522Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T23:34:17.9174635Z      ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9174823Z      ยท                 โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9174950Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T23:34:17.9175051Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9175649Z   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-23T23:34:17.9176006Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9176012Z
2026-10-23T23:34:17.9176289Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9176519Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7]
2026-10-23T23:34:17.9176590Z  125 โ”‚
2026-10-23T23:34:17.9176724Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T23:34:17.9176836Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9177014Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9177142Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T23:34:17.9177209Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9177774Z   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-23T23:34:17.9178121Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9178125Z
2026-10-23T23:34:17.9178300Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9178490Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31]
2026-10-23T23:34:17.9178553Z  125 โ”‚
2026-10-23T23:34:17.9178679Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T23:34:17.9178820Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9179027Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9179150Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T23:34:17.9179214Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9179766Z   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-23T23:34:17.9180111Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9180114Z
2026-10-23T23:34:17.9180287Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9180667Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30]
2026-10-23T23:34:17.9180840Z  125 โ”‚
2026-10-23T23:34:17.9180998Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T23:34:17.9181149Z      ยท                              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9181360Z      ยท                                        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9181651Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T23:34:17.9181746Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9182301Z   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-23T23:34:17.9182657Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9182664Z
2026-10-23T23:34:17.9182838Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9183019Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46]
2026-10-23T23:34:17.9183480Z  126 โ”‚       if (!sessionRef.current || !recorderRef.current) {
2026-10-23T23:34:17.9183712Z  127 โ”‚ โ•ญโ”€โ–ถ     const recorder = createLazyVoiceRecorder({
2026-10-23T23:34:17.9183923Z  128 โ”‚ โ”‚         create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-23T23:34:17.9184079Z  129 โ”‚ โ”‚         onStatus: (status: RecordingStatus) => {
2026-10-23T23:34:17.9184263Z  130 โ”‚ โ”‚           sessionRef.current?.controller.handleRecorderStatus({
2026-10-23T23:34:17.9184418Z  131 โ”‚ โ”‚             isFinished: status.isFinished,
2026-10-23T23:34:17.9184634Z  132 โ”‚ โ”‚             hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-23T23:34:17.9184764Z  133 โ”‚ โ”‚             error: status.error,
2026-10-23T23:34:17.9184878Z  134 โ”‚ โ”‚             url: status.url,
2026-10-23T23:34:17.9184981Z  135 โ”‚ โ”‚           });
2026-10-23T23:34:17.9185077Z  136 โ”‚ โ”‚         },
2026-10-23T23:34:17.9185311Z  137 โ”‚ โ”‚         // Read when recording starts so preference changes do not re-render every composer.
2026-10-23T23:34:17.9185435Z  138 โ”‚ โ”‚         selectInput: (inputs) => {
2026-10-23T23:34:17.9185631Z  139 โ”‚ โ”‚           const preferences = registry.get(mobilePreferencesAtom);
2026-10-23T23:34:17.9185820Z  140 โ”‚ โ”‚           if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-23T23:34:17.9186026Z  141 โ”‚ โ”‚           const known = microphoneOrder(preferences.value.microphones);
2026-10-23T23:34:17.9186191Z  142 โ”‚ โ”‚           const order = rememberMicrophones(known, inputs);
2026-10-23T23:34:17.9186319Z  143 โ”‚ โ”‚           if (order !== known) {
2026-10-23T23:34:17.9186491Z  144 โ”‚ โ”‚             registry.set(updateMobilePreferencesAtom, {
2026-10-23T23:34:17.9186631Z  145 โ”‚ โ”‚               transform: (current) => ({
2026-10-23T23:34:17.9186874Z  146 โ”‚ โ”‚                 microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-23T23:34:17.9186980Z  147 โ”‚ โ”‚               }),
2026-10-23T23:34:17.9187080Z  148 โ”‚ โ”‚             });
2026-10-23T23:34:17.9187340Z  149 โ”‚ โ”‚           }
2026-10-23T23:34:17.9187617Z  150 โ”‚ โ”‚           return preferredMicrophoneInput(inputs, order);
2026-10-23T23:34:17.9187717Z  151 โ”‚ โ”‚         },
2026-10-23T23:34:17.9187880Z  152 โ”‚ โ”œโ”€โ–ถ     });
2026-10-23T23:34:17.9188172Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-23T23:34:17.9188333Z  153 โ”‚         recorderRef.current = recorder;
2026-10-23T23:34:17.9188416Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9188983Z   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-23T23:34:17.9189336Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9189339Z
2026-10-23T23:34:17.9189514Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9189702Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16]
2026-10-23T23:34:17.9189781Z  152 โ”‚     });
2026-10-23T23:34:17.9189889Z  153 โ”‚     recorderRef.current = recorder;
2026-10-23T23:34:17.9190030Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9190249Z      ยท          โ”‚         โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-23T23:34:17.9190437Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-23T23:34:17.9190580Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-23T23:34:17.9190658Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9191212Z   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-23T23:34:17.9191564Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9191567Z
2026-10-23T23:34:17.9191741Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9191932Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48]
2026-10-23T23:34:17.9192045Z  153 โ”‚         recorderRef.current = recorder;
2026-10-23T23:34:17.9192276Z  154 โ”‚ โ•ญโ”€โ–ถ     sessionRef.current = new VoiceInputSession({
2026-10-23T23:34:17.9192384Z  155 โ”‚ โ”‚         recorder,
2026-10-23T23:34:17.9192549Z  156 โ”‚ โ”‚         getTranscriber: getLocalVoiceTranscriber,
2026-10-23T23:34:17.9192689Z  157 โ”‚ โ”‚         requestPermission: async () => {
2026-10-23T23:34:17.9192885Z  158 โ”‚ โ”‚           const permission = await requestRecordingPermissionsAsync();
2026-10-23T23:34:17.9193118Z  159 โ”‚ โ”‚           return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-23T23:34:17.9193215Z  160 โ”‚ โ”‚         },
2026-10-23T23:34:17.9193389Z  161 โ”‚ โ”‚         configureRecording: configureVoiceRecordingAudio,
2026-10-23T23:34:17.9193642Z  162 โ”‚ โ”‚         releaseRecording: releaseVoiceRecordingAudio,
2026-10-23T23:34:17.9193926Z  163 โ”‚ โ”‚         deleteRecording: (uri) => new File(uri).delete(),
2026-10-23T23:34:17.9194067Z  164 โ”‚ โ”‚         onStateChange: (nextState) =>
2026-10-23T23:34:17.9194183Z  165 โ”‚ โ”‚           setState({
2026-10-23T23:34:17.9194311Z  166 โ”‚ โ”‚             state: nextState,
2026-10-23T23:34:17.9194483Z  167 โ”‚ โ”‚             ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-23T23:34:17.9194740Z  168 โ”‚ โ”‚             label: sessionRef.current?.label ?? null,
2026-10-23T23:34:17.9194845Z  169 โ”‚ โ”‚           }),
2026-10-23T23:34:17.9195004Z  170 โ”‚ โ”œโ”€โ–ถ     });
2026-10-23T23:34:17.9195243Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9195315Z  171 โ”‚       }
2026-10-23T23:34:17.9195381Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9195930Z   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-23T23:34:17.9196270Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9196273Z
2026-10-23T23:34:17.9196445Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9196637Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15]
2026-10-23T23:34:17.9196748Z  153 โ”‚     recorderRef.current = recorder;
2026-10-23T23:34:17.9196877Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-23T23:34:17.9197021Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9197250Z      ยท          โ”‚        โ•ฐโ”€โ”€ Cannot update ref value during render
2026-10-23T23:34:17.9197394Z      ยท          โ•ฐโ”€โ”€ This value is a ref
2026-10-23T23:34:17.9197485Z  155 โ”‚       recorder,
2026-10-23T23:34:17.9197549Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9198100Z   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-23T23:34:17.9198593Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9198715Z
2026-10-23T23:34:17.9198948Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9199143Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7]
2026-10-23T23:34:17.9199262Z  184 โ”‚     return () => subscription.remove();
2026-10-23T23:34:17.9199347Z  185 โ”‚   }, [controller]);
2026-10-23T23:34:17.9199448Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9199699Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9199771Z  186 โ”‚
2026-10-23T23:34:17.9199837Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9200443Z   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-23T23:34:17.9200800Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9200803Z
2026-10-23T23:34:17.9200975Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9201182Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6]
2026-10-23T23:34:17.9201334Z  184 โ”‚     return () => subscription.remove();
2026-10-23T23:34:17.9201425Z  185 โ”‚   }, [controller]);
2026-10-23T23:34:17.9201526Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9201702Z      ยท            โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9201768Z  186 โ”‚
2026-10-23T23:34:17.9201846Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9209777Z   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-23T23:34:17.9210170Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9210174Z
2026-10-23T23:34:17.9210404Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9210612Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6]
2026-10-23T23:34:17.9210679Z  191 โ”‚     },
2026-10-23T23:34:17.9210775Z  192 โ”‚     [controller, recorder],
2026-10-23T23:34:17.9210882Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9211071Z      ยท           โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9211137Z  193 โ”‚   );
2026-10-23T23:34:17.9211208Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9211762Z   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-23T23:34:17.9212110Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9212113Z
2026-10-23T23:34:17.9212288Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9212629Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20]
2026-10-23T23:34:17.9212848Z  174 โ”‚   const controller = session.controller;
2026-10-23T23:34:17.9213024Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-23T23:34:17.9213171Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9213364Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9213444Z  176 โ”‚
2026-10-23T23:34:17.9213519Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9214151Z   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-23T23:34:17.9214494Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9214500Z
2026-10-23T23:34:17.9214671Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9214861Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5]
2026-10-23T23:34:17.9214932Z  191 โ”‚     },
2026-10-23T23:34:17.9215013Z  192 โ”‚     [controller, recorder],
2026-10-23T23:34:17.9215124Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9215310Z      ยท                โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9215383Z  193 โ”‚   );
2026-10-23T23:34:17.9215441Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9215993Z   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-23T23:34:17.9216530Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9216537Z
2026-10-23T23:34:17.9216808Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9217003Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20]
2026-10-23T23:34:17.9217115Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-23T23:34:17.9217256Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-23T23:34:17.9217374Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9217565Z      ยท                         โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9217630Z  247 โ”‚
2026-10-23T23:34:17.9217698Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9218254Z   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-23T23:34:17.9218602Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9218604Z
2026-10-23T23:34:17.9218780Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9218960Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6]
2026-10-23T23:34:17.9219079Z  245 โ”‚     return () => clearInterval(intervalId);
2026-10-23T23:34:17.9219213Z  246 โ”‚   }, [audioLevels, controller, recorder, state.phase]);
2026-10-23T23:34:17.9219517Z      ยท      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9219848Z      ยท                              โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9219927Z  247 โ”‚
2026-10-23T23:34:17.9219989Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9220664Z   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-23T23:34:17.9221017Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9221024Z
2026-10-23T23:34:17.9221191Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9221381Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5]
2026-10-23T23:34:17.9221472Z  260 โ”‚     setOwnerFocused,
2026-10-23T23:34:17.9221783Z  261 โ”‚     session,
2026-10-23T23:34:17.9221883Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9222051Z      ยท        โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9222124Z  262 โ”‚     stop,
2026-10-23T23:34:17.9222182Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9222715Z   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-23T23:34:17.9223058Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9223064Z
2026-10-23T23:34:17.9223232Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9223419Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10]
2026-10-23T23:34:17.9223480Z  250 โ”‚
2026-10-23T23:34:17.9223649Z  251 โ”‚ โ•ญโ”€โ–ถ   return {
2026-10-23T23:34:17.9223897Z  252 โ”‚ โ”‚       isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null,
2026-10-23T23:34:17.9223997Z  253 โ”‚ โ”‚       state,
2026-10-23T23:34:17.9224099Z  254 โ”‚ โ”‚       audioLevels,
2026-10-23T23:34:17.9224215Z  255 โ”‚ โ”‚       elapsedSeconds,
2026-10-23T23:34:17.9224371Z  256 โ”‚ โ”‚       isBusy: voiceInputBlocksSubmission(state),
2026-10-23T23:34:17.9224483Z  257 โ”‚ โ”‚       ownerKey,
2026-10-23T23:34:17.9224575Z  258 โ”‚ โ”‚       label,
2026-10-23T23:34:17.9224692Z  259 โ”‚ โ”‚       focusedOwners,
2026-10-23T23:34:17.9224807Z  260 โ”‚ โ”‚       setOwnerFocused,
2026-10-23T23:34:17.9224910Z  261 โ”‚ โ”‚       session,
2026-10-23T23:34:17.9224999Z  262 โ”‚ โ”‚       stop,
2026-10-23T23:34:17.9225094Z  263 โ”‚ โ”‚       cancel,
2026-10-23T23:34:17.9225249Z  264 โ”‚ โ”œโ”€โ–ถ   };
2026-10-23T23:34:17.9225483Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9225545Z  265 โ”‚     }
2026-10-23T23:34:17.9225607Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9226321Z   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-23T23:34:17.9226806Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9226809Z
2026-10-23T23:34:17.9226996Z   โš  react(immutability): This value cannot be modified
2026-10-23T23:34:17.9227178Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-23T23:34:17.9227447Z  121 โ”‚   const audioLevelsRef = useRef(Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0));
2026-10-23T23:34:17.9227596Z  122 โ”‚   const audioLevels = useSharedValue(audioLevelsRef.current);
2026-10-23T23:34:17.9227698Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9227856Z      ยท              โ•ฐโ”€โ”€ `audioLevels` originates here
2026-10-23T23:34:17.9228000Z  123 โ”‚   const sessionRef = useRef<VoiceInputSession | null>(null);
2026-10-23T23:34:17.9228181Z  124 โ”‚   const recorderRef = useRef<LazyVoiceRecorder<RecorderState> | null>(null);
2026-10-23T23:34:17.9228248Z  125 โ”‚
2026-10-23T23:34:17.9228370Z  126 โ”‚   if (!sessionRef.current || !recorderRef.current) {
2026-10-23T23:34:17.9228494Z  127 โ”‚     const recorder = createLazyVoiceRecorder({
2026-10-23T23:34:17.9228673Z  128 โ”‚       create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS),
2026-10-23T23:34:17.9228788Z  129 โ”‚       onStatus: (status: RecordingStatus) => {
2026-10-23T23:34:17.9228925Z  130 โ”‚         sessionRef.current?.controller.handleRecorderStatus({
2026-10-23T23:34:17.9229035Z  131 โ”‚           isFinished: status.isFinished,
2026-10-23T23:34:17.9229214Z  132 โ”‚           hasError: status.hasError || status.mediaServicesDidReset === true,
2026-10-23T23:34:17.9229311Z  133 โ”‚           error: status.error,
2026-10-23T23:34:17.9229387Z  134 โ”‚           url: status.url,
2026-10-23T23:34:17.9229466Z  135 โ”‚         });
2026-10-23T23:34:17.9229543Z  136 โ”‚       },
2026-10-23T23:34:17.9229740Z  137 โ”‚       // Read when recording starts so preference changes do not re-render every composer.
2026-10-23T23:34:17.9229832Z  138 โ”‚       selectInput: (inputs) => {
2026-10-23T23:34:17.9229983Z  139 โ”‚         const preferences = registry.get(mobilePreferencesAtom);
2026-10-23T23:34:17.9230123Z  140 โ”‚         if (!AsyncResult.isSuccess(preferences)) return null;
2026-10-23T23:34:17.9230280Z  141 โ”‚         const known = microphoneOrder(preferences.value.microphones);
2026-10-23T23:34:17.9230446Z  142 โ”‚         const order = rememberMicrophones(known, inputs);
2026-10-23T23:34:17.9230554Z  143 โ”‚         if (order !== known) {
2026-10-23T23:34:17.9230680Z  144 โ”‚           registry.set(updateMobilePreferencesAtom, {
2026-10-23T23:34:17.9230782Z  145 โ”‚             transform: (current) => ({
2026-10-23T23:34:17.9230980Z  146 โ”‚               microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs),
2026-10-23T23:34:17.9231065Z  147 โ”‚             }),
2026-10-23T23:34:17.9231142Z  148 โ”‚           });
2026-10-23T23:34:17.9231212Z  149 โ”‚         }
2026-10-23T23:34:17.9231335Z  150 โ”‚         return preferredMicrophoneInput(inputs, order);
2026-10-23T23:34:17.9231403Z  151 โ”‚       },
2026-10-23T23:34:17.9231468Z  152 โ”‚     });
2026-10-23T23:34:17.9231563Z  153 โ”‚     recorderRef.current = recorder;
2026-10-23T23:34:17.9231684Z  154 โ”‚     sessionRef.current = new VoiceInputSession({
2026-10-23T23:34:17.9231765Z  155 โ”‚       recorder,
2026-10-23T23:34:17.9231975Z  156 โ”‚       getTranscriber: getLocalVoiceTranscriber,
2026-10-23T23:34:17.9232173Z  157 โ”‚       requestPermission: async () => {
2026-10-23T23:34:17.9232343Z  158 โ”‚         const permission = await requestRecordingPermissionsAsync();
2026-10-23T23:34:17.9232529Z  159 โ”‚         return { granted: permission.granted, canAskAgain: permission.canAskAgain };
2026-10-23T23:34:17.9232607Z  160 โ”‚       },
2026-10-23T23:34:17.9232730Z  161 โ”‚       configureRecording: configureVoiceRecordingAudio,
2026-10-23T23:34:17.9232886Z  162 โ”‚       releaseRecording: releaseVoiceRecordingAudio,
2026-10-23T23:34:17.9233061Z  163 โ”‚       deleteRecording: (uri) => new File(uri).delete(),
2026-10-23T23:34:17.9233158Z  164 โ”‚       onStateChange: (nextState) =>
2026-10-23T23:34:17.9233232Z  165 โ”‚         setState({
2026-10-23T23:34:17.9233320Z  166 โ”‚           state: nextState,
2026-10-23T23:34:17.9233456Z  167 โ”‚           ownerKey: sessionRef.current?.ownerKey ?? null,
2026-10-23T23:34:17.9233585Z  168 โ”‚           label: sessionRef.current?.label ?? null,
2026-10-23T23:34:17.9233653Z  169 โ”‚         }),
2026-10-23T23:34:17.9233725Z  170 โ”‚     });
2026-10-23T23:34:17.9233789Z  171 โ”‚   }
2026-10-23T23:34:17.9233854Z  172 โ”‚
2026-10-23T23:34:17.9233950Z  173 โ”‚   const session = sessionRef.current;
2026-10-23T23:34:17.9234060Z  174 โ”‚   const controller = session.controller;
2026-10-23T23:34:17.9234162Z  175 โ”‚   const recorder = recorderRef.current;
2026-10-23T23:34:17.9234232Z  176 โ”‚
2026-10-23T23:34:17.9234309Z  177 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9234484Z  178 โ”‚     const subscription = AppState.addEventListener("change", (nextState) => {
2026-10-23T23:34:17.9234655Z  179 โ”‚       // iOS reports `inactive` while its permission dialog is open. Only the
2026-10-23T23:34:17.9234825Z  180 โ”‚       // real background state cancels preparation; recorder status handles
2026-10-23T23:34:17.9234945Z  181 โ”‚       // calls and route interruptions during capture.
2026-10-23T23:34:17.9235108Z  182 โ”‚       if (nextState === "background") controller.appMovedToBackground();
2026-10-23T23:34:17.9235182Z  183 โ”‚     });
2026-10-23T23:34:17.9235287Z  184 โ”‚     return () => subscription.remove();
2026-10-23T23:34:17.9235362Z  185 โ”‚   }, [controller]);
2026-10-23T23:34:17.9235427Z  186 โ”‚
2026-10-23T23:34:17.9235503Z  187 โ”‚   useEffect(
2026-10-23T23:34:17.9235575Z  188 โ”‚     () => () => {
2026-10-23T23:34:17.9235668Z  189 โ”‚       controller.dispose();
2026-10-23T23:34:17.9235756Z  190 โ”‚       recorder.release();
2026-10-23T23:34:17.9235826Z  191 โ”‚     },
2026-10-23T23:34:17.9235909Z  192 โ”‚     [controller, recorder],
2026-10-23T23:34:17.9235979Z  193 โ”‚   );
2026-10-23T23:34:17.9236049Z  194 โ”‚
2026-10-23T23:34:17.9236132Z  195 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9236247Z  196 โ”‚     if (state.phase !== "recording") return;
2026-10-23T23:34:17.9236326Z  197 โ”‚
2026-10-23T23:34:17.9236503Z  198 โ”‚     const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`;
2026-10-23T23:34:17.9236628Z  199 โ”‚     const activation = activateKeepAwakeAsync(tag);
2026-10-23T23:34:17.9236724Z  200 โ”‚     void activation.catch(() => {});
2026-10-23T23:34:17.9236803Z  201 โ”‚     return () => {
2026-10-23T23:34:17.9236982Z  202 โ”‚       // Release after activation settles, even if the recording ends immediately.
2026-10-23T23:34:17.9237148Z  203 โ”‚       void activation.then(() => deactivateKeepAwake(tag)).catch(() => {});
2026-10-23T23:34:17.9237209Z  204 โ”‚     };
2026-10-23T23:34:17.9237304Z  205 โ”‚   }, [keepAwakeId, state.phase]);
2026-10-23T23:34:17.9237371Z  206 โ”‚
2026-10-23T23:34:17.9237443Z  207 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9237702Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-23T23:34:17.9237844Z  209 โ”‚
2026-10-23T23:34:17.9238035Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-23T23:34:17.9238216Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-23T23:34:17.9238343Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-23T23:34:17.9238440Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9238664Z      ยท            โ•ฐโ”€โ”€ `audioLevels` cannot be modified
2026-10-23T23:34:17.9238768Z  213 โ”‚     }
2026-10-23T23:34:17.9238834Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9239161Z   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-23T23:34:17.9239540Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T23:34:17.9239548Z
2026-10-23T23:34:17.9239797Z   โš  react(immutability): Cannot modify local variables after render completes
2026-10-23T23:34:17.9239978Z      โ•ญโ”€[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7]
2026-10-23T23:34:17.9240043Z  206 โ”‚
2026-10-23T23:34:17.9240121Z  207 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9240216Z      ยท             โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9240521Z      ยท                โ•ฐโ”€โ”€ This function may (indirectly) reassign or modify `audioLevels` after render
2026-10-23T23:34:17.9240690Z  208 โ”‚     if (state.phase !== "preparing" && state.phase !== "recording") return;
2026-10-23T23:34:17.9240758Z  209 โ”‚
2026-10-23T23:34:17.9240908Z  210 โ”‚     if (audioLevelsRef.current.some((level) => level !== 0)) {
2026-10-23T23:34:17.9241099Z  211 โ”‚       audioLevelsRef.current = Array<number>(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0);
2026-10-23T23:34:17.9241224Z  212 โ”‚       audioLevels.value = audioLevelsRef.current;
2026-10-23T23:34:17.9241317Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9241474Z      ยท            โ•ฐโ”€โ”€ This modifies `audioLevels`
2026-10-23T23:34:17.9241539Z  213 โ”‚     }
2026-10-23T23:34:17.9241604Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9242012Z   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-23T23:34:17.9242370Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T23:34:17.9242466Z
2026-10-23T23:34:17.9242739Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9242927Z      โ•ญโ”€[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39]
2026-10-23T23:34:17.9242995Z  276 โ”‚
2026-10-23T23:34:17.9243219Z  277 โ”‚ โ•ญโ”€โ–ถ   return createElement(RawNativeView, {
2026-10-23T23:34:17.9243353Z  278 โ”‚ โ”‚       ...nativeProps,
2026-10-23T23:34:17.9243580Z  279 โ”‚ โ”‚       refreshEnabled: props.onPullToRefresh !== undefined,
2026-10-23T23:34:17.9243692Z  280 โ”‚ โ”‚       ref: nativeRef,
2026-10-23T23:34:17.9243850Z  281 โ”‚ โ”œโ”€โ–ถ   });
2026-10-23T23:34:17.9244144Z      ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-23T23:34:17.9244212Z  282 โ”‚     }
2026-10-23T23:34:17.9244282Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9244826Z   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-23T23:34:17.9245167Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9245170Z
2026-10-23T23:34:17.9245472Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9245660Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7]
2026-10-23T23:34:17.9245838Z  355 โ”‚   }, [cancelledIncomingShareId, navigation, props.incomingShareId]);
2026-10-23T23:34:17.9245942Z  356 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9246032Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9246189Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9246308Z  357 โ”‚     if (!isReturningToProjectPicker) {
2026-10-23T23:34:17.9246390Z  358 โ”‚       return;
2026-10-23T23:34:17.9246454Z  359 โ”‚     }
2026-10-23T23:34:17.9246570Z  360 โ”‚     if (requestedInitialProjectAvailable) {
2026-10-23T23:34:17.9246680Z  361 โ”‚       setIsReturningToProjectPicker(false);
2026-10-23T23:34:17.9246804Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9247010Z      ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9247097Z  362 โ”‚       return;
2026-10-23T23:34:17.9247162Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9247858Z   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-23T23:34:17.9248239Z   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-23T23:34:17.9248242Z
2026-10-23T23:34:17.9248544Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9248722Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9]
2026-10-23T23:34:17.9248878Z  447 โ”‚
2026-10-23T23:34:17.9249029Z  448 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9249139Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9249296Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9249421Z  449 โ”‚     if (props.pendingTaskId || props.draftId) {
2026-10-23T23:34:17.9249494Z  450 โ”‚       return;
2026-10-23T23:34:17.9249555Z  451 โ”‚     }
2026-10-23T23:34:17.9249730Z  452 โ”‚     if (lastInitialProjectRefRef.current !== props.initialProjectRef) {
2026-10-23T23:34:17.9249969Z  453 โ”‚       lastInitialProjectRefRef.current = props.initialProjectRef;
2026-10-23T23:34:17.9250099Z  454 โ”‚       appliedInitialProjectKeyRef.current = null;
2026-10-23T23:34:17.9250163Z  455 โ”‚     }
2026-10-23T23:34:17.9250366Z  456 โ”‚     const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-23T23:34:17.9250536Z  457 โ”‚     const initialProjectId = props.initialProjectRef?.projectId;
2026-10-23T23:34:17.9250669Z  458 โ”‚     if (initialEnvironmentId && initialProjectId) {
2026-10-23T23:34:17.9250756Z  459 โ”‚       const directProject =
2026-10-23T23:34:17.9250841Z  460 โ”‚         projects.find(
2026-10-23T23:34:17.9250925Z  461 โ”‚           (project) =>
2026-10-23T23:34:17.9251137Z  462 โ”‚             project.environmentId === initialEnvironmentId && project.id === initialProjectId,
2026-10-23T23:34:17.9251211Z  463 โ”‚         ) ?? null;
2026-10-23T23:34:17.9251280Z  464 โ”‚
2026-10-23T23:34:17.9251370Z  465 โ”‚       if (directProject) {
2026-10-23T23:34:17.9251540Z  466 โ”‚         // Apply the route's project once. Re-applying on every change would
2026-10-23T23:34:17.9251700Z  467 โ”‚         // instantly revert environment/project switches made in the picker.
2026-10-23T23:34:17.9251900Z  468 โ”‚         const directProjectKey = `${directProject.environmentId}:${directProject.id}`;
2026-10-23T23:34:17.9252065Z  469 โ”‚         if (appliedInitialProjectKeyRef.current === directProjectKey) {
2026-10-23T23:34:17.9252143Z  470 โ”‚           return;
2026-10-23T23:34:17.9252208Z  471 โ”‚         }
2026-10-23T23:34:17.9252329Z  472 โ”‚         if (props.initialProjectRef?.branch) {
2026-10-23T23:34:17.9252410Z  473 โ”‚           if (
2026-10-23T23:34:17.9252584Z  474 โ”‚             selectedProject?.environmentId !== directProject.environmentId ||
2026-10-23T23:34:17.9252709Z  475 โ”‚             selectedProject.id !== directProject.id
2026-10-23T23:34:17.9252785Z  476 โ”‚           ) {
2026-10-23T23:34:17.9252894Z  477 โ”‚             setProject(directProject);
2026-10-23T23:34:17.9252969Z  478 โ”‚             return;
2026-10-23T23:34:17.9253037Z  479 โ”‚           }
2026-10-23T23:34:17.9253145Z  480 โ”‚           if (!flow.draftKey) return;
2026-10-23T23:34:17.9253320Z  481 โ”‚           // The route completes checkout before mounting this composer. Local
2026-10-23T23:34:17.9253501Z  482 โ”‚           // mode reuses an existing worktree; worktree mode would create another.
2026-10-23T23:34:17.9253631Z  483 โ”‚           updateComposerDraftSettings(flow.draftKey, {
2026-10-23T23:34:17.9253729Z  484 โ”‚             workspaceSelection: {
2026-10-23T23:34:17.9253812Z  485 โ”‚               mode: "local",
2026-10-23T23:34:17.9253938Z  486 โ”‚               branch: props.initialProjectRef.branch,
2026-10-23T23:34:17.9254113Z  487 โ”‚               worktreePath: props.initialProjectRef.worktreePath ?? null,
2026-10-23T23:34:17.9254219Z  488 โ”‚               startFromOrigin: false,
2026-10-23T23:34:17.9254305Z  489 โ”‚             },
2026-10-23T23:34:17.9254375Z  490 โ”‚           });
2026-10-23T23:34:17.9254452Z  491 โ”‚         }
2026-10-23T23:34:17.9254617Z  492 โ”‚         appliedInitialProjectKeyRef.current = directProjectKey;
2026-10-23T23:34:17.9254786Z  493 โ”‚         if (
2026-10-23T23:34:17.9255075Z  494 โ”‚           selectedProject?.environmentId === directProject.environmentId &&
2026-10-23T23:34:17.9255188Z  495 โ”‚           selectedProject.id === directProject.id
2026-10-23T23:34:17.9255262Z  496 โ”‚         ) {
2026-10-23T23:34:17.9255337Z  497 โ”‚           return;
2026-10-23T23:34:17.9255401Z  498 โ”‚         }
2026-10-23T23:34:17.9255497Z  499 โ”‚         setProject(directProject);
2026-10-23T23:34:17.9255575Z  500 โ”‚         return;
2026-10-23T23:34:17.9255651Z  501 โ”‚       }
2026-10-23T23:34:17.9255749Z  502 โ”‚
2026-10-23T23:34:17.9255881Z  503 โ”‚       if (projects.length > 0) {
2026-10-23T23:34:17.9256000Z  504 โ”‚         setIsReturningToProjectPicker(true);
2026-10-23T23:34:17.9256195Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9256485Z      ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9256564Z  505 โ”‚       }
2026-10-23T23:34:17.9256631Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9257337Z   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-23T23:34:17.9257729Z   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-23T23:34:17.9257732Z
2026-10-23T23:34:17.9258042Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9258236Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5]
2026-10-23T23:34:17.9258304Z  545 โ”‚
2026-10-23T23:34:17.9258382Z  546 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9258465Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9258621Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9258739Z  547 โ”‚     const shareId = props.incomingShareId;
2026-10-23T23:34:17.9258836Z  548 โ”‚     const draftKey = flow.draftKey;
2026-10-23T23:34:17.9258956Z  549 โ”‚     const destinationProject = selectedProject;
2026-10-23T23:34:17.9259124Z  550 โ”‚     const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-23T23:34:17.9259278Z  551 โ”‚     const initialProjectId = props.initialProjectRef?.projectId;
2026-10-23T23:34:17.9259386Z  552 โ”‚     const selectedProjectMatchesRoute =
2026-10-23T23:34:17.9259474Z  553 โ”‚       !initialEnvironmentId ||
2026-10-23T23:34:17.9259565Z  554 โ”‚       !initialProjectId ||
2026-10-23T23:34:17.9259724Z  555 โ”‚       (destinationProject?.environmentId === initialEnvironmentId &&
2026-10-23T23:34:17.9259852Z  556 โ”‚         destinationProject.id === initialProjectId);
2026-10-23T23:34:17.9259920Z  557 โ”‚     if (
2026-10-23T23:34:17.9260004Z  558 โ”‚       !shareId ||
2026-10-23T23:34:17.9260083Z  559 โ”‚       !draftKey ||
2026-10-23T23:34:17.9260170Z  560 โ”‚       !destinationProject ||
2026-10-23T23:34:17.9260273Z  561 โ”‚       !selectedProjectMatchesRoute ||
2026-10-23T23:34:17.9260440Z  562 โ”‚       cancelledIncomingShareId === shareId
2026-10-23T23:34:17.9260514Z  563 โ”‚     ) {
2026-10-23T23:34:17.9260586Z  564 โ”‚       return;
2026-10-23T23:34:17.9260660Z  565 โ”‚     }
2026-10-23T23:34:17.9260778Z  566 โ”‚     const importKey = `${shareId}:${draftKey}`;
2026-10-23T23:34:17.9260852Z  567 โ”‚     if (
2026-10-23T23:34:17.9261111Z  568 โ”‚       startedShareImportKeyRef.current === importKey ||
2026-10-23T23:34:17.9261397Z  569 โ”‚       cancellingShareImportKeyRef.current === importKey
2026-10-23T23:34:17.9261643Z  570 โ”‚     ) {
2026-10-23T23:34:17.9261749Z  571 โ”‚       return;
2026-10-23T23:34:17.9261816Z  572 โ”‚     }
2026-10-23T23:34:17.9261880Z  573 โ”‚
2026-10-23T23:34:17.9261966Z  574 โ”‚     if (!incomingShare) {
2026-10-23T23:34:17.9262304Z  575 โ”‚       if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
2026-10-23T23:34:17.9262486Z  576 โ”‚         alertedUnavailableIncomingShareIdRef.current = shareId;
2026-10-23T23:34:17.9262570Z  577 โ”‚         Dialog.alert(
2026-10-23T23:34:17.9262674Z  578 โ”‚           "Shared content unavailable",
2026-10-23T23:34:17.9262888Z  579 โ”‚           "The shared content is no longer in the inbox. You can continue editing this task draft.",
2026-10-23T23:34:17.9262965Z  580 โ”‚         );
2026-10-23T23:34:17.9263042Z  581 โ”‚       }
2026-10-23T23:34:17.9263112Z  582 โ”‚       return;
2026-10-23T23:34:17.9263178Z  583 โ”‚     }
2026-10-23T23:34:17.9263237Z  584 โ”‚
2026-10-23T23:34:17.9263307Z  585 โ”‚     if (
2026-10-23T23:34:17.9263503Z  586 โ”‚       incomingShare.attachments.some((attachment) => attachment.type === "file") &&
2026-10-23T23:34:17.9263619Z  587 โ”‚       selectedEnvironmentServerConfig === null
2026-10-23T23:34:17.9263689Z  588 โ”‚     ) {
2026-10-23T23:34:17.9263763Z  589 โ”‚       return;
2026-10-23T23:34:17.9263830Z  590 โ”‚     }
2026-10-23T23:34:17.9263888Z  591 โ”‚
2026-10-23T23:34:17.9264053Z  592 โ”‚     if (alertedUnavailableIncomingShareIdRef.current === shareId) {
2026-10-23T23:34:17.9264205Z  593 โ”‚       alertedUnavailableIncomingShareIdRef.current = null;
2026-10-23T23:34:17.9264276Z  594 โ”‚     }
2026-10-23T23:34:17.9264410Z  595 โ”‚     startedShareImportKeyRef.current = importKey;
2026-10-23T23:34:17.9264499Z  596 โ”‚     const draftBackup =
2026-10-23T23:34:17.9264724Z  597 โ”‚       shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
2026-10-23T23:34:17.9264888Z  598 โ”‚     shareImportDraftBackupRef.current.set(importKey, draftBackup);
2026-10-23T23:34:17.9264991Z  599 โ”‚     const importToken = Symbol(importKey);
2026-10-23T23:34:17.9265092Z  600 โ”‚     let didReserveShare = false;
2026-10-23T23:34:17.9265186Z  601 โ”‚     let didConsumeShare = false;
2026-10-23T23:34:17.9265287Z  602 โ”‚     let needsDraftRestore = false;
2026-10-23T23:34:17.9265418Z  603 โ”‚     activeShareImportTokenRef.current = importToken;
2026-10-23T23:34:17.9265522Z  604 โ”‚     setImportingShareKey(importKey);
2026-10-23T23:34:17.9265634Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9265861Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9265945Z  605 โ”‚     void (async () => {
2026-10-23T23:34:17.9266014Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9266720Z   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-23T23:34:17.9267113Z   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-23T23:34:17.9267117Z
2026-10-23T23:34:17.9267367Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9267718Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5]
2026-10-23T23:34:17.9267912Z  523 โ”‚     props.initialProjectRef,
2026-10-23T23:34:17.9268028Z  524 โ”‚     props.incomingShareId,
2026-10-23T23:34:17.9268139Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9268341Z      ยท               โ•ฐโ”€โ”€ Unnecessary dependency `props.incomingShareId`
2026-10-23T23:34:17.9268431Z  525 โ”‚     props.pendingTaskId,
2026-10-23T23:34:17.9268495Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9268935Z   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-23T23:34:17.9269307Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9269310Z
2026-10-23T23:34:17.9269575Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-23T23:34:17.9269764Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5]
2026-10-23T23:34:17.9269906Z  542 โ”‚     loadedBranchesProjectKeyRef.current = projectKey;
2026-10-23T23:34:17.9269985Z  543 โ”‚     flow.loadBranches();
2026-10-23T23:34:17.9270069Z      ยท     โ”€โ”€โ”ฌโ”€
2026-10-23T23:34:17.9270224Z      ยท       โ•ฐโ”€โ”€ Missing dependency `flow`
2026-10-23T23:34:17.9270379Z  544 โ”‚   }, [flow.loadBranches, selectedProject]);
2026-10-23T23:34:17.9270483Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9270737Z      ยท               โ•ฐโ”€โ”€ Overly precise dependency `flow.loadBranches`, use `flow` instead
2026-10-23T23:34:17.9270808Z  545 โ”‚
2026-10-23T23:34:17.9270883Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9271391Z   help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-23T23:34:17.9271765Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9271768Z
2026-10-23T23:34:17.9272007Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9272193Z      โ•ญโ”€[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
2026-10-23T23:34:17.9272281Z  765 โ”‚     flow.draftKey,
2026-10-23T23:34:17.9272370Z  766 โ”‚     hasImportedIncomingShare,
2026-10-23T23:34:17.9272503Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9272722Z      ยท                 โ•ฐโ”€โ”€ Unnecessary dependency `hasImportedIncomingShare`
2026-10-23T23:34:17.9272811Z  767 โ”‚     incomingShare,
2026-10-23T23:34:17.9272908Z  768 โ”‚     isIncomingShareInboxLoading,
2026-10-23T23:34:17.9273033Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9273256Z      ยท                  โ•ฐโ”€โ”€ Unnecessary dependency `isIncomingShareInboxLoading`
2026-10-23T23:34:17.9273352Z  769 โ”‚     isIncomingShareUnavailable,
2026-10-23T23:34:17.9273436Z  770 โ”‚     props.incomingShareId,
2026-10-23T23:34:17.9273551Z  771 โ”‚     props.initialProjectRef?.environmentId,
2026-10-23T23:34:17.9273659Z  772 โ”‚     props.initialProjectRef?.projectId,
2026-10-23T23:34:17.9273752Z  773 โ”‚     releaseShareReservation,
2026-10-23T23:34:17.9273826Z  774 โ”‚     reserveShare,
2026-10-23T23:34:17.9274042Z  775 โ”‚     selectedEnvironmentServerConfig,
2026-10-23T23:34:17.9274223Z  776 โ”‚     selectedProject,
2026-10-23T23:34:17.9274327Z  777 โ”‚     shareImportAttempt,
2026-10-23T23:34:17.9274430Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9274631Z      ยท              โ•ฐโ”€โ”€ Unnecessary dependency `shareImportAttempt`
2026-10-23T23:34:17.9274704Z  778 โ”‚   ]);
2026-10-23T23:34:17.9274775Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9275207Z   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-23T23:34:17.9275578Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9275581Z
2026-10-23T23:34:17.9276127Z   โš  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-23T23:34:17.9276284Z       โ•ญโ”€[apps/server/src/serverSettings.test.ts:1741:32]
2026-10-23T23:34:17.9276489Z  1740 โ”‚       const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5");
2026-10-23T23:34:17.9276711Z  1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-23T23:34:17.9276858Z       ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9276992Z  1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
2026-10-23T23:34:17.9277058Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9277061Z
2026-10-23T23:34:17.9277593Z   โš  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-23T23:34:17.9277751Z       โ•ญโ”€[apps/server/src/serverSettings.test.ts:1742:34]
2026-10-23T23:34:17.9277979Z  1741 โ”‚       const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model);
2026-10-23T23:34:17.9278111Z  1742 โ”‚       const scriptsJson = yield* Schema.encodeEffect(
2026-10-23T23:34:17.9278248Z       ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9278396Z  1743 โ”‚         Schema.fromJsonString(Schema.Array(ProjectScript)),
2026-10-23T23:34:17.9278468Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9278470Z
2026-10-23T23:34:17.9278747Z   โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-23T23:34:17.9279009Z       โ•ญโ”€[apps/mobile/src/state/use-composer-drafts.ts:1022:15]
2026-10-23T23:34:17.9279216Z  1021 โ”‚             instanceId,
2026-10-23T23:34:17.9279401Z  1022 โ”‚             { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models },
2026-10-23T23:34:17.9279597Z       ยท               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9279683Z  1023 โ”‚           ]),
2026-10-23T23:34:17.9279747Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9280159Z   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-23T23:34:17.9280163Z
2026-10-23T23:34:17.9280526Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9280726Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5]
2026-10-23T23:34:17.9280796Z  398 โ”‚
2026-10-23T23:34:17.9280891Z  399 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9280982Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9281152Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9281262Z  400 โ”‚     setInspectorSelection((current) => {
2026-10-23T23:34:17.9281371Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9281579Z      ยท               โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9281708Z  401 โ”‚       if (props.renderInspector === undefined) {
2026-10-23T23:34:17.9281768Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9282499Z   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-23T23:34:17.9282900Z   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-23T23:34:17.9282904Z
2026-10-23T23:34:17.9283166Z   โš  react(no-unstable-nested-components): Do not define components during render.
2026-10-23T23:34:17.9283352Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24]
2026-10-23T23:34:17.9283540Z  527 โ”‚       const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
2026-10-23T23:34:17.9283751Z  528 โ”‚ โ•ญโ”€โ–ถ   const GitInspector = () => (
2026-10-23T23:34:17.9283877Z  529 โ”‚ โ”‚       <GitOverviewSheet
2026-10-23T23:34:17.9284029Z  530 โ”‚ โ”‚         headerInset={inspectorHeaderInset}
2026-10-23T23:34:17.9284153Z  531 โ”‚ โ”‚         presentation="inspector"
2026-10-23T23:34:17.9284377Z  532 โ”‚ โ”‚         route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
2026-10-23T23:34:17.9284480Z  533 โ”‚ โ”‚       />
2026-10-23T23:34:17.9284636Z  534 โ”‚ โ•ฐโ”€โ–ถ   );
2026-10-23T23:34:17.9284732Z  535 โ”‚       const FilesInspector = () =>
2026-10-23T23:34:17.9284800Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9285073Z   help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-23T23:34:17.9285076Z
2026-10-23T23:34:17.9285425Z   โš  react(no-unstable-nested-components): Do not define components during render.
2026-10-23T23:34:17.9285771Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26]
2026-10-23T23:34:17.9285846Z  534 โ”‚       );
2026-10-23T23:34:17.9286050Z  535 โ”‚ โ•ญโ”€โ–ถ   const FilesInspector = () =>
2026-10-23T23:34:17.9286238Z  536 โ”‚ โ”‚       selectedThread !== null && selectedThreadCwd !== null ? (
2026-10-23T23:34:17.9286411Z  537 โ”‚ โ”‚         <ThreadFileNavigatorPane
2026-10-23T23:34:17.9286577Z  538 โ”‚ โ”‚           cwd={selectedThreadCwd}
2026-10-23T23:34:17.9286753Z  539 โ”‚ โ”‚           environmentId={selectedThread.environmentId}
2026-10-23T23:34:17.9286905Z  540 โ”‚ โ”‚           headerInset={inspectorHeaderInset}
2026-10-23T23:34:17.9287096Z  541 โ”‚ โ”‚           projectName={selectedThreadProject?.title ?? "Files"}
2026-10-23T23:34:17.9287219Z  542 โ”‚ โ”‚           selectedPath={null}
2026-10-23T23:34:17.9287379Z  543 โ”‚ โ”‚           onSelectFile={handleSelectInspectorFile}
2026-10-23T23:34:17.9287477Z  544 โ”‚ โ”‚         />
2026-10-23T23:34:17.9287656Z  545 โ”‚ โ•ฐโ”€โ–ถ     ) : null;
2026-10-23T23:34:17.9287837Z  546 โ”‚       const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
2026-10-23T23:34:17.9287910Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9288179Z   help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-23T23:34:17.9288184Z
2026-10-23T23:34:17.9288437Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9288582Z     โ•ญโ”€[apps/mobile/src/state/thread-order.ts:29:7]
2026-10-23T23:34:17.9288697Z  28 โ”‚     getPendingThreadOrder();
2026-10-23T23:34:17.9288821Z  29 โ”‚   }, [nowMinute, snoozeWakeTick]);
2026-10-23T23:34:17.9288982Z     ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9289213Z     ยท           โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-23T23:34:17.9289388Z     ยท           โ•ฐโ”€โ”€ Unnecessary dependency `nowMinute`
2026-10-23T23:34:17.9289475Z  30 โ”‚   return pending;
2026-10-23T23:34:17.9289548Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9289892Z   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-23T23:34:17.9290281Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9290288Z
2026-10-23T23:34:17.9290687Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-23T23:34:17.9290879Z      โ•ญโ”€[apps/web/src/components/settings/SettingInheritance.tsx:163:24]
2026-10-23T23:34:17.9290955Z  162 โ”‚   keys,
2026-10-23T23:34:17.9291044Z  163 โ”‚   overridingProjects = [],
2026-10-23T23:34:17.9291146Z      ยท                        โ”€โ”€
2026-10-23T23:34:17.9291231Z  164 โ”‚   onClearOverrides,
2026-10-23T23:34:17.9291298Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9291674Z   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-23T23:34:17.9291678Z
2026-10-23T23:34:17.9291985Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-23T23:34:17.9292259Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:186:12]
2026-10-23T23:34:17.9292330Z  185 โ”‚
2026-10-23T23:34:17.9292453Z  186 โ”‚ for (const {} of ["darwin", "linux"] as const) {
2026-10-23T23:34:17.9292544Z      ยท            โ”€โ”€
2026-10-23T23:34:17.9292612Z  187 โ”‚ }
2026-10-23T23:34:17.9292677Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9293027Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-23T23:34:17.9293031Z
2026-10-23T23:34:17.9293234Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-23T23:34:17.9293405Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:189:12]
2026-10-23T23:34:17.9293480Z  188 โ”‚
2026-10-23T23:34:17.9293559Z  189 โ”‚ for (const {} of [
2026-10-23T23:34:17.9293649Z      ยท            โ”€โ”€
2026-10-23T23:34:17.9293768Z  190 โ”‚   { kind: "browser", folderVerb: "none" },
2026-10-23T23:34:17.9293831Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9294100Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-23T23:34:17.9294103Z
2026-10-23T23:34:17.9294310Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-23T23:34:17.9294479Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:311:12]
2026-10-23T23:34:17.9294549Z  310 โ”‚
2026-10-23T23:34:17.9294707Z  311 โ”‚ for (const {} of ["rejected", "spawn-error", "stalled"] as const) {
2026-10-23T23:34:17.9294801Z      ยท            โ”€โ”€
2026-10-23T23:34:17.9294879Z  312 โ”‚ }
2026-10-23T23:34:17.9294954Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9295220Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-23T23:34:17.9295223Z
2026-10-23T23:34:17.9295428Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-23T23:34:17.9295599Z      โ•ญโ”€[apps/server/src/process/externalLauncher.test.ts:314:12]
2026-10-23T23:34:17.9295667Z  313 โ”‚
2026-10-23T23:34:17.9295742Z  314 โ”‚ for (const {} of [
2026-10-23T23:34:17.9295828Z      ยท            โ”€โ”€
2026-10-23T23:34:17.9295901Z  315 โ”‚   {
2026-10-23T23:34:17.9295972Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9296342Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-23T23:34:17.9296349Z
2026-10-23T23:34:17.9296643Z   โš  unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-23T23:34:17.9296857Z     โ•ญโ”€[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13]
2026-10-23T23:34:17.9296946Z  14 โ”‚ } from "@t3tools/contracts";
2026-10-23T23:34:17.9297056Z  15 โ”‚ import type {} from "@t3tools/contracts";
2026-10-23T23:34:17.9297156Z     ยท             โ”€โ”€
2026-10-23T23:34:17.9297377Z  16 โ”‚ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl";
2026-10-23T23:34:17.9297445Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9297544Z   help: Remove empty braces
2026-10-23T23:34:17.9297547Z
2026-10-23T23:34:17.9298235Z   โš  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-23T23:34:17.9298552Z       โ•ญโ”€[apps/server/src/usage/UsageService.test.ts:2383:7]
2026-10-23T23:34:17.9298700Z  2382 โ”‚           let orphanedAt: number | undefined;
2026-10-23T23:34:17.9298999Z  2383 โ”‚ โ•ญโ”€โ–ถ       for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) {
2026-10-23T23:34:17.9299159Z  2384 โ”‚ โ”‚           const tasks: Array<() => void> = [];
2026-10-23T23:34:17.9299420Z  2385 โ”‚ โ”‚           const dispatcher: Scheduler.SchedulerDispatcher = {
2026-10-23T23:34:17.9299588Z  2386 โ”‚ โ”‚             scheduleTask: (task) => tasks.push(task),
2026-10-23T23:34:17.9299719Z  2387 โ”‚ โ”‚             flush: () => {
2026-10-23T23:34:17.9299873Z  2388 โ”‚ โ”‚               let task: (() => void) | undefined;
2026-10-23T23:34:17.9300075Z  2389 โ”‚ โ”‚               while ((task = tasks.shift()) !== undefined) task();
2026-10-23T23:34:17.9300188Z  2390 โ”‚ โ”‚             },
2026-10-23T23:34:17.9300292Z  2391 โ”‚ โ”‚           };
2026-10-23T23:34:17.9300421Z  2392 โ”‚ โ”‚
2026-10-23T23:34:17.9300635Z  2393 โ”‚ โ”‚           let requestFiber: Fiber.Fiber<unknown, unknown> | undefined;
2026-10-23T23:34:17.9300769Z  2394 โ”‚ โ”‚           let requestChecks = 0;
2026-10-23T23:34:17.9300930Z  2395 โ”‚ โ”‚           const scheduler: Scheduler.Scheduler = {
2026-10-23T23:34:17.9301062Z  2396 โ”‚ โ”‚             executionMode: "async",
2026-10-23T23:34:17.9301209Z  2397 โ”‚ โ”‚             makeDispatcher: () => dispatcher,
2026-10-23T23:34:17.9301350Z  2398 โ”‚ โ”‚             shouldYield: (fiber) => {
2026-10-23T23:34:17.9301654Z  2399 โ”‚ โ”‚               if (fiber !== requestFiber) return false;
2026-10-23T23:34:17.9301804Z  2400 โ”‚ โ”‚               requestChecks += 1;
2026-10-23T23:34:17.9301993Z  2401 โ”‚ โ”‚               if (requestChecks !== interruptAt) return false;
2026-10-23T23:34:17.9302141Z  2402 โ”‚ โ”‚               fiber.interruptUnsafe();
2026-10-23T23:34:17.9302265Z  2403 โ”‚ โ”‚               return true;
2026-10-23T23:34:17.9302371Z  2404 โ”‚ โ”‚             },
2026-10-23T23:34:17.9302470Z  2405 โ”‚ โ”‚           };
2026-10-23T23:34:17.9302554Z  2406 โ”‚ โ”‚
2026-10-23T23:34:17.9302709Z  2407 โ”‚ โ”‚           const input: UsageSummaryInput = {
2026-10-23T23:34:17.9302827Z  2408 โ”‚ โ”‚             ...WINDOW,
2026-10-23T23:34:17.9302988Z  2409 โ”‚ โ”‚             sinceDay: UsageDay.make("2026-09-01"),
2026-10-23T23:34:17.9303238Z  2410 โ”‚ โ”‚             untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`),
2026-10-23T23:34:17.9303343Z  2411 โ”‚ โ”‚           };
2026-10-23T23:34:17.9303489Z  2412 โ”‚ โ”‚           const first = yield* service
2026-10-23T23:34:17.9303614Z  2413 โ”‚ โ”‚             .readSummary(input)
2026-10-23T23:34:17.9303730Z  2414 โ”‚ โ”‚             .pipe(
2026-10-23T23:34:17.9303854Z  2415 โ”‚ โ”‚               Effect.exit,
2026-10-23T23:34:17.9304048Z  2416 โ”‚ โ”‚               Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-23T23:34:17.9304174Z  2417 โ”‚ โ”‚               Effect.forkChild,
2026-10-23T23:34:17.9304492Z  2418 โ”‚ โ”‚             );
2026-10-23T23:34:17.9304774Z  2419 โ”‚ โ”‚           requestFiber = first;
2026-10-23T23:34:17.9304909Z  2420 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-23T23:34:17.9305032Z  2421 โ”‚ โ”‚           dispatcher.flush();
2026-10-23T23:34:17.9305123Z  2422 โ”‚ โ”‚
2026-10-23T23:34:17.9305316Z  2423 โ”‚ โ”‚           const second = yield* service.readSummary(input).pipe(
2026-10-23T23:34:17.9305483Z  2424 โ”‚ โ”‚             Effect.match({
2026-10-23T23:34:17.9305663Z  2425 โ”‚ โ”‚               onFailure: (error) => error.reason,
2026-10-23T23:34:17.9305826Z  2426 โ”‚ โ”‚               onSuccess: () => "success" as const,
2026-10-23T23:34:17.9305937Z  2427 โ”‚ โ”‚             }),
2026-10-23T23:34:17.9306141Z  2428 โ”‚ โ”‚             Effect.provideService(Scheduler.Scheduler, scheduler),
2026-10-23T23:34:17.9306271Z  2429 โ”‚ โ”‚             Effect.forkChild,
2026-10-23T23:34:17.9306382Z  2430 โ”‚ โ”‚           );
2026-10-23T23:34:17.9306512Z  2431 โ”‚ โ”‚           yield* Effect.yieldNow;
2026-10-23T23:34:17.9306643Z  2432 โ”‚ โ”‚           dispatcher.flush();
2026-10-23T23:34:17.9306798Z  2433 โ”‚ โ”‚           const secondExit = second.pollUnsafe();
2026-10-23T23:34:17.9306946Z  2434 โ”‚ โ”‚           if (secondExit === undefined) {
2026-10-23T23:34:17.9307086Z  2435 โ”‚ โ”‚             second.interruptUnsafe();
2026-10-23T23:34:17.9307225Z  2436 โ”‚ โ”‚             orphanedAt = interruptAt;
2026-10-23T23:34:17.9307329Z  2437 โ”‚ โ”‚             break;
2026-10-23T23:34:17.9307435Z  2438 โ”‚ โ”‚           }
2026-10-23T23:34:17.9307586Z  2439 โ”‚ โ”‚           if (Exit.isFailure(secondExit)) {
2026-10-23T23:34:17.9307778Z  2440 โ”‚ โ”‚             assert.fail("the matching request fiber was interrupted");
2026-10-23T23:34:17.9307872Z  2441 โ”‚ โ”‚           }
2026-10-23T23:34:17.9308063Z  2442 โ”‚ โ”‚           assert.strictEqual(secondExit.value, "invalidWindow");
2026-10-23T23:34:17.9308230Z  2443 โ”‚ โ•ฐโ”€โ–ถ       }
2026-10-23T23:34:17.9308307Z  2444 โ”‚
2026-10-23T23:34:17.9308370Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9308374Z
2026-10-23T23:34:17.9308702Z   โš  eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-23T23:34:17.9308858Z      โ•ญโ”€[apps/server/src/usage/UsageService.ts:169:7]
2026-10-23T23:34:17.9308936Z  168 โ”‚
2026-10-23T23:34:17.9309032Z  169 โ”‚ const layerTest = Layer.succeed(
2026-10-23T23:34:17.9309133Z      ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9309298Z      ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
2026-10-23T23:34:17.9309379Z  170 โ”‚   UsageService,
2026-10-23T23:34:17.9309439Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9309573Z   help: Consider removing this declaration.
2026-10-23T23:34:17.9309576Z
2026-10-23T23:34:17.9309888Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9310045Z     โ•ญโ”€[apps/mobile/src/state/use-vcs-action-state.ts:86:5]
2026-10-23T23:34:17.9310170Z  83 โ”‚   const [nowMs, setNowMs] = useState(() => Date.now());
2026-10-23T23:34:17.9310425Z  84 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9310618Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9310803Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9310908Z  85 โ”‚     if (!actionState.isRunning) return;
2026-10-23T23:34:17.9310995Z  86 โ”‚     setNowMs(Date.now());
2026-10-23T23:34:17.9311085Z     ยท     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9311291Z     ยท         โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9311521Z  87 โ”‚     const interval = setInterval(() => setNowMs(Date.now()), 1000);
2026-10-23T23:34:17.9311592Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9312316Z   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-23T23:34:17.9312719Z   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-23T23:34:17.9312722Z
2026-10-23T23:34:17.9312970Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9313125Z      โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:542:25]
2026-10-23T23:34:17.9313294Z  541 โ”‚     // range) the boundary string is identical and the chain would die.
2026-10-23T23:34:17.9313417Z  542 โ”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-23T23:34:17.9313547Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9313807Z      ยท                                โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-23T23:34:17.9313981Z  543 โ”‚   const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase();
2026-10-23T23:34:17.9314047Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9314406Z   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-23T23:34:17.9314785Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9314788Z
2026-10-23T23:34:17.9314990Z   โš  react(purity): Cannot call impure function during render
2026-10-23T23:34:17.9315147Z      โ•ญโ”€[apps/mobile/src/features/home/HomeScreen.tsx:533:53]
2026-10-23T23:34:17.9315256Z  532 โ”‚     if (Number.isNaN(wakeAtMs)) return;
2026-10-23T23:34:17.9315544Z  533 โ”‚     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-23T23:34:17.9315809Z      ยท                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9316018Z      ยท                                                          โ•ฐโ”€โ”€ Cannot call impure function
2026-10-23T23:34:17.9316117Z  534 โ”‚     const id = setTimeout(() => {
2026-10-23T23:34:17.9316184Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9316607Z   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-23T23:34:17.9316960Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-23T23:34:17.9316963Z
2026-10-23T23:34:17.9317186Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-23T23:34:17.9317337Z      โ•ญโ”€[apps/server/src/processRunner.test.ts:266:14]
2026-10-23T23:34:17.9317412Z  265 โ”‚
2026-10-23T23:34:17.9317538Z  266 โ”‚   for (const {} of ["timeout", "success"] as const) {
2026-10-23T23:34:17.9317636Z      ยท              โ”€โ”€
2026-10-23T23:34:17.9317719Z  267 โ”‚   }
2026-10-23T23:34:17.9317785Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9318067Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-23T23:34:17.9318070Z
2026-10-23T23:34:17.9318255Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9318441Z      โ•ญโ”€[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27]
2026-10-23T23:34:17.9318521Z  493 โ”‚         >
2026-10-23T23:34:17.9318623Z  494 โ”‚           {props.children(close)}
2026-10-23T23:34:17.9318741Z      ยท                           โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T23:34:17.9318936Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9319036Z  495 โ”‚         </ReanimatedSwipeable>
2026-10-23T23:34:17.9319096Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9319659Z   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-23T23:34:17.9320009Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9320013Z
2026-10-23T23:34:17.9320333Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9320585Z      โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7]
2026-10-23T23:34:17.9320648Z  118 โ”‚
2026-10-23T23:34:17.9320739Z  119 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9320834Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9320984Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9321089Z  120 โ”‚     if (orientationSettled) return;
2026-10-23T23:34:17.9321229Z  121 โ”‚     const orientation = getNativeShowcaseOrientation();
2026-10-23T23:34:17.9321325Z  122 โ”‚     if (orientation === null) {
2026-10-23T23:34:17.9321421Z  123 โ”‚       setOrientationSettled(true);
2026-10-23T23:34:17.9321538Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9321849Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9322031Z  124 โ”‚       return;
2026-10-23T23:34:17.9322115Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9322862Z   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-23T23:34:17.9323296Z   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-23T23:34:17.9323299Z
2026-10-23T23:34:17.9323613Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9323823Z      โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7]
2026-10-23T23:34:17.9323888Z  292 โ”‚
2026-10-23T23:34:17.9323973Z  293 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9324062Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9324219Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9324291Z  294 โ”‚     if (
2026-10-23T23:34:17.9324378Z  295 โ”‚       scene === null ||
2026-10-23T23:34:17.9324479Z  296 โ”‚       requestedScene === null ||
2026-10-23T23:34:17.9324573Z  297 โ”‚       scene !== requestedScene ||
2026-10-23T23:34:17.9324649Z  298 โ”‚       !hasFixture ||
2026-10-23T23:34:17.9324743Z  299 โ”‚       !orientationSettled ||
2026-10-23T23:34:17.9324827Z  300 โ”‚       !themeApplied ||
2026-10-23T23:34:17.9324980Z  301 โ”‚       (scene === "agent-activity" && !agentActivityStaged) ||
2026-10-23T23:34:17.9325142Z  302 โ”‚       !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
2026-10-23T23:34:17.9325218Z  303 โ”‚     ) {
2026-10-23T23:34:17.9325307Z  304 โ”‚       setReadyScene(null);
2026-10-23T23:34:17.9325405Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9325607Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9325690Z  305 โ”‚       return;
2026-10-23T23:34:17.9325764Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9326472Z   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-23T23:34:17.9326856Z   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-23T23:34:17.9326870Z
2026-10-23T23:34:17.9327188Z   โš  eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'.
2026-10-23T23:34:17.9327393Z      โ•ญโ”€[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9]
2026-10-23T23:34:17.9327486Z  127 โ”‚     let cancelled = false;
2026-10-23T23:34:17.9327593Z  128 โ”‚     let lastOutcome: string | null = null;
2026-10-23T23:34:17.9327685Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9327855Z      ยท              โ•ฐโ”€โ”€ 'lastOutcome' is declared here
2026-10-23T23:34:17.9328070Z  129 โ”‚     void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
2026-10-23T23:34:17.9328262Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9328495Z   help: Consider removing this declaration.
2026-10-23T23:34:17.9328498Z
2026-10-23T23:34:17.9328743Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T23:34:17.9328924Z      โ•ญโ”€[apps/mobile/src/components/ComposerContextSheet.tsx:267:25]
2026-10-23T23:34:17.9329057Z  266 โ”‚                 {record.elements?.map((element, index) => (
2026-10-23T23:34:17.9329306Z  267 โ”‚                   <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
2026-10-23T23:34:17.9329538Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9329640Z  268 โ”‚                     <ContextField
2026-10-23T23:34:17.9329711Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9329891Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T23:34:17.9329897Z
2026-10-23T23:34:17.9330145Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9330309Z     โ•ญโ”€[apps/mobile/src/components/ComposerEditor.tsx:82:6]
2026-10-23T23:34:17.9330433Z  81 โ”‚     },
2026-10-23T23:34:17.9330537Z  82 โ”‚     [draftKey],
2026-10-23T23:34:17.9330634Z     ยท      โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9330806Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `draftKey`
2026-10-23T23:34:17.9330881Z  83 โ”‚   );
2026-10-23T23:34:17.9330947Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9331312Z   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-23T23:34:17.9331704Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9331711Z
2026-10-23T23:34:17.9332023Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9332191Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
2026-10-23T23:34:17.9332259Z  57 โ”‚
2026-10-23T23:34:17.9332351Z  58 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9332446Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9332608Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9332724Z  59 โ”‚     const controller = new AbortController();
2026-10-23T23:34:17.9332814Z  60 โ”‚     setLoadState("pending");
2026-10-23T23:34:17.9332910Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9333121Z     ยท           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9333318Z  61 โ”‚     // A renewed signature is used on Retry, not as a reason to reset the native player.
2026-10-23T23:34:17.9333387Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9334100Z   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-23T23:34:17.9334487Z   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-23T23:34:17.9334490Z
2026-10-23T23:34:17.9334846Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9335099Z     โ•ญโ”€[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
2026-10-23T23:34:17.9335205Z  70 โ”‚     return () => controller.abort();
2026-10-23T23:34:17.9335326Z  71 โ”‚   }, [player, props.playRequested, attempt]);
2026-10-23T23:34:17.9335536Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9335839Z     ยท          โ”‚             โ”‚              โ•ฐโ”€โ”€ Unnecessary dependency `attempt`
2026-10-23T23:34:17.9336130Z     ยท          โ”‚             โ•ฐโ”€โ”€ Unnecessary dependency `props.playRequested`
2026-10-23T23:34:17.9336411Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `player_0`
2026-10-23T23:34:17.9336506Z  72 โ”‚
2026-10-23T23:34:17.9336580Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9336940Z   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-23T23:34:17.9337325Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9337328Z
2026-10-23T23:34:17.9337663Z   โš  eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'.
2026-10-23T23:34:17.9337828Z      โ•ญโ”€[apps/server/src/telemetry/AnalyticsService.ts:340:7]
2026-10-23T23:34:17.9337891Z  339 โ”‚
2026-10-23T23:34:17.9338040Z  340 โ”‚ const layerTest = AnalyticsService.layerTest;
2026-10-23T23:34:17.9338143Z      ยท       โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9338314Z      ยท           โ•ฐโ”€โ”€ 'layerTest' is declared here
2026-10-23T23:34:17.9338383Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9338518Z   help: Consider removing this declaration.
2026-10-23T23:34:17.9338521Z
2026-10-23T23:34:17.9338726Z   โš  eslint(no-control-regex): Unexpected control character
2026-10-23T23:34:17.9338959Z      โ•ญโ”€[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46]
2026-10-23T23:34:17.9339123Z  219 โ”‚               <Text selectable className="font-mono text-sm text-foreground">
2026-10-23T23:34:17.9339318Z  220 โ”‚                 {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")}
2026-10-23T23:34:17.9339455Z      ยท                                              โ”€โ”€โ”ฌโ”€
2026-10-23T23:34:17.9339672Z      ยท                                                โ•ฐโ”€โ”€ 'U+001B' is a control character.
2026-10-23T23:34:17.9339754Z  221 โ”‚               </Text>
2026-10-23T23:34:17.9339831Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9340116Z   help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression.
2026-10-23T23:34:17.9340119Z
2026-10-23T23:34:17.9340506Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9340684Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55]
2026-10-23T23:34:17.9340765Z  61 โ”‚   }, []);
2026-10-23T23:34:17.9340849Z  62 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9340936Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9341090Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9341385Z  63 โ”‚     if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl);
2026-10-23T23:34:17.9341801Z     ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9342067Z     ยท                                                              โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9342177Z  64 โ”‚   }, [playbackUrl, resolvedUrl]);
2026-10-23T23:34:17.9342245Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9343050Z   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-23T23:34:17.9343453Z   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-23T23:34:17.9343460Z
2026-10-23T23:34:17.9343768Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9343994Z      โ•ญโ”€[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10]
2026-10-23T23:34:17.9344057Z  117 โ”‚
2026-10-23T23:34:17.9344144Z  118 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9344231Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9344382Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9344483Z  119 โ”‚     void refreshNotifications();
2026-10-23T23:34:17.9344598Z      ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9344820Z      ยท                    โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9344996Z  120 โ”‚     const subscription = AppState.addEventListener("change", (state) => {
2026-10-23T23:34:17.9345055Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9345759Z   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-23T23:34:17.9346145Z   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-23T23:34:17.9346149Z
2026-10-23T23:34:17.9346458Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9346878Z      โ•ญโ”€[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7]
2026-10-23T23:34:17.9347084Z  125 โ”‚
2026-10-23T23:34:17.9347179Z  126 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9347269Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9347427Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9347515Z  127 โ”‚     if (!isLoaded) {
2026-10-23T23:34:17.9347631Z  128 โ”‚       setLiveActivityStatus("checking");
2026-10-23T23:34:17.9347762Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9348031Z      ยท                 โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9348110Z  129 โ”‚       return;
2026-10-23T23:34:17.9348177Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9348884Z   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-23T23:34:17.9349275Z   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-23T23:34:17.9349278Z
2026-10-23T23:34:17.9349579Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9349738Z      โ•ญโ”€[apps/mobile/src/components/ProjectFavicon.tsx:158:5]
2026-10-23T23:34:17.9349976Z  153 โ”‚   const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
2026-10-23T23:34:17.9350067Z  154 โ”‚   useLayoutEffect(() => {
2026-10-23T23:34:17.9350164Z      ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9350326Z      ยท          โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9350488Z  155 โ”‚     if (faviconRequest === null) return;
2026-10-23T23:34:17.9350564Z  156 โ”‚
2026-10-23T23:34:17.9350717Z  157 โ”‚     const endRequest = beginProjectFaviconRequest(faviconRequest);
2026-10-23T23:34:17.9350833Z  158 โ”‚     setActiveFaviconRequest(faviconRequest);
2026-10-23T23:34:17.9350949Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9351160Z      ยท                โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9351241Z  159 โ”‚     return endRequest;
2026-10-23T23:34:17.9351309Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9352023Z   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-23T23:34:17.9352407Z   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-23T23:34:17.9352410Z
2026-10-23T23:34:17.9352853Z   โš  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-23T23:34:17.9353007Z      โ•ญโ”€[apps/server/src/auth/RpcAuthorization.ts:237:17]
2026-10-23T23:34:17.9353175Z  236 โ”‚ const requiredScopesForSettingsUpdate = (payload: unknown) => {
2026-10-23T23:34:17.9353440Z  237 โ”‚   const input = Schema.decodeUnknownSync(SettingsUpdate)(payload);
2026-10-23T23:34:17.9353678Z      ยท                 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9353852Z  238 โ”‚   const scopes = requiredScopesForServerSettingsPatch(input.patch);
2026-10-23T23:34:17.9353913Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9353916Z
2026-10-23T23:34:17.9354414Z   โš  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-23T23:34:17.9354584Z      โ•ญโ”€[apps/server/src/auth/RpcAuthorization.ts:256:26]
2026-10-23T23:34:17.9354710Z  255 โ”‚   if (method === WS_METHODS.assetsCreateUrl) {
2026-10-23T23:34:17.9354893Z  256 โ”‚     const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload);
2026-10-23T23:34:17.9355046Z      ยท                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9355136Z  257 โ”‚     return [
2026-10-23T23:34:17.9355203Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9355206Z
2026-10-23T23:34:17.9355506Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9355674Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:68:5]
2026-10-23T23:34:17.9355814Z  66 โ”‚   const { id: attachmentId, fileUri } = attachment;
2026-10-23T23:34:17.9355903Z  67 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9355995Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9356154Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9356234Z  68 โ”‚     setUri(null);
2026-10-23T23:34:17.9356321Z     ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T23:34:17.9356524Z     ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9356608Z  69 โ”‚     setError(null);
2026-10-23T23:34:17.9356679Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9357388Z   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-23T23:34:17.9357774Z   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-23T23:34:17.9357779Z
2026-10-23T23:34:17.9358034Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9358209Z     โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:91:7]
2026-10-23T23:34:17.9358287Z  90 โ”‚     };
2026-10-23T23:34:17.9358384Z  91 โ”‚   }, [attachmentId, fileUri]);
2026-10-23T23:34:17.9358521Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9358743Z     ยท             โ”‚          โ•ฐโ”€โ”€ Unnecessary dependency `fileUri`
2026-10-23T23:34:17.9358930Z     ยท             โ•ฐโ”€โ”€ Unnecessary dependency `attachmentId`
2026-10-23T23:34:17.9359095Z  92 โ”‚   const mimeType = videoMimeType(attachment) ?? attachment.mimeType;
2026-10-23T23:34:17.9359157Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9359507Z   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-23T23:34:17.9359983Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9360041Z
2026-10-23T23:34:17.9360397Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-23T23:34:17.9360579Z      โ•ญโ”€[apps/mobile/src/components/VideoPreviewModal.tsx:213:34]
2026-10-23T23:34:17.9360659Z  212 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9360809Z  213 โ”‚     if (!isFocused && hasSource) props.onRequestClose();
2026-10-23T23:34:17.9360992Z      ยท                                  โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T23:34:17.9361202Z      ยท                                    โ•ฐโ”€โ”€ Missing dependency `props`
2026-10-23T23:34:17.9361327Z  214 โ”‚   }, [isFocused, hasSource, props.onRequestClose]);
2026-10-23T23:34:17.9361463Z      ยท                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9361742Z      ยท                                       โ•ฐโ”€โ”€ Overly precise dependency `props.onRequestClose`, use `props` instead
2026-10-23T23:34:17.9361844Z  215 โ”‚   const { source } = props;
2026-10-23T23:34:17.9361911Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9362427Z   help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-23T23:34:17.9362812Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9362815Z
2026-10-23T23:34:17.9363058Z   โš  eslint(no-unused-vars): Identifier 'identity' is imported but never used.
2026-10-23T23:34:17.9363198Z     โ•ญโ”€[apps/server/src/auth/http.ts:28:10]
2026-10-23T23:34:17.9363306Z  27 โ”‚ import * as Schema from "effect/Schema";
2026-10-23T23:34:17.9363426Z  28 โ”‚ import { identity } from "effect/Function";
2026-10-23T23:34:17.9363526Z     ยท          โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9363693Z     ยท              โ•ฐโ”€โ”€ 'identity' is imported here
2026-10-23T23:34:17.9363791Z  29 โ”‚ import * as Layer from "effect/Layer";
2026-10-23T23:34:17.9363860Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9363983Z   help: Consider removing this import.
2026-10-23T23:34:17.9363986Z
2026-10-23T23:34:17.9364296Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9364465Z      โ•ญโ”€[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-23T23:34:17.9364538Z  150 โ”‚
2026-10-23T23:34:17.9364636Z  151 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9364733Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9364885Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9364994Z  152 โ”‚     if (!controlledSelectedPath) {
2026-10-23T23:34:17.9365074Z  153 โ”‚       return;
2026-10-23T23:34:17.9365149Z  154 โ”‚     }
2026-10-23T23:34:17.9365249Z  155 โ”‚     setExpandedPaths((current) => {
2026-10-23T23:34:17.9365356Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9365569Z      ยท             โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9365718Z  156 โ”‚       const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-23T23:34:17.9365779Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9366604Z   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-23T23:34:17.9367101Z   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-23T23:34:17.9367105Z
2026-10-23T23:34:17.9367340Z   โš  eslint(no-unused-vars): Identifier 'Fiber' is imported but never used.
2026-10-23T23:34:17.9367462Z     โ•ญโ”€[apps/server/src/ws.ts:10:13]
2026-10-23T23:34:17.9367625Z   9 โ”‚ import * as Effect from "effect/Effect";
2026-10-23T23:34:17.9367740Z  10 โ”‚ import * as Fiber from "effect/Fiber";
2026-10-23T23:34:17.9367834Z     ยท             โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T23:34:17.9367999Z     ยท               โ•ฐโ”€โ”€ 'Fiber' is imported here
2026-10-23T23:34:17.9368121Z  11 โ”‚ import * as FileSystem from "effect/FileSystem";
2026-10-23T23:34:17.9368192Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9368311Z   help: Consider removing this import.
2026-10-23T23:34:17.9368314Z
2026-10-23T23:34:17.9368553Z   โš  eslint(no-unused-vars): Identifier 'Schedule' is imported but never used.
2026-10-23T23:34:17.9368664Z     โ•ญโ”€[apps/server/src/ws.ts:17:13]
2026-10-23T23:34:17.9368763Z  16 โ”‚ import * as Ref from "effect/Ref";
2026-10-23T23:34:17.9368876Z  17 โ”‚ import * as Schedule from "effect/Schedule";
2026-10-23T23:34:17.9368977Z     ยท             โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9369138Z     ยท                 โ•ฐโ”€โ”€ 'Schedule' is imported here
2026-10-23T23:34:17.9369252Z  18 โ”‚ import * as Schema from "effect/Schema";
2026-10-23T23:34:17.9369323Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9369449Z   help: Consider removing this import.
2026-10-23T23:34:17.9369452Z
2026-10-23T23:34:17.9369803Z   โš  eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'.
2026-10-23T23:34:17.9369927Z       โ•ญโ”€[apps/server/src/ws.ts:1285:13]
2026-10-23T23:34:17.9370120Z  1284 โ”‚       const usageLimitSources = yield* UsageLimitSources.UsageLimitSources;
2026-10-23T23:34:17.9370404Z  1285 โ”‚       const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner;
2026-10-23T23:34:17.9370543Z       ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9370771Z       ยท                         โ•ฐโ”€โ”€ 'projectSetupScriptRunner' is declared here
2026-10-23T23:34:17.9371129Z  1286 โ”‚       const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker;
2026-10-23T23:34:17.9371373Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9371524Z   help: Consider removing this declaration.
2026-10-23T23:34:17.9371527Z
2026-10-23T23:34:17.9371719Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9371909Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27]
2026-10-23T23:34:17.9372203Z  151 โ”‚         <View ref={anchorRef} collapsable={false} className={props.className} style={props.style}>
2026-10-23T23:34:17.9372324Z  152 โ”‚           {props.children(open)}
2026-10-23T23:34:17.9372450Z      ยท                           โ”€โ”€โ”ฌโ”€
2026-10-23T23:34:17.9372659Z      ยท                             โ•ฐโ”€โ”€ Cannot access ref value during render
2026-10-23T23:34:17.9372764Z  153 โ”‚         </View>
2026-10-23T23:34:17.9372828Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9373399Z   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-23T23:34:17.9373748Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9373751Z
2026-10-23T23:34:17.9374004Z   โš  react(memo-dependencies): Found missing/extra memoization dependencies
2026-10-23T23:34:17.9374195Z      โ•ญโ”€[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9]
2026-10-23T23:34:17.9374297Z  139 โ”‚       if (action.id !== undefined) {
2026-10-23T23:34:17.9374415Z  140 โ”‚         props.onPressAction?.({
2026-10-23T23:34:17.9374512Z      ยท         โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T23:34:17.9374682Z      ยท           โ•ฐโ”€โ”€ Missing dependency `props`
2026-10-23T23:34:17.9374792Z  141 โ”‚           nativeEvent: { event: action.id },
2026-10-23T23:34:17.9374974Z  142 โ”‚         } as Parameters<NonNullable<MenuComponentProps["onPressAction"]>>[0]);
2026-10-23T23:34:17.9375044Z  143 โ”‚       }
2026-10-23T23:34:17.9375122Z  144 โ”‚     },
2026-10-23T23:34:17.9375221Z  145 โ”‚     [close, props.onPressAction],
2026-10-23T23:34:17.9375346Z      ยท             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9375612Z      ยท                      โ•ฐโ”€โ”€ Overly precise dependency `props.onPressAction`, use `props` instead
2026-10-23T23:34:17.9375684Z  146 โ”‚   );
2026-10-23T23:34:17.9375746Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9376331Z   help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often
2026-10-23T23:34:17.9376714Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9376719Z
2026-10-23T23:34:17.9376967Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9377162Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-23T23:34:17.9377279Z  256 โ”‚     return () => cancelAnimationFrame(frame);
2026-10-23T23:34:17.9377374Z  257 โ”‚   }, [props.path, targetIndex]);
2026-10-23T23:34:17.9377474Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9377747Z      ยท            โ•ฐโ”€โ”€ Unnecessary dependency `props.path`
2026-10-23T23:34:17.9377860Z  258 โ”‚
2026-10-23T23:34:17.9377975Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9378337Z   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-23T23:34:17.9378766Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9378770Z
2026-10-23T23:34:17.9379016Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T23:34:17.9379196Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-23T23:34:17.9379291Z  292 โ”‚                     <SourceText
2026-10-23T23:34:17.9379415Z  293 โ”‚                       key={`${index}:${tokenIndex}`}
2026-10-23T23:34:17.9379556Z      ยท                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9379649Z  294 โ”‚                       style={{
2026-10-23T23:34:17.9379719Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9379896Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T23:34:17.9379899Z
2026-10-23T23:34:17.9380126Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T23:34:17.9380299Z      โ•ญโ”€[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-23T23:34:17.9380434Z  308 โ”‚             return (
2026-10-23T23:34:17.9380542Z  309 โ”‚               <SourceText key={index}>
2026-10-23T23:34:17.9380668Z      ยท                           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9380751Z  310 โ”‚                 {body}
2026-10-23T23:34:17.9380829Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9381005Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T23:34:17.9381008Z
2026-10-23T23:34:17.9381705Z   โš  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-23T23:34:17.9381920Z      โ•ญโ”€[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5]
2026-10-23T23:34:17.9382009Z  222 โ”‚         let idlePasses = 0;
2026-10-23T23:34:17.9382185Z  223 โ”‚ โ•ญโ”€โ–ถ     for (;;) {
2026-10-23T23:34:17.9382351Z  224 โ”‚ โ”‚         yield* Effect.promise(() => Promise.resolve());
2026-10-23T23:34:17.9382528Z  225 โ”‚ โ”‚         const pending = backgroundRuntime.pending.shift();
2026-10-23T23:34:17.9382653Z  226 โ”‚ โ”‚         if (!pending) {
2026-10-23T23:34:17.9382768Z  227 โ”‚ โ”‚           idlePasses++;
2026-10-23T23:34:17.9382898Z  228 โ”‚ โ”‚           if (idlePasses >= 3) {
2026-10-23T23:34:17.9382997Z  229 โ”‚ โ”‚             return;
2026-10-23T23:34:17.9383104Z  230 โ”‚ โ”‚           }
2026-10-23T23:34:17.9383219Z  231 โ”‚ โ”‚           continue;
2026-10-23T23:34:17.9383311Z  232 โ”‚ โ”‚         }
2026-10-23T23:34:17.9383421Z  233 โ”‚ โ”‚         idlePasses = 0;
2026-10-23T23:34:17.9383566Z  234 โ”‚ โ”‚         const exit = yield* Effect.exit(
2026-10-23T23:34:17.9383962Z  235 โ”‚ โ”‚           pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
2026-10-23T23:34:17.9384226Z  236 โ”‚ โ”‚         );
2026-10-23T23:34:17.9384361Z  237 โ”‚ โ”‚         yield* Effect.sync(() => {
2026-10-23T23:34:17.9384492Z  238 โ”‚ โ”‚           pending.resolve(exit);
2026-10-23T23:34:17.9384591Z  239 โ”‚ โ”‚         });
2026-10-23T23:34:17.9384748Z  240 โ”‚ โ•ฐโ”€โ–ถ     }
2026-10-23T23:34:17.9384815Z  241 โ”‚       },
2026-10-23T23:34:17.9384916Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9384921Z
2026-10-23T23:34:17.9385214Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9385407Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7]
2026-10-23T23:34:17.9385474Z  214 โ”‚     }
2026-10-23T23:34:17.9385570Z  215 โ”‚   }, [wrappedRender]);
2026-10-23T23:34:17.9385676Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9385859Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `wrappedRender`
2026-10-23T23:34:17.9385921Z  216 โ”‚
2026-10-23T23:34:17.9385986Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9386341Z   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-23T23:34:17.9386709Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9386714Z
2026-10-23T23:34:17.9387000Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T23:34:17.9387195Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35]
2026-10-23T23:34:17.9387268Z  816 โ”‚       >
2026-10-23T23:34:17.9387400Z  817 โ”‚         <AdaptiveWorkspaceContext value={contextValue}>
2026-10-23T23:34:17.9387542Z      ยท                                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9387655Z  818 โ”‚           <NativeWorkspaceInspectorContext
2026-10-23T23:34:17.9387724Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9387988Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T23:34:17.9388161Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T23:34:17.9388164Z
2026-10-23T23:34:17.9388444Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T23:34:17.9388643Z      โ•ญโ”€[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:832:42]
2026-10-23T23:34:17.9388714Z  831 โ”‚     >
2026-10-23T23:34:17.9388865Z  832 โ”‚       <AdaptiveWorkspaceContext.Provider value={contextValue}>
2026-10-23T23:34:17.9389003Z      ยท                                          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9389124Z  833 โ”‚         <WindowHingeContext value={windowHinge}>
2026-10-23T23:34:17.9389186Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9389447Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T23:34:17.9389606Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T23:34:17.9389615Z
2026-10-23T23:34:17.9389853Z   โš  eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-23T23:34:17.9390154Z    โ•ญโ”€[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8]
2026-10-23T23:34:17.9390329Z  3 โ”‚   AuthProvidersManageScope,
2026-10-23T23:34:17.9390471Z  4 โ”‚   type AuthSessionState,
2026-10-23T23:34:17.9390567Z    ยท        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9390747Z    ยท                โ•ฐโ”€โ”€ 'AuthSessionState' is imported here
2026-10-23T23:34:17.9390833Z  5 โ”‚   type EnvironmentId,
2026-10-23T23:34:17.9390897Z    โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9391047Z   help: Consider removing this import.
2026-10-23T23:34:17.9391051Z
2026-10-23T23:34:17.9391616Z   โš  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-23T23:34:17.9391810Z      โ•ญโ”€[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20]
2026-10-23T23:34:17.9391919Z  262 โ”‚       ...(update._meta !== undefined
2026-10-23T23:34:17.9392118Z  263 โ”‚         ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null }
2026-10-23T23:34:17.9392243Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9392326Z  264 โ”‚         : {}),
2026-10-23T23:34:17.9392394Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9392396Z
2026-10-23T23:34:17.9392642Z   โš  eslint(no-unused-vars): Function 'describeSchedule' is declared but never used.
2026-10-23T23:34:17.9392810Z     โ•ญโ”€[apps/server/src/scheduledTasks/Schedule.ts:79:10]
2026-10-23T23:34:17.9392886Z  78 โ”‚
2026-10-23T23:34:17.9393054Z  79 โ”‚ function describeSchedule(schedule: ScheduledTaskSchedule): string {
2026-10-23T23:34:17.9393161Z     ยท          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9393356Z     ยท                  โ•ฐโ”€โ”€ 'describeSchedule' is declared here
2026-10-23T23:34:17.9393492Z  80 โ”‚   if (schedule.type === "webhook") return "On webhook";
2026-10-23T23:34:17.9393564Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9393684Z   help: Consider removing this declaration.
2026-10-23T23:34:17.9393688Z
2026-10-23T23:34:17.9393874Z   โš  react(immutability): This value cannot be modified
2026-10-23T23:34:17.9394072Z     โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5]
2026-10-23T23:34:17.9394139Z  35 โ”‚
2026-10-23T23:34:17.9394300Z  36 โ”‚   const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0);
2026-10-23T23:34:17.9394407Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9394583Z     ยท                 โ•ฐโ”€โ”€ `inspectorProgress` originates here
2026-10-23T23:34:17.9394702Z  37 โ”‚   const { renderedInspectorWidth } = props;
2026-10-23T23:34:17.9394858Z  38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-23T23:34:17.9394921Z  39 โ”‚
2026-10-23T23:34:17.9395018Z  40 โ”‚   const onClosed = props.onClosed;
2026-10-23T23:34:17.9395101Z  41 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9395205Z  42 โ”‚     inspectorProgress.value = withTiming(
2026-10-23T23:34:17.9395304Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9395479Z     ยท             โ•ฐโ”€โ”€ `inspectorProgress` cannot be modified
2026-10-23T23:34:17.9395573Z  43 โ”‚       inspectorVisible ? 1 : 0,
2026-10-23T23:34:17.9395632Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9395947Z   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-23T23:34:17.9396400Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T23:34:17.9396449Z
2026-10-23T23:34:17.9396688Z   โš  react(immutability): This value cannot be modified
2026-10-23T23:34:17.9396878Z     โ•ญโ”€[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7]
2026-10-23T23:34:17.9396985Z  37 โ”‚   const { renderedInspectorWidth } = props;
2026-10-23T23:34:17.9397140Z  38 โ”‚   const renderedContentWidth = useSharedValue(inspectorWidth ?? 0);
2026-10-23T23:34:17.9397262Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9397524Z     ยท                   โ•ฐโ”€โ”€ `renderedContentWidth` originates here
2026-10-23T23:34:17.9397589Z  39 โ”‚
2026-10-23T23:34:17.9397686Z  40 โ”‚   const onClosed = props.onClosed;
2026-10-23T23:34:17.9397778Z  41 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9397884Z  42 โ”‚     inspectorProgress.value = withTiming(
2026-10-23T23:34:17.9397980Z  43 โ”‚       inspectorVisible ? 1 : 0,
2026-10-23T23:34:17.9398070Z  44 โ”‚       WORKSPACE_PANE_TIMING,
2026-10-23T23:34:17.9398155Z  45 โ”‚       (finished) => {
2026-10-23T23:34:17.9398318Z  46 โ”‚         if (finished === true && !inspectorVisible && onClosed !== undefined) {
2026-10-23T23:34:17.9398411Z  47 โ”‚           runOnJS(onClosed)();
2026-10-23T23:34:17.9398489Z  48 โ”‚         }
2026-10-23T23:34:17.9398564Z  49 โ”‚       },
2026-10-23T23:34:17.9398628Z  50 โ”‚     );
2026-10-23T23:34:17.9398786Z  51 โ”‚     const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0;
2026-10-23T23:34:17.9398883Z  52 โ”‚     renderedInspectorWidth.set(
2026-10-23T23:34:17.9399059Z  53 โ”‚       resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING),
2026-10-23T23:34:17.9399128Z  54 โ”‚     );
2026-10-23T23:34:17.9399201Z  55 โ”‚   }, [
2026-10-23T23:34:17.9399287Z  56 โ”‚     inspectorProgress,
2026-10-23T23:34:17.9399368Z  57 โ”‚     inspectorVisible,
2026-10-23T23:34:17.9399441Z  58 โ”‚     inspectorWidth,
2026-10-23T23:34:17.9399517Z  59 โ”‚     onClosed,
2026-10-23T23:34:17.9399610Z  60 โ”‚     renderedInspectorWidth,
2026-10-23T23:34:17.9399680Z  61 โ”‚     resizing,
2026-10-23T23:34:17.9399748Z  62 โ”‚   ]);
2026-10-23T23:34:17.9399814Z  63 โ”‚
2026-10-23T23:34:17.9399895Z  64 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9400002Z  65 โ”‚     const targetWidth = inspectorWidth ?? 0;
2026-10-23T23:34:17.9400115Z  66 โ”‚     if (!inspectorVisible || resizing) {
2026-10-23T23:34:17.9400243Z  67 โ”‚       renderedContentWidth.value = targetWidth;
2026-10-23T23:34:17.9400406Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9400736Z     ยท                 โ•ฐโ”€โ”€ `renderedContentWidth` cannot be modified
2026-10-23T23:34:17.9400894Z  68 โ”‚       return;
2026-10-23T23:34:17.9400995Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9401312Z   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-23T23:34:17.9401729Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T23:34:17.9401740Z
2026-10-23T23:34:17.9402303Z   โš  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-23T23:34:17.9402531Z      โ•ญโ”€[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13]
2026-10-23T23:34:17.9402624Z  520 โ”‚                 })).delivery;
2026-10-23T23:34:17.9402864Z  521 โ”‚ โ•ญโ”€โ–ถ             while (delivery.outcome === "accepted") {
2026-10-23T23:34:17.9402998Z  522 โ”‚ โ”‚                 yield* Effect.yieldNow;
2026-10-23T23:34:17.9403174Z  523 โ”‚ โ”‚                 delivery = (yield* service.getWebhookDelivery({
2026-10-23T23:34:17.9403300Z  524 โ”‚ โ”‚                   id: task.id,
2026-10-23T23:34:17.9403440Z  525 โ”‚ โ”‚                   deliveryId: deliveryId!,
2026-10-23T23:34:17.9403554Z  526 โ”‚ โ”‚                 })).delivery;
2026-10-23T23:34:17.9403722Z  527 โ”‚ โ•ฐโ”€โ–ถ             }
2026-10-23T23:34:17.9403872Z  528 โ”‚                 assert.equal(delivery.outcome, "dispatch_failed");
2026-10-23T23:34:17.9403942Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9403945Z
2026-10-23T23:34:17.9404157Z   โš  react(memo-dependencies): Found extra memoization dependencies
2026-10-23T23:34:17.9404384Z      โ•ญโ”€[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34]
2026-10-23T23:34:17.9404467Z  115 โ”‚     return [...commands];
2026-10-23T23:34:17.9404629Z  116 โ”‚   }, [activeThreadRef, pathname, registrationVersion, navigation]);
2026-10-23T23:34:17.9404766Z      ยท                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9404983Z      ยท                                           โ•ฐโ”€โ”€ Unnecessary dependency `registrationVersion`
2026-10-23T23:34:17.9405048Z  117 โ”‚
2026-10-23T23:34:17.9405114Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9405496Z   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-23T23:34:17.9405869Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9405872Z
2026-10-23T23:34:17.9406122Z   โš  typescript(no-extraneous-class): Unexpected class with only a constructor.
2026-10-23T23:34:17.9406273Z      โ•ญโ”€[apps/desktop/src/preview/Manager.test.ts:158:18]
2026-10-23T23:34:17.9406401Z  157 โ”‚       BrowserWindow: browserWindowConstructor,
2026-10-23T23:34:17.9406588Z  158 โ”‚ โ•ญโ”€โ–ถ   ClipboardItem: class {
2026-10-23T23:34:17.9406757Z  159 โ”‚ โ”‚       constructor(data: Record<string, unknown>) {
2026-10-23T23:34:17.9406991Z  160 โ”‚ โ”‚         clipboardItemConstructor(data);
2026-10-23T23:34:17.9407209Z  161 โ”‚ โ”‚       }
2026-10-23T23:34:17.9407360Z  162 โ”‚ โ•ฐโ”€โ–ถ   },
2026-10-23T23:34:17.9407446Z  163 โ”‚       clipboard: {
2026-10-23T23:34:17.9407515Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9407723Z   help: Try replacing this class with a standalone function or deleting it entirely
2026-10-23T23:34:17.9407727Z
2026-10-23T23:34:17.9407906Z   โš  react(refs): Cannot access refs during render
2026-10-23T23:34:17.9414987Z     โ•ญโ”€[apps/mobile/src/components/ui/Menu.tsx:54:36]
2026-10-23T23:34:17.9415262Z  53 โ”‚         const child = children as ReactElement<Pick<PressableProps, "onTouchStart" | "onPress">>;
2026-10-23T23:34:17.9415494Z  54 โ”‚ โ•ญโ”€โ–ถ     children = cloneElement(child, {
2026-10-23T23:34:17.9415629Z  55 โ”‚ โ”‚         onTouchStart: (event) => {
2026-10-23T23:34:17.9415826Z  56 โ”‚ โ”‚           // Reset for a new touch, not onPressIn, which also fires when a
2026-10-23T23:34:17.9416017Z  57 โ”‚ โ”‚           // finger moves out of the row and back during the same gesture.
2026-10-23T23:34:17.9416275Z  58 โ”‚ โ”‚           menuPress.current.isPreparing = false;
2026-10-23T23:34:17.9416556Z  59 โ”‚ โ”‚           menuPress.current.suppressPress = menuPress.current.isOpen;
2026-10-23T23:34:17.9416706Z  60 โ”‚ โ”‚           pendingPress.current = null;
2026-10-23T23:34:17.9416852Z  61 โ”‚ โ”‚           child.props.onTouchStart?.(event);
2026-10-23T23:34:17.9416951Z  62 โ”‚ โ”‚         },
2026-10-23T23:34:17.9417084Z  63 โ”‚ โ”‚         onPress: (event) => {
2026-10-23T23:34:17.9417298Z  64 โ”‚ โ”‚           // Accessibility clicks have no touch identifier and must not inherit
2026-10-23T23:34:17.9417469Z  65 โ”‚ โ”‚           // cancellation from a previous physical gesture.
2026-10-23T23:34:17.9417672Z  66 โ”‚ โ”‚           const isTouch = typeof event.nativeEvent.identifier === "number";
2026-10-23T23:34:17.9417901Z  67 โ”‚ โ”‚           if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) {
2026-10-23T23:34:17.9418002Z  68 โ”‚ โ”‚             return;
2026-10-23T23:34:17.9418096Z  69 โ”‚ โ”‚           }
2026-10-23T23:34:17.9418267Z  70 โ”‚ โ”‚           if (isTouch && menuPress.current.isPreparing) {
2026-10-23T23:34:17.9418479Z  71 โ”‚ โ”‚             // A release can arrive between native menu preparation and display.
2026-10-23T23:34:17.9418680Z  72 โ”‚ โ”‚             // Let UIKit's display/cancel callback decide this press's outcome.
2026-10-23T23:34:17.9418801Z  73 โ”‚ โ”‚             event.persist();
2026-10-23T23:34:17.9418996Z  74 โ”‚ โ”‚             pendingPress.current = () => child.props.onPress?.(event);
2026-10-23T23:34:17.9419097Z  75 โ”‚ โ”‚             return;
2026-10-23T23:34:17.9419186Z  76 โ”‚ โ”‚           }
2026-10-23T23:34:17.9419323Z  77 โ”‚ โ”‚           child.props.onPress?.(event);
2026-10-23T23:34:17.9419422Z  78 โ”‚ โ”‚         },
2026-10-23T23:34:17.9419579Z  79 โ”‚ โ”œโ”€โ–ถ     });
2026-10-23T23:34:17.9420026Z     ยท โ•ฐโ”€โ”€โ”€โ”€ Passing a ref to a function may read its value during render
2026-10-23T23:34:17.9420288Z  80 โ”‚         menuProps.onMenuInteractionStart = () => {
2026-10-23T23:34:17.9420448Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9421058Z   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-23T23:34:17.9421465Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-23T23:34:17.9421475Z
2026-10-23T23:34:17.9422000Z   โš  react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-23T23:34:17.9422185Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
2026-10-23T23:34:17.9422310Z  772 โ”‚     if (settingsSheetPresentation.isActive) {
2026-10-23T23:34:17.9422463Z  773 โ”‚       settingsRoutePresentation.present(settingsRouteSession);
2026-10-23T23:34:17.9422575Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9422782Z      ยท                   โ•ฐโ”€โ”€ Missing dependency `settingsRoutePresentation`
2026-10-23T23:34:17.9422856Z  774 โ”‚     }
2026-10-23T23:34:17.9423095Z  775 โ”‚   }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
2026-10-23T23:34:17.9423223Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9423553Z      ยท                       โ•ฐโ”€โ”€ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
2026-10-23T23:34:17.9423623Z  776 โ”‚
2026-10-23T23:34:17.9423699Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9424183Z   help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects
2026-10-23T23:34:17.9424546Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9424549Z
2026-10-23T23:34:17.9424733Z   โš  react(immutability): This value cannot be modified
2026-10-23T23:34:17.9424899Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5]
2026-10-23T23:34:17.9425087Z  387 โ”‚     typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
2026-10-23T23:34:17.9425242Z  388 โ”‚   const animatedBorderRadius = useSharedValue(targetBorderRadius);
2026-10-23T23:34:17.9425368Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9425553Z      ยท                   โ•ฐโ”€โ”€ `animatedBorderRadius` originates here
2026-10-23T23:34:17.9425739Z  389 โ”‚   const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
2026-10-23T23:34:17.9425820Z  390 โ”‚   useLayoutEffect(() => {
2026-10-23T23:34:17.9425940Z  391 โ”‚     animatedBorderRadius.value = shouldAnimate
2026-10-23T23:34:17.9426045Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9426227Z      ยท               โ•ฐโ”€โ”€ `animatedBorderRadius` cannot be modified
2026-10-23T23:34:17.9426328Z  392 โ”‚       ? withTiming(targetBorderRadius, {
2026-10-23T23:34:17.9426395Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9426870Z   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-23T23:34:17.9427393Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-23T23:34:17.9427396Z
2026-10-23T23:34:17.9427613Z   โš  eslint(no-unused-vars): Type 'Scope' is imported but never used.
2026-10-23T23:34:17.9427804Z     โ•ญโ”€[apps/server/src/provider/ProviderAuthService.ts:15:18]
2026-10-23T23:34:17.9427950Z  14 โ”‚ import * as Layer from "effect/Layer";
2026-10-23T23:34:17.9428061Z  15 โ”‚ import type * as Scope from "effect/Scope";
2026-10-23T23:34:17.9428162Z     ยท                  โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T23:34:17.9428314Z     ยท                    โ•ฐโ”€โ”€ 'Scope' is imported here
2026-10-23T23:34:17.9428421Z  16 โ”‚ import * as Stream from "effect/Stream";
2026-10-23T23:34:17.9428492Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9428613Z   help: Consider removing this import.
2026-10-23T23:34:17.9428616Z
2026-10-23T23:34:17.9428896Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T23:34:17.9429081Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
2026-10-23T23:34:17.9429156Z  289 โ”‚   return (
2026-10-23T23:34:17.9429317Z  290 โ”‚     <ExistingThreadSettingsRouteContext.Provider value={value}>
2026-10-23T23:34:17.9429455Z      ยท                                                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9429543Z  291 โ”‚       {props.children}
2026-10-23T23:34:17.9429609Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9429871Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T23:34:17.9430041Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T23:34:17.9430047Z
2026-10-23T23:34:17.9430332Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T23:34:17.9430588Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
2026-10-23T23:34:17.9430668Z  653 โ”‚   return (
2026-10-23T23:34:17.9430805Z  654 โ”‚     <ThreadSettingsSessionContext.Provider value={value}>
2026-10-23T23:34:17.9430941Z      ยท                                            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9431025Z  655 โ”‚       {props.children}
2026-10-23T23:34:17.9431089Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9431338Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T23:34:17.9431505Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T23:34:17.9431511Z
2026-10-23T23:34:17.9431784Z   โš  react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-23T23:34:17.9431967Z       โ•ญโ”€[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
2026-10-23T23:34:17.9432042Z  1461 โ”‚   return (
2026-10-23T23:34:17.9432228Z  1462 โ”‚     <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
2026-10-23T23:34:17.9432384Z       ยท                                                       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9432504Z  1463 โ”‚       <ThreadSettingsPickerStack.Navigator
2026-10-23T23:34:17.9432570Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9432901Z   help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-23T23:34:17.9433179Z         Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-23T23:34:17.9433182Z
2026-10-23T23:34:17.9433402Z   โš  react(capitalized-calls): Capitalized function called without JSX
2026-10-23T23:34:17.9433584Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27]
2026-10-23T23:34:17.9433829Z  601 โ”‚   const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success));
2026-10-23T23:34:17.9433986Z  602 โ”‚   const gesture = Gesture.Pan()
2026-10-23T23:34:17.9434139Z      ยท                           โ”€โ”ฌโ”€
2026-10-23T23:34:17.9434380Z      ยท                            โ•ฐโ”€โ”€ `Pan` may be a component
2026-10-23T23:34:17.9434504Z  603 โ”‚     .enabled(!props.disabled)
2026-10-23T23:34:17.9434600Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9434978Z   help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration
2026-10-23T23:34:17.9435508Z   note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-23T23:34:17.9435512Z
2026-10-23T23:34:17.9435817Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9436003Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5]
2026-10-23T23:34:17.9436146Z  283 โ”‚   const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0);
2026-10-23T23:34:17.9436225Z  284 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9436315Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9436465Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9436571Z  285 โ”‚     setNow(new Date().toISOString());
2026-10-23T23:34:17.9436659Z      ยท     โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T23:34:17.9436860Z      ยท        โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9437019Z  286 โ”‚     const id = setInterval(() => setNow(new Date().toISOString()), 60_000);
2026-10-23T23:34:17.9437088Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9437795Z   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-23T23:34:17.9438183Z   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-23T23:34:17.9438188Z
2026-10-23T23:34:17.9438427Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9438618Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25]
2026-10-23T23:34:17.9438784Z  364 โ”‚     // range) the boundary string is identical and the chain would die.
2026-10-23T23:34:17.9438898Z  365 โ”‚   }, [nextSnoozeWakeAt, snoozeWakeTick]);
2026-10-23T23:34:17.9439020Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9439210Z      ยท                                โ•ฐโ”€โ”€ Unnecessary dependency `snoozeWakeTick`
2026-10-23T23:34:17.9439454Z  366 โ”‚   const listItems = ((): readonly SidebarListItem[] => {
2026-10-23T23:34:17.9439584Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9439928Z   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-23T23:34:17.9440288Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9440294Z
2026-10-23T23:34:17.9440566Z   โš  react(purity): Cannot call impure function during render
2026-10-23T23:34:17.9440763Z      โ•ญโ”€[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53]
2026-10-23T23:34:17.9440878Z  355 โ”‚     if (Number.isNaN(wakeAtMs)) return;
2026-10-23T23:34:17.9441078Z  356 โ”‚     const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647);
2026-10-23T23:34:17.9441222Z      ยท                                                     โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9441425Z      ยท                                                          โ•ฐโ”€โ”€ Cannot call impure function
2026-10-23T23:34:17.9441534Z  357 โ”‚     const id = setTimeout(() => {
2026-10-23T23:34:17.9441606Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9441933Z   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-23T23:34:17.9442278Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-23T23:34:17.9442281Z
2026-10-23T23:34:17.9442591Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9442776Z     โ•ญโ”€[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
2026-10-23T23:34:17.9442964Z  28 โ”‚   const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
2026-10-23T23:34:17.9443038Z  29 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9443135Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9443293Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9443444Z  30 โ”‚     if (snapshot && snapshot !== live) setHeld({ key, snapshot });
2026-10-23T23:34:17.9443566Z     ยท                                        โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9443793Z     ยท                                           โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9443883Z  31 โ”‚   }, [key, live, snapshot]);
2026-10-23T23:34:17.9443948Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9444715Z   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-23T23:34:17.9445154Z   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-23T23:34:17.9445157Z
2026-10-23T23:34:17.9445488Z   โš  eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'.
2026-10-23T23:34:17.9445648Z      โ•ญโ”€[apps/server/src/provider/AntigravityAuth.ts:285:20]
2026-10-23T23:34:17.9445728Z  284 โ”‚     },
2026-10-23T23:34:17.9445827Z  285 โ”‚     (effect, flow, stopSessions) =>
2026-10-23T23:34:17.9445940Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9446113Z      ยท                          โ•ฐโ”€โ”€ 'stopSessions' is declared here
2026-10-23T23:34:17.9446195Z  286 โ”‚       effect.pipe(
2026-10-23T23:34:17.9446254Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9446379Z   help: Consider removing this parameter.
2026-10-23T23:34:17.9446382Z
2026-10-23T23:34:17.9446679Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9446899Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
2026-10-23T23:34:17.9446958Z  104 โ”‚
2026-10-23T23:34:17.9447037Z  105 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9447125Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9447286Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9447379Z  106 โ”‚     clearReviewCommentTarget();
2026-10-23T23:34:17.9447503Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-23T23:34:17.9447635Z      ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9447841Z      ยท                     โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9447927Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-23T23:34:17.9447994Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9448697Z   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-23T23:34:17.9449084Z   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-23T23:34:17.9449087Z
2026-10-23T23:34:17.9449391Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9449605Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
2026-10-23T23:34:17.9449679Z  109 โ”‚
2026-10-23T23:34:17.9449764Z  110 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9449857Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9450009Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9450117Z  111 โ”‚     if (activeCommentTarget === null) {
2026-10-23T23:34:17.9450384Z  112 โ”‚       setPendingNativeCommentSelection(null);
2026-10-23T23:34:17.9450587Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9450796Z      ยท                       โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9450866Z  113 โ”‚     }
2026-10-23T23:34:17.9450931Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9451623Z   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-23T23:34:17.9451993Z   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-23T23:34:17.9452002Z
2026-10-23T23:34:17.9452244Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9452472Z      โ•ญโ”€[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
2026-10-23T23:34:17.9452600Z  107 โ”‚     setPendingNativeCommentSelection(null);
2026-10-23T23:34:17.9452696Z  108 โ”‚   }, [selectedSection?.id]);
2026-10-23T23:34:17.9452802Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9453004Z      ยท                โ•ฐโ”€โ”€ Unnecessary dependency `selectedSection?.id`
2026-10-23T23:34:17.9453079Z  109 โ”‚
2026-10-23T23:34:17.9453152Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9453500Z   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-23T23:34:17.9453889Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9453895Z
2026-10-23T23:34:17.9454099Z   โš  eslint(no-empty-pattern): Empty object binding pattern
2026-10-23T23:34:17.9454278Z      โ•ญโ”€[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14]
2026-10-23T23:34:17.9454336Z  465 โ”‚
2026-10-23T23:34:17.9454469Z  466 โ”‚   for (const {} of ["direct", "wrapper"] as const) {
2026-10-23T23:34:17.9454562Z      ยท              โ”€โ”€
2026-10-23T23:34:17.9454631Z  467 โ”‚   }
2026-10-23T23:34:17.9454693Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9454971Z   help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured.
2026-10-23T23:34:17.9454974Z
2026-10-23T23:34:17.9455226Z   โš  eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used.
2026-10-23T23:34:17.9455346Z     โ•ญโ”€[apps/web/src/types.ts:22:3]
2026-10-23T23:34:17.9455431Z  21 โ”‚   EnvironmentThreadShell,
2026-10-23T23:34:17.9455515Z  22 โ”‚   ThreadRunSummary,
2026-10-23T23:34:17.9455613Z     ยท   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9455790Z     ยท           โ•ฐโ”€โ”€ 'ThreadRunSummary' is imported here
2026-10-23T23:34:17.9455869Z  23 โ”‚   ThreadRuntimeSummary,
2026-10-23T23:34:17.9455937Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9456061Z   help: Consider removing this import.
2026-10-23T23:34:17.9456064Z
2026-10-23T23:34:17.9456451Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9456758Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5]
2026-10-23T23:34:17.9456879Z  55 โ”‚
2026-10-23T23:34:17.9456961Z  56 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9457050Z     ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9457203Z     ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9457288Z  57 โ”‚     scheduler.reset();
2026-10-23T23:34:17.9457413Z  58 โ”‚     highlightedRowIdsRef.current = new Set();
2026-10-23T23:34:17.9457525Z  59 โ”‚     visibleChunkIndexRef.current = 0;
2026-10-23T23:34:17.9457659Z  60 โ”‚     setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 });
2026-10-23T23:34:17.9457761Z     ยท     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9457963Z     ยท            โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9458102Z  61 โ”‚     setTokensPatchJson(createEmptyTokenPatch(resetKey));
2026-10-23T23:34:17.9458171Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9458874Z   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-23T23:34:17.9459251Z   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-23T23:34:17.9459254Z
2026-10-23T23:34:17.9459494Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9459710Z     โ•ญโ”€[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7]
2026-10-23T23:34:17.9459805Z  62 โ”‚     return () => scheduler.cancel();
2026-10-23T23:34:17.9459933Z  63 โ”‚   }, [enabled, resetKey, rows.length, scheduler]);
2026-10-23T23:34:17.9460091Z     ยท       โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€            โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9460332Z     ยท          โ”‚                    โ•ฐโ”€โ”€ Unnecessary dependency `rows.length`
2026-10-23T23:34:17.9460589Z     ยท          โ•ฐโ”€โ”€ Unnecessary dependency `enabled`
2026-10-23T23:34:17.9460656Z  64 โ”‚
2026-10-23T23:34:17.9460726Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9461075Z   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-23T23:34:17.9461439Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9461449Z
2026-10-23T23:34:17.9461788Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T23:34:17.9461973Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
2026-10-23T23:34:17.9462108Z  222 โ”‚               ? snippetTokens.map((line, lineIndex) => (
2026-10-23T23:34:17.9462228Z  223 โ”‚                   <NativeText key={lineIndex}>
2026-10-23T23:34:17.9462352Z      ยท                               โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9462475Z  224 โ”‚                     {lineIndex > 0 ? "\n" : ""}
2026-10-23T23:34:17.9462548Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9462729Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T23:34:17.9462733Z
2026-10-23T23:34:17.9463113Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T23:34:17.9463365Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25]
2026-10-23T23:34:17.9463460Z  226 โ”‚                       <NativeText
2026-10-23T23:34:17.9463565Z  227 โ”‚                         key={tokenIndex}
2026-10-23T23:34:17.9463686Z      ยท                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9463778Z  228 โ”‚                         style={{
2026-10-23T23:34:17.9463843Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9464016Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T23:34:17.9464019Z
2026-10-23T23:34:17.9464317Z   โš  react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-23T23:34:17.9464519Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7]
2026-10-23T23:34:17.9464605Z  100 โ”‚
2026-10-23T23:34:17.9464696Z  101 โ”‚   useEffect(() => {
2026-10-23T23:34:17.9464783Z      ยท   โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9464947Z      ยท       โ•ฐโ”€โ”€ This is the containing effect
2026-10-23T23:34:17.9465078Z  102 โ”‚     if (!target || selectedLines.length === 0) {
2026-10-23T23:34:17.9465195Z  103 โ”‚       setHighlightedLinesById({});
2026-10-23T23:34:17.9465304Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9465519Z      ยท                  โ•ฐโ”€โ”€ Avoid calling setState() directly within an effect
2026-10-23T23:34:17.9465602Z  104 โ”‚       return;
2026-10-23T23:34:17.9465671Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9466382Z   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-23T23:34:17.9466764Z   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-23T23:34:17.9466767Z
2026-10-23T23:34:17.9467012Z   โš  react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-23T23:34:17.9467185Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:454:7]
2026-10-23T23:34:17.9467296Z  453 โ”‚     showAuxiliaryPane("inspector");
2026-10-23T23:34:17.9467425Z  454 โ”‚   }, [environmentId, showAuxiliaryPane, threadId]);
2026-10-23T23:34:17.9467605Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€                     โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€
2026-10-23T23:34:17.9467963Z      ยท             โ”‚                               โ•ฐโ”€โ”€ Unnecessary dependency `threadId`
2026-10-23T23:34:17.9468238Z      ยท             โ•ฐโ”€โ”€ Unnecessary dependency `environmentId`
2026-10-23T23:34:17.9468321Z  455 โ”‚   const {
2026-10-23T23:34:17.9468386Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9468746Z   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-23T23:34:17.9469119Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-23T23:34:17.9469122Z
2026-10-23T23:34:17.9469357Z   โš  react(static-components): Cannot create components during render
2026-10-23T23:34:17.9469535Z      โ•ญโ”€[apps/mobile/src/features/review/ReviewSheet.tsx:725:20]
2026-10-23T23:34:17.9469615Z  492 โ”‚   // same check.
2026-10-23T23:34:17.9469774Z  493 โ”‚   const NativeReviewDiffView = resolveNativeReviewDiffView();
2026-10-23T23:34:17.9469919Z      ยท                                โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9470143Z      ยท                                             โ•ฐโ”€โ”€ The component is created during render here
2026-10-23T23:34:17.9470321Z  494 โ”‚   const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
2026-10-23T23:34:17.9470536Z  495 โ”‚   const showcasedReviewDrawRef = useRef<string | null>(null);
2026-10-23T23:34:17.9470715Z  496 โ”‚   const [isPullRefreshing, setIsPullRefreshing] = useState(false);
2026-10-23T23:34:17.9470832Z  497 โ”‚   const handlePullToRefresh = async () => {
2026-10-23T23:34:17.9470928Z  498 โ”‚     setIsPullRefreshing(true);
2026-10-23T23:34:17.9471044Z  499 โ”‚     await refreshSelectedSection();
2026-10-23T23:34:17.9471144Z  500 โ”‚     setIsPullRefreshing(false);
2026-10-23T23:34:17.9471216Z  501 โ”‚   };
2026-10-23T23:34:17.9471391Z  502 โ”‚   const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
2026-10-23T23:34:17.9471570Z  503 โ”‚   const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
2026-10-23T23:34:17.9471706Z  504 โ”‚   const fileVisibility = useReviewFileVisibility({
2026-10-23T23:34:17.9471819Z  505 โ”‚     threadKey: reviewCache.threadKey,
2026-10-23T23:34:17.9471928Z  506 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-23T23:34:17.9472012Z  507 โ”‚     files: reviewFiles,
2026-10-23T23:34:17.9472141Z  508 โ”‚     cachedExpandedFileIds: selectedSection?.id
2026-10-23T23:34:17.9472304Z  509 โ”‚       ? reviewCache.expandedFileIdsBySection[selectedSection.id]
2026-10-23T23:34:17.9472379Z  510 โ”‚       : undefined,
2026-10-23T23:34:17.9472502Z  511 โ”‚     cachedViewedFileIds: selectedSection?.id
2026-10-23T23:34:17.9472656Z  512 โ”‚       ? reviewCache.viewedFileIdsBySection[selectedSection.id]
2026-10-23T23:34:17.9472733Z  513 โ”‚       : undefined,
2026-10-23T23:34:17.9472795Z  514 โ”‚   });
2026-10-23T23:34:17.9473029Z  515 โ”‚   const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
2026-10-23T23:34:17.9473184Z  516 โ”‚   const commentSelection = useReviewCommentSelectionController({
2026-10-23T23:34:17.9473262Z  517 โ”‚     environmentId,
2026-10-23T23:34:17.9473336Z  518 โ”‚     threadId,
2026-10-23T23:34:17.9473419Z  519 โ”‚     selectedSection,
2026-10-23T23:34:17.9473510Z  520 โ”‚     nativeReviewDiffData,
2026-10-23T23:34:17.9473573Z  521 โ”‚   });
2026-10-23T23:34:17.9473705Z  522 โ”‚   const nativeBridge = useNativeReviewDiffBridge({
2026-10-23T23:34:17.9473963Z  523 โ”‚     threadKey: reviewCache.threadKey,
2026-10-23T23:34:17.9474134Z  524 โ”‚     sectionId: selectedSection?.id ?? null,
2026-10-23T23:34:17.9474224Z  525 โ”‚     diff: selectedSection?.diff,
2026-10-23T23:34:17.9474332Z  526 โ”‚     data: nativeReviewDiffData,
2026-10-23T23:34:17.9474418Z  527 โ”‚     collapsedFileIds,
2026-10-23T23:34:17.9474498Z  528 โ”‚     viewedFileIds,
2026-10-23T23:34:17.9474627Z  529 โ”‚     selectedRowIds: commentSelection.selectedRowIds,
2026-10-23T23:34:17.9474750Z  530 โ”‚     canHighlight: parsedDiff.kind === "files",
2026-10-23T23:34:17.9474821Z  531 โ”‚   });
2026-10-23T23:34:17.9474919Z  532 โ”‚   const showcaseReviewKey =
2026-10-23T23:34:17.9475080Z  533 โ”‚     SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
2026-10-23T23:34:17.9475332Z  534 โ”‚       ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
2026-10-23T23:34:17.9475412Z  535 โ”‚       : null;
2026-10-23T23:34:17.9475623Z  536 โ”‚   const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
2026-10-23T23:34:17.9475719Z  537 โ”‚     nativeBridge.onDebug(event);
2026-10-23T23:34:17.9475795Z  538 โ”‚     if (
2026-10-23T23:34:17.9475896Z  539 โ”‚       showcaseReviewKey === null ||
2026-10-23T23:34:17.9476052Z  540 โ”‚       showcasedReviewDrawRef.current === showcaseReviewKey ||
2026-10-23T23:34:17.9476181Z  541 โ”‚       !isNativeReviewDiffDrawEvent(event.nativeEvent)
2026-10-23T23:34:17.9476262Z  542 โ”‚     ) {
2026-10-23T23:34:17.9476339Z  543 โ”‚       return;
2026-10-23T23:34:17.9476411Z  544 โ”‚     }
2026-10-23T23:34:17.9476541Z  545 โ”‚     showcasedReviewDrawRef.current = showcaseReviewKey;
2026-10-23T23:34:17.9476741Z  546 โ”‚     reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
2026-10-23T23:34:17.9476810Z  547 โ”‚   };
2026-10-23T23:34:17.9476871Z  548 โ”‚
2026-10-23T23:34:17.9477029Z  549 โ”‚   const handleSelectFile = async (fileId: string | null) => {
2026-10-23T23:34:17.9477133Z  550 โ”‚     loadVisibleFile(fileId, true);
2026-10-23T23:34:17.9477252Z  551 โ”‚     commentSelection.clearSelection();
2026-10-23T23:34:17.9477398Z  552 โ”‚     if (fileId !== null && collapsedFileIds.includes(fileId)) {
2026-10-23T23:34:17.9477498Z  553 โ”‚       toggleExpandedFile(fileId);
2026-10-23T23:34:17.9477567Z  554 โ”‚     }
2026-10-23T23:34:17.9477702Z  555 โ”‚     const nativeView = nativeReviewDiffViewRef.current;
2026-10-23T23:34:17.9477786Z  556 โ”‚     if (!nativeView) return;
2026-10-23T23:34:17.9477901Z  557 โ”‚     const result = await settlePromise(() =>
2026-10-23T23:34:17.9478113Z  558 โ”‚       fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
2026-10-23T23:34:17.9478197Z  559 โ”‚     );
2026-10-23T23:34:17.9478307Z  560 โ”‚     if (AsyncResult.isFailure(result)) {
2026-10-23T23:34:17.9478532Z  561 โ”‚       console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
2026-10-23T23:34:17.9478606Z  562 โ”‚     }
2026-10-23T23:34:17.9478678Z  563 โ”‚   };
2026-10-23T23:34:17.9478775Z  564 โ”‚   const handleVisibleFileChange = (
2026-10-23T23:34:17.9478941Z  565 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
2026-10-23T23:34:17.9479017Z  566 โ”‚   ) => {
2026-10-23T23:34:17.9479161Z  567 โ”‚     loadVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-23T23:34:17.9479363Z  568 โ”‚     reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-23T23:34:17.9479442Z  569 โ”‚   };
2026-10-23T23:34:17.9479542Z  570 โ”‚   const renderInspector = () => (
2026-10-23T23:34:17.9479633Z  571 โ”‚     <ReviewFileNavigator
2026-10-23T23:34:17.9479729Z  572 โ”‚       ref={reviewFileNavigatorRef}
2026-10-23T23:34:17.9479937Z  573 โ”‚       files={nativeReviewDiffData.files}
2026-10-23T23:34:17.9480103Z  574 โ”‚       headerInset={insets.top}
2026-10-23T23:34:17.9480222Z  575 โ”‚       sectionId={selectedSection?.id ?? null}
2026-10-23T23:34:17.9480384Z  576 โ”‚       onSelectFile={(fileId) => void handleSelectFile(fileId)}
2026-10-23T23:34:17.9480459Z  577 โ”‚     />
2026-10-23T23:34:17.9480528Z  578 โ”‚   );
2026-10-23T23:34:17.9480598Z  579 โ”‚
2026-10-23T23:34:17.9480829Z  580 โ”‚   const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
2026-10-23T23:34:17.9480944Z  581 โ”‚     const { fileId } = event.nativeEvent;
2026-10-23T23:34:17.9481025Z  582 โ”‚     if (fileId) {
2026-10-23T23:34:17.9481121Z  583 โ”‚       loadVisibleFile(fileId, true);
2026-10-23T23:34:17.9481218Z  584 โ”‚       toggleExpandedFile(fileId);
2026-10-23T23:34:17.9481288Z  585 โ”‚     }
2026-10-23T23:34:17.9481361Z  586 โ”‚   };
2026-10-23T23:34:17.9481422Z  587 โ”‚
2026-10-23T23:34:17.9481534Z  588 โ”‚   const handleNativeToggleViewedFile = (
2026-10-23T23:34:17.9481678Z  589 โ”‚     event: NativeSyntheticEvent<{ readonly fileId?: string }>,
2026-10-23T23:34:17.9481751Z  590 โ”‚   ) => {
2026-10-23T23:34:17.9481852Z  591 โ”‚     const { fileId } = event.nativeEvent;
2026-10-23T23:34:17.9481930Z  592 โ”‚     if (fileId) {
2026-10-23T23:34:17.9482026Z  593 โ”‚       toggleViewedFile(fileId);
2026-10-23T23:34:17.9482097Z  594 โ”‚     }
2026-10-23T23:34:17.9482160Z  595 โ”‚   };
2026-10-23T23:34:17.9482230Z  596 โ”‚
2026-10-23T23:34:17.9482324Z  597 โ”‚   const parsedDiffNotice =
2026-10-23T23:34:17.9482510Z  598 โ”‚     parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
2026-10-23T23:34:17.9482655Z  599 โ”‚   const hasCachedSelectedDiff = selectedSection?.diff != null;
2026-10-23T23:34:17.9482853Z  600 โ”‚   const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
2026-10-23T23:34:17.9483005Z  601 โ”‚   const sectionMenu = buildReviewSectionMenu(reviewSections);
2026-10-23T23:34:17.9483204Z  602 โ”‚   const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
2026-10-23T23:34:17.9483333Z  603 โ”‚     hasEnvironmentPresentation: environment.isReady,
2026-10-23T23:34:17.9483462Z  604 โ”‚     isEnvironmentConnected: isEnvironmentReady,
2026-10-23T23:34:17.9483552Z  605 โ”‚     hasCachedSelectedDiff,
2026-10-23T23:34:17.9483635Z  606 โ”‚     hasAnyCachedDiff,
2026-10-23T23:34:17.9483703Z  607 โ”‚   });
2026-10-23T23:34:17.9483815Z  608 โ”‚   const handleRetryEnvironment = () => {
2026-10-23T23:34:17.9483929Z  609 โ”‚     void retryEnvironment(environmentId);
2026-10-23T23:34:17.9483993Z  610 โ”‚   };
2026-10-23T23:34:17.9484108Z  611 โ”‚   const handleReturnToThread = () => {
2026-10-23T23:34:17.9484223Z  612 โ”‚     if (navigation.canGoBack()) {
2026-10-23T23:34:17.9484320Z  613 โ”‚       navigation.goBack();
2026-10-23T23:34:17.9484395Z  614 โ”‚       return;
2026-10-23T23:34:17.9484469Z  615 โ”‚     }
2026-10-23T23:34:17.9484574Z  616 โ”‚     navigation.navigate("Thread", {
2026-10-23T23:34:17.9484690Z  617 โ”‚       environmentId: String(environmentId),
2026-10-23T23:34:17.9484782Z  618 โ”‚       threadId: String(threadId),
2026-10-23T23:34:17.9484864Z  619 โ”‚     });
2026-10-23T23:34:17.9484942Z  620 โ”‚   };
2026-10-23T23:34:17.9485051Z  621 โ”‚   const androidHeaderSubtitle = [
2026-10-23T23:34:17.9485138Z  622 โ”‚     selectedSection?.title,
2026-10-23T23:34:17.9485240Z  623 โ”‚     headerDiffSummary.additions,
2026-10-23T23:34:17.9485343Z  624 โ”‚     headerDiffSummary.deletions,
2026-10-23T23:34:17.9485413Z  625 โ”‚   ]
2026-10-23T23:34:17.9485536Z  626 โ”‚     .filter((part): part is string => Boolean(part))
2026-10-23T23:34:17.9485719Z  627 โ”‚     .join(" ยท ");
2026-10-23T23:34:17.9485849Z  628 โ”‚
2026-10-23T23:34:17.9485943Z  629 โ”‚   const showChangedFilesPane =
2026-10-23T23:34:17.9486042Z  630 โ”‚     !showConnectionNotice &&
2026-10-23T23:34:17.9486143Z  631 โ”‚     selectedSection !== null &&
2026-10-23T23:34:17.9486240Z  632 โ”‚     parsedDiff.kind === "files" &&
2026-10-23T23:34:17.9486331Z  633 โ”‚     NativeReviewDiffView !== null;
2026-10-23T23:34:17.9486542Z  634 โ”‚   useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
2026-10-23T23:34:17.9486755Z  635 โ”‚   const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
2026-10-23T23:34:17.9486825Z  636 โ”‚
2026-10-23T23:34:17.9486915Z  637 โ”‚   const listHeader = (() => {
2026-10-23T23:34:17.9487022Z  638 โ”‚     const children: ReactElement[] = [];
2026-10-23T23:34:17.9487091Z  639 โ”‚
2026-10-23T23:34:17.9487184Z  640 โ”‚     if (error) {
2026-10-23T23:34:17.9487265Z  641 โ”‚       children.push(
2026-10-23T23:34:17.9487355Z  642 โ”‚         <View
2026-10-23T23:34:17.9487449Z  643 โ”‚           key="review-error"
2026-10-23T23:34:17.9487537Z  644 โ”‚           className={cn(
2026-10-23T23:34:17.9487635Z  645 โ”‚             "bg-card px-4 py-3",
2026-10-23T23:34:17.9487827Z  646 โ”‚             Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
2026-10-23T23:34:17.9487906Z  647 โ”‚           )}
2026-10-23T23:34:17.9487974Z  648 โ”‚         >
2026-10-23T23:34:17.9488174Z  649 โ”‚           <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
2026-10-23T23:34:17.9488368Z  650 โ”‚           <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
2026-10-23T23:34:17.9488446Z  651 โ”‚         </View>,
2026-10-23T23:34:17.9488514Z  652 โ”‚       );
2026-10-23T23:34:17.9488595Z  653 โ”‚     }
2026-10-23T23:34:17.9488663Z  654 โ”‚
2026-10-23T23:34:17.9488754Z  655 โ”‚     if (parsedDiffNotice) {
2026-10-23T23:34:17.9488943Z  656 โ”‚       children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
2026-10-23T23:34:17.9489016Z  657 โ”‚     }
2026-10-23T23:34:17.9489083Z  658 โ”‚
2026-10-23T23:34:17.9489182Z  659 โ”‚     if (children.length === 0) {
2026-10-23T23:34:17.9489256Z  660 โ”‚       return null;
2026-10-23T23:34:17.9489321Z  661 โ”‚     }
2026-10-23T23:34:17.9489384Z  662 โ”‚
2026-10-23T23:34:17.9489471Z  663 โ”‚     return <>{children}</>;
2026-10-23T23:34:17.9489535Z  664 โ”‚   })();
2026-10-23T23:34:17.9489626Z  665 โ”‚   const headerSubtitle = [
2026-10-23T23:34:17.9489728Z  666 โ”‚     headerDiffSummary.additions,
2026-10-23T23:34:17.9489819Z  667 โ”‚     headerDiffSummary.deletions,
2026-10-23T23:34:17.9489929Z  668 โ”‚     pendingReviewCommentCount > 0
2026-10-23T23:34:17.9490151Z  669 โ”‚       ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
2026-10-23T23:34:17.9490233Z  670 โ”‚       : null,
2026-10-23T23:34:17.9490294Z  671 โ”‚   ]
2026-10-23T23:34:17.9490408Z  672 โ”‚     .filter(Boolean)
2026-10-23T23:34:17.9490503Z  673 โ”‚     .join(" ยท ");
2026-10-23T23:34:17.9490666Z  674 โ”‚   const headerTitleText = selectedSection?.title ?? "Review changes";
2026-10-23T23:34:17.9490729Z  675 โ”‚
2026-10-23T23:34:17.9490807Z  676 โ”‚   return (
2026-10-23T23:34:17.9490879Z  677 โ”‚     <>
2026-10-23T23:34:17.9490964Z  678 โ”‚       <ReviewHeader
2026-10-23T23:34:17.9491060Z  679 โ”‚         environmentId={environmentId}
2026-10-23T23:34:17.9491153Z  680 โ”‚         threadId={threadId}
2026-10-23T23:34:17.9491249Z  681 โ”‚         title={headerTitleText}
2026-10-23T23:34:17.9491351Z  682 โ”‚         subtitle={headerSubtitle}
2026-10-23T23:34:17.9491558Z  683 โ”‚         androidSubtitle={androidHeaderSubtitle}
2026-10-23T23:34:17.9491695Z  684 โ”‚         iconColor={headerIcon}
2026-10-23T23:34:17.9491809Z  685 โ”‚         selectedThreadCwd={selectedThreadCwd}
2026-10-23T23:34:17.9491907Z  686 โ”‚         sectionMenu={sectionMenu}
2026-10-23T23:34:17.9492010Z  687 โ”‚         selectedSection={selectedSection}
2026-10-23T23:34:17.9492134Z  688 โ”‚         showSectionToolbar={showSectionToolbar}
2026-10-23T23:34:17.9492270Z  689 โ”‚         showChangedFilesToggle={showChangedFilesToggle}
2026-10-23T23:34:17.9492376Z  690 โ”‚         onRefresh={handlePullToRefresh}
2026-10-23T23:34:17.9492476Z  691 โ”‚         onSelectSection={selectSection}
2026-10-23T23:34:17.9492607Z  692 โ”‚         onReturnToThread={handleReturnToThread}
2026-10-23T23:34:17.9492688Z  693 โ”‚       />
2026-10-23T23:34:17.9492754Z  694 โ”‚
2026-10-23T23:34:17.9492846Z  695 โ”‚       <ScreenContent>
2026-10-23T23:34:17.9493007Z  696 โ”‚         <View className="flex-1 bg-sheet android:bg-sheet-solid">
2026-10-23T23:34:17.9493108Z  697 โ”‚           {showConnectionNotice ? (
2026-10-23T23:34:17.9493276Z  698 โ”‚             <View className="flex-1" style={{ paddingTop: topContentInset }}>
2026-10-23T23:34:17.9493386Z  699 โ”‚               <EnvironmentConnectionNotice
2026-10-23T23:34:17.9493594Z  700 โ”‚                 environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
2026-10-23T23:34:17.9493679Z  701 โ”‚                 connection={
2026-10-23T23:34:17.9493802Z  702 โ”‚                   environment.presentation?.connection ?? {
2026-10-23T23:34:17.9493906Z  703 โ”‚                     phase: "available",
2026-10-23T23:34:17.9493998Z  704 โ”‚                     error: null,
2026-10-23T23:34:17.9494089Z  705 โ”‚                     traceId: null,
2026-10-23T23:34:17.9494163Z  706 โ”‚                   }
2026-10-23T23:34:17.9494252Z  707 โ”‚                 }
2026-10-23T23:34:17.9494350Z  708 โ”‚                 resourceName="review"
2026-10-23T23:34:17.9494471Z  709 โ”‚                 onRetry={handleRetryEnvironment}
2026-10-23T23:34:17.9494540Z  710 โ”‚               />
2026-10-23T23:34:17.9494622Z  711 โ”‚             </View>
2026-10-23T23:34:17.9494811Z  712 โ”‚           ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
2026-10-23T23:34:17.9494886Z  713 โ”‚             <View
2026-10-23T23:34:17.9494972Z  714 โ”‚               className="flex-1"
2026-10-23T23:34:17.9495050Z  715 โ”‚               style={{
2026-10-23T23:34:17.9495191Z  716 โ”‚                 backgroundColor: nativeBridge.theme.background,
2026-10-23T23:34:17.9495269Z  717 โ”‚               }}
2026-10-23T23:34:17.9495335Z  718 โ”‚             >
2026-10-23T23:34:17.9495412Z  719 โ”‚               <View
2026-10-23T23:34:17.9495524Z  720 โ”‚                 className="min-w-0 flex-1"
2026-10-23T23:34:17.9495697Z  721 โ”‚                 style={listHeader ? { paddingTop: topContentInset } : undefined}
2026-10-23T23:34:17.9495768Z  722 โ”‚               >
2026-10-23T23:34:17.9495856Z  723 โ”‚                 {listHeader}
2026-10-23T23:34:17.9496002Z  724 โ”‚                 <View className="min-w-0 flex-1" collapsable={false}>
2026-10-23T23:34:17.9496102Z  725 โ”‚                   <NativeReviewDiffView
2026-10-23T23:34:17.9496233Z      ยท                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9496442Z      ยท                              โ•ฐโ”€โ”€ This component is created during render
2026-10-23T23:34:17.9496543Z  726 โ”‚                     collapsable={false}
2026-10-23T23:34:17.9496605Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9496987Z   help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-23T23:34:17.9497421Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-23T23:34:17.9497424Z
2026-10-23T23:34:17.9497735Z   โš  eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'.
2026-10-23T23:34:17.9497933Z      โ•ญโ”€[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7]
2026-10-23T23:34:17.9497996Z  412 โ”‚
2026-10-23T23:34:17.9498146Z  413 โ”‚ const layer = Layer.effect(ThreadPullRequestServiceV2, make);
2026-10-23T23:34:17.9498235Z      ยท       โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T23:34:17.9498388Z      ยท         โ•ฐโ”€โ”€ 'layer' is declared here
2026-10-23T23:34:17.9498448Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9498587Z   help: Consider removing this declaration.
2026-10-23T23:34:17.9498593Z
2026-10-23T23:34:17.9499138Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-23T23:34:17.9499305Z      โ•ญโ”€[packages/contracts/src/composerContext.test.ts:181:18]
2026-10-23T23:34:17.9499467Z  180 โ”‚   it("sends a message without the records the wire cannot carry", () => {
2026-10-23T23:34:17.9499678Z  181 โ”‚     const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({
2026-10-23T23:34:17.9499808Z      ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9499893Z  182 โ”‚       version: 1,
2026-10-23T23:34:17.9499965Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9499968Z
2026-10-23T23:34:17.9500213Z   โš  typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-23T23:34:17.9500439Z     โ•ญโ”€[apps/web/src/contextMenuFallback.test.ts:38:9]
2026-10-23T23:34:17.9500527Z  37 โ”‚   get isConnected() {
2026-10-23T23:34:17.9500643Z  38 โ”‚     let current: FakeElement | null = this;
2026-10-23T23:34:17.9500728Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9500821Z  39 โ”‚     while (current?.parent) {
2026-10-23T23:34:17.9500890Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9501212Z   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-23T23:34:17.9501215Z
2026-10-23T23:34:17.9501438Z   โš  react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-23T23:34:17.9501701Z     โ•ญโ”€[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-23T23:34:17.9501813Z  35 โ”‚       <T3SourceTextRunNativeComponent
2026-10-23T23:34:17.9501893Z  36 โ”‚         key={index}
2026-10-23T23:34:17.9501981Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9502074Z  37 โ”‚         style={flattenedStyle}
2026-10-23T23:34:17.9502142Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9502323Z   help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-23T23:34:17.9502327Z
2026-10-23T23:34:17.9502760Z   โš  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-23T23:34:17.9502899Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:17:12]
2026-10-23T23:34:17.9503207Z  16 โ”‚   it("decodes legacy review credentials without offering them in new grants", () => {
2026-10-23T23:34:17.9503475Z  17 โ”‚     expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([
2026-10-23T23:34:17.9503591Z     ยท            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9503674Z  18 โ”‚       "review:write",
2026-10-23T23:34:17.9503740Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9503743Z
2026-10-23T23:34:17.9504168Z   โš  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-23T23:34:17.9504304Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:20:18]
2026-10-23T23:34:17.9504368Z  19 โ”‚     ]);
2026-10-23T23:34:17.9504566Z  20 โ”‚     expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow();
2026-10-23T23:34:17.9504694Z     ยท                  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9504860Z  21 โ”‚     expect(AuthStandardClientScopes).not.toContain("review:write");
2026-10-23T23:34:17.9504922Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9504926Z
2026-10-23T23:34:17.9505351Z   โš  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-23T23:34:17.9505484Z     โ•ญโ”€[packages/contracts/src/auth.test.ts:58:21]
2026-10-23T23:34:17.9505689Z  57 โ”‚   it("ignores unknown response permissions without falling back to broader scopes", () => {
2026-10-23T23:34:17.9505831Z  58 โ”‚     const session = Schema.decodeUnknownSync(AuthSessionState)({
2026-10-23T23:34:17.9505963Z     ยท                     โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9506050Z  59 โ”‚       authenticated: true,
2026-10-23T23:34:17.9506116Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9506119Z
2026-10-23T23:34:17.9506334Z   โš  unicorn(no-new-array): Do not use `new Array(singleArgument)`.
2026-10-23T23:34:17.9506482Z      โ•ญโ”€[apps/web/src/terminal/ghostty/core.ts:194:19]
2026-10-23T23:34:17.9506633Z  193 โ”‚     const count = Math.min(CHUNK_SIZE, graphemeLength - start);
2026-10-23T23:34:17.9506749Z  194 โ”‚     const codes = new Array<number>(count);
2026-10-23T23:34:17.9506877Z      ยท                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9507010Z  195 โ”‚     for (let index = 0; index < count; index += 1) {
2026-10-23T23:34:17.9507082Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9507598Z   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-23T23:34:17.9507602Z
2026-10-23T23:34:17.9507955Z   โš  unicorn(require-module-specifiers): Empty import specifier is not allowed
2026-10-23T23:34:17.9508153Z      โ•ญโ”€[packages/contracts/src/rpc.ts:297:8]
2026-10-23T23:34:17.9508240Z  296 โ”‚ } from "./device.ts";
2026-10-23T23:34:17.9508353Z  297 โ”‚ import {} from "./previewAutomation.ts";
2026-10-23T23:34:17.9508443Z      ยท        โ”€โ”€
2026-10-23T23:34:17.9508509Z  298 โ”‚ import {
2026-10-23T23:34:17.9508579Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9508681Z   help: Remove empty braces
2026-10-23T23:34:17.9508684Z
2026-10-23T23:34:17.9508968Z   โš  unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence.
2026-10-23T23:34:17.9509126Z      โ•ญโ”€[apps/web/src/components/chat/useComposerSend.ts:985:13]
2026-10-23T23:34:17.9509278Z  984 โ”‚           const changedBeforeDecline = draftChangedSinceSend();
2026-10-23T23:34:17.9509568Z  985 โ”‚ โ•ญโ”€โ–ถ       const pendingIdsBeforeDecline = pendingApprovalsRef.current.map(
2026-10-23T23:34:17.9509716Z  986 โ”‚ โ”‚           (approval) => approval.requestId,
2026-10-23T23:34:17.9509873Z  987 โ”‚ โ•ฐโ”€โ–ถ       );
2026-10-23T23:34:17.9510041Z  988 โ”‚           const approvalResponding = approvalsToDecline.some((approval) =>
2026-10-23T23:34:17.9510112Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9510209Z   help: Switch to `Set`
2026-10-23T23:34:17.9510212Z
2026-10-23T23:34:17.9510457Z   โš  react(purity): Cannot call impure function during render
2026-10-23T23:34:17.9510624Z       โ•ญโ”€[apps/web/src/components/CommandPalette.tsx:1996:20]
2026-10-23T23:34:17.9510773Z  1995 โ”‚         title: inferProjectTitleFromPath(destinationPath),
2026-10-23T23:34:17.9510891Z  1996 โ”‚         createdAt: new Date().toISOString(),
2026-10-23T23:34:17.9510999Z       ยท                    โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9511175Z       ยท                         โ•ฐโ”€โ”€ Cannot call impure function
2026-10-23T23:34:17.9511306Z  1997 โ”‚         remoteUrl: addProjectCloneFlow.remoteUrl,
2026-10-23T23:34:17.9511377Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9511702Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-23T23:34:17.9512057Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-23T23:34:17.9512060Z
2026-10-23T23:34:17.9512405Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-23T23:34:17.9512611Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19]
2026-10-23T23:34:17.9512687Z  472 โ”‚   onFilters,
2026-10-23T23:34:17.9512767Z  473 โ”‚   authorOptions = [],
2026-10-23T23:34:17.9512864Z      ยท                   โ”€โ”€
2026-10-23T23:34:17.9512953Z  474 โ”‚   labelOptions = [],
2026-10-23T23:34:17.9513021Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9513389Z   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-23T23:34:17.9513393Z
2026-10-23T23:34:17.9513723Z   โš  react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead.
2026-10-23T23:34:17.9513998Z      โ•ญโ”€[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18]
2026-10-23T23:34:17.9514125Z  473 โ”‚   authorOptions = [],
2026-10-23T23:34:17.9514237Z  474 โ”‚   labelOptions = [],
2026-10-23T23:34:17.9514415Z      ยท                  โ”€โ”€
2026-10-23T23:34:17.9514546Z  475 โ”‚   optionScope,
2026-10-23T23:34:17.9514627Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9515008Z   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-23T23:34:17.9515023Z
2026-10-23T23:34:17.9515601Z   โš  t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const.
2026-10-23T23:34:17.9515849Z     โ•ญโ”€[packages/contracts/src/baseSchemas.test.ts:39:9]
2026-10-23T23:34:17.9515980Z  38 โ”‚       JSON.stringify(
2026-10-23T23:34:17.9516196Z  39 โ”‚         Schema.encodeUnknownSync(Schema.toCodecJson(Named))([
2026-10-23T23:34:17.9516362Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9516482Z  40 โ”‚           { name: "a" },
2026-10-23T23:34:17.9516585Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9516590Z
2026-10-23T23:34:17.9516942Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-23T23:34:17.9517262Z      โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70]
2026-10-23T23:34:17.9517412Z  554 โ”‚           assert.deepStrictEqual(
2026-10-23T23:34:17.9517711Z  555 โ”‚             (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-23T23:34:17.9517947Z      ยท                                                                      โ”ฌ
2026-10-23T23:34:17.9518254Z      ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
2026-10-23T23:34:17.9518376Z  556 โ”‚             [
2026-10-23T23:34:17.9518474Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9518677Z   help: Consider removing this parameter.
2026-10-23T23:34:17.9518682Z
2026-10-23T23:34:17.9519023Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-23T23:34:17.9519368Z       โ•ญโ”€[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70]
2026-10-23T23:34:17.9519532Z  1154 โ”‚           assert.deepStrictEqual(
2026-10-23T23:34:17.9519854Z  1155 โ”‚             (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest),
2026-10-23T23:34:17.9520101Z       ยท                                                                      โ”ฌ
2026-10-23T23:34:17.9520491Z       ยท                                                                      โ•ฐโ”€โ”€ '_' is declared here
2026-10-23T23:34:17.9520620Z  1156 โ”‚             [
2026-10-23T23:34:17.9520725Z       โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9520907Z   help: Consider removing this parameter.
2026-10-23T23:34:17.9520917Z
2026-10-23T23:34:17.9521304Z   โš  eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used.
2026-10-23T23:34:17.9521628Z     โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13]
2026-10-23T23:34:17.9521810Z  24 โ”‚ import * as Schema from "effect/Schema";
2026-10-23T23:34:17.9522041Z  25 โ”‚ import * as HostProcess from "@t3tools/shared/HostProcess";
2026-10-23T23:34:17.9522193Z     ยท             โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9522750Z     ยท                  โ•ฐโ”€โ”€ 'HostProcess' is imported here
2026-10-23T23:34:17.9522983Z  26 โ”‚
2026-10-23T23:34:17.9523107Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9523285Z   help: Consider removing this import.
2026-10-23T23:34:17.9523290Z
2026-10-23T23:34:17.9523856Z   โš  eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'.
2026-10-23T23:34:17.9524187Z      โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11]
2026-10-23T23:34:17.9524334Z  123 โ”‚     const path = yield* Path.Path;
2026-10-23T23:34:17.9524545Z  124 โ”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-23T23:34:17.9524699Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9524978Z      ยท                 โ•ฐโ”€โ”€ 'serverConfig' is declared here
2026-10-23T23:34:17.9525254Z  125 โ”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-23T23:34:17.9525344Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9525552Z   help: Consider removing this declaration.
2026-10-23T23:34:17.9525556Z
2026-10-23T23:34:17.9526089Z   โš  eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'.
2026-10-23T23:34:17.9526408Z      โ•ญโ”€[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11]
2026-10-23T23:34:17.9526625Z  124 โ”‚     const serverConfig = yield* ServerConfig.ServerConfig;
2026-10-23T23:34:17.9526892Z  125 โ”‚     const serverSettings = yield* ServerSettings.ServerSettingsService;
2026-10-23T23:34:17.9527050Z      ยท           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9527343Z      ยท                  โ•ฐโ”€โ”€ 'serverSettings' is declared here
2026-10-23T23:34:17.9527620Z  126 โ”‚     const gitWorkflow = yield* GitWorkflowService.GitWorkflowService;
2026-10-23T23:34:17.9527731Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9527938Z   help: Consider removing this declaration.
2026-10-23T23:34:17.9527943Z
2026-10-23T23:34:17.9528312Z   โš  eslint(no-unused-vars): Parameter '_' is declared but never used.
2026-10-23T23:34:17.9528530Z      โ•ญโ”€[packages/shared/src/qrCode.ts:458:44]
2026-10-23T23:34:17.9528656Z  457 โ”‚   ): Array<byte> {
2026-10-23T23:34:17.9528869Z  458 โ”‚     let result: Array<byte> = divisor.map((_) => 0);
2026-10-23T23:34:17.9529074Z      ยท                                            โ”ฌ
2026-10-23T23:34:17.9529368Z      ยท                                            โ•ฐโ”€โ”€ '_' is declared here
2026-10-23T23:34:17.9529522Z  459 โ”‚     for (const b of data) {
2026-10-23T23:34:17.9529630Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9529831Z   help: Consider removing this parameter.
2026-10-23T23:34:17.9529836Z
2026-10-23T23:34:17.9530163Z   โš  react(purity): Cannot call impure function during render
2026-10-23T23:34:17.9530498Z      โ•ญโ”€[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58]
2026-10-23T23:34:17.9530726Z  177 โ”‚   if (snoozeClockState.shell !== activeThreadShell) {
2026-10-23T23:34:17.9531058Z  178 โ”‚     setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() });
2026-10-23T23:34:17.9531309Z      ยท                                                          โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9531654Z      ยท                                                               โ•ฐโ”€โ”€ Cannot call impure function
2026-10-23T23:34:17.9531938Z  179 โ”‚   }
2026-10-23T23:34:17.9532125Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9532695Z   help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-23T23:34:17.9533278Z   note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-23T23:34:17.9533284Z
2026-10-23T23:34:17.9533790Z   โš  unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts.
2026-10-23T23:34:17.9534098Z     โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:12:14]
2026-10-23T23:34:17.9534412Z  11 โ”‚       addEventListener(_type: string, listener: (event: { data: string }) => void) {
2026-10-23T23:34:17.9534574Z  12 โ”‚         this.onmessage = listener;
2026-10-23T23:34:17.9534733Z     ยท              โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9534852Z  13 โ”‚       }
2026-10-23T23:34:17.9534953Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9535550Z   help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on<event>` replaces any previously registered handler.
2026-10-23T23:34:17.9535554Z
2026-10-23T23:34:17.9535929Z   โš  typescript(no-this-alias): Unexpected aliasing of 'this' to local variable.
2026-10-23T23:34:17.9536186Z     โ•ญโ”€[apps/web/src/components/device/deviceHubApi.test.ts:16:9]
2026-10-23T23:34:17.9536312Z  15 โ”‚       constructor() {
2026-10-23T23:34:17.9536427Z  16 โ”‚         source = this;
2026-10-23T23:34:17.9536549Z     ยท         โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9536649Z  17 โ”‚       }
2026-10-23T23:34:17.9536752Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9537269Z   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-23T23:34:17.9537280Z
2026-10-23T23:34:17.9537772Z   โš  eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'.
2026-10-23T23:34:17.9537970Z     โ•ญโ”€[packages/shared/src/model.test.ts:36:7]
2026-10-23T23:34:17.9538071Z  35 โ”‚
2026-10-23T23:34:17.9538312Z  36 โ”‚ const claudeCaps: ModelCapabilities = createModelCapabilities({
2026-10-23T23:34:17.9538439Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9538692Z     ยท            โ•ฐโ”€โ”€ 'claudeCaps' is declared here
2026-10-23T23:34:17.9538818Z  37 โ”‚   optionDescriptors: [
2026-10-23T23:34:17.9538919Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9539112Z   help: Consider removing this declaration.
2026-10-23T23:34:17.9539121Z
2026-10-23T23:34:17.9539513Z   โš  unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`.
2026-10-23T23:34:17.9539775Z     โ•ญโ”€[packages/shared/src/composerContextLegacySend.ts:19:45]
2026-10-23T23:34:17.9540006Z  18 โ”‚   const occurrences = collectComposerContextReferences(text);
2026-10-23T23:34:17.9540200Z  19 โ”‚   for (const occurrence of [...occurrences].reverse()) {
2026-10-23T23:34:17.9540470Z     ยท                                             โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9540678Z  20 โ”‚     const record = recordsById.get(occurrence.contextId);
2026-10-23T23:34:17.9540774Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9541250Z   help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original.
2026-10-23T23:34:17.9541263Z
2026-10-23T23:34:17.9542571Z   โš  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-23T23:34:17.9542908Z      โ•ญโ”€[packages/shared/src/atomicWrite.test.ts:139:5]
2026-10-23T23:34:17.9543052Z  138 โ”‚       Effect.gen(function* () {
2026-10-23T23:34:17.9543607Z  139 โ”‚ โ•ญโ”€โ–ถ     while (fiber.pollUnsafe() === undefined) {
2026-10-23T23:34:17.9544013Z  140 โ”‚ โ”‚         yield* TestClock.adjust("100 millis");
2026-10-23T23:34:17.9544614Z  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-23T23:34:17.9544987Z  142 โ”‚ โ”‚         yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve)));
2026-10-23T23:34:17.9545298Z  143 โ”‚ โ•ฐโ”€โ–ถ     }
2026-10-23T23:34:17.9545463Z  144 โ”‚         return yield* Fiber.join(fiber);
2026-10-23T23:34:17.9545569Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9545574Z
2026-10-23T23:34:17.9546048Z   โš  unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary
2026-10-23T23:34:17.9546331Z      โ•ญโ”€[packages/shared/src/serverSettings.ts:346:9]
2026-10-23T23:34:17.9546524Z  345 โ”‚       const entry: ProjectSettingsOverrides = {
2026-10-23T23:34:17.9546812Z  346 โ”‚         ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}),
2026-10-23T23:34:17.9547104Z      ยท         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9547289Z  347 โ”‚       };
2026-10-23T23:34:17.9547395Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9547941Z   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-23T23:34:17.9547947Z
2026-10-23T23:34:17.9548359Z   โš  oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce()
2026-10-23T23:34:17.9548580Z      โ•ญโ”€[packages/shared/src/serverSettings.ts:448:24]
2026-10-23T23:34:17.9548703Z  447 โ”‚   const favorites =
2026-10-23T23:34:17.9548920Z  448 โ”‚     setModelFavorites?.reduce((current, change) => {
2026-10-23T23:34:17.9549107Z      ยท                        โ”€โ”€โ”€โ”ฌโ”€โ”€
2026-10-23T23:34:17.9549332Z      ยท                           โ•ฐโ”€โ”€ For this reduce
2026-10-23T23:34:17.9549518Z  449 โ”‚       const exists = current.some(
2026-10-23T23:34:17.9549863Z  450 โ”‚         (favorite) => favorite.provider === change.provider && favorite.model === change.model,
2026-10-23T23:34:17.9549971Z  451 โ”‚       );
2026-10-23T23:34:17.9550103Z  452 โ”‚       return change.favorite
2026-10-23T23:34:17.9550220Z  453 โ”‚         ? exists
2026-10-23T23:34:17.9550457Z  454 โ”‚           ? current
2026-10-23T23:34:17.9550704Z  455 โ”‚           : [...current, { provider: change.provider, model: change.model }]
2026-10-23T23:34:17.9550892Z      ยท              โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9551141Z      ยท                   โ•ฐโ”€โ”€ From this spread
2026-10-23T23:34:17.9551263Z  456 โ”‚         : current.filter(
2026-10-23T23:34:17.9551362Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9551734Z   help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead.
2026-10-23T23:34:17.9552265Z   note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-23T23:34:17.9552338Z
2026-10-23T23:34:17.9552739Z   โš  oxc(no-accumulating-spread): Do not spread accumulators in loops
2026-10-23T23:34:17.9552959Z      โ•ญโ”€[packages/shared/src/serverSettings.ts:466:3]
2026-10-23T23:34:17.9553073Z  464 โ”‚     null;
2026-10-23T23:34:17.9553287Z  465 โ”‚   let nextModelPreferences = initialModelPreferences;
2026-10-23T23:34:17.9553443Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9553720Z      ยท                 โ•ฐโ”€โ”€ From this accumulator
2026-10-23T23:34:17.9553925Z  466 โ”‚   for (const change of setModelsHidden ?? []) {
2026-10-23T23:34:17.9554049Z      ยท   โ”€โ”ฌโ”€
2026-10-23T23:34:17.9554237Z      ยท    โ•ฐโ”€โ”€ For this loop
2026-10-23T23:34:17.9554496Z  467 โ”‚     const preferences = nextModelPreferences?.[change.provider] ?? {
2026-10-23T23:34:17.9554659Z  468 โ”‚       hiddenModels: [],
2026-10-23T23:34:17.9554806Z  469 โ”‚       modelOrder: [],
2026-10-23T23:34:17.9554904Z  470 โ”‚     };
2026-10-23T23:34:17.9555233Z  471 โ”‚     const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model);
2026-10-23T23:34:17.9555458Z  472 โ”‚     if (change.hidden) hiddenModels.push(change.model);
2026-10-23T23:34:17.9555617Z  473 โ”‚     nextModelPreferences = {
2026-10-23T23:34:17.9555750Z  474 โ”‚       ...nextModelPreferences,
2026-10-23T23:34:17.9555928Z      ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9556210Z      ยท                  โ•ฐโ”€โ”€ From this spread
2026-10-23T23:34:17.9556410Z  475 โ”‚       [change.provider]: { ...preferences, hiddenModels },
2026-10-23T23:34:17.9556510Z      โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9556856Z   help: Consider using `Object.assign()` to mutate the accumulator instead.
2026-10-23T23:34:17.9557156Z   note: Using spreads within accumulators leads to `O(n^2)` time complexity.
2026-10-23T23:34:17.9557160Z
2026-10-23T23:34:17.9557642Z   โš  eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression
2026-10-23T23:34:17.9557925Z     โ•ญโ”€[packages/shared/src/serverSettings.test.ts:35:7]
2026-10-23T23:34:17.9558325Z  34 โ”‚     const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) =>
2026-10-23T23:34:17.9558512Z  35 โ”‚       instanceId === configured ? true : false,
2026-10-23T23:34:17.9558774Z     ยท       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9558879Z  36 โ”‚     );
2026-10-23T23:34:17.9558979Z     โ•ฐโ”€โ”€โ”€โ”€
2026-10-23T23:34:17.9559337Z   help: Remove this ternary operator
2026-10-23T23:34:17.9559397Z
2026-10-23T23:34:17.9559549Z Found 0 errors and 362 warnings in 5402 files (10.3s, 8 threads)
2026-10-23T23:34:18.0553442Z Post job cleanup.
2026-10-23T23:34:18.1576204Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-23T23:34:18.1695337Z Post job cleanup.
2026-10-23T23:34:18.1710626Z ##[start-action display=Cache full pnpm store;id=__7c134bdb-fe29-4dbf-9c1c-47b5b34377cb.__actions_cache]
2026-10-23T23:34:18.2167897Z Post job cleanup.
2026-10-23T23:34:18.3080111Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache.
2026-10-23T23:34:18.3137333Z ##[end-action id=__7c134bdb-fe29-4dbf-9c1c-47b5b34377cb.__actions_cache;outcome=success;conclusion=success;duration_ms=142]
2026-10-23T23:34:18.3140394Z ##[start-action display=Cache Vite+;id=__7c134bdb-fe29-4dbf-9c1c-47b5b34377cb.vp_cache]
2026-10-23T23:34:18.3174635Z Post job cleanup.
2026-10-23T23:34:18.4102431Z 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-23T23:34:18.4143325Z ##[end-action id=__7c134bdb-fe29-4dbf-9c1c-47b5b34377cb.vp_cache;outcome=success;conclusion=success;duration_ms=100]
2026-10-23T23:34:18.4197091Z Post job cleanup.
2026-10-23T23:34:18.4775607Z [command]/usr/local/bin/git version
2026-10-23T23:34:18.4819613Z git version 2.55.0
2026-10-23T23:34:18.4845305Z Temporarily overriding HOME='/home/runner/_work/_temp/fe62f529-ec85-4043-b9dc-1a8ff2de0ea4' before making global git config changes
2026-10-23T23:34:18.4845908Z Adding repository directory to the temporary git global config as a safe directory
2026-10-23T23:34:18.4849971Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-23T23:34:18.4889316Z Removing SSH command configuration
2026-10-23T23:34:18.4895603Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-23T23:34:18.4938547Z [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-23T23:34:18.5129773Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-23T23:34:18.5167974Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-23T23:34:18.5246676Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-23T23:34:18.5270308Z ##[group]Run '/job_completed.sh'
2026-10-23T23:34:18.5279859Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-23T23:34:18.5280075Z env:
2026-10-23T23:34:18.5280256Z   BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 192
2026-10-23T23:34:18.5280524Z   BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 391
2026-10-23T23:34:18.5280824Z   BLACKSMITH_CHECK_RUN_ID: 120709611033
2026-10-23T23:34:18.5280990Z   BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-23T23:34:18.5281171Z   GITHUB_ACTIONS_CACHE_MODE: write
2026-10-23T23:34:18.5281331Z ##[endgroup]
2026-10-23T23:34:18.5419113Z Docker container cache not activated, skipping hash computation.
2026-10-23T23:34:18.6130113Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-23T23:34:18.6233738Z Cleaning up orphan processes