GitHub check
256 KB of 609 KB loaded Download the full log (609 KB)
353 KB of earlier output not loaded
โ
2026-10-25T02:16:39.4726109Z ยท โฐโโ Unnecessary dependency `bottomSearch`
2026-10-25T02:16:39.4726211Z 115 โ const composeButton = nativeToolbarCompose ? (
2026-10-25T02:16:39.4726265Z โฐโโโโ
2026-10-25T02:16:39.4726558Z 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-25T02:16:39.4726865Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4726868Z
2026-10-25T02:16:39.4727365Z โ 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-25T02:16:39.4727548Z โญโ[packages/client-runtime/src/connection/supervisor.test.ts:135:3]
2026-10-25T02:16:39.4727660Z 134 โ let lastState = yield* SubscriptionRef.get(state);
2026-10-25T02:16:39.4727871Z 135 โ โญโโถ for (let iteration = 0; iteration < 100; iteration += 1) {
2026-10-25T02:16:39.4728006Z 136 โ โ lastState = yield* SubscriptionRef.get(state);
2026-10-25T02:16:39.4728110Z 137 โ โ if (predicate(lastState)) {
2026-10-25T02:16:39.4728213Z 138 โ โ return lastState;
2026-10-25T02:16:39.4728290Z 139 โ โ }
2026-10-25T02:16:39.4728392Z 140 โ โ yield* Effect.yieldNow;
2026-10-25T02:16:39.4728514Z 141 โ โฐโโถ }
2026-10-25T02:16:39.4728594Z 142 โ return yield* Effect.die(
2026-10-25T02:16:39.4728646Z โฐโโโโ
2026-10-25T02:16:39.4728649Z
2026-10-25T02:16:39.4728908Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4729079Z โญโ[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:59:5]
2026-10-25T02:16:39.4729135Z 49 โ
2026-10-25T02:16:39.4729201Z 50 โ useEffect(() => {
2026-10-25T02:16:39.4729273Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4729403Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4729498Z 51 โ traceDiffHighlight("viewport-reset", {
2026-10-25T02:16:39.4729589Z 52 โ reset: diffHighlightTraceId(resetKey),
2026-10-25T02:16:39.4729651Z 53 โ enabled,
2026-10-25T02:16:39.4729717Z 54 โ rows: rows.length,
2026-10-25T02:16:39.4729775Z 55 โ });
2026-10-25T02:16:39.4729865Z 56 โ const previousRange = scheduler.reset();
2026-10-25T02:16:39.4729958Z 57 โ highlightedRowIdsRef.current = new Set();
2026-10-25T02:16:39.4730040Z 58 โ pendingPatchesRef.current = [];
2026-10-25T02:16:39.4730146Z 59 โ setViewport({ scope: viewportScope, range: null });
2026-10-25T02:16:39.4730220Z ยท โโโโโโฌโโโโโ
2026-10-25T02:16:39.4730384Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4730549Z 60 โ setTokensPatchJson(createEmptyTokenPatch(resetKey));
2026-10-25T02:16:39.4730632Z โฐโโโโ
2026-10-25T02:16:39.4731216Z 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-25T02:16:39.4731531Z 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-25T02:16:39.4731533Z
2026-10-25T02:16:39.4731724Z โ eslint(no-unused-vars): Identifier 'Image' is imported but never used.
2026-10-25T02:16:39.4731864Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10]
2026-10-25T02:16:39.4732002Z 16 โ import type { NativeSyntheticEvent, ViewProps } from "react-native";
2026-10-25T02:16:39.4732117Z 17 โ import { Image, Platform, StyleSheet } from "react-native";
2026-10-25T02:16:39.4732187Z ยท โโโฌโโ
2026-10-25T02:16:39.4732310Z ยท โฐโโ 'Image' is imported here
2026-10-25T02:16:39.4732364Z 18 โ
2026-10-25T02:16:39.4732415Z โฐโโโโ
2026-10-25T02:16:39.4732508Z help: Consider removing this import.
2026-10-25T02:16:39.4732511Z
2026-10-25T02:16:39.4732711Z โ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-25T02:16:39.4732851Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6]
2026-10-25T02:16:39.4733012Z 225 โ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-25T02:16:39.4733107Z 226 โ nativeEventSnapshotsRef.current,
2026-10-25T02:16:39.4733200Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4733650Z ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:16:39.4733723Z 227 โ mostRecentEventCount,
2026-10-25T02:16:39.4733779Z 228 โ );
2026-10-25T02:16:39.4733900Z 229 โ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-25T02:16:39.4734035Z ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4734243Z ยท โฐโโ This dependency list is missing values used by the callback
2026-10-25T02:16:39.4734360Z 230 โ const assumedValue = props.value;
2026-10-25T02:16:39.4734415Z โฐโโโโ
2026-10-25T02:16:39.4734580Z help: Missing dependencies can cause an effect to fire less often than it should
2026-10-25T02:16:39.4734885Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4734888Z
2026-10-25T02:16:39.4735096Z โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T02:16:39.4735235Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7]
2026-10-25T02:16:39.4735375Z 236 โ nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-25T02:16:39.4735467Z 237 โ nativeEventSnapshotsRef.current,
2026-10-25T02:16:39.4735557Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4736050Z ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:16:39.4736150Z 238 โ controlledEventCount,
2026-10-25T02:16:39.4736216Z 239 โ assumedValue,
2026-10-25T02:16:39.4736271Z 240 โ );
2026-10-25T02:16:39.4736427Z 241 โ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-25T02:16:39.4736560Z ยท โโโโโโโโโโโโฌโโโโโโโโโโ
2026-10-25T02:16:39.4736765Z ยท โฐโโ Unnecessary dependency `controlledDocumentJson`
2026-10-25T02:16:39.4736853Z 242 โ const acceptNativeEvent = useCallback(
2026-10-25T02:16:39.4736911Z โฐโโโโ
2026-10-25T02:16:39.4737322Z 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-25T02:16:39.4737629Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4737631Z
2026-10-25T02:16:39.4737775Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4737917Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
2026-10-25T02:16:39.4738038Z 161 โ const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:16:39.4738147Z 162 โ preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:16:39.4738268Z ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
2026-10-25T02:16:39.4738433Z ยท โฐโโ Cannot access ref value during render
2026-10-25T02:16:39.4738491Z 163 โ });
2026-10-25T02:16:39.4738541Z โฐโโโโ
2026-10-25T02:16:39.4738992Z 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-25T02:16:39.4739283Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4739286Z
2026-10-25T02:16:39.4739433Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4739575Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29]
2026-10-25T02:16:39.4739692Z 161 โ const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:16:39.4739802Z 162 โ preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:16:39.4739916Z ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
2026-10-25T02:16:39.4740119Z ยท โฐโโ Passing a ref to a function may read its value during render
2026-10-25T02:16:39.4740175Z 163 โ });
2026-10-25T02:16:39.4740228Z โฐโโโโ
2026-10-25T02:16:39.4740722Z 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-25T02:16:39.4741031Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4741034Z
2026-10-25T02:16:39.4741177Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4741314Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23]
2026-10-25T02:16:39.4741370Z 163 โ });
2026-10-25T02:16:39.4741459Z 164 โ confirmedTokensRef.current = tokens;
2026-10-25T02:16:39.4741581Z ยท โโโโโโโโโโฌโโโโโโโโโโโโโฌโโโ
2026-10-25T02:16:39.4741770Z ยท โ โฐโโ Cannot update ref value during render
2026-10-25T02:16:39.4741891Z ยท โฐโโ This value is a ref
2026-10-25T02:16:39.4741965Z 165 โ return JSON.stringify(
2026-10-25T02:16:39.4742017Z โฐโโโโ
2026-10-25T02:16:39.4742467Z 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-25T02:16:39.4742749Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4742752Z
2026-10-25T02:16:39.4742892Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4743031Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5]
2026-10-25T02:16:39.4743100Z 205 โ mostRecentEventCount,
2026-10-25T02:16:39.4743191Z 206 โ nativeEventSnapshotsRef.current,
2026-10-25T02:16:39.4743300Z ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4743484Z ยท โฐโโ Passing a ref to a function may read its value during render
2026-10-25T02:16:39.4743537Z 207 โ );
2026-10-25T02:16:39.4743590Z โฐโโโโ
2026-10-25T02:16:39.4744041Z 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-25T02:16:39.4744361Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4744363Z
2026-10-25T02:16:39.4744510Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4744648Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5]
2026-10-25T02:16:39.4744718Z 211 โ mostRecentEventCount,
2026-10-25T02:16:39.4744804Z 212 โ nativeEventSnapshotsRef.current,
2026-10-25T02:16:39.4744907Z ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4745090Z ยท โฐโโ Passing a ref to a function may read its value during render
2026-10-25T02:16:39.4745145Z 213 โ );
2026-10-25T02:16:39.4745198Z โฐโโโโ
2026-10-25T02:16:39.4745645Z 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-25T02:16:39.4745974Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4746013Z
2026-10-25T02:16:39.4746197Z โ react(memo-dependencies): Found missing memoization dependencies
2026-10-25T02:16:39.4746336Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6]
2026-10-25T02:16:39.4746457Z 161 โ const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:16:39.4746568Z 162 โ preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:16:39.4746674Z ยท โโโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4747134Z ยท โฐโโ Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:16:39.4747194Z 163 โ });
2026-10-25T02:16:39.4747283Z 164 โ confirmedTokensRef.current = tokens;
2026-10-25T02:16:39.4747351Z 165 โ return JSON.stringify(
2026-10-25T02:16:39.4747514Z 166 โ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-25T02:16:39.4747582Z 167 โ const record =
2026-10-25T02:16:39.4747665Z 168 โ token.type === "context"
2026-10-25T02:16:39.4747829Z 169 โ ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-25T02:16:39.4747896Z 170 โ : undefined;
2026-10-25T02:16:39.4748002Z 171 โ const presentation = contextChipPresentation(
2026-10-25T02:16:39.4748112Z 172 โ token.type === "context" ? token.kind : token.type,
2026-10-25T02:16:39.4748179Z 173 โ record,
2026-10-25T02:16:39.4748242Z 174 โ );
2026-10-25T02:16:39.4748326Z 175 โ const icon = contextChipIcon(
2026-10-25T02:16:39.4748394Z 176 โ presentation,
2026-10-25T02:16:39.4748533Z 177 โ token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-25T02:16:39.4748592Z 178 โ );
2026-10-25T02:16:39.4748654Z 179 โ return {
2026-10-25T02:16:39.4748725Z 180 โ type: token.type,
2026-10-25T02:16:39.4748797Z 181 โ source: token.source,
2026-10-25T02:16:39.4748869Z 182 โ start: token.start,
2026-10-25T02:16:39.4748936Z 183 โ end: token.end,
2026-10-25T02:16:39.4749083Z 184 โ accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-25T02:16:39.4749143Z 185 โ label:
2026-10-25T02:16:39.4749220Z 186 โ token.type === "skill"
2026-10-25T02:16:39.4749333Z 187 โ ? (skillLabels.get(token.value) ?? token.value)
2026-10-25T02:16:39.4749418Z 188 โ : token.type === "context"
2026-10-25T02:16:39.4749650Z 189 โ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " ยท unavailable"}`
2026-10-25T02:16:39.4749733Z 190 โ : basename(token.value),
2026-10-25T02:16:39.4749874Z 191 โ detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-25T02:16:39.4749965Z 192 โ iconUri: contextChipIconUri(icon),
2026-10-25T02:16:39.4750049Z 193 โ tintsIcon: icon.kind === "chip",
2026-10-25T02:16:39.4750106Z 194 โ };
2026-10-25T02:16:39.4750164Z 195 โ }),
2026-10-25T02:16:39.4750219Z 196 โ );
2026-10-25T02:16:39.4750395Z 197 โ }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-25T02:16:39.4750576Z ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4750829Z ยท โฐโโ This dependency list is missing values used by the callback
2026-10-25T02:16:39.4750966Z 198 โ // Every render resolves against the snapshot history, so a render whose
2026-10-25T02:16:39.4751017Z โฐโโโโ
2026-10-25T02:16:39.4751221Z help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-25T02:16:39.4751528Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4751531Z
2026-10-25T02:16:39.4751719Z โ react(memo-dependencies): Found missing memoization dependencies
2026-10-25T02:16:39.4751862Z โญโ[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5]
2026-10-25T02:16:39.4751995Z 251 โ mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-25T02:16:39.4752095Z 252 โ nativeEventSnapshotsRef.current.push({
2026-10-25T02:16:39.4752186Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4752636Z ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:16:39.4752726Z 253 โ eventCount: acknowledgedEventCount,
2026-10-25T02:16:39.4752789Z 254 โ value,
2026-10-25T02:16:39.4752866Z 255 โ selection: nextSelection,
2026-10-25T02:16:39.4752924Z 256 โ });
2026-10-25T02:16:39.4753012Z 257 โ return acknowledgedEventCount;
2026-10-25T02:16:39.4753069Z 258 โ },
2026-10-25T02:16:39.4753125Z 259 โ [],
2026-10-25T02:16:39.4753191Z ยท โโฌ
2026-10-25T02:16:39.4753373Z ยท โฐโโ This dependency list is missing values used by the callback
2026-10-25T02:16:39.4753428Z 260 โ );
2026-10-25T02:16:39.4753482Z โฐโโโโ
2026-10-25T02:16:39.4753682Z help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-25T02:16:39.4753988Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4753991Z
2026-10-25T02:16:39.4754147Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4754384Z โญโ[apps/mobile/src/features/threads/thread-work-log.tsx:174:5]
2026-10-25T02:16:39.4754566Z 170 โ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180;
2026-10-25T02:16:39.4754699Z 171 โ const rotation = useSharedValue(props.expanded ? expandedAngle : 0);
2026-10-25T02:16:39.4754774Z ยท โโโโโฌโโโ
2026-10-25T02:16:39.4754905Z ยท โฐโโ `rotation` originates here
2026-10-25T02:16:39.4754960Z 172 โ
2026-10-25T02:16:39.4755028Z 173 โ useLayoutEffect(() => {
2026-10-25T02:16:39.4755162Z 174 โ rotation.value = withTiming(props.expanded ? expandedAngle : 0, {
2026-10-25T02:16:39.4755235Z ยท โโโโโฌโโโ
2026-10-25T02:16:39.4755365Z ยท โฐโโ `rotation` cannot be modified
2026-10-25T02:16:39.4755467Z 175 โ duration: THREAD_DISCLOSURE_TRANSITION_MS,
2026-10-25T02:16:39.4755524Z โฐโโโโ
2026-10-25T02:16:39.4755784Z 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-25T02:16:39.4756084Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4756087Z
2026-10-25T02:16:39.4756276Z โ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:16:39.4756426Z โญโ[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23]
2026-10-25T02:16:39.4756494Z 1245 โ <Text
2026-10-25T02:16:39.4756589Z 1246 โ key={`${index}:${line}`}
2026-10-25T02:16:39.4756704Z ยท โโโโโโโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4756785Z 1247 โ selectable
2026-10-25T02:16:39.4756840Z โฐโโโโ
2026-10-25T02:16:39.4756986Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:16:39.4756989Z
2026-10-25T02:16:39.4757241Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4757378Z โญโ[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5]
2026-10-25T02:16:39.4757432Z 150 โ
2026-10-25T02:16:39.4757498Z 151 โ useEffect(() => {
2026-10-25T02:16:39.4757567Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4757693Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4757777Z 152 โ if (!controlledSelectedPath) {
2026-10-25T02:16:39.4757845Z 153 โ return;
2026-10-25T02:16:39.4757902Z 154 โ }
2026-10-25T02:16:39.4757985Z 155 โ setExpandedPaths((current) => {
2026-10-25T02:16:39.4758064Z ยท โโโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.4758232Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4758354Z 156 โ const ancestors = ancestorPaths(controlledSelectedPath);
2026-10-25T02:16:39.4758407Z โฐโโโโ
2026-10-25T02:16:39.4758995Z 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-25T02:16:39.4759361Z 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-25T02:16:39.4759393Z
2026-10-25T02:16:39.4759584Z โ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:16:39.4759730Z โญโ[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31]
2026-10-25T02:16:39.4759836Z 222 โ ? snippetTokens.map((line, lineIndex) => (
2026-10-25T02:16:39.4759929Z 223 โ <NativeText key={lineIndex}>
2026-10-25T02:16:39.4760035Z ยท โโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4760123Z 224 โ {lineIndex > 0 ? "\n" : ""}
2026-10-25T02:16:39.4760176Z โฐโโโโ
2026-10-25T02:16:39.4760320Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:16:39.4760322Z
2026-10-25T02:16:39.4760515Z โ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:16:39.4760663Z โญโ[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25]
2026-10-25T02:16:39.4760736Z 226 โ <NativeText
2026-10-25T02:16:39.4760819Z 227 โ key={tokenIndex}
2026-10-25T02:16:39.4760920Z ยท โโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4760992Z 228 โ style={{
2026-10-25T02:16:39.4761046Z โฐโโโโ
2026-10-25T02:16:39.4761186Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:16:39.4761189Z
2026-10-25T02:16:39.4761442Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4761631Z โญโ[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5]
2026-10-25T02:16:39.4761685Z 104 โ
2026-10-25T02:16:39.4761752Z 105 โ useEffect(() => {
2026-10-25T02:16:39.4761823Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4761950Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4762027Z 106 โ clearReviewCommentTarget();
2026-10-25T02:16:39.4762122Z 107 โ setPendingNativeCommentSelection(null);
2026-10-25T02:16:39.4762224Z ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4762396Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4762467Z 108 โ }, [selectedSection?.id]);
2026-10-25T02:16:39.4762518Z โฐโโโโ
2026-10-25T02:16:39.4763105Z 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-25T02:16:39.4763421Z 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-25T02:16:39.4763424Z
2026-10-25T02:16:39.4763673Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4763855Z โญโ[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7]
2026-10-25T02:16:39.4763908Z 109 โ
2026-10-25T02:16:39.4763971Z 110 โ useEffect(() => {
2026-10-25T02:16:39.4764041Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4764218Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4764370Z 111 โ if (activeCommentTarget === null) {
2026-10-25T02:16:39.4764469Z 112 โ setPendingNativeCommentSelection(null);
2026-10-25T02:16:39.4764573Z ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4764749Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4764805Z 113 โ }
2026-10-25T02:16:39.4764855Z โฐโโโโ
2026-10-25T02:16:39.4765436Z 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-25T02:16:39.4765751Z 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-25T02:16:39.4765756Z
2026-10-25T02:16:39.4765950Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4766129Z โญโ[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7]
2026-10-25T02:16:39.4766224Z 107 โ setPendingNativeCommentSelection(null);
2026-10-25T02:16:39.4766295Z 108 โ }, [selectedSection?.id]);
2026-10-25T02:16:39.4766379Z ยท โโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4766538Z ยท โฐโโ Unnecessary dependency `selectedSection?.id`
2026-10-25T02:16:39.4766590Z 109 โ
2026-10-25T02:16:39.4766640Z โฐโโโโ
2026-10-25T02:16:39.4766930Z 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-25T02:16:39.4767236Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4767238Z
2026-10-25T02:16:39.4767435Z โ react(exhaustive-effect-dependencies): Found missing effect dependencies
2026-10-25T02:16:39.4767569Z โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6]
2026-10-25T02:16:39.4767729Z 227 โ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents(
2026-10-25T02:16:39.4767817Z 228 โ nativeEventSnapshotsRef.current,
2026-10-25T02:16:39.4767906Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4768358Z ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:16:39.4768432Z 229 โ mostRecentEventCount,
2026-10-25T02:16:39.4768485Z 230 โ );
2026-10-25T02:16:39.4768607Z 231 โ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]);
2026-10-25T02:16:39.4768739Z ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4768933Z ยท โฐโโ This dependency list is missing values used by the callback
2026-10-25T02:16:39.4769013Z 232 โ const assumedValue = props.value;
2026-10-25T02:16:39.4769064Z โฐโโโโ
2026-10-25T02:16:39.4769275Z help: Missing dependencies can cause an effect to fire less often than it should
2026-10-25T02:16:39.4769608Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4769611Z
2026-10-25T02:16:39.4769817Z โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T02:16:39.4769949Z โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7]
2026-10-25T02:16:39.4770091Z 238 โ nativeEventSnapshotsRef.current = assumeComposerControlledState(
2026-10-25T02:16:39.4770178Z 239 โ nativeEventSnapshotsRef.current,
2026-10-25T02:16:39.4770267Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4770715Z ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:16:39.4770789Z 240 โ controlledEventCount,
2026-10-25T02:16:39.4770852Z 241 โ assumedValue,
2026-10-25T02:16:39.4770905Z 242 โ );
2026-10-25T02:16:39.4771058Z 243 โ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]);
2026-10-25T02:16:39.4771190Z ยท โโโโโโโโโโโโฌโโโโโโโโโโ
2026-10-25T02:16:39.4771392Z ยท โฐโโ Unnecessary dependency `controlledDocumentJson`
2026-10-25T02:16:39.4771479Z 244 โ const acceptNativeEvent = useCallback(
2026-10-25T02:16:39.4771528Z โฐโโโโ
2026-10-25T02:16:39.4771940Z 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-25T02:16:39.4772245Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4772247Z
2026-10-25T02:16:39.4772388Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4772521Z โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
2026-10-25T02:16:39.4772641Z 163 โ const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:16:39.4772750Z 164 โ preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:16:39.4772865Z ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
2026-10-25T02:16:39.4773070Z ยท โฐโโ Cannot access ref value during render
2026-10-25T02:16:39.4773154Z 165 โ });
2026-10-25T02:16:39.4773204Z โฐโโโโ
2026-10-25T02:16:39.4773663Z 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-25T02:16:39.4773947Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4773950Z
2026-10-25T02:16:39.4774092Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4774254Z โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29]
2026-10-25T02:16:39.4774380Z 163 โ const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:16:39.4774491Z 164 โ preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:16:39.4774603Z ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
2026-10-25T02:16:39.4774804Z ยท โฐโโ Passing a ref to a function may read its value during render
2026-10-25T02:16:39.4774859Z 165 โ });
2026-10-25T02:16:39.4774909Z โฐโโโโ
2026-10-25T02:16:39.4775357Z 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-25T02:16:39.4775645Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4775650Z
2026-10-25T02:16:39.4775792Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4775922Z โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23]
2026-10-25T02:16:39.4775977Z 165 โ });
2026-10-25T02:16:39.4776064Z 166 โ confirmedTokensRef.current = tokens;
2026-10-25T02:16:39.4776184Z ยท โโโโโโโโโโฌโโโโโโโโโโโโโฌโโโ
2026-10-25T02:16:39.4776373Z ยท โ โฐโโ Cannot update ref value during render
2026-10-25T02:16:39.4776486Z ยท โฐโโ This value is a ref
2026-10-25T02:16:39.4776556Z 167 โ return JSON.stringify(
2026-10-25T02:16:39.4776608Z โฐโโโโ
2026-10-25T02:16:39.4777064Z 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-25T02:16:39.4777353Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4777355Z
2026-10-25T02:16:39.4777497Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4777627Z โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5]
2026-10-25T02:16:39.4777696Z 207 โ mostRecentEventCount,
2026-10-25T02:16:39.4777783Z 208 โ nativeEventSnapshotsRef.current,
2026-10-25T02:16:39.4777932Z ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4778141Z ยท โฐโโ Passing a ref to a function may read its value during render
2026-10-25T02:16:39.4778200Z 209 โ );
2026-10-25T02:16:39.4778252Z โฐโโโโ
2026-10-25T02:16:39.4778705Z 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-25T02:16:39.4778986Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4778991Z
2026-10-25T02:16:39.4779131Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4779267Z โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5]
2026-10-25T02:16:39.4779339Z 213 โ mostRecentEventCount,
2026-10-25T02:16:39.4779426Z 214 โ nativeEventSnapshotsRef.current,
2026-10-25T02:16:39.4779525Z ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4779709Z ยท โฐโโ Passing a ref to a function may read its value during render
2026-10-25T02:16:39.4779764Z 215 โ );
2026-10-25T02:16:39.4779816Z โฐโโโโ
2026-10-25T02:16:39.4780262Z 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-25T02:16:39.4780552Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4780557Z
2026-10-25T02:16:39.4780740Z โ react(memo-dependencies): Found missing memoization dependencies
2026-10-25T02:16:39.4780872Z โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6]
2026-10-25T02:16:39.4780991Z 163 โ const tokens = collectComposerInlineTokens(props.value, {
2026-10-25T02:16:39.4781102Z 164 โ preserveTrailingFrom: confirmedTokensRef.current,
2026-10-25T02:16:39.4781210Z ยท โโโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4781663Z ยท โฐโโ Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:16:39.4781720Z 165 โ });
2026-10-25T02:16:39.4781810Z 166 โ confirmedTokensRef.current = tokens;
2026-10-25T02:16:39.4781884Z 167 โ return JSON.stringify(
2026-10-25T02:16:39.4782046Z 168 โ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => {
2026-10-25T02:16:39.4782113Z 169 โ const record =
2026-10-25T02:16:39.4782190Z 170 โ token.type === "context"
2026-10-25T02:16:39.4782355Z 171 โ ? props.context?.records.find((record) => record.contextId === token.contextId)
2026-10-25T02:16:39.4782421Z 172 โ : undefined;
2026-10-25T02:16:39.4782527Z 173 โ const presentation = contextChipPresentation(
2026-10-25T02:16:39.4782634Z 174 โ token.type === "context" ? token.kind : token.type,
2026-10-25T02:16:39.4782697Z 175 โ record,
2026-10-25T02:16:39.4782756Z 176 โ );
2026-10-25T02:16:39.4782892Z 177 โ const icon = contextChipIcon(
2026-10-25T02:16:39.4782985Z 178 โ presentation,
2026-10-25T02:16:39.4783126Z 179 โ token.type === "mention" ? token.value : contextRecordFileName(record),
2026-10-25T02:16:39.4783184Z 180 โ );
2026-10-25T02:16:39.4783245Z 181 โ return {
2026-10-25T02:16:39.4783315Z 182 โ type: token.type,
2026-10-25T02:16:39.4783390Z 183 โ source: token.source,
2026-10-25T02:16:39.4783460Z 184 โ start: token.start,
2026-10-25T02:16:39.4783524Z 185 โ end: token.end,
2026-10-25T02:16:39.4783670Z 186 โ accent: contextChipAccent(presentation.accent, theme, chipTextColor),
2026-10-25T02:16:39.4783731Z 187 โ label:
2026-10-25T02:16:39.4783808Z 188 โ token.type === "skill"
2026-10-25T02:16:39.4783912Z 189 โ ? (skillLabels.get(token.value) ?? token.value)
2026-10-25T02:16:39.4783998Z 190 โ : token.type === "context"
2026-10-25T02:16:39.4784243Z 191 โ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " ยท unavailable"}`
2026-10-25T02:16:39.4784352Z 192 โ : basename(token.value),
2026-10-25T02:16:39.4784492Z 193 โ detail: token.type === "context" ? composerChipSizeSuffix(record) : "",
2026-10-25T02:16:39.4784584Z 194 โ iconUri: contextChipIconUri(icon),
2026-10-25T02:16:39.4784675Z 195 โ tintsIcon: icon.kind === "chip",
2026-10-25T02:16:39.4784733Z 196 โ };
2026-10-25T02:16:39.4784788Z 197 โ }),
2026-10-25T02:16:39.4784843Z 198 โ );
2026-10-25T02:16:39.4784974Z 199 โ }, [props.value, props.context, skillLabels, theme, chipTextColor]);
2026-10-25T02:16:39.4785124Z ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4785329Z ยท โฐโโ This dependency list is missing values used by the callback
2026-10-25T02:16:39.4785470Z 200 โ // Every render resolves against the snapshot history, so a render whose
2026-10-25T02:16:39.4785522Z โฐโโโโ
2026-10-25T02:16:39.4785725Z help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-25T02:16:39.4786029Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4786032Z
2026-10-25T02:16:39.4786212Z โ react(memo-dependencies): Found missing memoization dependencies
2026-10-25T02:16:39.4786344Z โญโ[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5]
2026-10-25T02:16:39.4786478Z 253 โ mostRecentEventCountRef.current = acknowledgedEventCount;
2026-10-25T02:16:39.4786578Z 254 โ nativeEventSnapshotsRef.current.push({
2026-10-25T02:16:39.4786667Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4787114Z ยท โฐโโ Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values
2026-10-25T02:16:39.4787204Z 255 โ eventCount: acknowledgedEventCount,
2026-10-25T02:16:39.4787264Z 256 โ value,
2026-10-25T02:16:39.4787340Z 257 โ selection: nextSelection,
2026-10-25T02:16:39.4787397Z 258 โ });
2026-10-25T02:16:39.4787478Z 259 โ return acknowledgedEventCount;
2026-10-25T02:16:39.4787532Z 260 โ },
2026-10-25T02:16:39.4787632Z 261 โ [],
2026-10-25T02:16:39.4787755Z ยท โโฌ
2026-10-25T02:16:39.4787935Z ยท โฐโโ This dependency list is missing values used by the callback
2026-10-25T02:16:39.4787988Z 262 โ );
2026-10-25T02:16:39.4788038Z โฐโโโโ
2026-10-25T02:16:39.4788238Z help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI
2026-10-25T02:16:39.4788541Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4788543Z
2026-10-25T02:16:39.4788685Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4788800Z โญโ[apps/mobile/src/native/StackHeader.tsx:210:9]
2026-10-25T02:16:39.4788865Z 209 โ "options",
2026-10-25T02:16:39.4788962Z 210 โ latestOptionFunctionsRef.current,
2026-10-25T02:16:39.4789073Z ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4789259Z ยท โฐโโ Passing a ref to a function may read its value during render
2026-10-25T02:16:39.4789352Z 211 โ optionFunctionWrappersRef.current,
2026-10-25T02:16:39.4789402Z โฐโโโโ
2026-10-25T02:16:39.4789854Z 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-25T02:16:39.4790138Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4790140Z
2026-10-25T02:16:39.4790284Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4790403Z โญโ[apps/mobile/src/native/StackHeader.tsx:211:9]
2026-10-25T02:16:39.4790495Z 210 โ latestOptionFunctionsRef.current,
2026-10-25T02:16:39.4790587Z 211 โ optionFunctionWrappersRef.current,
2026-10-25T02:16:39.4790750Z ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4790939Z ยท โฐโโ Passing a ref to a function may read its value during render
2026-10-25T02:16:39.4791030Z 212 โ ) as NativeStackNavigationOptions)
2026-10-25T02:16:39.4791082Z โฐโโโโ
2026-10-25T02:16:39.4791589Z 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-25T02:16:39.4791911Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4791914Z
2026-10-25T02:16:39.4792112Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4792245Z โญโ[apps/mobile/src/features/review/ReviewSheet.tsx:454:7]
2026-10-25T02:16:39.4792328Z 453 โ showAuxiliaryPane("inspector");
2026-10-25T02:16:39.4792433Z 454 โ }, [environmentId, showAuxiliaryPane, threadId]);
2026-10-25T02:16:39.4792576Z ยท โโโโโโโฌโโโโโโ โโโโโฌโโโ
2026-10-25T02:16:39.4792778Z ยท โ โฐโโ Unnecessary dependency `threadId`
2026-10-25T02:16:39.4792928Z ยท โฐโโ Unnecessary dependency `environmentId`
2026-10-25T02:16:39.4792986Z 455 โ const {
2026-10-25T02:16:39.4793037Z โฐโโโโ
2026-10-25T02:16:39.4793324Z 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-25T02:16:39.4793626Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4793628Z
2026-10-25T02:16:39.4793809Z โ react(static-components): Cannot create components during render
2026-10-25T02:16:39.4793939Z โญโ[apps/mobile/src/features/review/ReviewSheet.tsx:725:20]
2026-10-25T02:16:39.4794007Z 492 โ // same check.
2026-10-25T02:16:39.4794136Z 493 โ const NativeReviewDiffView = resolveNativeReviewDiffView();
2026-10-25T02:16:39.4794264Z ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
2026-10-25T02:16:39.4794473Z ยท โฐโโ The component is created during render here
2026-10-25T02:16:39.4794624Z 494 โ const nativeReviewDiffViewRef = useRef<NativeReviewDiffViewHandle>(null);
2026-10-25T02:16:39.4794743Z 495 โ const showcasedReviewDrawRef = useRef<string | null>(null);
2026-10-25T02:16:39.4794872Z 496 โ const [isPullRefreshing, setIsPullRefreshing] = useState(false);
2026-10-25T02:16:39.4794961Z 497 โ const handlePullToRefresh = async () => {
2026-10-25T02:16:39.4795038Z 498 โ setIsPullRefreshing(true);
2026-10-25T02:16:39.4795121Z 499 โ await refreshSelectedSection();
2026-10-25T02:16:39.4795201Z 500 โ setIsPullRefreshing(false);
2026-10-25T02:16:39.4795255Z 501 โ };
2026-10-25T02:16:39.4795398Z 502 โ const reviewFileNavigatorRef = useRef<ReviewFileNavigatorHandle>(null);
2026-10-25T02:16:39.4795539Z 503 โ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : [];
2026-10-25T02:16:39.4795644Z 504 โ const fileVisibility = useReviewFileVisibility({
2026-10-25T02:16:39.4795727Z 505 โ threadKey: reviewCache.threadKey,
2026-10-25T02:16:39.4795817Z 506 โ sectionId: selectedSection?.id ?? null,
2026-10-25T02:16:39.4795885Z 507 โ files: reviewFiles,
2026-10-25T02:16:39.4795983Z 508 โ cachedExpandedFileIds: selectedSection?.id
2026-10-25T02:16:39.4796111Z 509 โ ? reviewCache.expandedFileIdsBySection[selectedSection.id]
2026-10-25T02:16:39.4796174Z 510 โ : undefined,
2026-10-25T02:16:39.4796315Z 511 โ cachedViewedFileIds: selectedSection?.id
2026-10-25T02:16:39.4796464Z 512 โ ? reviewCache.viewedFileIdsBySection[selectedSection.id]
2026-10-25T02:16:39.4796525Z 513 โ : undefined,
2026-10-25T02:16:39.4796580Z 514 โ });
2026-10-25T02:16:39.4796767Z 515 โ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility;
2026-10-25T02:16:39.4796899Z 516 โ const commentSelection = useReviewCommentSelectionController({
2026-10-25T02:16:39.4796960Z 517 โ environmentId,
2026-10-25T02:16:39.4797022Z 518 โ threadId,
2026-10-25T02:16:39.4797087Z 519 โ selectedSection,
2026-10-25T02:16:39.4797155Z 520 โ nativeReviewDiffData,
2026-10-25T02:16:39.4797211Z 521 โ });
2026-10-25T02:16:39.4797316Z 522 โ const nativeBridge = useNativeReviewDiffBridge({
2026-10-25T02:16:39.4797401Z 523 โ threadKey: reviewCache.threadKey,
2026-10-25T02:16:39.4797492Z 524 โ sectionId: selectedSection?.id ?? null,
2026-10-25T02:16:39.4797572Z 525 โ diff: selectedSection?.diff,
2026-10-25T02:16:39.4797649Z 526 โ data: nativeReviewDiffData,
2026-10-25T02:16:39.4797716Z 527 โ collapsedFileIds,
2026-10-25T02:16:39.4797776Z 528 โ viewedFileIds,
2026-10-25T02:16:39.4797886Z 529 โ selectedRowIds: commentSelection.selectedRowIds,
2026-10-25T02:16:39.4800032Z 530 โ canHighlight: parsedDiff.kind === "files",
2026-10-25T02:16:39.4800096Z 531 โ });
2026-10-25T02:16:39.4800170Z 532 โ const showcaseReviewKey =
2026-10-25T02:16:39.4800302Z 533 โ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection
2026-10-25T02:16:39.4800507Z 534 โ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}`
2026-10-25T02:16:39.4800568Z 535 โ : null;
2026-10-25T02:16:39.4800739Z 536 โ const handleNativeDebug = (event: NativeSyntheticEvent<Record<string, unknown>>) => {
2026-10-25T02:16:39.4800818Z 537 โ nativeBridge.onDebug(event);
2026-10-25T02:16:39.4800873Z 538 โ if (
2026-10-25T02:16:39.4800952Z 539 โ showcaseReviewKey === null ||
2026-10-25T02:16:39.4801072Z 540 โ showcasedReviewDrawRef.current === showcaseReviewKey ||
2026-10-25T02:16:39.4801179Z 541 โ !isNativeReviewDiffDrawEvent(event.nativeEvent)
2026-10-25T02:16:39.4801232Z 542 โ ) {
2026-10-25T02:16:39.4801292Z 543 โ return;
2026-10-25T02:16:39.4801345Z 544 โ }
2026-10-25T02:16:39.4801454Z 545 โ showcasedReviewDrawRef.current = showcaseReviewKey;
2026-10-25T02:16:39.4801613Z 546 โ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId });
2026-10-25T02:16:39.4801666Z 547 โ };
2026-10-25T02:16:39.4801717Z 548 โ
2026-10-25T02:16:39.4801837Z 549 โ const handleSelectFile = async (fileId: string | null) => {
2026-10-25T02:16:39.4801918Z 550 โ loadVisibleFile(fileId, true);
2026-10-25T02:16:39.4802005Z 551 โ commentSelection.clearSelection();
2026-10-25T02:16:39.4802122Z 552 โ if (fileId !== null && collapsedFileIds.includes(fileId)) {
2026-10-25T02:16:39.4802198Z 553 โ toggleExpandedFile(fileId);
2026-10-25T02:16:39.4802251Z 554 โ }
2026-10-25T02:16:39.4802360Z 555 โ const nativeView = nativeReviewDiffViewRef.current;
2026-10-25T02:16:39.4802429Z 556 โ if (!nativeView) return;
2026-10-25T02:16:39.4802519Z 557 โ const result = await settlePromise(() =>
2026-10-25T02:16:39.4802690Z 558 โ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true),
2026-10-25T02:16:39.4802745Z 559 โ );
2026-10-25T02:16:39.4802833Z 560 โ if (AsyncResult.isFailure(result)) {
2026-10-25T02:16:39.4803093Z 561 โ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result));
2026-10-25T02:16:39.4803177Z 562 โ }
2026-10-25T02:16:39.4803230Z 563 โ };
2026-10-25T02:16:39.4803311Z 564 โ const handleVisibleFileChange = (
2026-10-25T02:16:39.4803439Z 565 โ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>,
2026-10-25T02:16:39.4803496Z 566 โ ) => {
2026-10-25T02:16:39.4803604Z 567 โ loadVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-25T02:16:39.4803773Z 568 โ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null);
2026-10-25T02:16:39.4803824Z 569 โ };
2026-10-25T02:16:39.4803902Z 570 โ const renderInspector = () => (
2026-10-25T02:16:39.4803972Z 571 โ <ReviewFileNavigator
2026-10-25T02:16:39.4804051Z 572 โ ref={reviewFileNavigatorRef}
2026-10-25T02:16:39.4804142Z 573 โ files={nativeReviewDiffData.files}
2026-10-25T02:16:39.4804230Z 574 โ headerInset={insets.top}
2026-10-25T02:16:39.4804350Z 575 โ sectionId={selectedSection?.id ?? null}
2026-10-25T02:16:39.4804468Z 576 โ onSelectFile={(fileId) => void handleSelectFile(fileId)}
2026-10-25T02:16:39.4804521Z 577 โ />
2026-10-25T02:16:39.4804574Z 578 โ );
2026-10-25T02:16:39.4804626Z 579 โ
2026-10-25T02:16:39.4804806Z 580 โ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => {
2026-10-25T02:16:39.4804891Z 581 โ const { fileId } = event.nativeEvent;
2026-10-25T02:16:39.4804954Z 582 โ if (fileId) {
2026-10-25T02:16:39.4805033Z 583 โ loadVisibleFile(fileId, true);
2026-10-25T02:16:39.4805109Z 584 โ toggleExpandedFile(fileId);
2026-10-25T02:16:39.4805162Z 585 โ }
2026-10-25T02:16:39.4805218Z 586 โ };
2026-10-25T02:16:39.4805270Z 587 โ
2026-10-25T02:16:39.4805361Z 588 โ const handleNativeToggleViewedFile = (
2026-10-25T02:16:39.4805480Z 589 โ event: NativeSyntheticEvent<{ readonly fileId?: string }>,
2026-10-25T02:16:39.4805536Z 590 โ ) => {
2026-10-25T02:16:39.4805620Z 591 โ const { fileId } = event.nativeEvent;
2026-10-25T02:16:39.4805680Z 592 โ if (fileId) {
2026-10-25T02:16:39.4805754Z 593 โ toggleViewedFile(fileId);
2026-10-25T02:16:39.4805808Z 594 โ }
2026-10-25T02:16:39.4805861Z 595 โ };
2026-10-25T02:16:39.4805911Z 596 โ
2026-10-25T02:16:39.4805980Z 597 โ const parsedDiffNotice =
2026-10-25T02:16:39.4806139Z 598 โ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null;
2026-10-25T02:16:39.4806260Z 599 โ const hasCachedSelectedDiff = selectedSection?.diff != null;
2026-10-25T02:16:39.4806419Z 600 โ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null);
2026-10-25T02:16:39.4806541Z 601 โ const sectionMenu = buildReviewSectionMenu(reviewSections);
2026-10-25T02:16:39.4806697Z 602 โ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({
2026-10-25T02:16:39.4806806Z 603 โ hasEnvironmentPresentation: environment.isReady,
2026-10-25T02:16:39.4806904Z 604 โ isEnvironmentConnected: isEnvironmentReady,
2026-10-25T02:16:39.4806974Z 605 โ hasCachedSelectedDiff,
2026-10-25T02:16:39.4807039Z 606 โ hasAnyCachedDiff,
2026-10-25T02:16:39.4807091Z 607 โ });
2026-10-25T02:16:39.4807179Z 608 โ const handleRetryEnvironment = () => {
2026-10-25T02:16:39.4807264Z 609 โ void retryEnvironment(environmentId);
2026-10-25T02:16:39.4807317Z 610 โ };
2026-10-25T02:16:39.4807398Z 611 โ const handleReturnToThread = () => {
2026-10-25T02:16:39.4807474Z 612 โ if (navigation.canGoBack()) {
2026-10-25T02:16:39.4807590Z 613 โ navigation.goBack();
2026-10-25T02:16:39.4807680Z 614 โ return;
2026-10-25T02:16:39.4807730Z 615 โ }
2026-10-25T02:16:39.4807809Z 616 โ navigation.navigate("Thread", {
2026-10-25T02:16:39.4807895Z 617 โ environmentId: String(environmentId),
2026-10-25T02:16:39.4807970Z 618 โ threadId: String(threadId),
2026-10-25T02:16:39.4808024Z 619 โ });
2026-10-25T02:16:39.4808076Z 620 โ };
2026-10-25T02:16:39.4808156Z 621 โ const androidHeaderSubtitle = [
2026-10-25T02:16:39.4808228Z 622 โ selectedSection?.title,
2026-10-25T02:16:39.4808305Z 623 โ headerDiffSummary.additions,
2026-10-25T02:16:39.4808383Z 624 โ headerDiffSummary.deletions,
2026-10-25T02:16:39.4808434Z 625 โ ]
2026-10-25T02:16:39.4808536Z 626 โ .filter((part): part is string => Boolean(part))
2026-10-25T02:16:39.4808606Z 627 โ .join(" ยท ");
2026-10-25T02:16:39.4808660Z 628 โ
2026-10-25T02:16:39.4808737Z 629 โ const showChangedFilesPane =
2026-10-25T02:16:39.4808807Z 630 โ !showConnectionNotice &&
2026-10-25T02:16:39.4808879Z 631 โ selectedSection !== null &&
2026-10-25T02:16:39.4808956Z 632 โ parsedDiff.kind === "files" &&
2026-10-25T02:16:39.4809033Z 633 โ NativeReviewDiffView !== null;
2026-10-25T02:16:39.4809198Z 634 โ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined);
2026-10-25T02:16:39.4809367Z 635 โ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane;
2026-10-25T02:16:39.4809418Z 636 โ
2026-10-25T02:16:39.4809488Z 637 โ const listHeader = (() => {
2026-10-25T02:16:39.4809570Z 638 โ const children: ReactElement[] = [];
2026-10-25T02:16:39.4809623Z 639 โ
2026-10-25T02:16:39.4809685Z 640 โ if (error) {
2026-10-25T02:16:39.4809757Z 641 โ children.push(
2026-10-25T02:16:39.4809817Z 642 โ <View
2026-10-25T02:16:39.4809888Z 643 โ key="review-error"
2026-10-25T02:16:39.4809952Z 644 โ className={cn(
2026-10-25T02:16:39.4810027Z 645 โ "bg-card px-4 py-3",
2026-10-25T02:16:39.4810177Z 646 โ Platform.OS === "android" ? "m-2 rounded-[20px]" : "border-b border-border",
2026-10-25T02:16:39.4810237Z 647 โ )}
2026-10-25T02:16:39.4810292Z 648 โ >
2026-10-25T02:16:39.4810449Z 649 โ <Text className="text-sm font-t3-bold text-foreground">Review unavailable</Text>
2026-10-25T02:16:39.4810604Z 650 โ <Text className="text-xs leading-normal text-foreground-muted">{error}</Text>
2026-10-25T02:16:39.4810664Z 651 โ </View>,
2026-10-25T02:16:39.4810719Z 652 โ );
2026-10-25T02:16:39.4810770Z 653 โ }
2026-10-25T02:16:39.4810828Z 654 โ
2026-10-25T02:16:39.4810902Z 655 โ if (parsedDiffNotice) {
2026-10-25T02:16:39.4811058Z 656 โ children.push(<ReviewNotice key="review-notice" notice={parsedDiffNotice} />);
2026-10-25T02:16:39.4811110Z 657 โ }
2026-10-25T02:16:39.4811162Z 658 โ
2026-10-25T02:16:39.4811238Z 659 โ if (children.length === 0) {
2026-10-25T02:16:39.4811302Z 660 โ return null;
2026-10-25T02:16:39.4811353Z 661 โ }
2026-10-25T02:16:39.4811405Z 662 โ
2026-10-25T02:16:39.4811473Z 663 โ return <>{children}</>;
2026-10-25T02:16:39.4811528Z 664 โ })();
2026-10-25T02:16:39.4811595Z 665 โ const headerSubtitle = [
2026-10-25T02:16:39.4811672Z 666 โ headerDiffSummary.additions,
2026-10-25T02:16:39.4811748Z 667 โ headerDiffSummary.deletions,
2026-10-25T02:16:39.4811825Z 668 โ pendingReviewCommentCount > 0
2026-10-25T02:16:39.4812046Z 669 โ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}`
2026-10-25T02:16:39.4812137Z 670 โ : null,
2026-10-25T02:16:39.4812189Z 671 โ ]
2026-10-25T02:16:39.4812253Z 672 โ .filter(Boolean)
2026-10-25T02:16:39.4812315Z 673 โ .join(" ยท ");
2026-10-25T02:16:39.4812447Z 674 โ const headerTitleText = selectedSection?.title ?? "Review changes";
2026-10-25T02:16:39.4812498Z 675 โ
2026-10-25T02:16:39.4812555Z 676 โ return (
2026-10-25T02:16:39.4812610Z 677 โ <>
2026-10-25T02:16:39.4812674Z 678 โ <ReviewHeader
2026-10-25T02:16:39.4812761Z 679 โ environmentId={environmentId}
2026-10-25T02:16:39.4812829Z 680 โ threadId={threadId}
2026-10-25T02:16:39.4812902Z 681 โ title={headerTitleText}
2026-10-25T02:16:39.4812976Z 682 โ subtitle={headerSubtitle}
2026-10-25T02:16:39.4813079Z 683 โ androidSubtitle={androidHeaderSubtitle}
2026-10-25T02:16:39.4813152Z 684 โ iconColor={headerIcon}
2026-10-25T02:16:39.4813245Z 685 โ selectedThreadCwd={selectedThreadCwd}
2026-10-25T02:16:39.4813321Z 686 โ sectionMenu={sectionMenu}
2026-10-25T02:16:39.4813403Z 687 โ selectedSection={selectedSection}
2026-10-25T02:16:39.4813498Z 688 โ showSectionToolbar={showSectionToolbar}
2026-10-25T02:16:39.4813606Z 689 โ showChangedFilesToggle={showChangedFilesToggle}
2026-10-25T02:16:39.4813690Z 690 โ onRefresh={handlePullToRefresh}
2026-10-25T02:16:39.4813768Z 691 โ onSelectSection={selectSection}
2026-10-25T02:16:39.4813863Z 692 โ onReturnToThread={handleReturnToThread}
2026-10-25T02:16:39.4813919Z 693 โ />
2026-10-25T02:16:39.4813971Z 694 โ
2026-10-25T02:16:39.4814034Z 695 โ <ScreenContent>
2026-10-25T02:16:39.4814159Z 696 โ <View className="flex-1 bg-sheet android:bg-sheet-solid">
2026-10-25T02:16:39.4814273Z 697 โ {showConnectionNotice ? (
2026-10-25T02:16:39.4814410Z 698 โ <View className="flex-1" style={{ paddingTop: topContentInset }}>
2026-10-25T02:16:39.4814496Z 699 โ <EnvironmentConnectionNotice
2026-10-25T02:16:39.4814669Z 700 โ environmentLabel={environment.presentation?.entry.target.label ?? "Environment"}
2026-10-25T02:16:39.4814737Z 701 โ connection={
2026-10-25T02:16:39.4814841Z 702 โ environment.presentation?.connection ?? {
2026-10-25T02:16:39.4814919Z 703 โ phase: "available",
2026-10-25T02:16:39.4814990Z 704 โ error: null,
2026-10-25T02:16:39.4815062Z 705 โ traceId: null,
2026-10-25T02:16:39.4815125Z 706 โ }
2026-10-25T02:16:39.4815182Z 707 โ }
2026-10-25T02:16:39.4815265Z 708 โ resourceName="review"
2026-10-25T02:16:39.4815361Z 709 โ onRetry={handleRetryEnvironment}
2026-10-25T02:16:39.4815420Z 710 โ />
2026-10-25T02:16:39.4815480Z 711 โ </View>
2026-10-25T02:16:39.4815631Z 712 โ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? (
2026-10-25T02:16:39.4815694Z 713 โ <View
2026-10-25T02:16:39.4815765Z 714 โ className="flex-1"
2026-10-25T02:16:39.4815828Z 715 โ style={{
2026-10-25T02:16:39.4815943Z 716 โ backgroundColor: nativeBridge.theme.background,
2026-10-25T02:16:39.4816002Z 717 โ }}
2026-10-25T02:16:39.4816061Z 718 โ >
2026-10-25T02:16:39.4816120Z 719 โ <View
2026-10-25T02:16:39.4816205Z 720 โ className="min-w-0 flex-1"
2026-10-25T02:16:39.4816390Z 721 โ style={listHeader ? { paddingTop: topContentInset } : undefined}
2026-10-25T02:16:39.4816485Z 722 โ >
2026-10-25T02:16:39.4816552Z 723 โ {listHeader}
2026-10-25T02:16:39.4816671Z 724 โ <View className="min-w-0 flex-1" collapsable={false}>
2026-10-25T02:16:39.4816753Z 725 โ <NativeReviewDiffView
2026-10-25T02:16:39.4816858Z ยท โโโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4817028Z ยท โฐโโ This component is created during render
2026-10-25T02:16:39.4817108Z 726 โ collapsable={false}
2026-10-25T02:16:39.4817161Z โฐโโโโ
2026-10-25T02:16:39.4817406Z help: Components created during render will reset their state each time they are created. Declare components outside of render
2026-10-25T02:16:39.4817729Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components
2026-10-25T02:16:39.4817735Z
2026-10-25T02:16:39.4817965Z โ unicorn(no-useless-spread): Using a spread operator here creates a new array unnecessarily.
2026-10-25T02:16:39.4818103Z โญโ[apps/mobile/src/native/native-layout-metrics.tsx:43:27]
2026-10-25T02:16:39.4818171Z 42 โ latestMetrics = next;
2026-10-25T02:16:39.4818279Z 43 โ for (const settle of [...metricsWaiters]) settle(next);
2026-10-25T02:16:39.4818364Z ยท โโโ
2026-10-25T02:16:39.4818431Z 44 โ setMetrics(next);
2026-10-25T02:16:39.4818484Z โฐโโโโ
2026-10-25T02:16:39.4818663Z help: `forโฆof` can iterate over iterable, it's unnecessary to convert to an array.
2026-10-25T02:16:39.4818672Z
2026-10-25T02:16:39.4819134Z โ 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-25T02:16:39.4819310Z โญโ[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5]
2026-10-25T02:16:39.4819380Z 222 โ let idlePasses = 0;
2026-10-25T02:16:39.4819524Z 223 โ โญโโถ for (;;) {
2026-10-25T02:16:39.4819659Z 224 โ โ yield* Effect.promise(() => Promise.resolve());
2026-10-25T02:16:39.4819803Z 225 โ โ const pending = backgroundRuntime.pending.shift();
2026-10-25T02:16:39.4819901Z 226 โ โ if (!pending) {
2026-10-25T02:16:39.4819998Z 227 โ โ idlePasses++;
2026-10-25T02:16:39.4820103Z 228 โ โ if (idlePasses >= 3) {
2026-10-25T02:16:39.4820187Z 229 โ โ return;
2026-10-25T02:16:39.4820263Z 230 โ โ }
2026-10-25T02:16:39.4820347Z 231 โ โ continue;
2026-10-25T02:16:39.4820421Z 232 โ โ }
2026-10-25T02:16:39.4820513Z 233 โ โ idlePasses = 0;
2026-10-25T02:16:39.4820626Z 234 โ โ const exit = yield* Effect.exit(
2026-10-25T02:16:39.4820836Z 235 โ โ pending.operation as Effect.Effect<unknown, unknown, ManagedRelay.ManagedRelayClient>,
2026-10-25T02:16:39.4820910Z 236 โ โ );
2026-10-25T02:16:39.4821061Z 237 โ โ yield* Effect.sync(() => {
2026-10-25T02:16:39.4821193Z 238 โ โ pending.resolve(exit);
2026-10-25T02:16:39.4821268Z 239 โ โ });
2026-10-25T02:16:39.4821393Z 240 โ โฐโโถ }
2026-10-25T02:16:39.4821449Z 241 โ },
2026-10-25T02:16:39.4821501Z โฐโโโโ
2026-10-25T02:16:39.4821504Z
2026-10-25T02:16:39.4821703Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4821845Z โญโ[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7]
2026-10-25T02:16:39.4821939Z 256 โ return () => cancelAnimationFrame(frame);
2026-10-25T02:16:39.4822017Z 257 โ }, [props.path, targetIndex]);
2026-10-25T02:16:39.4822093Z ยท โโโโโโฌโโโโ
2026-10-25T02:16:39.4822241Z ยท โฐโโ Unnecessary dependency `props.path`
2026-10-25T02:16:39.4822296Z 258 โ
2026-10-25T02:16:39.4822350Z โฐโโโโ
2026-10-25T02:16:39.4822642Z 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-25T02:16:39.4822948Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4822951Z
2026-10-25T02:16:39.4823143Z โ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:16:39.4823287Z โญโ[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23]
2026-10-25T02:16:39.4823358Z 292 โ <SourceText
2026-10-25T02:16:39.4823457Z 293 โ key={`${index}:${tokenIndex}`}
2026-10-25T02:16:39.4823576Z ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4823644Z 294 โ style={{
2026-10-25T02:16:39.4823694Z โฐโโโโ
2026-10-25T02:16:39.4823837Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:16:39.4823840Z
2026-10-25T02:16:39.4824026Z โ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:16:39.4824168Z โญโ[apps/mobile/src/features/files/SourceFileSurface.tsx:309:27]
2026-10-25T02:16:39.4824244Z 308 โ return (
2026-10-25T02:16:39.4824353Z 309 โ <SourceText key={index}>
2026-10-25T02:16:39.4824451Z ยท โโโโโโโโโโโ
2026-10-25T02:16:39.4824563Z 310 โ {body}
2026-10-25T02:16:39.4824643Z โฐโโโโ
2026-10-25T02:16:39.4824783Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:16:39.4824788Z
2026-10-25T02:16:39.4825040Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4825214Z โญโ[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5]
2026-10-25T02:16:39.4825267Z 58 โ
2026-10-25T02:16:39.4825329Z 59 โ useEffect(() => {
2026-10-25T02:16:39.4825397Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4825526Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4825606Z 60 โ setMountedModes((current) => {
2026-10-25T02:16:39.4825682Z ยท โโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.4825856Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4825939Z 61 โ if (current.has(props.mode)) {
2026-10-25T02:16:39.4825991Z โฐโโโโ
2026-10-25T02:16:39.4826580Z 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-25T02:16:39.4826895Z 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-25T02:16:39.4826897Z
2026-10-25T02:16:39.4827357Z โ 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-25T02:16:39.4827490Z โญโ[packages/client-runtime/src/rpc/client.test.ts:131:9]
2026-10-25T02:16:39.4827551Z 130 โ ) {
2026-10-25T02:16:39.4827758Z 131 โ โญโโถ for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-25T02:16:39.4827879Z 132 โ โ if (subscriptions.length >= count) {
2026-10-25T02:16:39.4827969Z 133 โ โ return;
2026-10-25T02:16:39.4828052Z 134 โ โ }
2026-10-25T02:16:39.4828159Z 135 โ โ yield* Effect.yieldNow;
2026-10-25T02:16:39.4828289Z 136 โ โฐโโถ }
2026-10-25T02:16:39.4828456Z 137 โ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`));
2026-10-25T02:16:39.4828511Z โฐโโโโ
2026-10-25T02:16:39.4828514Z
2026-10-25T02:16:39.4828967Z โ 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-25T02:16:39.4829097Z โญโ[packages/client-runtime/src/rpc/client.test.ts:252:7]
2026-10-25T02:16:39.4829255Z 251 โ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient)));
2026-10-25T02:16:39.4829504Z 252 โ โญโโถ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) {
2026-10-25T02:16:39.4829653Z 253 โ โ yield* Effect.yieldNow;
2026-10-25T02:16:39.4829811Z 254 โ โฐโโถ }
2026-10-25T02:16:39.4829931Z 255 โ yield* SubscriptionRef.set(activeSession, Option.none());
2026-10-25T02:16:39.4829982Z โฐโโโโ
2026-10-25T02:16:39.4829984Z
2026-10-25T02:16:39.4830428Z โ 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-25T02:16:39.4830555Z โญโ[packages/client-runtime/src/rpc/client.test.ts:258:7]
2026-10-25T02:16:39.4830611Z 257 โ
2026-10-25T02:16:39.4830921Z 258 โ โญโโถ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-25T02:16:39.4831026Z 259 โ โ yield* Effect.yieldNow;
2026-10-25T02:16:39.4831156Z 260 โ โฐโโถ }
2026-10-25T02:16:39.4831258Z 261 โ yield* Fiber.interrupt(subscriptionFiber);
2026-10-25T02:16:39.4831308Z โฐโโโโ
2026-10-25T02:16:39.4831311Z
2026-10-25T02:16:39.4831757Z โ 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-25T02:16:39.4831882Z โญโ[packages/client-runtime/src/rpc/client.test.ts:322:7]
2026-10-25T02:16:39.4831942Z 321 โ );
2026-10-25T02:16:39.4832196Z 322 โ โญโโถ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) {
2026-10-25T02:16:39.4832299Z 323 โ โ yield* Effect.yieldNow;
2026-10-25T02:16:39.4832424Z 324 โ โฐโโถ }
2026-10-25T02:16:39.4832477Z 325 โ
2026-10-25T02:16:39.4832526Z โฐโโโโ
2026-10-25T02:16:39.4832529Z
2026-10-25T02:16:39.4832970Z โ 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-25T02:16:39.4833096Z โญโ[packages/client-runtime/src/rpc/client.test.ts:330:7]
2026-10-25T02:16:39.4833256Z 329 โ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient)));
2026-10-25T02:16:39.4833500Z 330 โ โญโโถ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) {
2026-10-25T02:16:39.4833728Z 331 โ โ yield* Effect.yieldNow;
2026-10-25T02:16:39.4833853Z 332 โ โฐโโถ }
2026-10-25T02:16:39.4833953Z 333 โ yield* Fiber.interrupt(subscriptionFiber);
2026-10-25T02:16:39.4834003Z โฐโโโโ
2026-10-25T02:16:39.4834005Z
2026-10-25T02:16:39.4834481Z โ 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-25T02:16:39.4834612Z โญโ[packages/client-runtime/src/rpc/session.test.ts:226:3]
2026-10-25T02:16:39.4834668Z 225 โ ) {
2026-10-25T02:16:39.4834926Z 226 โ โญโโถ for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-25T02:16:39.4835077Z 227 โ โ const socket = sockets[index];
2026-10-25T02:16:39.4835162Z 228 โ โ if (socket) {
2026-10-25T02:16:39.4835256Z 229 โ โ return socket;
2026-10-25T02:16:39.4835326Z 230 โ โ }
2026-10-25T02:16:39.4835426Z 231 โ โ yield* Effect.yieldNow;
2026-10-25T02:16:39.4835547Z 232 โ โฐโโถ }
2026-10-25T02:16:39.4835720Z 233 โ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket."));
2026-10-25T02:16:39.4835769Z โฐโโโโ
2026-10-25T02:16:39.4835772Z
2026-10-25T02:16:39.4836221Z โ 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-25T02:16:39.4836353Z โญโ[packages/client-runtime/src/rpc/session.test.ts:240:3]
2026-10-25T02:16:39.4836407Z 239 โ ) {
2026-10-25T02:16:39.4836601Z 240 โ โญโโถ for (let attempt = 0; attempt < 100; attempt += 1) {
2026-10-25T02:16:39.4836809Z 241 โ โ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index];
2026-10-25T02:16:39.4836899Z 242 โ โ if (request) {
2026-10-25T02:16:39.4836990Z 243 โ โ return request;
2026-10-25T02:16:39.4837060Z 244 โ โ }
2026-10-25T02:16:39.4837164Z 245 โ โ yield* Effect.yieldNow;
2026-10-25T02:16:39.4837288Z 246 โ โฐโโถ }
2026-10-25T02:16:39.4837452Z 247 โ return yield* Effect.die(new Error("Expected the RPC protocol to send a request."));
2026-10-25T02:16:39.4837501Z โฐโโโโ
2026-10-25T02:16:39.4837505Z
2026-10-25T02:16:39.4837693Z โ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:16:39.4837835Z โญโ[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9]
2026-10-25T02:16:39.4837921Z 35 โ <T3SourceTextRunNativeComponent
2026-10-25T02:16:39.4837983Z 36 โ key={index}
2026-10-25T02:16:39.4838059Z ยท โโโโโโโโโโโ
2026-10-25T02:16:39.4838132Z 37 โ style={flattenedStyle}
2026-10-25T02:16:39.4838182Z โฐโโโโ
2026-10-25T02:16:39.4838331Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:16:39.4838337Z
2026-10-25T02:16:39.4838490Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4838644Z โญโ[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7]
2026-10-25T02:16:39.4838737Z 53 โ function usePulseAnimation(pulse: boolean) {
2026-10-25T02:16:39.4838826Z 54 โ const pulseProgress = useSharedValue(0);
2026-10-25T02:16:39.4838903Z ยท โโโโโโโฌโโโโโโ
2026-10-25T02:16:39.4839042Z ยท โฐโโ `pulseProgress` originates here
2026-10-25T02:16:39.4839093Z 55 โ
2026-10-25T02:16:39.4839156Z 56 โ useEffect(() => {
2026-10-25T02:16:39.4839216Z 57 โ if (pulse) {
2026-10-25T02:16:39.4839301Z 58 โ pulseProgress.value = withRepeat(
2026-10-25T02:16:39.4839425Z ยท โโโโโโโฌโโโโโโ
2026-10-25T02:16:39.4839594Z ยท โฐโโ `pulseProgress` cannot be modified
2026-10-25T02:16:39.4839661Z 59 โ withTiming(1, {
2026-10-25T02:16:39.4839711Z โฐโโโโ
2026-10-25T02:16:39.4839971Z 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-25T02:16:39.4840273Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4840276Z
2026-10-25T02:16:39.4840528Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4840700Z โญโ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:124:7]
2026-10-25T02:16:39.4840753Z 119 โ
2026-10-25T02:16:39.4840817Z 120 โ useEffect(() => {
2026-10-25T02:16:39.4840886Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4841012Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4841094Z 121 โ if (orientationSettled) return;
2026-10-25T02:16:39.4841205Z 122 โ const orientation = getNativeShowcaseOrientation();
2026-10-25T02:16:39.4841277Z 123 โ if (orientation === null) {
2026-10-25T02:16:39.4841355Z 124 โ setOrientationSettled(true);
2026-10-25T02:16:39.4841443Z ยท โโโโโโโโโโโฌโโโโโโโโโโ
2026-10-25T02:16:39.4841612Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4841672Z 125 โ return;
2026-10-25T02:16:39.4841722Z โฐโโโโ
2026-10-25T02:16:39.4842310Z 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-25T02:16:39.4842628Z 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-25T02:16:39.4842631Z
2026-10-25T02:16:39.4842882Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4843045Z โญโ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:300:7]
2026-10-25T02:16:39.4843097Z 288 โ
2026-10-25T02:16:39.4843166Z 289 โ useEffect(() => {
2026-10-25T02:16:39.4843238Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4843361Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4843418Z 290 โ if (
2026-10-25T02:16:39.4843483Z 291 โ scene === null ||
2026-10-25T02:16:39.4843558Z 292 โ requestedScene === null ||
2026-10-25T02:16:39.4843631Z 293 โ scene !== requestedScene ||
2026-10-25T02:16:39.4843694Z 294 โ !hasFixture ||
2026-10-25T02:16:39.4843764Z 295 โ !orientationSettled ||
2026-10-25T02:16:39.4843829Z 296 โ !themeApplied ||
2026-10-25T02:16:39.4843943Z 297 โ (scene === "agent-activity" && !agentActivityStaged) ||
2026-10-25T02:16:39.4844075Z 298 โ !isShowcaseNativeContentReady({ scene, themeId, renderSignal })
2026-10-25T02:16:39.4844130Z 299 โ ) {
2026-10-25T02:16:39.4844253Z 300 โ setReadyScene(null);
2026-10-25T02:16:39.4844389Z ยท โโโโโโโฌโโโโโโ
2026-10-25T02:16:39.4844557Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4844617Z 301 โ return;
2026-10-25T02:16:39.4844666Z โฐโโโโ
2026-10-25T02:16:39.4845246Z 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-25T02:16:39.4845560Z 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-25T02:16:39.4845563Z
2026-10-25T02:16:39.4845832Z โ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:16:39.4846001Z โญโ[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:129:9]
2026-10-25T02:16:39.4846068Z 128 โ let cancelled = false;
2026-10-25T02:16:39.4846157Z 129 โ let lastOutcome: string | null = null;
2026-10-25T02:16:39.4846234Z ยท โโโโโโฌโโโโโ
2026-10-25T02:16:39.4846366Z ยท โฐโโ 'lastOutcome' is declared here
2026-10-25T02:16:39.4846540Z 130 โ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), {
2026-10-25T02:16:39.4846591Z โฐโโโโ
2026-10-25T02:16:39.4846693Z help: Consider removing this declaration.
2026-10-25T02:16:39.4846695Z
2026-10-25T02:16:39.4846899Z โ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used.
2026-10-25T02:16:39.4847032Z โญโ[packages/client-runtime/src/state/usageAccess.ts:3:8]
2026-10-25T02:16:39.4847103Z 2 โ AuthDiagnosticsReadScope,
2026-10-25T02:16:39.4847171Z 3 โ type AuthSessionState,
2026-10-25T02:16:39.4847252Z ยท โโโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.4847392Z ยท โฐโโ 'AuthSessionState' is imported here
2026-10-25T02:16:39.4847459Z 4 โ sessionGrantsScope,
2026-10-25T02:16:39.4847509Z โฐโโโโ
2026-10-25T02:16:39.4847605Z help: Consider removing this import.
2026-10-25T02:16:39.4847607Z
2026-10-25T02:16:39.4847858Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4848070Z โญโ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:82:5]
2026-10-25T02:16:39.4848149Z 79 โ
2026-10-25T02:16:39.4848212Z 80 โ useEffect(() => {
2026-10-25T02:16:39.4848281Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4848407Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4848532Z 81 โ const { host, code } = parsePairingUrl(connectionPairingUrl);
2026-10-25T02:16:39.4848597Z 82 โ setHostInput(host);
2026-10-25T02:16:39.4848670Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4848833Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4848898Z 83 โ setCodeInput(code);
2026-10-25T02:16:39.4848948Z โฐโโโโ
2026-10-25T02:16:39.4849538Z 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-25T02:16:39.4849854Z 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-25T02:16:39.4849856Z
2026-10-25T02:16:39.4850117Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4850283Z โญโ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:92:5]
2026-10-25T02:16:39.4850335Z 85 โ
2026-10-25T02:16:39.4850395Z 86 โ useEffect(() => {
2026-10-25T02:16:39.4850464Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4850591Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4850681Z 87 โ if (routePairingUrl.length === 0) {
2026-10-25T02:16:39.4850739Z 88 โ return;
2026-10-25T02:16:39.4850792Z 89 โ }
2026-10-25T02:16:39.4850842Z 90 โ
2026-10-25T02:16:39.4850956Z 91 โ const { host, code } = parsePairingUrl(routePairingUrl);
2026-10-25T02:16:39.4851019Z 92 โ setHostInput(host);
2026-10-25T02:16:39.4851093Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4851256Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4851320Z 93 โ setCodeInput(code);
2026-10-25T02:16:39.4851369Z โฐโโโโ
2026-10-25T02:16:39.4851954Z 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-25T02:16:39.4852270Z 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-25T02:16:39.4852272Z
2026-10-25T02:16:39.4852521Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4852684Z โญโ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:98:7]
2026-10-25T02:16:39.4852734Z 95 โ
2026-10-25T02:16:39.4852795Z 96 โ useEffect(() => {
2026-10-25T02:16:39.4852863Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4852985Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4853115Z 97 โ if (pairingConnectionError) {
2026-10-25T02:16:39.4853213Z 98 โ setIsSubmitting(false);
2026-10-25T02:16:39.4853293Z ยท โโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.4853461Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4853515Z 99 โ }
2026-10-25T02:16:39.4853565Z โฐโโโโ
2026-10-25T02:16:39.4854139Z 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-25T02:16:39.4854488Z 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-25T02:16:39.4854493Z
2026-10-25T02:16:39.4854694Z โ eslint(no-unused-vars): Identifier 'openSettings' is imported but never used.
2026-10-25T02:16:39.4854860Z โญโ[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:35:10]
2026-10-25T02:16:39.4854994Z 34 โ import { splitEnvironmentSections } from "./environmentSections";
2026-10-25T02:16:39.4855116Z 35 โ import { openSettings } from "../settings/settings-navigation";
2026-10-25T02:16:39.4855194Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4855329Z ยท โฐโโ 'openSettings' is imported here
2026-10-25T02:16:39.4855460Z 36 โ import { leaveSettingsPage } from "../settings/settings-navigation";
2026-10-25T02:16:39.4855512Z โฐโโโโ
2026-10-25T02:16:39.4855614Z help: Consider removing this import.
2026-10-25T02:16:39.4855619Z
2026-10-25T02:16:39.4855868Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4856018Z โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7]
2026-10-25T02:16:39.4856153Z 355 โ }, [cancelledIncomingShareId, navigation, props.incomingShareId]);
2026-10-25T02:16:39.4856217Z 356 โ useEffect(() => {
2026-10-25T02:16:39.4856286Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4856412Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4856500Z 357 โ if (!isReturningToProjectPicker) {
2026-10-25T02:16:39.4856560Z 358 โ return;
2026-10-25T02:16:39.4856613Z 359 โ }
2026-10-25T02:16:39.4856709Z 360 โ if (requestedInitialProjectAvailable) {
2026-10-25T02:16:39.4856806Z 361 โ setIsReturningToProjectPicker(false);
2026-10-25T02:16:39.4856910Z ยท โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4857082Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4857141Z 362 โ return;
2026-10-25T02:16:39.4857191Z โฐโโโโ
2026-10-25T02:16:39.4857770Z 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-25T02:16:39.4858086Z 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-25T02:16:39.4858134Z
2026-10-25T02:16:39.4858411Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4858559Z โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9]
2026-10-25T02:16:39.4858611Z 447 โ
2026-10-25T02:16:39.4858674Z 448 โ useEffect(() => {
2026-10-25T02:16:39.4858742Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4858866Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4858967Z 449 โ if (props.pendingTaskId || props.draftId) {
2026-10-25T02:16:39.4859024Z 450 โ return;
2026-10-25T02:16:39.4859076Z 451 โ }
2026-10-25T02:16:39.4859214Z 452 โ if (lastInitialProjectRefRef.current !== props.initialProjectRef) {
2026-10-25T02:16:39.4859353Z 453 โ lastInitialProjectRefRef.current = props.initialProjectRef;
2026-10-25T02:16:39.4859461Z 454 โ appliedInitialProjectKeyRef.current = null;
2026-10-25T02:16:39.4859513Z 455 โ }
2026-10-25T02:16:39.4859649Z 456 โ const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-25T02:16:39.4859773Z 457 โ const initialProjectId = props.initialProjectRef?.projectId;
2026-10-25T02:16:39.4859874Z 458 โ if (initialEnvironmentId && initialProjectId) {
2026-10-25T02:16:39.4859944Z 459 โ const directProject =
2026-10-25T02:16:39.4860009Z 460 โ projects.find(
2026-10-25T02:16:39.4860072Z 461 โ (project) =>
2026-10-25T02:16:39.4860243Z 462 โ project.environmentId === initialEnvironmentId && project.id === initialProjectId,
2026-10-25T02:16:39.4860302Z 463 โ ) ?? null;
2026-10-25T02:16:39.4860352Z 464 โ
2026-10-25T02:16:39.4860419Z 465 โ if (directProject) {
2026-10-25T02:16:39.4860561Z 466 โ // Apply the route's project once. Re-applying on every change would
2026-10-25T02:16:39.4860700Z 467 โ // instantly revert environment/project switches made in the picker.
2026-10-25T02:16:39.4860859Z 468 โ const directProjectKey = `${directProject.environmentId}:${directProject.id}`;
2026-10-25T02:16:39.4860992Z 469 โ if (appliedInitialProjectKeyRef.current === directProjectKey) {
2026-10-25T02:16:39.4861053Z 470 โ return;
2026-10-25T02:16:39.4861108Z 471 โ }
2026-10-25T02:16:39.4861204Z 472 โ if (props.initialProjectRef?.branch) {
2026-10-25T02:16:39.4861265Z 473 โ if (
2026-10-25T02:16:39.4861404Z 474 โ selectedProject?.environmentId !== directProject.environmentId ||
2026-10-25T02:16:39.4861502Z 475 โ selectedProject.id !== directProject.id
2026-10-25T02:16:39.4861565Z 476 โ ) {
2026-10-25T02:16:39.4861649Z 477 โ setProject(directProject);
2026-10-25T02:16:39.4861710Z 478 โ return;
2026-10-25T02:16:39.4861769Z 479 โ }
2026-10-25T02:16:39.4861850Z 480 โ if (!flow.draftKey) return;
2026-10-25T02:16:39.4861987Z 481 โ // The route completes checkout before mounting this composer. Local
2026-10-25T02:16:39.4862125Z 482 โ // mode reuses an existing worktree; worktree mode would create another.
2026-10-25T02:16:39.4862234Z 483 โ updateComposerDraftSettings(flow.draftKey, {
2026-10-25T02:16:39.4862310Z 484 โ workspaceSelection: {
2026-10-25T02:16:39.4862378Z 485 โ mode: "local",
2026-10-25T02:16:39.4862478Z 486 โ branch: props.initialProjectRef.branch,
2026-10-25T02:16:39.4862611Z 487 โ worktreePath: props.initialProjectRef.worktreePath ?? null,
2026-10-25T02:16:39.4862738Z 488 โ startFromOrigin: false,
2026-10-25T02:16:39.4862873Z 489 โ },
2026-10-25T02:16:39.4862929Z 490 โ });
2026-10-25T02:16:39.4862986Z 491 โ }
2026-10-25T02:16:39.4863110Z 492 โ appliedInitialProjectKeyRef.current = directProjectKey;
2026-10-25T02:16:39.4863167Z 493 โ if (
2026-10-25T02:16:39.4863305Z 494 โ selectedProject?.environmentId === directProject.environmentId &&
2026-10-25T02:16:39.4863401Z 495 โ selectedProject.id === directProject.id
2026-10-25T02:16:39.4863459Z 496 โ ) {
2026-10-25T02:16:39.4863520Z 497 โ return;
2026-10-25T02:16:39.4863574Z 498 โ }
2026-10-25T02:16:39.4863652Z 499 โ setProject(directProject);
2026-10-25T02:16:39.4863711Z 500 โ return;
2026-10-25T02:16:39.4863764Z 501 โ }
2026-10-25T02:16:39.4863815Z 502 โ
2026-10-25T02:16:39.4863896Z 503 โ if (projects.length > 0) {
2026-10-25T02:16:39.4863993Z 504 โ setIsReturningToProjectPicker(true);
2026-10-25T02:16:39.4864097Z ยท โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4864298Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4864353Z 505 โ }
2026-10-25T02:16:39.4864404Z โฐโโโโ
2026-10-25T02:16:39.4864984Z 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-25T02:16:39.4865302Z 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-25T02:16:39.4865308Z
2026-10-25T02:16:39.4865565Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4865715Z โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5]
2026-10-25T02:16:39.4865766Z 545 โ
2026-10-25T02:16:39.4865828Z 546 โ useEffect(() => {
2026-10-25T02:16:39.4865898Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4866022Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4866115Z 547 โ const shareId = props.incomingShareId;
2026-10-25T02:16:39.4866192Z 548 โ const draftKey = flow.draftKey;
2026-10-25T02:16:39.4866291Z 549 โ const destinationProject = selectedProject;
2026-10-25T02:16:39.4866432Z 550 โ const initialEnvironmentId = props.initialProjectRef?.environmentId;
2026-10-25T02:16:39.4866561Z 551 โ const initialProjectId = props.initialProjectRef?.projectId;
2026-10-25T02:16:39.4866648Z 552 โ const selectedProjectMatchesRoute =
2026-10-25T02:16:39.4866723Z 553 โ !initialEnvironmentId ||
2026-10-25T02:16:39.4866791Z 554 โ !initialProjectId ||
2026-10-25T02:16:39.4866920Z 555 โ (destinationProject?.environmentId === initialEnvironmentId &&
2026-10-25T02:16:39.4867021Z 556 โ destinationProject.id === initialProjectId);
2026-10-25T02:16:39.4867078Z 557 โ if (
2026-10-25T02:16:39.4867140Z 558 โ !shareId ||
2026-10-25T02:16:39.4867201Z 559 โ !draftKey ||
2026-10-25T02:16:39.4867271Z 560 โ !destinationProject ||
2026-10-25T02:16:39.4867355Z 561 โ !selectedProjectMatchesRoute ||
2026-10-25T02:16:39.4867490Z 562 โ cancelledIncomingShareId === shareId
2026-10-25T02:16:39.4867572Z 563 โ ) {
2026-10-25T02:16:39.4867630Z 564 โ return;
2026-10-25T02:16:39.4867684Z 565 โ }
2026-10-25T02:16:39.4867777Z 566 โ const importKey = `${shareId}:${draftKey}`;
2026-10-25T02:16:39.4867832Z 567 โ if (
2026-10-25T02:16:39.4867944Z 568 โ startedShareImportKeyRef.current === importKey ||
2026-10-25T02:16:39.4868054Z 569 โ cancellingShareImportKeyRef.current === importKey
2026-10-25T02:16:39.4868108Z 570 โ ) {
2026-10-25T02:16:39.4868165Z 571 โ return;
2026-10-25T02:16:39.4868219Z 572 โ }
2026-10-25T02:16:39.4868271Z 573 โ
2026-10-25T02:16:39.4868337Z 574 โ if (!incomingShare) {
2026-10-25T02:16:39.4868529Z 575 โ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) {
2026-10-25T02:16:39.4868661Z 576 โ alertedUnavailableIncomingShareIdRef.current = shareId;
2026-10-25T02:16:39.4868733Z 577 โ Dialog.alert(
2026-10-25T02:16:39.4868818Z 578 โ "Shared content unavailable",
2026-10-25T02:16:39.4868988Z 579 โ "The shared content is no longer in the inbox. You can continue editing this task draft.",
2026-10-25T02:16:39.4869046Z 580 โ );
2026-10-25T02:16:39.4869099Z 581 โ }
2026-10-25T02:16:39.4869158Z 582 โ return;
2026-10-25T02:16:39.4869210Z 583 โ }
2026-10-25T02:16:39.4869260Z 584 โ
2026-10-25T02:16:39.4869315Z 585 โ if (
2026-10-25T02:16:39.4869470Z 586 โ incomingShare.attachments.some((attachment) => attachment.type === "file") &&
2026-10-25T02:16:39.4869567Z 587 โ selectedEnvironmentServerConfig === null
2026-10-25T02:16:39.4869623Z 588 โ ) {
2026-10-25T02:16:39.4869681Z 589 โ return;
2026-10-25T02:16:39.4869732Z 590 โ }
2026-10-25T02:16:39.4869788Z 591 โ
2026-10-25T02:16:39.4869925Z 592 โ if (alertedUnavailableIncomingShareIdRef.current === shareId) {
2026-10-25T02:16:39.4870044Z 593 โ alertedUnavailableIncomingShareIdRef.current = null;
2026-10-25T02:16:39.4870096Z 594 โ }
2026-10-25T02:16:39.4870199Z 595 โ startedShareImportKeyRef.current = importKey;
2026-10-25T02:16:39.4870267Z 596 โ const draftBackup =
2026-10-25T02:16:39.4870450Z 597 โ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey);
2026-10-25T02:16:39.4870583Z 598 โ shareImportDraftBackupRef.current.set(importKey, draftBackup);
2026-10-25T02:16:39.4870732Z 599 โ const importToken = Symbol(importKey);
2026-10-25T02:16:39.4870808Z 600 โ let didReserveShare = false;
2026-10-25T02:16:39.4870883Z 601 โ let didConsumeShare = false;
2026-10-25T02:16:39.4870965Z 602 โ let needsDraftRestore = false;
2026-10-25T02:16:39.4871076Z 603 โ activeShareImportTokenRef.current = importToken;
2026-10-25T02:16:39.4871159Z 604 โ setImportingShareKey(importKey);
2026-10-25T02:16:39.4871244Z ยท โโโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4871413Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4871480Z 605 โ void (async () => {
2026-10-25T02:16:39.4871532Z โฐโโโโ
2026-10-25T02:16:39.4872112Z 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-25T02:16:39.4872496Z 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-25T02:16:39.4872535Z
2026-10-25T02:16:39.4872732Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4872883Z โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5]
2026-10-25T02:16:39.4872959Z 523 โ props.initialProjectRef,
2026-10-25T02:16:39.4873031Z 524 โ props.incomingShareId,
2026-10-25T02:16:39.4873116Z ยท โโโโโโโโโโโฌโโโโโโโโโโ
2026-10-25T02:16:39.4873279Z ยท โฐโโ Unnecessary dependency `props.incomingShareId`
2026-10-25T02:16:39.4873348Z 525 โ props.pendingTaskId,
2026-10-25T02:16:39.4873400Z โฐโโโโ
2026-10-25T02:16:39.4873691Z 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-25T02:16:39.4873998Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4874000Z
2026-10-25T02:16:39.4874220Z โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T02:16:39.4874396Z โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5]
2026-10-25T02:16:39.4874510Z 542 โ loadedBranchesProjectKeyRef.current = projectKey;
2026-10-25T02:16:39.4874576Z 543 โ flow.loadBranches();
2026-10-25T02:16:39.4874643Z ยท โโโฌโ
2026-10-25T02:16:39.4874764Z ยท โฐโโ Missing dependency `flow`
2026-10-25T02:16:39.4874860Z 544 โ }, [flow.loadBranches, selectedProject]);
2026-10-25T02:16:39.4874945Z ยท โโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4875141Z ยท โฐโโ Overly precise dependency `flow.loadBranches`, use `flow` instead
2026-10-25T02:16:39.4875193Z 545 โ
2026-10-25T02:16:39.4875242Z โฐโโโโ
2026-10-25T02:16:39.4875654Z 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-25T02:16:39.4875958Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4875960Z
2026-10-25T02:16:39.4876199Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4876374Z โญโ[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5]
2026-10-25T02:16:39.4876437Z 765 โ flow.draftKey,
2026-10-25T02:16:39.4876513Z 766 โ hasImportedIncomingShare,
2026-10-25T02:16:39.4876602Z ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4876776Z ยท โฐโโ Unnecessary dependency `hasImportedIncomingShare`
2026-10-25T02:16:39.4876839Z 767 โ incomingShare,
2026-10-25T02:16:39.4876918Z 768 โ isIncomingShareInboxLoading,
2026-10-25T02:16:39.4877012Z ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
2026-10-25T02:16:39.4877190Z ยท โฐโโ Unnecessary dependency `isIncomingShareInboxLoading`
2026-10-25T02:16:39.4877268Z 769 โ isIncomingShareUnavailable,
2026-10-25T02:16:39.4877344Z 770 โ props.incomingShareId,
2026-10-25T02:16:39.4877439Z 771 โ props.initialProjectRef?.environmentId,
2026-10-25T02:16:39.4877525Z 772 โ props.initialProjectRef?.projectId,
2026-10-25T02:16:39.4877596Z 773 โ releaseShareReservation,
2026-10-25T02:16:39.4877658Z 774 โ reserveShare,
2026-10-25T02:16:39.4877742Z 775 โ selectedEnvironmentServerConfig,
2026-10-25T02:16:39.4877809Z 776 โ selectedProject,
2026-10-25T02:16:39.4877876Z 777 โ shareImportAttempt,
2026-10-25T02:16:39.4877961Z ยท โโโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4878122Z ยท โฐโโ Unnecessary dependency `shareImportAttempt`
2026-10-25T02:16:39.4878177Z 778 โ ]);
2026-10-25T02:16:39.4878227Z โฐโโโโ
2026-10-25T02:16:39.4878518Z 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-25T02:16:39.4878823Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4878825Z
2026-10-25T02:16:39.4879020Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4879172Z โญโ[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:267:35]
2026-10-25T02:16:39.4879228Z 266 โ };
2026-10-25T02:16:39.4879357Z 267 โ }, [method, nativeRef, payload, resetKey, onFailure, onDelivered]);
2026-10-25T02:16:39.4879457Z ยท โโโโโฌโโโ
2026-10-25T02:16:39.4879613Z ยท โฐโโ Unnecessary dependency `resetKey`
2026-10-25T02:16:39.4879669Z 268 โ }
2026-10-25T02:16:39.4879724Z โฐโโโโ
2026-10-25T02:16:39.4880006Z 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-25T02:16:39.4880308Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4880310Z
2026-10-25T02:16:39.4880452Z โ react(refs): Cannot access refs during render
2026-10-25T02:16:39.4880606Z โญโ[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:391:39]
2026-10-25T02:16:39.4880659Z 390 โ
2026-10-25T02:16:39.4880838Z 391 โ โญโโถ return createElement(RawNativeView, {
2026-10-25T02:16:39.4880977Z 392 โ โ ...nativeProps,
2026-10-25T02:16:39.4881147Z 393 โ โ refreshEnabled: props.onPullToRefresh !== undefined,
2026-10-25T02:16:39.4881246Z 394 โ โ onDebug: (event) => {
2026-10-25T02:16:39.4881397Z 395 โ โ if (event.nativeEvent.message === "rows-decode-failed") {
2026-10-25T02:16:39.4881596Z 396 โ โ console.error("[native-review-diff] rows decode failed", event.nativeEvent.error);
2026-10-25T02:16:39.4881694Z 397 โ โ onRowsFailure();
2026-10-25T02:16:39.4881769Z 398 โ โ }
2026-10-25T02:16:39.4881862Z 399 โ โ onDebug?.(event);
2026-10-25T02:16:39.4881934Z 400 โ โ },
2026-10-25T02:16:39.4882023Z 401 โ โ ref: nativeRef,
2026-10-25T02:16:39.4882156Z 402 โ โโโถ });
2026-10-25T02:16:39.4882392Z ยท โฐโโโโ Passing a ref to a function may read its value during render
2026-10-25T02:16:39.4882444Z 403 โ }
2026-10-25T02:16:39.4882497Z โฐโโโโ
2026-10-25T02:16:39.4882956Z 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-25T02:16:39.4883247Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs
2026-10-25T02:16:39.4883249Z
2026-10-25T02:16:39.4883507Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4883665Z โญโ[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5]
2026-10-25T02:16:39.4883726Z 434 โ : null;
2026-10-25T02:16:39.4883792Z 435 โ useEffect(() => {
2026-10-25T02:16:39.4883861Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4883986Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4884042Z 436 โ if (
2026-10-25T02:16:39.4884117Z 437 โ props.active === false ||
2026-10-25T02:16:39.4884222Z 438 โ activeDraftKey !== null ||
2026-10-25T02:16:39.4884301Z 439 โ editingPendingTask !== null ||
2026-10-25T02:16:39.4884374Z 440 โ selectedProject === null
2026-10-25T02:16:39.4884428Z 441 โ ) {
2026-10-25T02:16:39.4884485Z 442 โ return;
2026-10-25T02:16:39.4884543Z 443 โ }
2026-10-25T02:16:39.4884614Z 444 โ setActiveDraftKey(
2026-10-25T02:16:39.4884694Z ยท โโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4884864Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4884932Z 445 โ createNewTaskDraft({
2026-10-25T02:16:39.4884983Z โฐโโโโ
2026-10-25T02:16:39.4885567Z 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-25T02:16:39.4885926Z 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-25T02:16:39.4885962Z
2026-10-25T02:16:39.4886198Z โ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-25T02:16:39.4886360Z โญโ[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36]
2026-10-25T02:16:39.4886464Z 1243 โ <ActiveNewTaskContext value={activeNewTask}>
2026-10-25T02:16:39.4886656Z 1244 โ <NewTaskFlowContext.Provider value={value}>{props.children}</NewTaskFlowContext.Provider>
2026-10-25T02:16:39.4886767Z ยท โโโโโโโโโโโโโ
2026-10-25T02:16:39.4886838Z 1245 โ </ActiveNewTaskContext>
2026-10-25T02:16:39.4886891Z โฐโโโโ
2026-10-25T02:16:39.4887109Z help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-25T02:16:39.4887251Z Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-25T02:16:39.4887257Z
2026-10-25T02:16:39.4887491Z โ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-25T02:16:39.4887644Z โญโ[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50]
2026-10-25T02:16:39.4887704Z 289 โ return (
2026-10-25T02:16:39.4887837Z 290 โ <ExistingThreadSettingsRouteContext.Provider value={value}>
2026-10-25T02:16:39.4887952Z ยท โโโโโโโโโโโโโ
2026-10-25T02:16:39.4888021Z 291 โ {props.children}
2026-10-25T02:16:39.4888071Z โฐโโโโ
2026-10-25T02:16:39.4888284Z help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-25T02:16:39.4888423Z Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-25T02:16:39.4888428Z
2026-10-25T02:16:39.4888659Z โ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-25T02:16:39.4888810Z โญโ[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44]
2026-10-25T02:16:39.4888867Z 653 โ return (
2026-10-25T02:16:39.4888986Z 654 โ <ThreadSettingsSessionContext.Provider value={value}>
2026-10-25T02:16:39.4889099Z ยท โโโโโโโโโโโโโ
2026-10-25T02:16:39.4889163Z 655 โ {props.children}
2026-10-25T02:16:39.4889213Z โฐโโโโ
2026-10-25T02:16:39.4889425Z help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-25T02:16:39.4889561Z Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-25T02:16:39.4889566Z
2026-10-25T02:16:39.4889795Z โ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed.
2026-10-25T02:16:39.4889950Z โญโ[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55]
2026-10-25T02:16:39.4890010Z 1461 โ return (
2026-10-25T02:16:39.4890168Z 1462 โ <ThreadSettingsPickerPresentationContext.Provider value={presentation}>
2026-10-25T02:16:39.4890297Z ยท โโโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4890393Z 1463 โ <ThreadSettingsPickerStack.Navigator
2026-10-25T02:16:39.4890444Z โฐโโโโ
2026-10-25T02:16:39.4890707Z help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders.
2026-10-25T02:16:39.4890870Z Alternatively, move the value outside the render function if it doesn't depend on props or state.
2026-10-25T02:16:39.4890872Z
2026-10-25T02:16:39.4891126Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4891259Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2236:5]
2026-10-25T02:16:39.4891313Z 2234 โ );
2026-10-25T02:16:39.4891378Z 2235 โ useEffect(() => {
2026-10-25T02:16:39.4891448Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4891576Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4891648Z 2236 โ setExpandedVideo(null);
2026-10-25T02:16:39.4891728Z ยท โโโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.4891903Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4891979Z 2237 โ setExpandedFile(null);
2026-10-25T02:16:39.4892029Z โฐโโโโ
2026-10-25T02:16:39.4892610Z 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-25T02:16:39.4892927Z 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-25T02:16:39.4892929Z
2026-10-25T02:16:39.4893182Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4893317Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2744:9]
2026-10-25T02:16:39.4893454Z 2735 โ const stopFollowingEnd = useEffectEvent(() => setEndFollow(false));
2026-10-25T02:16:39.4893518Z 2736 โ useEffect(() => {
2026-10-25T02:16:39.4893591Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4893718Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4893844Z 2737 โ if (!jumpToMessageId || loadedListKey !== listMountKey) return;
2026-10-25T02:16:39.4893938Z 2738 โ const index = presentedFeed.findIndex(
2026-10-25T02:16:39.4894067Z 2739 โ (entry) => entry.type === "message" && entry.id === jumpToMessageId,
2026-10-25T02:16:39.4894122Z 2740 โ );
2026-10-25T02:16:39.4894200Z 2741 โ if (index === -1) {
2026-10-25T02:16:39.4894356Z 2742 โ const runId = messageFoldRunId(props.feed, jumpToMessageId);
2026-10-25T02:16:39.4894458Z 2743 โ if (runId && !expandedTurnIds.has(runId)) {
2026-10-25T02:16:39.4894549Z 2744 โ setInteractionState((current) => ({
2026-10-25T02:16:39.4894636Z ยท โโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4894811Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4894877Z 2745 โ ...current,
2026-10-25T02:16:39.4894930Z โฐโโโโ
2026-10-25T02:16:39.4895508Z 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-25T02:16:39.4895867Z 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-25T02:16:39.4895898Z
2026-10-25T02:16:39.4896125Z โ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used.
2026-10-25T02:16:39.4896255Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:72:10]
2026-10-25T02:16:39.4896389Z 71 โ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";
2026-10-25T02:16:39.4896523Z 72 โ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks";
2026-10-25T02:16:39.4896617Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4896780Z ยท โฐโโ 'isMarkdownFileLinkLabel' is imported here
2026-10-25T02:16:39.4896940Z 73 โ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments";
2026-10-25T02:16:39.4896992Z โฐโโโโ
2026-10-25T02:16:39.4897088Z help: Consider removing this import.
2026-10-25T02:16:39.4897090Z
2026-10-25T02:16:39.4897291Z โ eslint(no-unused-vars): Identifier 'createContext' is imported but never used.
2026-10-25T02:16:39.4897419Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:98:3]
2026-10-25T02:16:39.4897476Z 97 โ import {
2026-10-25T02:16:39.4897538Z 98 โ createContext,
2026-10-25T02:16:39.4897611Z ยท โโโโโโโฌโโโโโโ
2026-10-25T02:16:39.4897744Z ยท โฐโโ 'createContext' is imported here
2026-10-25T02:16:39.4897797Z 99 โ memo,
2026-10-25T02:16:39.4897848Z โฐโโโโ
2026-10-25T02:16:39.4897941Z help: Consider removing this import.
2026-10-25T02:16:39.4897944Z
2026-10-25T02:16:39.4898156Z โ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-25T02:16:39.4898287Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:114:3]
2026-10-25T02:16:39.4898343Z 113 โ import {
2026-10-25T02:16:39.4898408Z 114 โ ActivityIndicator,
2026-10-25T02:16:39.4898487Z ยท โโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4898627Z ยท โฐโโ 'ActivityIndicator' is imported here
2026-10-25T02:16:39.4898686Z 115 โ Image,
2026-10-25T02:16:39.4898737Z โฐโโโโ
2026-10-25T02:16:39.4898830Z help: Consider removing this import.
2026-10-25T02:16:39.4898832Z
2026-10-25T02:16:39.4899026Z โ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used.
2026-10-25T02:16:39.4899200Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:121:3]
2026-10-25T02:16:39.4899289Z 120 โ Pressable,
2026-10-25T02:16:39.4899351Z 121 โ ScrollView,
2026-10-25T02:16:39.4899421Z ยท โโโโโโฌโโโโ
2026-10-25T02:16:39.4899549Z ยท โฐโโ 'ScrollView' is imported here
2026-10-25T02:16:39.4899614Z 122 โ StyleSheet,
2026-10-25T02:16:39.4899665Z โฐโโโโ
2026-10-25T02:16:39.4899755Z help: Consider removing this import.
2026-10-25T02:16:39.4899758Z
2026-10-25T02:16:39.4899950Z โ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used.
2026-10-25T02:16:39.4900079Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:123:11]
2026-10-25T02:16:39.4900138Z 122 โ StyleSheet,
2026-10-25T02:16:39.4900203Z 123 โ Text as NativeText,
2026-10-25T02:16:39.4900287Z ยท โโโโโโฌโโโโ
2026-10-25T02:16:39.4900422Z ยท โฐโโ 'NativeText' is imported here
2026-10-25T02:16:39.4900486Z 124 โ type ColorValue,
2026-10-25T02:16:39.4900535Z โฐโโโโ
2026-10-25T02:16:39.4900626Z help: Consider removing this import.
2026-10-25T02:16:39.4900628Z
2026-10-25T02:16:39.4900837Z โ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used.
2026-10-25T02:16:39.4900966Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:146:10]
2026-10-25T02:16:39.4901099Z 145 โ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic";
2026-10-25T02:16:39.4901221Z 146 โ import { tryOpenExternalUrl } from "../../lib/openExternalUrl";
2026-10-25T02:16:39.4901308Z ยท โโโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4901464Z ยท โฐโโ 'tryOpenExternalUrl' is imported here
2026-10-25T02:16:39.4901612Z 147 โ import { downloadAndShareAttachment } from "../../lib/attachmentDownload";
2026-10-25T02:16:39.4901661Z โฐโโโโ
2026-10-25T02:16:39.4901754Z help: Consider removing this import.
2026-10-25T02:16:39.4901757Z
2026-10-25T02:16:39.4901968Z โ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used.
2026-10-25T02:16:39.4902095Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:149:10]
2026-10-25T02:16:39.4902226Z 148 โ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks";
2026-10-25T02:16:39.4902348Z 149 โ import { faviconUrlForOrigin } from "@t3tools/shared/favicon";
2026-10-25T02:16:39.4902436Z ยท โโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4902593Z ยท โฐโโ 'faviconUrlForOrigin' is imported here
2026-10-25T02:16:39.4902653Z 150 โ import {
2026-10-25T02:16:39.4902704Z โฐโโโโ
2026-10-25T02:16:39.4902794Z help: Consider removing this import.
2026-10-25T02:16:39.4902797Z
2026-10-25T02:16:39.4903003Z โ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used.
2026-10-25T02:16:39.4903129Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:163:10]
2026-10-25T02:16:39.4903273Z 162 โ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile";
2026-10-25T02:16:39.4903405Z 163 โ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer";
2026-10-25T02:16:39.4903491Z ยท โโโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.4903634Z ยท โฐโโ 'MediaVideoPlayer' is imported here
2026-10-25T02:16:39.4903818Z 164 โ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia";
2026-10-25T02:16:39.4903904Z โฐโโโโ
2026-10-25T02:16:39.4903995Z help: Consider removing this import.
2026-10-25T02:16:39.4903998Z
2026-10-25T02:16:39.4904234Z โ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used.
2026-10-25T02:16:39.4904364Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:167:3]
2026-10-25T02:16:39.4904445Z 166 โ attachmentVideoPreviewSource,
2026-10-25T02:16:39.4904514Z 167 โ mediaVideoPreviewUri,
2026-10-25T02:16:39.4904595Z ยท โโโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4904747Z ยท โฐโโ 'mediaVideoPreviewUri' is imported here
2026-10-25T02:16:39.4904818Z 168 โ mediaVideoThumbnailKey,
2026-10-25T02:16:39.4904869Z โฐโโโโ
2026-10-25T02:16:39.4904966Z help: Consider removing this import.
2026-10-25T02:16:39.4904973Z
2026-10-25T02:16:39.4905188Z โ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used.
2026-10-25T02:16:39.4905317Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:168:3]
2026-10-25T02:16:39.4905386Z 167 โ mediaVideoPreviewUri,
2026-10-25T02:16:39.4905455Z 168 โ mediaVideoThumbnailKey,
2026-10-25T02:16:39.4905539Z ยท โโโโโโโโโโโโฌโโโโโโโโโโ
2026-10-25T02:16:39.4905694Z ยท โฐโโ 'mediaVideoThumbnailKey' is imported here
2026-10-25T02:16:39.4905772Z 169 โ type MediaVideoPreviewSource,
2026-10-25T02:16:39.4905823Z โฐโโโโ
2026-10-25T02:16:39.4905914Z help: Consider removing this import.
2026-10-25T02:16:39.4905916Z
2026-10-25T02:16:39.4906128Z โ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used.
2026-10-25T02:16:39.4906260Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:169:8]
2026-10-25T02:16:39.4906329Z 168 โ mediaVideoThumbnailKey,
2026-10-25T02:16:39.4906404Z 169 โ type MediaVideoPreviewSource,
2026-10-25T02:16:39.4906498Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4906661Z ยท โฐโโ 'MediaVideoPreviewSource' is imported here
2026-10-25T02:16:39.4906746Z 170 โ } from "../../lib/videoPreviewSource";
2026-10-25T02:16:39.4906796Z โฐโโโโ
2026-10-25T02:16:39.4906888Z help: Consider removing this import.
2026-10-25T02:16:39.4906890Z
2026-10-25T02:16:39.4907118Z โ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used.
2026-10-25T02:16:39.4907248Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:191:3]
2026-10-25T02:16:39.4907305Z 190 โ import {
2026-10-25T02:16:39.4907379Z 191 โ resolveMarkdownFontSizes,
2026-10-25T02:16:39.4907468Z ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4907623Z ยท โฐโโ 'resolveMarkdownFontSizes' is imported here
2026-10-25T02:16:39.4907707Z 192 โ resolveNativeMarkdownTypography,
2026-10-25T02:16:39.4907758Z โฐโโโโ
2026-10-25T02:16:39.4907851Z help: Consider removing this import.
2026-10-25T02:16:39.4907853Z
2026-10-25T02:16:39.4908103Z โ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used.
2026-10-25T02:16:39.4908279Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:198:3]
2026-10-25T02:16:39.4908386Z 197 โ normalizeNativeMarkdownUrl,
2026-10-25T02:16:39.4908478Z 198 โ resolveMarkdownInlineCodePresentation,
2026-10-25T02:16:39.4908585Z ยท โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4908774Z ยท โฐโโ 'resolveMarkdownInlineCodePresentation' is imported here
2026-10-25T02:16:39.4908857Z 199 โ resolveMarkdownLinkPresentation,
2026-10-25T02:16:39.4908908Z โฐโโโโ
2026-10-25T02:16:39.4908999Z help: Consider removing this import.
2026-10-25T02:16:39.4909001Z
2026-10-25T02:16:39.4909206Z โ eslint(no-unused-vars): Type 'PendingThreadFeedEntry' is imported but never used.
2026-10-25T02:16:39.4909335Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:237:8]
2026-10-25T02:16:39.4909412Z 236 โ isCompactionCommandFeedEntry,
2026-10-25T02:16:39.4909495Z 237 โ type PendingThreadFeedEntry,
2026-10-25T02:16:39.4909586Z ยท โโโโโโโโโโโโฌโโโโโโโโโโ
2026-10-25T02:16:39.4909742Z ยท โฐโโ 'PendingThreadFeedEntry' is imported here
2026-10-25T02:16:39.4909809Z 238 โ type ThreadFeedRow,
2026-10-25T02:16:39.4909861Z โฐโโโโ
2026-10-25T02:16:39.4909950Z help: Consider removing this import.
2026-10-25T02:16:39.4909953Z
2026-10-25T02:16:39.4910159Z โ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used.
2026-10-25T02:16:39.4910287Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:248:3]
2026-10-25T02:16:39.4910349Z 247 โ useAssetUrl,
2026-10-25T02:16:39.4910414Z 248 โ useAssetUrlState,
2026-10-25T02:16:39.4910493Z ยท โโโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.4910636Z ยท โฐโโ 'useAssetUrlState' is imported here
2026-10-25T02:16:39.4910752Z 249 โ useRefreshAssetUrl,
2026-10-25T02:16:39.4910801Z โฐโโโโ
2026-10-25T02:16:39.4910892Z help: Consider removing this import.
2026-10-25T02:16:39.4910895Z
2026-10-25T02:16:39.4911090Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4911224Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2238:7]
2026-10-25T02:16:39.4911295Z 2237 โ setExpandedFile(null);
2026-10-25T02:16:39.4911450Z 2238 โ }, [props.environmentId, props.threadId, props.contentPresentation.kind]);
2026-10-25T02:16:39.4911671Z ยท โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโฌโโโโโโ โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4912015Z ยท โ โ โฐโโ Unnecessary dependency `props.contentPresentation.kind`
2026-10-25T02:16:39.4912257Z ยท โ โฐโโ Unnecessary dependency `props.threadId`
2026-10-25T02:16:39.4912415Z ยท โฐโโ Unnecessary dependency `props.environmentId`
2026-10-25T02:16:39.4912556Z 2239 โ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16;
2026-10-25T02:16:39.4912609Z โฐโโโโ
2026-10-25T02:16:39.4912900Z 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-25T02:16:39.4913214Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4913220Z
2026-10-25T02:16:39.4913416Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4913549Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2710:7]
2026-10-25T02:16:39.4913645Z 2709 โ reportHeaderMaterialVisibility(false);
2026-10-25T02:16:39.4913758Z 2710 โ }, [feedThreadKey, reportHeaderMaterialVisibility]);
2026-10-25T02:16:39.4913837Z ยท โโโโโโโฌโโโโโโ
2026-10-25T02:16:39.4913984Z ยท โฐโโ Unnecessary dependency `feedThreadKey`
2026-10-25T02:16:39.4914039Z 2711 โ
2026-10-25T02:16:39.4914091Z โฐโโโโ
2026-10-25T02:16:39.4914412Z 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-25T02:16:39.4914721Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4914723Z
2026-10-25T02:16:39.4914918Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4915049Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2729:7]
2026-10-25T02:16:39.4915104Z 2728 โ }
2026-10-25T02:16:39.4915235Z 2729 โ }, [listMountKey, props.contentInsetEndAdjustment, listRef]);
2026-10-25T02:16:39.4915313Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4915457Z ยท โฐโโ Unnecessary dependency `listMountKey`
2026-10-25T02:16:39.4915603Z 2730 โ // Opening at a message: its run unfolds, the list stops following the end
2026-10-25T02:16:39.4915659Z โฐโโโโ
2026-10-25T02:16:39.4915942Z 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-25T02:16:39.4916245Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4916248Z
2026-10-25T02:16:39.4916443Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4916571Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:2925:7]
2026-10-25T02:16:39.4916627Z 2924 โ }
2026-10-25T02:16:39.4916805Z 2925 โ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]);
2026-10-25T02:16:39.4917047Z ยท โโโโโโโโฌโโโโโโโ โโโโโโโโโโฌโโโโโโโโ โโโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.4917320Z ยท โ โ โฐโโ Unnecessary dependency `expandedWorkRows`
2026-10-25T02:16:39.4917520Z ยท โ โฐโโ Unnecessary dependency `expandedWorkGroups`
2026-10-25T02:16:39.4917670Z ยท โฐโโ Unnecessary dependency `expandedTurnIds`
2026-10-25T02:16:39.4917723Z 2926 โ
2026-10-25T02:16:39.4917773Z โฐโโโโ
2026-10-25T02:16:39.4918054Z 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-25T02:16:39.4918367Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4918372Z
2026-10-25T02:16:39.4918547Z โ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T02:16:39.4918678Z โญโ[apps/mobile/src/features/threads/ThreadFeed.tsx:630:9]
2026-10-25T02:16:39.4918734Z 629 โ };
2026-10-25T02:16:39.4918849Z 630 โ }, [props.environmentId, attachment.id, httpBaseUrl]),
2026-10-25T02:16:39.4919035Z ยท โโโโโโโโโโฌโโโโโโโโโ โโโโโโโฌโโโโโโ โโโโโโฌโโโโโ
2026-10-25T02:16:39.4919272Z ยท โ โ โฐโโ Unnecessary dependency `httpBaseUrl`
2026-10-25T02:16:39.4919469Z ยท โ โฐโโ Unnecessary dependency `attachment.id`
2026-10-25T02:16:39.4919631Z ยท โฐโโ Unnecessary dependency `props.environmentId`
2026-10-25T02:16:39.4919687Z 631 โ );
2026-10-25T02:16:39.4919738Z โฐโโโโ
2026-10-25T02:16:39.4920042Z 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-25T02:16:39.4920344Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4920346Z
2026-10-25T02:16:39.4920613Z โ eslint(no-unused-vars): Variable 'navigation' is declared but never used. Unused variables should start with a '_'.
2026-10-25T02:16:39.4920778Z โญโ[apps/mobile/src/features/workspace/WorkspaceSectionToolbar.tsx:23:9]
2026-10-25T02:16:39.4920872Z 22 โ const selectTab = useSelectWorkspaceTab();
2026-10-25T02:16:39.4920954Z 23 โ const navigation = useNavigation();
2026-10-25T02:16:39.4921030Z ยท โโโโโโฌโโโโ
2026-10-25T02:16:39.4921163Z ยท โฐโโ 'navigation' is declared here
2026-10-25T02:16:39.4921253Z 24 โ const selected = selectedNavigationTab(
2026-10-25T02:16:39.4921303Z โฐโโโโ
2026-10-25T02:16:39.4921406Z help: Consider removing this declaration.
2026-10-25T02:16:39.4921409Z
2026-10-25T02:16:39.4921661Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4921869Z โญโ[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5]
2026-10-25T02:16:39.4922012Z 37 โ const [initialized, setInitialized] = useState(false);
2026-10-25T02:16:39.4922080Z 38 โ useLayoutEffect(() => {
2026-10-25T02:16:39.4922156Z ยท โโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.4922284Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4922344Z 39 โ reset();
2026-10-25T02:16:39.4922410Z 40 โ setInitialized(true);
2026-10-25T02:16:39.4922485Z ยท โโโโโโโโฌโโโโโโ
2026-10-25T02:16:39.4922649Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4922709Z 41 โ }, [reset]);
2026-10-25T02:16:39.4922761Z โฐโโโโ
2026-10-25T02:16:39.4923351Z 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-25T02:16:39.4923670Z 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-25T02:16:39.4923672Z
2026-10-25T02:16:39.4923924Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4924080Z โญโ[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5]
2026-10-25T02:16:39.4924131Z 88 โ
2026-10-25T02:16:39.4924207Z 89 โ useEffect(() => {
2026-10-25T02:16:39.4924276Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4924431Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4924589Z 90 โ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return;
2026-10-25T02:16:39.4924690Z 91 โ const branchName = initialProjectRef.branch;
2026-10-25T02:16:39.4924755Z 92 โ let active = true;
2026-10-25T02:16:39.4924849Z 93 โ setPendingCheckouts((count) => count + 1);
2026-10-25T02:16:39.4924932Z ยท โโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4925101Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4925251Z 94 โ // Serialize replacements: ignoring a stale result cannot undo its Git mutation.
2026-10-25T02:16:39.4925300Z โฐโโโโ
2026-10-25T02:16:39.4925883Z 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-25T02:16:39.4926202Z 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-25T02:16:39.4926204Z
2026-10-25T02:16:39.4926368Z โ react(purity): Cannot call impure function during render
2026-10-25T02:16:39.4926521Z โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:704:76]
2026-10-25T02:16:39.4926699Z 703 โ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() }));
2026-10-25T02:16:39.4926915Z 704 โ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() });
2026-10-25T02:16:39.4927081Z ยท โโโโโโฌโโโโ
2026-10-25T02:16:39.4927260Z ยท โฐโโ Cannot call impure function
2026-10-25T02:16:39.4927395Z 705 โ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString();
2026-10-25T02:16:39.4927445Z โฐโโโโ
2026-10-25T02:16:39.4927725Z 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-25T02:16:39.4928014Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T02:16:39.4928017Z
2026-10-25T02:16:39.4928185Z โ react(purity): Cannot call impure function during render
2026-10-25T02:16:39.4928341Z โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:725:71]
2026-10-25T02:16:39.4928419Z 724 โ const snoozePresets = useMemo(
2026-10-25T02:16:39.4928596Z 725 โ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-25T02:16:39.4928728Z ยท โโโโโโฌโโโโ
2026-10-25T02:16:39.4928902Z ยท โฐโโ Cannot call impure function
2026-10-25T02:16:39.4929016Z 726 โ [props.snoozePresetMinute, swipeActions.secondary],
2026-10-25T02:16:39.4929067Z โฐโโโโ
2026-10-25T02:16:39.4929343Z help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders
2026-10-25T02:16:39.4929634Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity
2026-10-25T02:16:39.4929637Z
2026-10-25T02:16:39.4929812Z โ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T02:16:39.4929962Z โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:726:6]
2026-10-25T02:16:39.4930136Z 725 โ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)),
2026-10-25T02:16:39.4930249Z 726 โ [props.snoozePresetMinute, swipeActions.secondary],
2026-10-25T02:16:39.4930342Z ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4930516Z ยท โฐโโ Unnecessary dependency `props.snoozePresetMinute`
2026-10-25T02:16:39.4930573Z 727 โ );
2026-10-25T02:16:39.4930625Z โฐโโโโ
2026-10-25T02:16:39.4930934Z 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-25T02:16:39.4931237Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4931239Z
2026-10-25T02:16:39.4931413Z โ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T02:16:39.4931564Z โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:772:7]
2026-10-25T02:16:39.4931634Z 771 โ thread.pinnedAt,
2026-10-25T02:16:39.4931693Z 772 โ variant,
2026-10-25T02:16:39.4931809Z ยท โโโโฌโโโ
2026-10-25T02:16:39.4931971Z ยท โฐโโ Unnecessary dependency `variant`
2026-10-25T02:16:39.4932026Z 773 โ ],
2026-10-25T02:16:39.4932075Z โฐโโโโ
2026-10-25T02:16:39.4932382Z 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-25T02:16:39.4932683Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4932685Z
2026-10-25T02:16:39.4932874Z โ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:16:39.4933030Z โญโ[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1222:21]
2026-10-25T02:16:39.4933160Z 1221 โ {providerDrivers.slice(0, -1).map((driver, index) => (
2026-10-25T02:16:39.4933294Z 1222 โ <View key={`${driver}:${index}`} className="-mr-1 opacity-30">
2026-10-25T02:16:39.4933407Z ยท โโโโโโโโโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4933515Z 1223 โ <ProviderIcon provider={driver} size={12} />
2026-10-25T02:16:39.4933566Z โฐโโโโ
2026-10-25T02:16:39.4933712Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:16:39.4933715Z
2026-10-25T02:16:39.4933969Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4934115Z โญโ[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:410:5]
2026-10-25T02:16:39.4934166Z 408 โ
2026-10-25T02:16:39.4934243Z 409 โ useEffect(() => {
2026-10-25T02:16:39.4934344Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4934475Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4934564Z 410 โ setInspectorSelection((current) => {
2026-10-25T02:16:39.4934648Z ยท โโโโโโโโโโโฌโโโโโโโโโโ
2026-10-25T02:16:39.4934817Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4934918Z 411 โ if (props.renderInspector === undefined) {
2026-10-25T02:16:39.4934967Z โฐโโโโ
2026-10-25T02:16:39.4935549Z 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-25T02:16:39.4935945Z 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-25T02:16:39.4935991Z
2026-10-25T02:16:39.4936199Z โ react(no-unstable-nested-components): Do not define components during render.
2026-10-25T02:16:39.4936348Z โญโ[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:538:24]
2026-10-25T02:16:39.4936503Z 537 โ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top;
2026-10-25T02:16:39.4936669Z 538 โ โญโโถ const GitInspector = () => (
2026-10-25T02:16:39.4936766Z 539 โ โ <GitOverviewSheet
2026-10-25T02:16:39.4936885Z 540 โ โ headerInset={inspectorHeaderInset}
2026-10-25T02:16:39.4936994Z 541 โ โ presentation="inspector"
2026-10-25T02:16:39.4937171Z 542 โ โ route={{ params: { environmentId: environmentId!, threadId: threadId! } }}
2026-10-25T02:16:39.4937246Z 543 โ โ />
2026-10-25T02:16:39.4937370Z 544 โ โฐโโถ );
2026-10-25T02:16:39.4937447Z 545 โ const FilesInspector = () =>
2026-10-25T02:16:39.4937500Z โฐโโโโ
2026-10-25T02:16:39.4937714Z help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-25T02:16:39.4937717Z
2026-10-25T02:16:39.4937924Z โ react(no-unstable-nested-components): Do not define components during render.
2026-10-25T02:16:39.4938077Z โญโ[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:545:26]
2026-10-25T02:16:39.4938134Z 544 โ );
2026-10-25T02:16:39.4938295Z 545 โ โญโโถ const FilesInspector = () =>
2026-10-25T02:16:39.4938442Z 546 โ โ selectedThread !== null && selectedThreadCwd !== null ? (
2026-10-25T02:16:39.4938546Z 547 โ โ <ThreadFileNavigatorPane
2026-10-25T02:16:39.4938648Z 548 โ โ cwd={selectedThreadCwd}
2026-10-25T02:16:39.4938783Z 549 โ โ environmentId={selectedThread.environmentId}
2026-10-25T02:16:39.4938903Z 550 โ โ headerInset={inspectorHeaderInset}
2026-10-25T02:16:39.4939047Z 551 โ โ projectName={selectedThreadProject?.title ?? "Files"}
2026-10-25T02:16:39.4939147Z 552 โ โ selectedPath={null}
2026-10-25T02:16:39.4939281Z 553 โ โ onSelectFile={handleSelectInspectorFile}
2026-10-25T02:16:39.4939360Z 554 โ โ />
2026-10-25T02:16:39.4939495Z 555 โ โฐโโถ ) : null;
2026-10-25T02:16:39.4939642Z 556 โ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset);
2026-10-25T02:16:39.4939693Z โฐโโโโ
2026-10-25T02:16:39.4939903Z help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props.
2026-10-25T02:16:39.4939906Z
2026-10-25T02:16:39.4940115Z โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T02:16:39.4940253Z โญโ[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7]
2026-10-25T02:16:39.4940404Z 772 โ if (settingsSheetPresentation.isActive) {
2026-10-25T02:16:39.4940560Z 773 โ settingsRoutePresentation.present(settingsRouteSession);
2026-10-25T02:16:39.4940652Z ยท โโโโโโโโโโโโโฌโโโโโโโโโโโโ
2026-10-25T02:16:39.4940822Z ยท โฐโโ Missing dependency `settingsRoutePresentation`
2026-10-25T02:16:39.4940876Z 774 โ }
2026-10-25T02:16:39.4941075Z 775 โ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]);
2026-10-25T02:16:39.4941181Z ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4941459Z ยท โฐโโ Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead
2026-10-25T02:16:39.4941512Z 776 โ
2026-10-25T02:16:39.4941562Z โฐโโโโ
2026-10-25T02:16:39.4941982Z 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-25T02:16:39.4942292Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4942295Z
2026-10-25T02:16:39.4942446Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4942585Z โญโ[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5]
2026-10-25T02:16:39.4942742Z 387 โ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0;
2026-10-25T02:16:39.4942876Z 388 โ const animatedBorderRadius = useSharedValue(targetBorderRadius);
2026-10-25T02:16:39.4942969Z ยท โโโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4943123Z ยท โฐโโ `animatedBorderRadius` originates here
2026-10-25T02:16:39.4943278Z 389 โ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android";
2026-10-25T02:16:39.4943346Z 390 โ useLayoutEffect(() => {
2026-10-25T02:16:39.4943444Z 391 โ animatedBorderRadius.value = shouldAnimate
2026-10-25T02:16:39.4943529Z ยท โโโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4943682Z ยท โฐโโ `animatedBorderRadius` cannot be modified
2026-10-25T02:16:39.4943770Z 392 โ ? withTiming(targetBorderRadius, {
2026-10-25T02:16:39.4943819Z โฐโโโโ
2026-10-25T02:16:39.4944078Z 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-25T02:16:39.4944422Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4944428Z
2026-10-25T02:16:39.4944680Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4944842Z โญโ[apps/mobile/src/features/threads/use-composer-command-menu.ts:217:7]
2026-10-25T02:16:39.4944894Z 213 โ };
2026-10-25T02:16:39.4944961Z 214 โ useEffect(() => {
2026-10-25T02:16:39.4945031Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4945157Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4945326Z 215 โ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null;
2026-10-25T02:16:39.4945392Z 216 โ if (inserted) {
2026-10-25T02:16:39.4945514Z 217 โ setSelection((current) =>
2026-10-25T02:16:39.4945620Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4945785Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4947965Z 218 โ current.start === inserted.start && current.end === inserted.end ? current : inserted,
2026-10-25T02:16:39.4948025Z โฐโโโโ
2026-10-25T02:16:39.4948619Z 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-25T02:16:39.4948942Z 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-25T02:16:39.4948947Z
2026-10-25T02:16:39.4949203Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4949365Z โญโ[apps/mobile/src/features/threads/use-composer-command-menu.ts:298:7]
2026-10-25T02:16:39.4949441Z 286 โ }, [hasWorkspaceSnapshot]);
2026-10-25T02:16:39.4949505Z 287 โ useEffect(() => {
2026-10-25T02:16:39.4949574Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4949702Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4949848Z 288 โ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return;
2026-10-25T02:16:39.4949993Z 289 โ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`;
2026-10-25T02:16:39.4950068Z 290 โ const now = Date.now();
2026-10-25T02:16:39.4950182Z 291 โ const lastRequest = workspaceRefreshKeyRef.current;
2026-10-25T02:16:39.4950238Z 292 โ if (
2026-10-25T02:16:39.4950314Z 293 โ lastRequest?.key === key &&
2026-10-25T02:16:39.4950449Z 294 โ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS
2026-10-25T02:16:39.4950503Z 295 โ )
2026-10-25T02:16:39.4950561Z 296 โ return;
2026-10-25T02:16:39.4950800Z 297 โ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) {
2026-10-25T02:16:39.4950886Z 298 โ setWorkspaceRefreshRetry(null);
2026-10-25T02:16:39.4950979Z ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4951152Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4951211Z 299 โ return;
2026-10-25T02:16:39.4951269Z โฐโโโโ
2026-10-25T02:16:39.4951852Z 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-25T02:16:39.4952167Z 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-25T02:16:39.4952172Z
2026-10-25T02:16:39.4952368Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4952528Z โญโ[apps/mobile/src/features/threads/use-composer-command-menu.ts:328:5]
2026-10-25T02:16:39.4952584Z 327 โ }, [
2026-10-25T02:16:39.4952721Z 328 โ draftMessage,
2026-10-25T02:16:39.4952834Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4952977Z ยท โฐโโ Unnecessary dependency `draftMessage`
2026-10-25T02:16:39.4953042Z 329 โ environmentId,
2026-10-25T02:16:39.4953091Z โฐโโโโ
2026-10-25T02:16:39.4953380Z 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-25T02:16:39.4953684Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4953687Z
2026-10-25T02:16:39.4953839Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4954001Z โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:111:5]
2026-10-25T02:16:39.4954056Z 107 โ );
2026-10-25T02:16:39.4954240Z 108 โ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0);
2026-10-25T02:16:39.4954331Z ยท โโโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4954478Z ยท โฐโโ `separationProgress` originates here
2026-10-25T02:16:39.4954530Z 109 โ
2026-10-25T02:16:39.4954596Z 110 โ useEffect(() => {
2026-10-25T02:16:39.4954766Z 111 โ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING);
2026-10-25T02:16:39.4954848Z ยท โโโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4954996Z ยท โฐโโ `separationProgress` cannot be modified
2026-10-25T02:16:39.4955103Z 112 โ }, [props.showScrollToEnd, separationProgress]);
2026-10-25T02:16:39.4955154Z โฐโโโโ
2026-10-25T02:16:39.4955420Z 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-25T02:16:39.4955723Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4955727Z
2026-10-25T02:16:39.4955878Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4956036Z โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-25T02:16:39.4956145Z 128 โ // and repeatedly retargets the animation as it grows.
2026-10-25T02:16:39.4956258Z 129 โ const capsuleWidth = useSharedValue<number | null>(null);
2026-10-25T02:16:39.4956336Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4956473Z ยท โฐโโ `capsuleWidth` originates here
2026-10-25T02:16:39.4956584Z 130 โ const measuredWidthRef = useRef<number | null>(null);
2026-10-25T02:16:39.4956696Z 131 โ const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-25T02:16:39.4956800Z 132 โ const width = event.nativeEvent.layout.width;
2026-10-25T02:16:39.4956893Z 133 โ if (width === measuredWidthRef.current) {
2026-10-25T02:16:39.4956952Z 134 โ return;
2026-10-25T02:16:39.4957006Z 135 โ }
2026-10-25T02:16:39.4957108Z 136 โ const first = measuredWidthRef.current === null;
2026-10-25T02:16:39.4957192Z 137 โ measuredWidthRef.current = width;
2026-10-25T02:16:39.4957330Z 138 โ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-25T02:16:39.4957406Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4957592Z ยท โฐโโ `capsuleWidth` cannot be modified
2026-10-25T02:16:39.4957682Z 139 โ };
2026-10-25T02:16:39.4957733Z โฐโโโโ
2026-10-25T02:16:39.4957991Z 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-25T02:16:39.4958288Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4958291Z
2026-10-25T02:16:39.4958445Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4958603Z โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-25T02:16:39.4958710Z 128 โ // and repeatedly retargets the animation as it grows.
2026-10-25T02:16:39.4958824Z 129 โ const capsuleWidth = useSharedValue<number | null>(null);
2026-10-25T02:16:39.4958905Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4959038Z ยท โฐโโ `capsuleWidth` originates here
2026-10-25T02:16:39.4959145Z 130 โ const measuredWidthRef = useRef<number | null>(null);
2026-10-25T02:16:39.4959255Z 131 โ const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-25T02:16:39.4959357Z 132 โ const width = event.nativeEvent.layout.width;
2026-10-25T02:16:39.4959449Z 133 โ if (width === measuredWidthRef.current) {
2026-10-25T02:16:39.4959507Z 134 โ return;
2026-10-25T02:16:39.4959559Z 135 โ }
2026-10-25T02:16:39.4959664Z 136 โ const first = measuredWidthRef.current === null;
2026-10-25T02:16:39.4959748Z 137 โ measuredWidthRef.current = width;
2026-10-25T02:16:39.4959886Z 138 โ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-25T02:16:39.4959942Z 139 โ };
2026-10-25T02:16:39.4960032Z 140 โ const hasStatus = props.status !== null;
2026-10-25T02:16:39.4960164Z 141 โ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-25T02:16:39.4960229Z 142 โ useEffect(() => {
2026-10-25T02:16:39.4960292Z 143 โ if (!hasStatus) {
2026-10-25T02:16:39.4960376Z 144 โ measuredWidthRef.current = null;
2026-10-25T02:16:39.4960453Z 145 โ capsuleWidth.value = null;
2026-10-25T02:16:39.4960529Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4960663Z ยท โฐโโ `capsuleWidth` cannot be modified
2026-10-25T02:16:39.4960717Z 146 โ }
2026-10-25T02:16:39.4960769Z โฐโโโโ
2026-10-25T02:16:39.4961075Z 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-25T02:16:39.4961398Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4961401Z
2026-10-25T02:16:39.4961598Z โ react(immutability): Cannot modify local variables after render completes
2026-10-25T02:16:39.4961758Z โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:145:7]
2026-10-25T02:16:39.4961889Z 141 โ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview;
2026-10-25T02:16:39.4961951Z 142 โ useEffect(() => {
2026-10-25T02:16:39.4962028Z ยท โโโโฌโโโ
2026-10-25T02:16:39.4962244Z ยท โฐโโ This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-25T02:16:39.4962314Z 143 โ if (!hasStatus) {
2026-10-25T02:16:39.4962400Z 144 โ measuredWidthRef.current = null;
2026-10-25T02:16:39.4962475Z 145 โ capsuleWidth.value = null;
2026-10-25T02:16:39.4962549Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4962682Z ยท โฐโโ This modifies `capsuleWidth`
2026-10-25T02:16:39.4962735Z 146 โ }
2026-10-25T02:16:39.4962787Z โฐโโโโ
2026-10-25T02:16:39.4963124Z help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-25T02:16:39.4963421Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4963424Z
2026-10-25T02:16:39.4963624Z โ react(immutability): Cannot modify local variables after render completes
2026-10-25T02:16:39.4963782Z โญโ[apps/mobile/src/features/threads/floating-working-control.tsx:138:5]
2026-10-25T02:16:39.4963891Z 130 โ const measuredWidthRef = useRef<number | null>(null);
2026-10-25T02:16:39.4964004Z 131 โ const handleLabelLayout = (event: LayoutChangeEvent) => {
2026-10-25T02:16:39.4964126Z ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4964387Z ยท โฐโโ This function may (indirectly) reassign or modify `capsuleWidth` after render
2026-10-25T02:16:39.4964492Z 132 โ const width = event.nativeEvent.layout.width;
2026-10-25T02:16:39.4964585Z 133 โ if (width === measuredWidthRef.current) {
2026-10-25T02:16:39.4964644Z 134 โ return;
2026-10-25T02:16:39.4964695Z 135 โ }
2026-10-25T02:16:39.4964806Z 136 โ const first = measuredWidthRef.current === null;
2026-10-25T02:16:39.4964891Z 137 โ measuredWidthRef.current = width;
2026-10-25T02:16:39.4965029Z 138 โ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING);
2026-10-25T02:16:39.4965102Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4965232Z ยท โฐโโ This modifies `capsuleWidth`
2026-10-25T02:16:39.4965284Z 139 โ };
2026-10-25T02:16:39.4965339Z โฐโโโโ
2026-10-25T02:16:39.4965669Z help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-25T02:16:39.4966016Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4966045Z
2026-10-25T02:16:39.4966254Z โ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies
2026-10-25T02:16:39.4966422Z โญโ[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7]
2026-10-25T02:16:39.4966499Z 248 โ mountedRef.current = false;
2026-10-25T02:16:39.4966572Z 249 โ flow.setBranchQuery("");
2026-10-25T02:16:39.4966640Z ยท โโโฌโ
2026-10-25T02:16:39.4966763Z ยท โฐโโ Missing dependency `flow`
2026-10-25T02:16:39.4966816Z 250 โ };
2026-10-25T02:16:39.4966889Z 251 โ }, [flow.setBranchQuery]);
2026-10-25T02:16:39.4966974Z ยท โโโโโโโโโโฌโโโโโโโโโ
2026-10-25T02:16:39.4967179Z ยท โฐโโ Overly precise dependency `flow.setBranchQuery`, use `flow` instead
2026-10-25T02:16:39.4967233Z 252 โ
2026-10-25T02:16:39.4967284Z โฐโโโโ
2026-10-25T02:16:39.4967695Z 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-25T02:16:39.4968003Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4968006Z
2026-10-25T02:16:39.4968261Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4968406Z โญโ[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40]
2026-10-25T02:16:39.4968568Z 28 โ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live);
2026-10-25T02:16:39.4968635Z 29 โ useEffect(() => {
2026-10-25T02:16:39.4968704Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4968828Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4968950Z 30 โ if (snapshot && snapshot !== live) setHeld({ key, snapshot });
2026-10-25T02:16:39.4969054Z ยท โโโโฌโโโ
2026-10-25T02:16:39.4969241Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4969310Z 31 โ }, [key, live, snapshot]);
2026-10-25T02:16:39.4969360Z โฐโโโโ
2026-10-25T02:16:39.4969947Z 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-25T02:16:39.4970265Z 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-25T02:16:39.4970267Z
2026-10-25T02:16:39.4970519Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4970668Z โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:571:5]
2026-10-25T02:16:39.4970726Z 569 โ }, []);
2026-10-25T02:16:39.4970790Z 570 โ useEffect(() => {
2026-10-25T02:16:39.4970860Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4971029Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4971140Z 571 โ setKeyboardStateSuspect(false);
2026-10-25T02:16:39.4971229Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4971396Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4971496Z 572 โ }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-25T02:16:39.4971547Z โฐโโโโ
2026-10-25T02:16:39.4972122Z 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-25T02:16:39.4972439Z 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-25T02:16:39.4972444Z
2026-10-25T02:16:39.4972693Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4972840Z โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:967:7]
2026-10-25T02:16:39.4972994Z 964 โ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0);
2026-10-25T02:16:39.4973058Z 965 โ useEffect(() => {
2026-10-25T02:16:39.4973127Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4973249Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4973405Z 966 โ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) {
2026-10-25T02:16:39.4973515Z 967 โ setLastKnownKeyboardHeight(liveKeyboardHeight);
2026-10-25T02:16:39.4973616Z ยท โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
2026-10-25T02:16:39.4973788Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4973843Z 968 โ }
2026-10-25T02:16:39.4973893Z โฐโโโโ
2026-10-25T02:16:39.4974508Z 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-25T02:16:39.4974820Z 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-25T02:16:39.4974823Z
2026-10-25T02:16:39.4975076Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4975228Z โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1223:5]
2026-10-25T02:16:39.4975281Z 1221 โ
2026-10-25T02:16:39.4975346Z 1222 โ useEffect(() => {
2026-10-25T02:16:39.4975417Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.4975545Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.4975620Z 1223 โ setAnchorMessageId(null);
2026-10-25T02:16:39.4975703Z ยท โโโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4975869Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.4975949Z 1224 โ setSubmittedMessageId(null);
2026-10-25T02:16:39.4976002Z โฐโโโโ
2026-10-25T02:16:39.4976626Z 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-25T02:16:39.4976971Z 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-25T02:16:39.4976974Z
2026-10-25T02:16:39.4977168Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4977316Z โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:572:7]
2026-10-25T02:16:39.4977399Z 571 โ setKeyboardStateSuspect(false);
2026-10-25T02:16:39.4977496Z 572 โ }, [isKeyboardVisible, liveKeyboardHeight]);
2026-10-25T02:16:39.4977638Z ยท โโโโโโโโโฌโโโโโโโโ โโโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4977845Z ยท โ โฐโโ Unnecessary dependency `liveKeyboardHeight`
2026-10-25T02:16:39.4978000Z ยท โฐโโ Unnecessary dependency `isKeyboardVisible`
2026-10-25T02:16:39.4978125Z 573 โ const handleOwnedInputFocusChange = (focused: boolean) => {
2026-10-25T02:16:39.4978174Z โฐโโโโ
2026-10-25T02:16:39.4978461Z 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-25T02:16:39.4978764Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4978772Z
2026-10-25T02:16:39.4978971Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4979126Z โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1171:7]
2026-10-25T02:16:39.4979209Z 1170 โ userInputInsetProgress.set(1);
2026-10-25T02:16:39.4979369Z 1171 โ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]);
2026-10-25T02:16:39.4979462Z ยท โโโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4979637Z ยท โฐโโ Unnecessary dependency `activeUserInputRequestId`
2026-10-25T02:16:39.4979740Z 1172 โ const showContent = props.showContent ?? true;
2026-10-25T02:16:39.4979793Z โฐโโโโ
2026-10-25T02:16:39.4980082Z 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-25T02:16:39.4980387Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4980390Z
2026-10-25T02:16:39.4980583Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.4980735Z โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1229:15]
2026-10-25T02:16:39.4980804Z 1228 โ freeze.set(false);
2026-10-25T02:16:39.4980884Z 1229 โ }, [freeze, selectedThreadKey]);
2026-10-25T02:16:39.4980977Z ยท โโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.4981134Z ยท โฐโโ Unnecessary dependency `selectedThreadKey`
2026-10-25T02:16:39.4981234Z 1230 โ
2026-10-25T02:16:39.4981315Z โฐโโโโ
2026-10-25T02:16:39.4981599Z 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-25T02:16:39.4981900Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.4981902Z
2026-10-25T02:16:39.4982056Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4982204Z โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1059:5]
2026-10-25T02:16:39.4982313Z 1054 โ const composerPopoverHeight = useSharedValue(0);
2026-10-25T02:16:39.4982419Z 1055 โ const floatingControlCoverage = useSharedValue(
2026-10-25T02:16:39.4982518Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4982677Z ยท โฐโโ `floatingControlCoverage` originates here
2026-10-25T02:16:39.4982804Z 1056 โ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-25T02:16:39.4982857Z 1057 โ );
2026-10-25T02:16:39.4982921Z 1058 โ useEffect(() => {
2026-10-25T02:16:39.4983022Z 1059 โ floatingControlCoverage.value = withTiming(
2026-10-25T02:16:39.4983112Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.4983272Z ยท โฐโโ `floatingControlCoverage` cannot be modified
2026-10-25T02:16:39.4983396Z 1060 โ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0,
2026-10-25T02:16:39.4983447Z โฐโโโโ
2026-10-25T02:16:39.4983710Z 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-25T02:16:39.4984012Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4984015Z
2026-10-25T02:16:39.4984165Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4984352Z โญโ[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1077:7]
2026-10-25T02:16:39.4984535Z 1067 โ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null;
2026-10-25T02:16:39.4984657Z 1068 โ const combinedContentInsetEndAdjustment = useSharedValue(
2026-10-25T02:16:39.4984766Z ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4984997Z ยท โฐโโ `combinedContentInsetEndAdjustment` originates here
2026-10-25T02:16:39.4985153Z 1069 โ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount),
2026-10-25T02:16:39.4985207Z 1070 โ );
2026-10-25T02:16:39.4985274Z 1071 โ useAnimatedReaction(
2026-10-25T02:16:39.4985332Z 1072 โ () =>
2026-10-25T02:16:39.4985424Z 1073 โ contentInsetEndAdjustment.value +
2026-10-25T02:16:39.4985511Z 1074 โ floatingControlCoverage.value +
2026-10-25T02:16:39.4985704Z 1075 โ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0),
2026-10-25T02:16:39.4985768Z 1076 โ (value) => {
2026-10-25T02:16:39.4985881Z 1077 โ combinedContentInsetEndAdjustment.value = value;
2026-10-25T02:16:39.4985987Z ยท โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4986179Z ยท โฐโโ `combinedContentInsetEndAdjustment` cannot be modified
2026-10-25T02:16:39.4986238Z 1078 โ },
2026-10-25T02:16:39.4986289Z โฐโโโโ
2026-10-25T02:16:39.4986546Z 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-25T02:16:39.4986842Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4986846Z
2026-10-25T02:16:39.4986996Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4987147Z โญโ[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5]
2026-10-25T02:16:39.4987199Z 83 โ
2026-10-25T02:16:39.4987289Z 84 โ const cardCoverage = props.cardCoverage;
2026-10-25T02:16:39.4987366Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4987502Z ยท โฐโโ `cardCoverage` originates here
2026-10-25T02:16:39.4987582Z 85 โ const barHeightRef = useRef(0);
2026-10-25T02:16:39.4987659Z 86 โ const cardHeightRef = useRef(0);
2026-10-25T02:16:39.4987742Z 87 โ const cardHeight = useSharedValue(0);
2026-10-25T02:16:39.4987831Z 88 โ const notifyCoverage = useCallback(() => {
2026-10-25T02:16:39.4987896Z 89 โ if (!cardCoverage) {
2026-10-25T02:16:39.4987954Z 90 โ return;
2026-10-25T02:16:39.4988007Z 91 โ }
2026-10-25T02:16:39.4988170Z 92 โ // The card resizes with the keyboard every frame, so easing each sample would leave the
2026-10-25T02:16:39.4988269Z 93 โ // feed inset and floating controls trailing it.
2026-10-25T02:16:39.4988426Z 94 โ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-25T02:16:39.4988506Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4988642Z ยท โฐโโ `cardCoverage` cannot be modified
2026-10-25T02:16:39.4988706Z 95 โ }, [cardCoverage]);
2026-10-25T02:16:39.4988757Z โฐโโโโ
2026-10-25T02:16:39.4989044Z help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state
2026-10-25T02:16:39.4989341Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4989344Z
2026-10-25T02:16:39.4989494Z โ react(immutability): This value cannot be modified
2026-10-25T02:16:39.4989647Z โญโ[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7]
2026-10-25T02:16:39.4989775Z 86 โ const cardHeightRef = useRef(0);
2026-10-25T02:16:39.4989889Z 87 โ const cardHeight = useSharedValue(0);
2026-10-25T02:16:39.4989964Z ยท โโโโโโฌโโโโ
2026-10-25T02:16:39.4990093Z ยท โฐโโ `cardHeight` originates here
2026-10-25T02:16:39.4990185Z 88 โ const notifyCoverage = useCallback(() => {
2026-10-25T02:16:39.4990251Z 89 โ if (!cardCoverage) {
2026-10-25T02:16:39.4990310Z 90 โ return;
2026-10-25T02:16:39.4990362Z 91 โ }
2026-10-25T02:16:39.4990523Z 92 โ // The card resizes with the keyboard every frame, so easing each sample would leave the
2026-10-25T02:16:39.4990622Z 93 โ // feed inset and floating controls trailing it.
2026-10-25T02:16:39.4990827Z 94 โ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-25T02:16:39.4990892Z 95 โ }, [cardCoverage]);
2026-10-25T02:16:39.4990978Z 96 โ const handleBarLayout = useCallback(
2026-10-25T02:16:39.4991059Z 97 โ (event: LayoutChangeEvent) => {
2026-10-25T02:16:39.4991177Z 98 โ barHeightRef.current = event.nativeEvent.layout.height;
2026-10-25T02:16:39.4991243Z 99 โ notifyCoverage();
2026-10-25T02:16:39.4991296Z 100 โ },
2026-10-25T02:16:39.4991360Z 101 โ [notifyCoverage],
2026-10-25T02:16:39.4991417Z 102 โ );
2026-10-25T02:16:39.4991502Z 103 โ const handleCardLayout = useCallback(
2026-10-25T02:16:39.4991580Z 104 โ (event: LayoutChangeEvent) => {
2026-10-25T02:16:39.4991704Z 105 โ cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-25T02:16:39.4991815Z 106 โ cardHeight.value = event.nativeEvent.layout.height;
2026-10-25T02:16:39.4991891Z ยท โโโโโโฌโโโโ
2026-10-25T02:16:39.4992030Z ยท โฐโโ `cardHeight` cannot be modified
2026-10-25T02:16:39.4992097Z 107 โ notifyCoverage();
2026-10-25T02:16:39.4992148Z โฐโโโโ
2026-10-25T02:16:39.4992406Z 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-25T02:16:39.4992703Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4992706Z
2026-10-25T02:16:39.4992902Z โ react(immutability): Cannot modify local variables after render completes
2026-10-25T02:16:39.4993051Z โญโ[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5]
2026-10-25T02:16:39.4993135Z 87 โ const cardHeight = useSharedValue(0);
2026-10-25T02:16:39.4993228Z 88 โ const notifyCoverage = useCallback(() => {
2026-10-25T02:16:39.4993332Z ยท โโโโฌโโโ
2026-10-25T02:16:39.4993562Z ยท โฐโโ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-25T02:16:39.4993627Z 89 โ if (!cardCoverage) {
2026-10-25T02:16:39.4993685Z 90 โ return;
2026-10-25T02:16:39.4993737Z 91 โ }
2026-10-25T02:16:39.4993896Z 92 โ // The card resizes with the keyboard every frame, so easing each sample would leave the
2026-10-25T02:16:39.4993994Z 93 โ // feed inset and floating controls trailing it.
2026-10-25T02:16:39.4994148Z 94 โ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-25T02:16:39.4994254Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4994451Z ยท โฐโโ This modifies `cardCoverage`
2026-10-25T02:16:39.4994555Z 95 โ }, [cardCoverage]);
2026-10-25T02:16:39.4994607Z โฐโโโโ
2026-10-25T02:16:39.4994938Z help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-25T02:16:39.4995234Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4995238Z
2026-10-25T02:16:39.4995433Z โ react(immutability): Cannot modify local variables after render completes
2026-10-25T02:16:39.4995582Z โญโ[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5]
2026-10-25T02:16:39.4995680Z 93 โ // feed inset and floating controls trailing it.
2026-10-25T02:16:39.4995837Z 94 โ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current);
2026-10-25T02:16:39.4995911Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.4996039Z ยท โฐโโ This modifies `cardCoverage`
2026-10-25T02:16:39.4996102Z 95 โ }, [cardCoverage]);
2026-10-25T02:16:39.4996185Z 96 โ const handleBarLayout = useCallback(
2026-10-25T02:16:39.4996262Z 97 โ (event: LayoutChangeEvent) => {
2026-10-25T02:16:39.4996363Z ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4996580Z ยท โฐโโ This function may (indirectly) reassign or modify `cardCoverage` after render
2026-10-25T02:16:39.4996699Z 98 โ barHeightRef.current = event.nativeEvent.layout.height;
2026-10-25T02:16:39.4996749Z โฐโโโโ
2026-10-25T02:16:39.4997083Z help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-25T02:16:39.4997382Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4997384Z
2026-10-25T02:16:39.4997577Z โ react(immutability): Cannot modify local variables after render completes
2026-10-25T02:16:39.4997729Z โญโ[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7]
2026-10-25T02:16:39.4997814Z 103 โ const handleCardLayout = useCallback(
2026-10-25T02:16:39.4997895Z 104 โ (event: LayoutChangeEvent) => {
2026-10-25T02:16:39.4997997Z ยท โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.4998213Z ยท โฐโโ This function may (indirectly) reassign or modify `cardHeight` after render
2026-10-25T02:16:39.4998342Z 105 โ cardHeightRef.current = event.nativeEvent.layout.height;
2026-10-25T02:16:39.4998454Z 106 โ cardHeight.value = event.nativeEvent.layout.height;
2026-10-25T02:16:39.4998527Z ยท โโโโโโฌโโโโ
2026-10-25T02:16:39.4998655Z ยท โฐโโ This modifies `cardHeight`
2026-10-25T02:16:39.4998720Z 107 โ notifyCoverage();
2026-10-25T02:16:39.4998771Z โฐโโโโ
2026-10-25T02:16:39.4999098Z help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead
2026-10-25T02:16:39.4999443Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability
2026-10-25T02:16:39.4999475Z
2026-10-25T02:16:39.4999728Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.4999878Z โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5]
2026-10-25T02:16:39.4999930Z 55 โ
2026-10-25T02:16:39.4999994Z 56 โ useEffect(() => {
2026-10-25T02:16:39.5000062Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.5000187Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.5000254Z 57 โ setDecodedSize(null);
2026-10-25T02:16:39.5000330Z ยท โโโโโโโโฌโโโโโโ
2026-10-25T02:16:39.5000492Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.5000559Z 58 โ }, [props.sourceKey]);
2026-10-25T02:16:39.5000616Z โฐโโโโ
2026-10-25T02:16:39.5001198Z 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-25T02:16:39.5001511Z 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-25T02:16:39.5001513Z
2026-10-25T02:16:39.5001764Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.5001911Z โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5]
2026-10-25T02:16:39.5001963Z 59 โ
2026-10-25T02:16:39.5002029Z 60 โ useEffect(() => {
2026-10-25T02:16:39.5002097Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.5002220Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.5002287Z 61 โ setFailedUri(null);
2026-10-25T02:16:39.5002360Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.5002522Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.5002585Z 62 โ }, [props.uri]);
2026-10-25T02:16:39.5002635Z โฐโโโโ
2026-10-25T02:16:39.5003212Z 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-25T02:16:39.5003567Z 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-25T02:16:39.5003599Z
2026-10-25T02:16:39.5003808Z โ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used.
2026-10-25T02:16:39.5003954Z โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10]
2026-10-25T02:16:39.5004076Z 6 โ import { parse, SvgAst, type JsxAST } from "react-native-svg";
2026-10-25T02:16:39.5004277Z 7 โ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native";
2026-10-25T02:16:39.5004363Z ยท โโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.5004508Z ยท โฐโโ 'ActivityIndicator' is imported here
2026-10-25T02:16:39.5004566Z 8 โ
2026-10-25T02:16:39.5004619Z โฐโโโโ
2026-10-25T02:16:39.5004715Z help: Consider removing this import.
2026-10-25T02:16:39.5004717Z
2026-10-25T02:16:39.5004913Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.5005058Z โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7]
2026-10-25T02:16:39.5005124Z 57 โ setDecodedSize(null);
2026-10-25T02:16:39.5005190Z 58 โ }, [props.sourceKey]);
2026-10-25T02:16:39.5005269Z ยท โโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.5005420Z ยท โฐโโ Unnecessary dependency `props.sourceKey`
2026-10-25T02:16:39.5005472Z 59 โ
2026-10-25T02:16:39.5005521Z โฐโโโโ
2026-10-25T02:16:39.5005813Z 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-25T02:16:39.5006121Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.5006123Z
2026-10-25T02:16:39.5006317Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.5006461Z โญโ[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7]
2026-10-25T02:16:39.5006526Z 61 โ setFailedUri(null);
2026-10-25T02:16:39.5006589Z 62 โ }, [props.uri]);
2026-10-25T02:16:39.5006661Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.5006796Z ยท โฐโโ Unnecessary dependency `props.uri`
2026-10-25T02:16:39.5006846Z 63 โ
2026-10-25T02:16:39.5006896Z โฐโโโโ
2026-10-25T02:16:39.5007184Z 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-25T02:16:39.5007487Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.5007489Z
2026-10-25T02:16:39.5007739Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.5007869Z โญโ[apps/mobile/src/components/ProjectFavicon.tsx:172:5]
2026-10-25T02:16:39.5008057Z 167 โ const [activeFaviconRequest, setActiveFaviconRequest] = useState<typeof faviconRequest>(null);
2026-10-25T02:16:39.5008126Z 168 โ useLayoutEffect(() => {
2026-10-25T02:16:39.5008201Z ยท โโโโโโโโฌโโโโโโโ
2026-10-25T02:16:39.5008379Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.5008495Z 169 โ if (faviconRequest === null) return;
2026-10-25T02:16:39.5008547Z 170 โ
2026-10-25T02:16:39.5008675Z 171 โ const endRequest = beginProjectFaviconRequest(faviconRequest);
2026-10-25T02:16:39.5008770Z 172 โ setActiveFaviconRequest(faviconRequest);
2026-10-25T02:16:39.5008859Z ยท โโโโโโโโโโโโฌโโโโโโโโโโโ
2026-10-25T02:16:39.5009027Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.5009093Z 173 โ return endRequest;
2026-10-25T02:16:39.5009144Z โฐโโโโ
2026-10-25T02:16:39.5009728Z 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-25T02:16:39.5010043Z 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-25T02:16:39.5010045Z
2026-10-25T02:16:39.5010241Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.5010367Z โญโ[apps/mobile/src/components/ComposerEditor.tsx:82:6]
2026-10-25T02:16:39.5010421Z 81 โ },
2026-10-25T02:16:39.5010481Z 82 โ [draftKey],
2026-10-25T02:16:39.5010553Z ยท โโโโโฌโโโ
2026-10-25T02:16:39.5010684Z ยท โฐโโ Unnecessary dependency `draftKey`
2026-10-25T02:16:39.5010738Z 83 โ );
2026-10-25T02:16:39.5010793Z โฐโโโโ
2026-10-25T02:16:39.5011081Z 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-25T02:16:39.5011384Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.5011386Z
2026-10-25T02:16:39.5011637Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.5011781Z โญโ[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55]
2026-10-25T02:16:39.5011839Z 61 โ }, []);
2026-10-25T02:16:39.5011901Z 62 โ useEffect(() => {
2026-10-25T02:16:39.5011969Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.5012098Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.5012246Z 63 โ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl);
2026-10-25T02:16:39.5012367Z ยท โโโโโโโโฌโโโโโโ
2026-10-25T02:16:39.5012567Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.5012644Z 64 โ }, [playbackUrl, resolvedUrl]);
2026-10-25T02:16:39.5012693Z โฐโโโโ
2026-10-25T02:16:39.5013377Z 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-25T02:16:39.5013716Z 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-25T02:16:39.5013719Z
2026-10-25T02:16:39.5013969Z โ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders
2026-10-25T02:16:39.5014100Z โญโ[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5]
2026-10-25T02:16:39.5014151Z 57 โ
2026-10-25T02:16:39.5014233Z 58 โ useEffect(() => {
2026-10-25T02:16:39.5014302Z ยท โโโโโฌโโโโ
2026-10-25T02:16:39.5014425Z ยท โฐโโ This is the containing effect
2026-10-25T02:16:39.5014517Z 59 โ const controller = new AbortController();
2026-10-25T02:16:39.5014587Z 60 โ setLoadState("pending");
2026-10-25T02:16:39.5014665Z ยท โโโโโโโฌโโโโโ
2026-10-25T02:16:39.5014828Z ยท โฐโโ Avoid calling setState() directly within an effect
2026-10-25T02:16:39.5014983Z 61 โ // A renewed signature is used on Retry, not as a reason to reset the native player.
2026-10-25T02:16:39.5015032Z โฐโโโโ
2026-10-25T02:16:39.5015605Z 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-25T02:16:39.5015919Z 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-25T02:16:39.5015921Z
2026-10-25T02:16:39.5016119Z โ react(exhaustive-effect-dependencies): Found extra effect dependencies
2026-10-25T02:16:39.5016251Z โญโ[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7]
2026-10-25T02:16:39.5016329Z 70 โ return () => controller.abort();
2026-10-25T02:16:39.5016423Z 71 โ }, [player, props.playRequested, attempt]);
2026-10-25T02:16:39.5016592Z ยท โโโโฌโโ โโโโโโโโโโฌโโโโโโโโโ โโโโฌโโโ
2026-10-25T02:16:39.5016811Z ยท โ โ โฐโโ Unnecessary dependency `attempt`
2026-10-25T02:16:39.5017006Z ยท โ โฐโโ Unnecessary dependency `props.playRequested`
2026-10-25T02:16:39.5017144Z ยท โฐโโ Unnecessary dependency `player_0`
2026-10-25T02:16:39.5017199Z 72 โ
2026-10-25T02:16:39.5017248Z โฐโโโโ
2026-10-25T02:16:39.5017535Z 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-25T02:16:39.5017838Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.5017840Z
2026-10-25T02:16:39.5018028Z โ react(no-array-index-key): Usage of Array index in keys is not allowed
2026-10-25T02:16:39.5018172Z โญโ[apps/mobile/src/components/ComposerContextSheet.tsx:272:25]
2026-10-25T02:16:39.5018280Z 271 โ {record.elements?.map((element, index) => (
2026-10-25T02:16:39.5018488Z 272 โ <View key={`${element.selector ?? element.tagName}:${index}`} className="gap-3">
2026-10-25T02:16:39.5018667Z ยท โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2026-10-25T02:16:39.5018742Z 273 โ <ContextField
2026-10-25T02:16:39.5018792Z โฐโโโโ
2026-10-25T02:16:39.5018934Z help: Use a unique data-dependent key to avoid unnecessary rerenders
2026-10-25T02:16:39.5018938Z
2026-10-25T02:16:39.5019139Z โ eslint(no-unused-vars): Type 'ScheduledTaskDraft' is imported but never used.
2026-10-25T02:16:39.5019290Z โญโ[apps/mobile/src/features/settings/scheduled-task-editor.tsx:10:8]
2026-10-25T02:16:39.5019369Z 9 โ hasScheduledTaskDraftChanges,
2026-10-25T02:16:39.5019439Z 10 โ type ScheduledTaskDraft,
2026-10-25T02:16:39.5019523Z ยท โโโโโโโโโโฌโโโโโโโโ
2026-10-25T02:16:39.5019678Z ยท โฐโโ 'ScheduledTaskDraft' is imported here
2026-10-25T02:16:39.5019755Z 11 โ } from "./scheduledTaskDraft";
2026-10-25T02:16:39.5019804Z โฐโโโโ
2026-10-25T02:16:39.5019899Z help: Consider removing this import.
2026-10-25T02:16:39.5019902Z
2026-10-25T02:16:39.5020078Z โ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T02:16:39.5020232Z โญโ[apps/mobile/src/features/settings/scheduled-task-editor.tsx:81:85]
2026-10-25T02:16:39.5020332Z 80 โ const startEditor = startScheduledTaskEditor;
2026-10-25T02:16:39.5020508Z 81 โ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]);
2026-10-25T02:16:39.5020649Z ยท โโโโโโฌโโโโโ
2026-10-25T02:16:39.5020851Z ยท โฐโโ Unnecessary dependency `startEditor`
2026-10-25T02:16:39.5020930Z 82 โ const readEditor = useCallback(
2026-10-25T02:16:39.5020979Z โฐโโโโ
2026-10-25T02:16:39.5021288Z 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-25T02:16:39.5021593Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.5021595Z
2026-10-25T02:16:39.5021770Z โ react(memo-dependencies): Found extra memoization dependencies
2026-10-25T02:16:39.5021930Z โญโ[apps/mobile/src/features/settings/scheduled-task-editor.tsx:102:7]
2026-10-25T02:16:39.5021994Z 101 โ setEditor,
2026-10-25T02:16:39.5022057Z 102 โ startEditor,
2026-10-25T02:16:39.5022133Z ยท โโโโโโฌโโโโโ
2026-10-25T02:16:39.5022272Z ยท โฐโโ Unnecessary dependency `startEditor`
2026-10-25T02:16:39.5022334Z 103 โ hasChanges,
2026-10-25T02:16:39.5022384Z โฐโโโโ
2026-10-25T02:16:39.5022690Z 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-25T02:16:39.5022993Z note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps
2026-10-25T02:16:39.5022995Z
2026-10-25T02:16:39.5023123Z Found 0 errors and 377 warnings in 5539 files (4.9s, 8 threads)
2026-10-25T02:16:39.5427088Z Post job cleanup.
2026-10-25T02:16:39.6021135Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
2026-10-25T02:16:39.6083689Z Post job cleanup.
2026-10-25T02:16:39.6096883Z ##[start-action display=Cache full pnpm store;id=__7957b473-12f9-4ac0-82ad-42d52cd1ef70.__actions_cache]
2026-10-25T02:16:39.6379988Z Post job cleanup.
2026-10-25T02:16:39.6970869Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3343c3b1388f61a61de99ade7ddf42400f9622aebf34bf75a63eccbd0dde8e3d, not saving cache.
2026-10-25T02:16:39.6999190Z ##[end-action id=__7957b473-12f9-4ac0-82ad-42d52cd1ef70.__actions_cache;outcome=success;conclusion=success;duration_ms=90]
2026-10-25T02:16:39.7001026Z ##[start-action display=Cache Vite+;id=__7957b473-12f9-4ac0-82ad-42d52cd1ef70.vp_cache]
2026-10-25T02:16:39.7031237Z Post job cleanup.
2026-10-25T02:16:39.7638512Z 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-25T02:16:39.7672069Z ##[end-action id=__7957b473-12f9-4ac0-82ad-42d52cd1ef70.vp_cache;outcome=success;conclusion=success;duration_ms=67]
2026-10-25T02:16:39.7707024Z Post job cleanup.
2026-10-25T02:16:39.8101847Z [command]/usr/local/bin/git version
2026-10-25T02:16:39.8128733Z git version 2.55.0
2026-10-25T02:16:39.8176474Z Temporarily overriding HOME='/home/runner/_work/_temp/c1b72717-1831-4a45-ad0a-eccde49b26eb' before making global git config changes
2026-10-25T02:16:39.8176820Z Adding repository directory to the temporary git global config as a safe directory
2026-10-25T02:16:39.8179225Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
2026-10-25T02:16:39.8199067Z Removing SSH command configuration
2026-10-25T02:16:39.8201727Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-25T02:16:39.8222433Z [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-25T02:16:39.8330997Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
2026-10-25T02:16:39.8353239Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128
2026-10-25T02:16:39.8385184Z A job completed hook has been configured by the self-hosted runner administrator
2026-10-25T02:16:39.8403818Z ##[group]Run '/job_completed.sh'
2026-10-25T02:16:39.8413629Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2026-10-25T02:16:39.8413805Z env:
2026-10-25T02:16:39.8413918Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162
2026-10-25T02:16:39.8414070Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 401
2026-10-25T02:16:39.8414233Z BLACKSMITH_CHECK_RUN_ID: 121050673687
2026-10-25T02:16:39.8414385Z BLACKSMITH_JOB_DISPLAY_NAME: Lint
2026-10-25T02:16:39.8414520Z GITHUB_ACTIONS_CACHE_MODE: write
2026-10-25T02:16:39.8414651Z ##[endgroup]
2026-10-25T02:16:39.8486251Z Docker container cache not activated, skipping hash computation.
2026-10-25T02:16:39.8728044Z No active SSH sessions detected. Proceeding with shutdown immediately.
2026-10-25T02:16:39.8767044Z Cleaning up orphan processes