Skip to content

React Review Audit #265

@reactreview

Description

@reactreview
⚠️ 499 warnings 69 score
Copy as prompt
Fix the following React Review diagnostics in my codebase.

## Warnings (499)

1. [warning] design-no-redundant-size-axes — src/app/extensions/components/catalog-item-row.tsx:113
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

2. [warning] prefer-tag-over-role — src/app/extensions/components/catalog-item-row.tsx:124
   Prefer the semantic `<img>` element over `role="img"` on a generic tag.

3. [warning] design-no-redundant-size-axes — src/app/extensions/components/catalog-item-row.tsx:123
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

4. [warning] control-has-associated-label — src/app/components/sidebar/chat/sidebar-chat-section.tsx:125
   A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.

5. [warning] design-no-redundant-size-axes — src/app/chat-workspace/chat-workspace-composer.tsx:107
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

6. [warning] jsx-no-jsx-as-prop — src/app/chat-workspace/chat-workspace-composer.tsx:271
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

7. [warning] no-many-boolean-props — src/app/components/sidebar/chat/chat-group-row.tsx:157
   Component "ChatGroupRow" takes 4 boolean-like props (isActive, isDragging, isExpanded…) — consider compound components or explicit variants instead of stacking flags

8. [warning] exhaustive-deps — src/app/components/sidebar/chat/chat-group-row.tsx:186
   The ref value `clickTimeoutRef.current` will likely have changed by the time this effect cleanup function runs. Copy it to a variable inside the hook callback and use that variable in cleanup.

9. [warning] design-no-redundant-size-axes — src/app/common/split-button.tsx:27
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

10. [warning] design-no-redundant-size-axes — src/app/components/sidebar/inbox/inbox-thread-row.tsx:38
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

11. [warning] design-no-redundant-size-axes — src/app/components/sidebar/inbox/inbox-thread-row.tsx:40
   w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)

12. [warning] no-multi-comp — src/app/common/thread-message.tsx:130
   Declare only one React component per file. Found extra component: SummaryBlock.

13. [warning] no-multi-comp — src/app/common/thread-message.tsx:139
   Declare only one React component per file. Found extra component: UserMessageBlock.

14. [warning] no-multi-comp — src/app/common/thread-message.tsx:161
   Declare only one React component per file. Found extra component: AssistantMessageBlock.

15. [warning] no-multi-comp — src/app/common/thread-message.tsx:223
   Declare only one React component per file. Found extra component: CustomMessageBlock.

16. [warning] no-multi-comp — src/app/common/thread-message.tsx:234
   Declare only one React component per file. Found extra component: SystemMessageBlock.

17. [warning] no-multi-comp — src/app/common/thread-message.tsx:273
   Declare only one React component per file. Found extra component: ThreadMessageComponent.

18. [warning] no-derived-useState — src/app/common/thread-message.tsx:65
   useState initialized from prop "autoExpandThinking" — if this value should stay in sync with the prop, derive it during render instead

19. [warning] no-derived-state — src/app/common/thread-message.tsx:71
   Avoid storing derived state. Compute "expanded" directly during render, optionally with `useMemo` if it's expensive.

20. [warning] no-derived-state — src/app/common/thread-message.tsx:73
   Avoid storing derived state. Compute "expanded" directly during render, optionally with `useMemo` if it's expensive.

21. [warning] design-no-em-dash-in-jsx-text — src/app/common/thread-message.tsx:110
   Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses

22. [warning] no-render-in-render — src/app/common/thread-message.tsx:120
   Inline render function "renderThinking()" — extract to a separate component for proper reconciliation

23. [warning] no-render-in-render — src/app/common/thread-message.tsx:134
   Inline render function "renderThinking()" — extract to a separate component for proper reconciliation

24. [warning] no-render-in-render — src/app/common/thread-message.tsx:190
   Inline render function "renderProse()" — extract to a separate component for proper reconciliation

25. [warning] no-render-in-render — src/app/common/thread-message.tsx:229
   Inline render function "renderProse()" — extract to a separate component for proper reconciliation

26. [warning] no-render-in-render — src/app/common/thread-message.tsx:251
   Inline render function "renderProse()" — extract to a separate component for proper reconciliation

27. [warning] no-render-in-render — src/app/common/thread-message.tsx:281
   Inline render function "renderThreadMessageContent()" — extract to a separate component for proper reconciliation

28. [warning] no-event-handler — src/app/components/sidebar/projects/sidebar-projects-create-popover.tsx:47
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

29. [warning] no-many-boolean-props — src/app/components/sidebar/project-tree/project-row.tsx:182
   Component "ProjectRow" takes 8 boolean-like props (canEdit, canToggleExpanded, isActive…) — consider compound components or explicit variants instead of stacking flags

30. [warning] no-multi-comp — src/app/components/sidebar/project-work/branch-thread-groups.tsx:126
   Declare only one React component per file. Found extra component: ProjectExpandedBranchGroups.

31. [warning] no-multi-comp — src/app/components/sidebar/project-work/branch-thread-groups.tsx:198
   Declare only one React component per file. Found extra component: ProjectCompactBranchGroups.

32. [warning] no-react19-deprecated-apis — src/app/components/sidebar/project-work/project-work-actions-menu.tsx:2
   forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly

33. [warning] prefer-useReducer — src/app/composer/composer-file-picker.tsx:58
   Component "ComposerFilePicker" has 5 useState calls — consider useReducer for related state

34. [warning] no-event-handler — src/app/composer/composer-file-picker.tsx:139
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

35. [warning] no-effect-chain — src/app/components/sidebar/project-work/project-work-section.tsx:107
   useEffect reacts to "storedVisibleProjectIds" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain

36. [warning] prefer-useReducer — src/app/components/sidebar/project-work/project-work-section.tsx:74
   Component "ProjectWorkSection" has 7 useState calls — consider useReducer for related state

37. [warning] no-derived-state — src/app/components/sidebar/project-work/project-work-section.tsx:104
   Avoid storing derived state. Compute "storedVisibleProjectIds" directly during render, optionally with `useMemo` if it's expensive.

38. [warning] no-chain-state-updates — src/app/components/sidebar/project-work/project-work-section.tsx:109
   Avoid chaining state changes. When possible, update all relevant state simultaneously.

39. [warning] no-derived-state — src/app/components/sidebar/project-work/project-work-section.tsx:109
   Avoid storing derived state. Compute "storedVisibleProjectIds" directly during render, optionally with `useMemo` if it's expensive.

40. [warning] no-prop-callback-in-effect — src/app/components/sidebar/project-work/project-work-section.tsx:163
   useEffect calls prop callback "onLoadProjectThreads" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source

