Skip to content

React Review Audit #265

@reactreview

Description

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

## Warnings (501)

1. [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

2. [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.

3. [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`.

4. [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+)

5. [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+)

6. [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+)

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

8. [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

9. [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

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

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

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

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

14. [warning] no-effect-chain — src/app/components/sidebar/project-work/project-work-section.tsx:108
   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

15. [warning] no-giant-component — src/app/components/sidebar/project-work/project-work-section.tsx:54
   Component "ProjectWorkSection" is 309 lines — consider breaking it into smaller focused components

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

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

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

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

20. [warning] no-prop-callback-in-effect — src/app/components/sidebar/project-work/project-work-section.tsx:170
   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

21. [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.

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

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

24. [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.

25. [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+)

26. [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.

27. [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+)

28. [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.

29. [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.

30. [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.

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

32. [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.

33. [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.

34. [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.

35. [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+)

36. [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+)

37. [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+)

38. [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+)

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

40. [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.

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

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

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

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

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

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

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

48. [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

49. [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.

50. [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.

51. [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

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

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

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

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

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

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

58. [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.

59. [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+)

60. [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"

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

62. [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

63. [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+)

64. [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+)

65. [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+)

66. [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

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

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

69. [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.

70. [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.

71. [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.

72. [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.

73. [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.

74. [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.

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

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

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

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

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

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

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

82. [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

83. [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

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

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

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

87. [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`.

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

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

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

91. [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.

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

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

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

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

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

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

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

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

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

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

102. [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+)

103. [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+)

104. [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.

105. [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+)

106. [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.

107. [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.

108. [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.

109. [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.

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

111. [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.

112. [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.

113. [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.

114. [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.

115. [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.

116. [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.

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

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

119. [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.

120. [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.

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

122. [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.

123. [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+)

124. [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+)

125. [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.

126. [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.

127. [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.

128. [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+)

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

130. [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

131. [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

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

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

134. [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

135. [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+)

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

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

138. [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.

139. [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.

140. [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.

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

142. [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.

143. [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

144. [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.

145. [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.

146. [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

147. [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.

148. [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.

149. [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)

150. [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+)

151. [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+)

152. [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+)

153. [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+)

154. [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+)

155. [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.

156. [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.

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

158. [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+)

159. [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.

160. [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

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-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.

171. [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

172. [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.

173. [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.

174. [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

175. [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+)

176. [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.

177. [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.

178. [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.

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

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

181. [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+)

182. [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

183. [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

184. [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

185. [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`.

186. [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"`.

187. [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

188. [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+)

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

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

191. [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+)

192. [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.

193. [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+)

194. [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.

195. [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.

196. [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+)

197. [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+)

198. [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

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

200. [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.

201. [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.

202. [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.

203. [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

204. [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.

205. [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

206. [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

207. [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+)

208. [warning] exhaustive-deps — src/app/native/gitops/composer-diff-baseline-selector.tsx:120
   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.

209. [warning] exhaustive-deps — src/app/native/gitops/composer-diff-baseline-selector.tsx:124
   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.

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

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

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

213. [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.

214. [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.

215. [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.

216. [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.

217. [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.

218. [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.

219. [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.

220. [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+)

221. [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+)

222. [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+)

223. [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+)

224. [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.

225. [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`.

226. [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+)

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

228. [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.

229. [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.

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

231. [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+)

232. [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.

233. [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+)

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

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

236. [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.

237. [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.

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

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

240. [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+)

241. [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+)

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

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

244. [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

245. [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

246. [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.

247. [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

248. [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.

249. [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.

250. [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.

251. [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()`.

252. [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.

253. [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

254. [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.

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

256. [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

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

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

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

260. [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`.

261. [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+)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

374. [wa

---

_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