41. [warning] jsx-no-jsx-as-prop — src/app/composer/composer-prompt-input-panel.tsx:218
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

42. [warning] no-multi-comp — src/app/components/sidebar/sidebar-skeletons.tsx:43
   Declare only one React component per file. Found extra component: SidebarChatSkeleton.

43. [warning] no-multi-comp — src/app/components/sidebar/sidebar-skeletons.tsx:70
   Declare only one React component per file. Found extra component: SidebarInboxSkeleton.

44. [warning] prefer-tag-over-role — src/app/components/sidebar/sidebar-skeletons.tsx:18
   Prefer the semantic `<output>` element over `role="status"` on a generic tag.

45. [warning] design-no-redundant-size-axes — src/app/components/sidebar/sidebar-skeletons.tsx:26
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

46. [warning] prefer-tag-over-role — src/app/components/sidebar/sidebar-skeletons.tsx:47
   Prefer the semantic `<output>` element over `role="status"` on a generic tag.

47. [warning] design-no-redundant-size-axes — src/app/components/sidebar/sidebar-skeletons.tsx:55
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

48. [warning] prefer-tag-over-role — src/app/components/sidebar/sidebar-skeletons.tsx:74
   Prefer the semantic `<output>` element over `role="status"` on a generic tag.

49. [warning] design-no-redundant-size-axes — src/app/app-shell/app-shell-overlays.tsx:54
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

50. [warning] no-adjust-state-on-prop-change — src/app/composer/composer-context-meter.tsx:279
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

51. [warning] no-adjust-state-on-prop-change — src/app/composer/composer-context-meter.tsx:280
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

52. [warning] no-chain-state-updates — src/app/composer/composer-context-meter.tsx:285
   Avoid chaining state changes. When possible, update all relevant state simultaneously.

53. [warning] no-derived-state — src/app/composer/composer-context-meter.tsx:285
   Avoid storing derived state. Compute "usageTotals" directly during render, optionally with `useMemo` if it's expensive.

54. [warning] no-event-handler — src/app/composer/composer-context-meter.tsx:212
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

55. [warning] no-event-handler — src/app/composer/composer-context-meter.tsx:212
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

56. [warning] design-no-redundant-size-axes — src/app/composer/composer-context-meter.tsx:299
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

57. [warning] design-no-redundant-size-axes — src/app/composer/file-entry-button.tsx:86
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

58. [warning] exhaustive-deps — src/app/common/tooltip.tsx:75
   The ref value `openTimerRef.current` will likely have changed by the time this effect cleanup function runs. Copy it to a variable inside the hook callback and use that variable in cleanup.

59. [warning] no-cascading-set-state — src/app/common/tooltip.tsx:83
   3 setState calls in a single useEffect — consider using useReducer or deriving state

60. [warning] design-no-redundant-size-axes — src/app/composer/composer-side-controls.tsx:57
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

61. [warning] design-no-redundant-size-axes — src/app/components/sidebar/project-work/project-scope-selector.tsx:140
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

62. [warning] jsx-no-target-blank — src/app/common/markdown-content.tsx:81
   `target="_blank"` without `rel="noreferrer"` is a security risk — add `rel="noreferrer"`.

63. [warning] no-prevent-default — src/app/common/markdown-content.tsx:67
   preventDefault() on <a> onClick — use a <button> or routing component instead

64. [warning] prefer-useReducer — src/app/components/sidebar/inbox/sidebar-inbox-section.tsx:175
   Component "SidebarInboxSection" has 5 useState calls — consider useReducer for related state

65. [warning] prefer-useReducer — src/app/app-shell/app-shell-layout.tsx:105
   Component "AppShellLayout" has 6 useState calls — consider useReducer for related state

66. [warning] no-adjust-state-on-prop-change — src/app/app-shell/app-shell-layout.tsx:211
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

67. [warning] no-adjust-state-on-prop-change — src/app/app-shell/app-shell-layout.tsx:212
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

68. [warning] no-event-handler — src/app/app-shell/app-shell-layout.tsx:134
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

69. [warning] no-chain-state-updates — src/app/app-shell/app-shell-layout.tsx:236
   Avoid chaining state changes. When possible, update all relevant state simultaneously.

70. [warning] no-event-handler — src/app/app-shell/app-shell-layout.tsx:236
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

71. [warning] no-adjust-state-on-prop-change — src/app/app-shell/app-shell-layout.tsx:240
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

72. [warning] control-has-associated-label — src/app/common/segmented-toggle.tsx:51
   A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.

73. [warning] prefer-useReducer — src/app/components/sidebar/project-work/new-thread-menu.tsx:32
   Component "NewThreadMenu" has 5 useState calls — consider useReducer for related state

74. [warning] no-cascading-set-state — src/app/components/sidebar/project-work/new-thread-menu.tsx:61
   4 setState calls in a single useEffect — consider using useReducer or deriving state

75. [warning] design-no-redundant-size-axes — src/app/components/sidebar/project-work/new-thread-menu.tsx:116
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

76. [warning] no-giant-component — src/app/archive/archived-threads-view.tsx:48
   Component "ArchivedThreadsView" is 349 lines — consider breaking it into smaller focused components

77. [warning] no-derived-state — src/app/archive/archived-threads-view.tsx:91
   Avoid storing derived state. Compute "optimisticallyHiddenThreadIds" directly during render, optionally with `useMemo` if it's expensive.

78. [warning] no-derived-state — src/app/archive/archived-threads-view.tsx:99
   Avoid storing derived state. Compute "selectedThreadIds" directly during render, optionally with `useMemo` if it's expensive.

79. [warning] no-chain-state-updates — src/app/archive/archived-threads-view.tsx:106
   Avoid chaining state changes. When possible, update all relevant state simultaneously.

80. [warning] no-event-handler — src/app/archive/archived-threads-view.tsx:105
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

81. [warning] design-no-redundant-size-axes — src/app/archive/archived-threads-view.tsx:280
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

82. [warning] design-no-redundant-size-axes — src/app/archive/archived-threads-view.tsx:341
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

83. [warning] prefer-useReducer — src/app/components/sidebar/project-work/project-work-block.tsx:39
   Component "ProjectWorkBlockHeader" has 5 useState calls — consider useReducer for related state

84. [warning] no-derived-useState — src/app/components/sidebar/project-work/project-work-block.tsx:41
   useState initialized from prop "project" — if this value should stay in sync with the prop, derive it during render instead

85. [warning] no-chain-state-updates — src/app/components/sidebar/project-work/project-work-block.tsx:53
   Avoid chaining state changes. When possible, update all relevant state simultaneously.

86. [warning] no-derived-state — src/app/components/sidebar/project-work/project-work-block.tsx:53
   Avoid storing derived state. Compute "renameDraft" directly during render, optionally with `useMemo` if it's expensive.

87. [warning] no-event-handler — src/app/components/sidebar/project-work/project-work-block.tsx:53
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

88. [warning] no-cascading-set-state — src/app/components/sidebar/project-work/project-work-block.tsx:55
   4 setState calls in a single useEffect — consider using useReducer or deriving state

89. [warning] design-no-redundant-size-axes — src/app/components/sidebar/project-work/project-work-block.tsx:122
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

90. [warning] design-no-redundant-size-axes — src/app/code-workspace/code-workspace-footer.tsx:27
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

91. [warning] design-no-redundant-size-axes — src/app/code-workspace/code-workspace-footer.tsx:43
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

92. [warning] jsx-no-jsx-as-prop — src/app/code-workspace/code-workspace-footer.tsx:317
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

93. [warning] design-no-redundant-size-axes — src/app/composer/composer-file-picker-attachments-panel.tsx:78
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

94. [warning] design-no-redundant-size-axes — src/app/composer/composer-file-picker-attachments-panel.tsx:89
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

95. [warning] design-no-redundant-size-axes — src/app/composer/composer-footer.tsx:112
   w-[14px] h-[14px] → use the shorthand size-[14px] (Tailwind v3.4+)

96. [warning] design-no-redundant-size-axes — src/app/components/sidebar/sidebar.tsx:344
   w-[34px] h-[34px] → use the shorthand size-[34px] (Tailwind v3.4+)

97. [warning] no-barrel-import — src/app/composer/composer-prompt-surface.tsx:7
   Import from barrel/index file — import directly from source modules: "../features/native-extensions/ask-questions-card", "../features/native-extensions/useComposerAskQuestionsActions"

98. [warning] no-giant-component — src/app/composer/composer-prompt-surface.tsx:36
   Component "ComposerPromptSurface" is 453 lines — consider breaking it into smaller focused components

99. [warning] no-many-boolean-props — src/app/composer/composer-prompt-surface.tsx:36
   Component "ComposerPromptSurface" takes 5 boolean-like props (isStreaming, isCompacting, isExtensionCommandRunning…) — consider compound components or explicit variants instead of stacking flags

100. [warning] prefer-useReducer — src/app/code-workspace/code-workspace-view.tsx:170
   Component "CodeWorkspaceView" has 6 useState calls — consider useReducer for related state

101. [warning] no-adjust-state-on-prop-change — src/app/composer/composer-dictation-controls.tsx:165
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

102. [warning] no-event-handler — src/app/composer/composer-dictation-controls.tsx:164
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

103. [warning] no-event-handler — src/app/composer/composer-dictation-controls.tsx:164
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

104. [warning] no-reset-all-state-on-prop-change — src/app/composer/composer-dictation-controls.tsx:163
   Avoid resetting all state when a prop changes. Instead, if "dictationMissingModel" is a key, pass it as `key` so React will reset the component's state.

105. [warning] rendering-svg-precision — src/app/common/github-invertocat-mark.tsx:17
   SVG d attribute uses 4+ decimal precision — truncate to 1–2 decimals to shrink markup with no visible difference

106. [warning] no-adjust-state-on-prop-change — src/app/common/confirm-popover.tsx:32
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

107. [warning] no-event-handler — src/app/common/confirm-popover.tsx:32
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

108. [warning] no-reset-all-state-on-prop-change — src/app/common/confirm-popover.tsx:31
   Avoid resetting all state when a prop changes. Instead, if "open" is a key, pass it as `key` so React will reset the component's state.

109. [warning] design-no-redundant-size-axes — src/app/common/confirm-popover.tsx:75
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

110. [warning] design-no-redundant-size-axes — src/app/composer/composer-file-picker-header.tsx:39
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

111. [warning] design-no-redundant-size-axes — src/app/composer/composer-file-picker-header.tsx:98
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

112. [warning] design-no-redundant-size-axes — src/app/app-shell/app-shell-layout-view.tsx:205
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

113. [warning] no-derived-state — src/app/composer/composer-model-popover.tsx:66
   Avoid storing derived state. Compute "selectedProvider" directly during render, optionally with `useMemo` if it's expensive.

114. [warning] no-derived-state — src/app/composer/composer-model-popover.tsx:70
   Avoid storing derived state. Compute "selectedProvider" directly during render, optionally with `useMemo` if it's expensive.

115. [warning] no-event-handler — src/app/composer/composer-model-popover.tsx:159
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

116. [warning] no-event-handler — src/app/composer/composer-model-popover.tsx:74
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

117. [warning] no-event-handler — src/app/composer/composer-model-popover.tsx:74
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

118. [warning] no-event-handler — src/app/composer/composer-model-popover.tsx:59
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

119. [warning] no-cascading-set-state — src/app/common/popover.tsx:170
   3 setState calls in a single useEffect — consider using useReducer or deriving state

120. [warning] no-multi-comp — pages/src/main.tsx:179
   Declare only one React component per file. Found extra component: DependencyTable.

121. [warning] no-multi-comp — pages/src/main.tsx:202
   Declare only one React component per file. Found extra component: DependenciesPage.

122. [warning] no-multi-comp — pages/src/main.tsx:231
   Declare only one React component per file. Found extra component: GitHubInvertocatMark.

123. [warning] no-multi-comp — pages/src/main.tsx:274
   Declare only one React component per file. Found extra component: HomePage.

124. [warning] no-multi-comp — pages/src/main.tsx:556
   Declare only one React component per file. Found extra component: BlogIndexPage.

125. [warning] no-multi-comp — pages/src/main.tsx:721
   Declare only one React component per file. Found extra component: WorktreesBlogPage.

126. [warning] no-multi-comp — pages/src/main.tsx:870
   Declare only one React component per file. Found extra component: App.

127. [warning] rendering-svg-precision — pages/src/main.tsx:234
   SVG d attribute uses 4+ decimal precision — truncate to 1–2 decimals to shrink markup with no visible difference

128. [warning] js-combine-iterations — pages/src/main.tsx:247
   .map().filter() iterates the array twice — combine into a single loop with .reduce() or for...of

129. [warning] no-cascading-set-state — pages/src/main.tsx:294
   3 setState calls in a single useEffect — consider using useReducer or deriving state

130. [warning] no-fetch-in-effect — pages/src/main.tsx:727
   fetch() inside useEffect — use a data fetching library (react-query, SWR) or server component

131. [warning] design-no-redundant-size-axes — src/app/extensions/components/install-extensions-section.tsx:106
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

132. [warning] design-no-redundant-size-axes — src/app/sessions/sessions-view.tsx:79
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

133. [warning] design-no-redundant-size-axes — src/app/sessions/sessions-view.tsx:184
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

134. [warning] no-derived-state — src/app/sessions/sessions-view.tsx:272
   Avoid storing derived state. Compute "selectedThreadIds" directly during render, optionally with `useMemo` if it's expensive.

135. [warning] no-pass-live-state-to-parent — src/app/features/native-extensions/ask-questions-card.tsx:144
   Avoid passing live state to parents in an effect. Instead, lift the state to the parent and pass it down to the child as a prop.

136. [warning] no-prop-callback-in-effect — src/app/features/native-extensions/ask-questions-card.tsx:149
   useEffect calls prop callback "registerArrowNavigation" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source

137. [warning] no-adjust-state-on-prop-change — src/app/features/native-extensions/ask-questions-card.tsx:160
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

138. [warning] no-adjust-state-on-prop-change — src/app/features/native-extensions/ask-questions-card.tsx:163
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

139. [warning] no-cascading-set-state — src/app/features/native-extensions/ask-questions-card.tsx:159
   4 setState calls in a single useEffect — consider using useReducer or deriving state

140. [warning] no-derived-state — src/app/features/native-extensions/ask-questions-card.tsx:161
   Avoid storing derived state. Compute "answers" directly during render, optionally with `useMemo` if it's expensive.

141. [warning] no-derived-state — src/app/features/native-extensions/ask-questions-card.tsx:162
   Avoid storing derived state. Compute "customAnswers" directly during render, optionally with `useMemo` if it's expensive.

142. [warning] no-derived-state-effect — src/app/features/native-extensions/ask-questions-card.tsx:159
   Derived state in useEffect — wrap the calculation in useMemo([deps]) (or compute it directly during render if it isn't expensive)

143. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:188
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

144. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:199
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

145. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:262
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

146. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:274
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

147. [warning] design-no-redundant-size-axes — src/app/features/native-extensions/ask-questions-card.tsx:311
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

148. [warning] design-no-redundant-size-axes — src/app/settings/settings/settings-dictation-model-row.tsx:49
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

149. [warning] design-no-redundant-padding-axes — src/app/inbox/inbox-view.tsx:242
   px-6 py-6 → use the shorthand p-6

150. [warning] design-no-redundant-size-axes — src/app/inbox/inbox-view.tsx:321
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

151. [warning] jsx-no-jsx-as-prop — src/app/inbox/inbox-view.tsx:331
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

152. [warning] jsx-no-jsx-as-prop — src/app/skills/skills-view.tsx:87
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

153. [warning] jsx-no-jsx-as-prop — src/app/skills/skills-view.tsx:118
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

154. [warning] design-no-redundant-size-axes — src/app/native/gitops/git-ops-composer-panel.tsx:102
   w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)

155. [warning] no-multi-comp — src/app/projects/landing-empty-overview.tsx:71
   Declare only one React component per file. Found extra component: LandingUpdateCard.

156. [warning] no-multi-comp — src/app/projects/landing-empty-overview.tsx:104
   Declare only one React component per file. Found extra component: EmptyLandingOverview.

157. [warning] no-pass-data-to-parent — src/app/native/gitops/composer-git-ops-surface.tsx:246
   Avoid passing data to parents in an effect. Instead, fetch the data in the parent and pass it down to the child as a prop.

158. [warning] no-prop-callback-in-effect — src/app/native/gitops/composer-git-ops-surface.tsx:246
   useEffect calls prop callback "onActionErrorMessageChange" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source

159. [warning] jsx-no-jsx-as-prop — src/app/native/gitops/composer-git-ops-surface.tsx:358
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

160. [warning] jsx-no-jsx-as-prop — src/app/native/gitops/composer-git-ops-surface.tsx:391
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

161. [warning] no-derived-useState — src/app/native/gitops/diff/diff-panel-content.tsx:54
   useState initialized from prop "showFileTree" — if this value should stay in sync with the prop, derive it during render instead

162. [warning] no-pass-data-to-parent — src/app/native/gitops/diff/diff-panel-content.tsx:66
   Avoid passing data to parents in an effect. Instead, fetch the data in the parent and pass it down to the child as a prop.

163. [warning] no-prop-callback-in-effect — src/app/native/gitops/diff/diff-panel-content.tsx:66
   useEffect calls prop callback "onLoadErrorChange" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source

164. [warning] no-adjust-state-on-prop-change — src/app/native/gitops/diff/diff-panel-content.tsx:159
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

165. [warning] no-cascading-set-state — src/app/native/gitops/diff/diff-panel-content.tsx:153
   3 setState calls in a single useEffect — consider using useReducer or deriving state

166. [warning] no-event-handler — src/app/native/gitops/diff/diff-panel-content.tsx:140
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

167. [warning] no-event-handler — src/app/native/gitops/diff/diff-panel-content.tsx:140
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

168. [warning] no-event-handler — src/app/native/gitops/diff/diff-panel-content.tsx:140
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

169. [warning] no-pass-data-to-parent — src/app/native/gitops/diff/diff-panel-content.tsx:166
   Avoid passing data to parents in an effect. Instead, fetch the data in the parent and pass it down to the child as a prop.

170. [warning] no-render-in-render — src/app/settings/settings/settingsDescriptorModels.tsx:192
   Inline render function "renderThinkingSelector()" — extract to a separate component for proper reconciliation

171. [warning] design-no-redundant-padding-axes — src/app/projects/project-overview/top-sessions-section.tsx:21
   px-2 py-2 → use the shorthand p-2

172. [warning] no-derived-state — src/app/settings/settings/settingsDescriptorKeybindings.tsx:165
   Avoid storing derived state. Compute "draft" directly during render, optionally with `useMemo` if it's expensive.

173. [warning] no-derived-state-effect — src/app/settings/settings/settingsDescriptorKeybindings.tsx:164
   Derived state in useEffect — compute during render instead

174. [warning] no-multi-comp — src/app/settings/settings/settingsUi.tsx:49
   Declare only one React component per file. Found extra component: SettingRow.

175. [warning] no-multi-comp — src/app/settings/settings/settingsUi.tsx:82
   Declare only one React component per file. Found extra component: InlineSelect.

176. [warning] no-adjust-state-on-prop-change — src/app/settings/settings/settingsUi.tsx:124
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

177. [warning] no-event-handler — src/app/settings/settings/settingsUi.tsx:104
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

178. [warning] no-reset-all-state-on-prop-change — src/app/settings/settings/settingsUi.tsx:122
   Avoid resetting all state when a prop changes. Instead, if "open" is a key, pass it as `key` so React will reset the component's state.

179. [warning] no-giant-component — src/app/settings/settings-view.tsx:46
   Component "SettingsView" is 330 lines — consider breaking it into smaller focused components

180. [warning] prefer-useReducer — src/app/settings/settings-view.tsx:58
   Component "SettingsView" has 10 useState calls — consider useReducer for related state

181. [warning] rerender-state-only-in-handlers — src/app/settings/settings-view.tsx:72
   useState "highlightedSettingId" is updated but never read in the component's return — use useRef so updates don't trigger re-renders

182. [warning] no-derived-useState — src/app/settings/settings-view.tsx:60
   useState initialized from prop "piSettings" — if this value should stay in sync with the prop, derive it during render instead

183. [warning] no-adjust-state-on-prop-change — src/app/settings/settings-view.tsx:82
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

184. [warning] no-cascading-set-state — src/app/settings/settings-view.tsx:80
   4 setState calls in a single useEffect — consider using useReducer or deriving state

185. [warning] no-derived-state — src/app/settings/settings-view.tsx:83
   Avoid storing derived state. Compute "activeCategory" directly during render, optionally with `useMemo` if it's expensive.

186. [warning] no-derived-state — src/app/settings/settings-view.tsx:84
   Avoid storing derived state. Compute "highlightedSettingId" directly during render, optionally with `useMemo` if it's expensive.

187. [warning] no-derived-state — src/app/settings/settings-view.tsx:85
   Avoid storing derived state. Compute "highlightedCategoryId" directly during render, optionally with `useMemo` if it's expensive.

188. [warning] no-initialize-state — src/app/settings/settings-view.tsx:97
   Avoid initializing state in an effect. Instead, initialize "helpColumnAvailable"'s `useState()` with "undefined". For SSR hydration, prefer `useSyncExternalStore()`.

189. [warning] no-derived-state — src/app/settings/settings-view.tsx:122
   Avoid storing derived state. Compute "draftPiSettings" directly during render, optionally with `useMemo` if it's expensive.

190. [warning] async-await-in-loop — src/app/settings/settings-view.tsx:171
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

191. [warning] no-derived-state — src/app/settings/settings-view.tsx:222
   Avoid storing derived state. Compute "dictationModelDraft" directly during render, optionally with `useMemo` if it's expensive.

192. [warning] no-derived-state-effect — src/app/settings/settings-view.tsx:221
   Derived state in useEffect — compute during render instead

193. [warning] control-has-associated-label — src/app/settings/settings/settings-view-parts.tsx:34
   A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.

194. [warning] design-no-redundant-size-axes — src/app/settings/settings/settings-view-parts.tsx:38
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

195. [warning] prefer-useReducer — src/app/skills/components/skill-creator-section.tsx:61
   Component "SkillCreatorSection" has 6 useState calls — consider useReducer for related state

196. [warning] design-no-redundant-size-axes — src/app/skills/components/skill-creator-section.tsx:212
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

197. [warning] control-has-associated-label — src/app/native/gitops/branch-switch-popover.tsx:111
   A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.

198. [warning] design-no-redundant-size-axes — src/app/native/gitops/branch-switch-popover.tsx:182
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

199. [warning] no-render-in-render — src/app/thread/thread-timeline-row.tsx:243
   Inline render function "renderTurnItem()" — extract to a separate component for proper reconciliation

200. [warning] control-has-associated-label — src/app/settings/settings/settingsDescriptorPiRuntime.tsx:271
   A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.

201. [warning] no-giant-component — src/app/inbox/components/inbox-composer.tsx:68
   Component "InboxComposer" is 361 lines — consider breaking it into smaller focused components

202. [warning] no-many-boolean-props — src/app/inbox/components/inbox-composer.tsx:68
   Component "InboxComposer" takes 4 boolean-like props (isCompacting, isStreaming, isSending…) — consider compound components or explicit variants instead of stacking flags

203. [warning] no-render-in-render — src/app/thread/tool-calls-card.tsx:199
   Inline render function "renderToolCallBody()" — extract to a separate component for proper reconciliation

204. [warning] design-no-redundant-size-axes — src/app/native/gitops/diff/diff-panel-file-list.tsx:212
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

205. [warning] js-length-check-first — src/app/native/gitops/diff/diff-panel-file-list.tsx:265
   .every() over an array compared to another array — short-circuit with `a.length === b.length && a.every(...)` so unequal-length arrays exit immediately

206. [warning] rerender-state-only-in-handlers — src/app/native/gitops/diff/diff-panel-file-list.tsx:336
   useState "codeViewHandle" is updated but never read in the component's return — use useRef so updates don't trigger re-renders

207. [warning] no-render-prop-children — src/app/native/gitops/diff/diff-panel-file-list.tsx:535
   3 render-prop slots on the same element (renderCustomHeader, renderAnnotation, renderGutterUtility…) — collapse into compound subcomponents or `children` so consumers don't need to know about every customization point

208. [warning] design-no-redundant-size-axes — src/app/skills/components/browse-skills-section.tsx:147
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

209. [warning] prefer-tag-over-role — src/app/skills/components/browse-skills-section.tsx:158
   Prefer the semantic `<img>` element over `role="img"` on a generic tag.

210. [warning] design-no-redundant-size-axes — src/app/skills/components/browse-skills-section.tsx:157
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

211. [warning] exhaustive-deps — src/app/skills/components/browse-skills-section.tsx:288
   The `catalogItems` value makes the dependencies of `useEffect` change on every render. Move it inside the hook callback or wrap it in its own memoization hook.

212. [warning] no-derived-state — src/app/skills/components/browse-skills-section.tsx:282
   Avoid storing derived state. Compute "selectedCatalogSources" directly during render, optionally with `useMemo` if it's expensive.

213. [warning] design-no-redundant-size-axes — src/app/skills/components/browse-skills-section.tsx:373
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

214. [warning] no-many-boolean-props — src/app/extensions/components/search-extensions-section.tsx:117
   Component "SearchExtensionsSection" takes 5 boolean-like props (hasSelectedCatalogSources, hasPendingInstall, hasNextCatalogPage…) — consider compound components or explicit variants instead of stacking flags

215. [warning] jsx-no-target-blank — src/app/native/markdown-artifacts/artifact-markdown-preview.tsx:41
   `target="_blank"` without `rel="noreferrer"` is a security risk — add `rel="noreferrer"`.

216. [warning] no-prevent-default — src/app/native/markdown-artifacts/artifact-markdown-preview.tsx:38
   preventDefault() on <a> onClick — use a <button> or routing component instead

217. [warning] prefer-use-effect-event — src/app/thread/thread-find-bar.tsx:90
   "close" is read only inside `addEventListener` — wrap it with useEffectEvent and remove it from the dep array so the effect doesn't re-synchronize on every parent render

218. [warning] prefer-useReducer — src/app/thread/thread-find-bar.tsx:41
   Component "ThreadFindBar" has 5 useState calls — consider useReducer for related state

219. [warning] no-adjust-state-on-prop-change — src/app/thread/thread-find-bar.tsx:100
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

220. [warning] no-adjust-state-on-prop-change — src/app/thread/thread-find-bar.tsx:101
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

221. [warning] no-adjust-state-on-prop-change — src/app/thread/thread-find-bar.tsx:108
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

222. [warning] no-cascading-set-state — src/app/thread/thread-find-bar.tsx:97
   9 setState calls in a single useEffect — consider using useReducer or deriving state

223. [warning] no-pass-live-state-to-parent — src/app/thread/thread-find-bar.tsx:98
   Avoid passing live state to parents in an effect. Instead, lift the state to the parent and pass it down to the child as a prop.

224. [warning] no-prop-callback-in-effect — src/app/thread/thread-find-bar.tsx:98
   useEffect calls prop callback "onQueryChange" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source

225. [warning] no-prop-callback-in-effect — src/app/thread/thread-find-bar.tsx:102
   useEffect calls prop callback "onActiveMatchChange" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source

226. [warning] design-no-redundant-size-axes — src/app/thread/thread-find-bar.tsx:203
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

227. [warning] no-giant-component — src/app/thread/thread-timeline.tsx:32
   Component "ThreadTimeline" is 364 lines — consider breaking it into smaller focused components

228. [warning] no-derived-state — src/app/thread/thread-timeline.tsx:97
   Avoid storing derived state. Compute "collapsedRowIds" directly during render, optionally with `useMemo` if it's expensive.

229. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:89
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

230. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:90
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

231. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:53
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

232. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:53
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

233. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:88
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

234. [warning] no-event-handler — src/app/thread/thread-timeline.tsx:65
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

235. [warning] design-no-redundant-size-axes — src/app/thread/thread-timeline.tsx:365
   w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)

236. [warning] no-adjust-state-on-prop-change — src/app/native/artifact-shell/artifact-panel-body.tsx:46
   Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.

237. [warning] control-has-associated-label — src/app/native/artifact-shell/artifact-panel-body.tsx:160
   A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.

238. [warning] design-no-redundant-size-axes — src/app/settings/settings/settingsDescriptorDictation.tsx:77
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

239. [warning] design-no-redundant-size-axes — src/app/settings/settings/settingsDescriptorDictation.tsx:95
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

240. [warning] no-giant-component — src/app/native/gitops/composer-git-ops-footer.tsx:63
   Component "ComposerGitOpsFooter" is 312 lines — consider breaking it into smaller focused components

241. [warning] no-event-handler — src/app/native/gitops/composer-git-ops-footer.tsx:122
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

242. [warning] no-event-handler — src/app/native/gitops/composer-git-ops-footer.tsx:122
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

243. [warning] design-no-redundant-size-axes — src/app/workspace-shell/terminal-panel.tsx:85
   w-[14px] h-[14px] → use the shorthand size-[14px] (Tailwind v3.4+)

244. [warning] exhaustive-deps — src/app/native/gitops/composer-diff-baseline-selector.tsx:152
   The `commits` value makes the dependencies of `useMemo` change on every render. Move it inside the hook callback or wrap it in its own memoization hook.

245. [warning] exhaustive-deps — src/app/native/gitops/composer-diff-baseline-selector.tsx:156
   The `commits` value makes the dependencies of `useMemo` change on every render. Move it inside the hook callback or wrap it in its own memoization hook.

246. [warning] no-chain-state-updates — src/app/native/gitops/composer-diff-baseline-selector.tsx:406
   Avoid chaining state changes. When possible, update all relevant state simultaneously.

247. [warning] no-event-handler — src/app/native/gitops/composer-diff-baseline-selector.tsx:405
   Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.

248. [warning] design-no-redundant-size-axes — src/app/settings/settings/settingsDescriptorProjects.tsx:378
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

249. [warning] control-has-associated-label — src/app/native/gitops/diff-baseline-selector/baseline-selector-popover.tsx:93
   A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.

250. [warning] no-many-boolean-props — src/app/native/gitops/diff/diff-panel-content-body.tsx:155
   Component "DiffPanelContentBody" takes 4 boolean-like props (isGitRepo, isLoading, hasNoNetChanges…) — consider compound components or explicit variants instead of stacking flags

251. [warning] no-event-handler — src/app/native/gitops/diff/diff-changed-files-tree.tsx:97
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

252. [warning] no-event-handler — src/app/native/gitops/diff/diff-changed-files-tree.tsx:126
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

253. [warning] no-event-handler — src/app/native/gitops/diff/diff-changed-files-tree.tsx:127
   Avoid using props and effects as an event handler. Instead, move the handler to the parent component.

254. [warning] no-multi-comp — src/app/thread/thread-timeline-row-chrome.tsx:102
   Declare only one React component per file. Found extra component: RowLeadToggleSurface.

255. [warning] no-multi-comp — src/app/thread/thread-timeline-row-chrome.tsx:153
   Declare only one React component per file. Found extra component: TimelineRowShell.

256. [warning] design-no-redundant-size-axes — src/app/inbox/components/inbox-composer-rails.tsx:48
   w-7 h-7 → use the shorthand size-7 (Tailwind v3.4+)

257. [warning] no-giant-component — src/app/native/terminal/terminal-viewport.tsx:47
   Component "TerminalViewport" is 379 lines — consider breaking it into smaller focused components

258. [warning] exhaustive-deps — src/app/native/terminal/terminal-viewport.tsx:301
   The ref value `terminalResizeFrameRef.current` will likely have changed by the time this effect cleanup function runs. Copy it to a variable inside the hook callback and use that variable in cleanup.

259. [warning] jsx-no-jsx-as-prop — src/app/extensions/extensions-view.tsx:86
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

260. [warning] jsx-no-jsx-as-prop — src/app/extensions/extensions-view.tsx:108
   JSX prop receives JSX created on every render — extract it or memoize to avoid re-renders.

261. [warning] unused-file — desktop/app-settings/path-normalization.ts:0
   Unused file — not reachable from any entry point

262. [warning] unused-file — desktop/app-settings/writers.ts:0
   Unused file — not reachable from any entry point

263. [warning] unused-file — desktop/bundled-themes.ts:0
   Unused file — not reachable from any entry point

264. [warning] unused-file — desktop/dictation/model-download.ts:0
   Unused file — not reachable from any entry point

265. [warning] unused-file — desktop/dictation/model-management.ts:0
   Unused file — not reachable from any entry point

266. [warning] unused-file — desktop/dictation/model-resolution.ts:0
   Unused file — not reachable from any entry point

267. [warning] unused-file — desktop/dictation/sherpa-onnx.ts:0
   Unused file — not reachable from any entry point

268. [warning] unused-file — desktop/dictation/sherpa-runtime.ts:0
   Unused file — not reachable from any entry point

269. [warning] unused-file — desktop/git-commit-message.ts:0
   Unused file — not reachable from any entry point

270. [warning] unused-file — desktop/native-extensions/ask-questions-extension-path.ts:0
   Unused file — not reachable from any entry point

271. [warning] unused-file — desktop/native-extensions/howcode-native-ask-questions.mjs:0
   Unused file — not reachable from any entry point

272. [warning] unused-file — desktop/pi-module.ts:0
   Unused file — not reachable from any entry point

273. [warning] unused-file — desktop/pi-packages/catalog.ts:0
   Unused file — not reachable from any entry point

274. [warning] unused-file — desktop/pi-packages/configured.ts:0
   Unused file — not reachable from any entry point

275. [warning] unused-file — desktop/pi-packages/helpers.ts:0
   Unused file — not reachable from any entry point

276. [warning] unused-file — desktop/pi-packages/index.ts:0
   Unused file — not reachable from any entry point

277. [warning] unused-file — desktop/pi-packages/mutations.ts:0
   Unused file — not reachable from any entry point

278. [warning] unused-file — desktop/pi-packages/runtime-host-bridge.ts:0
   Unused file — not reachable from any entry point

279. [warning] unused-file — desktop/pi-packages/services.ts:0
   Unused file — not reachable from any entry point

280. [warning] unused-file — desktop/pi-packages/types.ts:0
   Unused file — not reachable from any entry point

281. [warning] unused-file — desktop/pi-settings.ts:0
   Unused file — not reachable from any entry point

282. [warning] unused-file — desktop/pi-skills.ts:0
   Unused file — not reachable from any entry point

283. [warning] unused-file — desktop/pi-threads.ts:0
   Unused file — not reachable from any entry point

284. [warning] unused-file — desktop/pi-threads/action-router-result.ts:0
   Unused file — not reachable from any entry point

285. [warning] unused-file — desktop/pi-threads/action-router.ts:0
   Unused file — not reachable from any entry point

286. [warning] unused-file — desktop/pi-threads/chat-actions.ts:0
   Unused file — not reachable from any entry point

287. [warning] unused-file — desktop/pi-threads/composer-actions.ts:0
   Unused file — not reachable from any entry point

288. [warning] unused-file — desktop/pi-threads/composer-attachment-payload.ts:0
   Unused file — not reachable from any entry point

289. [warning] unused-file — desktop/pi-threads/external-thread-publisher.ts:0
   Unused file — not reachable from any entry point

290. [warning] unused-file — desktop/pi-threads/map-with-concurrency.ts:0
   Unused file — not reachable from any entry point

291. [warning] unused-file — desktop/pi-threads/pi-settings-actions.ts:0
   Unused file — not reachable from any entry point

292. [warning] unused-file — desktop/pi-threads/project-actions.ts:0
   Unused file — not reachable from any entry point

293. [warning] unused-file — desktop/pi-threads/project-import-action.ts:0
   Unused file — not reachable from any entry point

294. [warning] unused-file — desktop/pi-threads/project-import-refresh.ts:0
   Unused file — not reachable from any entry point

295. [warning] unused-file — desktop/pi-threads/project-paths.ts:0
   Unused file — not reachable from any entry point

296. [warning] unused-file — desktop/pi-threads/project-usage-summary.ts:0
   Unused file — not reachable from any entry point

297. [warning] unused-file — desktop/pi-threads/session-index.ts:0
   Unused file — not reachable from any entry point

298. [warning] unused-file — desktop/pi-threads/session-watch.ts:0
   Unused file — not reachable from any entry point

299. [warning] unused-file — desktop/pi-threads/settings-actions.ts:0
   Unused file — not reachable from any entry point

300. [warning] unused-file — desktop/pi-threads/shell-index.ts:0
   Unused file — not reachable from any entry point

301. [warning] unused-file — desktop/pi-threads/shell-loader.ts:0
   Unused file — not reachable from any entry point

302. [warning] unused-file — desktop/pi-threads/shell-state.ts:0
   Unused file — not reachable from any entry point

303. [warning] unused-file — desktop/pi-threads/thread-actions.ts:0
   Unused file — not reachable from any entry point

304. [warning] unused-file — desktop/pi-threads/thread-loader.ts:0
   Unused file — not reachable from any entry point

305. [warning] unused-file — desktop/pi-threads/workspace-actions.ts:0
   Unused file — not reachable from any entry point

306. [warning] unused-file — desktop/project-import.ts:0
   Unused file — not reachable from any entry point

307. [warning] unused-file — desktop/runtime-host/composer-resource-service.ts:0
   Unused file — not reachable from any entry point

308. [warning] unused-file — desktop/runtime-host/git-commit-message-service.ts:0
   Unused file — not reachable from any entry point

309. [warning] unused-file — desktop/runtime-host/host-service.ts:0
   Unused file — not reachable from any entry point

310. [warning] unused-file — desktop/runtime-host/live-runtime-factory.ts:0
   Unused file — not reachable from any entry point

311. [warning] unused-file — desktop/runtime-host/live-runtime-registry.ts:0
   Unused file — not reachable from any entry point

312. [warning] unused-file — desktop/runtime-host/live-runtime-service.ts:0
   Unused file — not reachable from any entry point

313. [warning] unused-file — desktop/runtime-host/live-thread-publisher.ts:0
   Unused file — not reachable from any entry point

314. [warning] unused-file — desktop/runtime-host/live-tool-progress.ts:0
   Unused file — not reachable from any entry point

315. [warning] unused-file — desktop/runtime-host/main-request-client.ts:0
   Unused file — not reachable from any entry point

316. [warning] unused-file — desktop/runtime-host/main-request-handlers.ts:0
   Unused file — not reachable from any entry point

317. [warning] unused-file — desktop/runtime-host/native-ask-questions-tool.ts:0
   Unused file — not reachable from any entry point

318. [warning] unused-file — desktop/runtime-host/request-handlers.ts:0
   Unused file — not reachable from any entry point

319. [warning] unused-file — desktop/runtime-host/runtime-extension-bindings.ts:0
   Unused file — not reachable from any entry point

320. [warning] unused-file — desktop/runtime-host/runtime-session-events.ts:0
   Unused file — not reachable from any entry point

321. [warning] unused-file — desktop/runtime-host/settings-service.ts:0
   Unused file — not reachable from any entry point

322. [warning] unused-file — desktop/runtime-host/skill-creator-service.ts:0
   Unused file — not reachable from any entry point

323. [warning] unused-file — desktop/runtime-host/slash-command-service.ts:0
   Unused file — not reachable from any entry point

324. [warning] unused-file — desktop/runtime-host/theme-service.ts:0
   Unused file — not reachable from any entry point

325. [warning] unused-file — desktop/runtime-host/thread-snapshot-service.ts:0
   Unused file — not reachable from any entry point

326. [warning] unused-file — desktop/runtime-host/worker.ts:0
   Unused file — not reachable from any entry point

327. [warning] unused-file — desktop/runtime/agent-session-extensions.ts:0
   Unused file — not reachable from any entry point

328. [warning] unused-file — desktop/runtime/artifact-tools.ts:0
   Unused file — not reachable from any entry point

329. [warning] unused-file — desktop/runtime/chat-system-prompt.ts:0
   Unused file — not reachable from any entry point

330. [warning] unused-file — desktop/runtime/composer-dequeue.ts:0
   Unused file — not reachable from any entry point

331. [warning] unused-file — desktop/runtime/composer-mode-settings.ts:0
   Unused file — not reachable from any entry point

332. [warning] unused-file — desktop/runtime/composer-queue.ts:0
   Unused file — not reachable from any entry point

333. [warning] unused-file — desktop/runtime/composer-service.ts:0
   Unused file — not reachable from any entry point

334. [warning] unused-file — desktop/runtime/composer-state.ts:0
   Unused file — not reachable from any entry point

335. [warning] unused-file — desktop/runtime/composer-stop.ts:0
   Unused file — not reachable from any entry point

336. [warning] unused-file — desktop/runtime/headless-pi-theme.ts:0
   Unused file — not reachable from any entry point

337. [warning] unused-file — desktop/runtime/native-ask-questions-state.ts:0
   Unused file — not reachable from any entry point

338. [warning] unused-file — desktop/runtime/registry/runtime-registry-state.ts:0
   Unused file — not reachable from any entry point

339. [warning] unused-file — desktop/runtime/runtime-registry.ts:0
   Unused file — not reachable from any entry point

340. [warning] unused-file — desktop/runtime/runtime-session-events.ts:0
   Unused file — not reachable from any entry point

341. [warning] unused-file — desktop/runtime/runtime-settings-cwd.ts:0
   Unused file — not reachable from any entry point

342. [warning] unused-file — desktop/runtime/session-path-index.ts:0
   Unused file — not reachable from any entry point

343. [warning] unused-file — desktop/runtime/settings-refresh.ts:0
   Unused file — not reachable from any entry point

344. [warning] unused-file — desktop/runtime/slash-commands.ts:0
   Unused file — not reachable from any entry point

345. [warning] unused-file — desktop/runtime/thread-publisher.ts:0
   Unused file — not reachable from any entry point

346. [warning] unused-file — desktop/service-host-runtime.ts:0
   Unused file — not reachable from any entry point

347. [warning] unused-file — desktop/service-host.ts:0
   Unused file — not reachable from any entry point

348. [warning] unused-file — desktop/skill-creator-session.ts:0
   Unused file — not reachable from any entry point

349. [warning] unused-file — desktop/skills/api.ts:0
   Unused file — not reachable from any entry point

350. [warning] unused-file — desktop/skills/catalog.ts:0
   Unused file — not reachable from any entry point

351. [warning] unused-file — desktop/skills/configured-skills.ts:0
   Unused file — not reachable from any entry point

352. [warning] unused-file — desktop/skills/frontmatter.ts:0
   Unused file — not reachable from any entry point

353. [warning] unused-file — desktop/skills/mutations.ts:0
   Unused file — not reachable from any entry point

354. [warning] unused-file — desktop/skills/paths.ts:0
   Unused file — not reachable from any entry point

355. [warning] unused-file — desktop/skills/runtime-host-bridge.ts:0
   Unused file — not reachable from any entry point

356. [warning] unused-file — desktop/skills/source.ts:0
   Unused file — not reachable from any entry point

357. [warning] unused-file — desktop/system-open-path.ts:0
   Unused file — not reachable from any entry point

358. [warning] unused-file — desktop/terminal/manager.ts:0
   Unused file — not reachable from any entry point

359. [warning] unused-file — desktop/terminal/node-pty.ts:0
   Unused file — not reachable from any entry point

360. [warning] unused-file — desktop/terminal/session-history.helpers.ts:0
   Unused file — not reachable from any entry point

361. [warning] unused-file — desktop/terminal/session-history.ts:0
   Unused file — not reachable from any entry point

362. [warning] unused-file — desktop/terminal/session-id.ts:0
   Unused file — not reachable from any entry point

363. [warning] unused-file — desktop/terminal/session-record.ts:0
   Unused file — not reachable from any entry point

364. [warning] unused-file — desktop/terminal/session-store.ts:0
   Unused file — not reachable from any entry point

365. [warning] unused-file — desktop/terminal/terminal-command.helpers.ts:0
   Unused file — not reachable from any entry point

366. [warning] unused-file — desktop/terminal/terminal-command.ts:0
   Unused file — not reachable from any entry point

367. [warning] unused-file — desktop/terminal/terminal-process.ts:0
   Unused file — not reachable from any entry point

368. [warning] unused-file — desktop/terminal/terminal-visibility.ts:0
   Unused file — not reachable from any entry point

369. [warning] unused-file — desktop/terminal/types.ts:0
   Unused file — not reachable from any entry point

370. [warning] unused-file — pages/src/main.tsx:0
   Unused file — not reachable from any entry point

371. [warning] unused-file — shared/dictation-helpers.ts:0
   Unused file — not reachable from any entry point

372. [warning] unused-file — shared/dictation-models.ts:0
   Unused file — not reachable from any entry point

373. [warning] unused-file — shared/thread-data.ts:0
   Unused file — not reachable from any entry point

374. [warning] unused-file — src/app/common/index.ts:0
   Unused file — not reachable from any entry point

375. [warning] unused-f

---

_Issue body truncated. See the full report at [react.review/dashboard](https://react.review/dashboard)._

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions