Consolidate thread library surfaces — Settings modal has CRUD form AND a separate read-only ThreadLibraryView #147
Labels
No labels
blocked:commit-ready-failed
blocked:gate-fetch
blocked:gate-lint
blocked:gate-plan
blocked:gate-research
blocked:needs-attention
blocked:needs-decision
blocked:needs-human
blocked:no-changes
blocked:verify-failed
bug
deferred
feature-request
in-progress
needs-decompose
needs-triage
quickfix
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/Kimi_Agent_Brother_10_Digitizing_App#147
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Finding
src/components/workspace/SettingsModal.tsxships two surfaces for the same thread library data:SettingsModal.tsx:96-183): full CRUD form — add name + hex, list with remove buttons, reset-to-defaults.<ThreadLibrarySection>atSettingsModal.tsx:88-93opening<ThreadLibraryView>): read-only list of colors. TheThreadLibraryViewheader comment explicitly says it is intentionally read-only because CRUD lives "in a separate child of #119" — but #119 already shipped the CRUD form inside the Settings modal.The two surfaces overlap and add confusion. The "Manage threads…" modal shows the same data the CRUD form is already listing. The CRUD form is strictly more powerful; the read-only view doesn't add anything.
Source
Bundled finding from the gap analysis that produced #135. Verified reading the actual code:
SettingsModal.tsx:96-183— the CRUD formSettingsModal.tsx:88-93— renders<ThreadLibrarySection>with onOpenLibrary that opens the separate viewThreadLibrarySection.tsx:55-73— the "Manage threads…" buttonThreadLibraryView.tsx:23-82— the read-only modal bodyThreadLibraryView's own header comment (ThreadLibraryView.tsx:10-14) calls out the overlap:But #119 already shipped the CRUD UI inside SettingsModal itself. The "separate child" is the Settings modal, not a separate component. The view is now redundant.
Recommended fix shape
Pick one and consolidate:
<ThreadLibrarySection>entry point from SettingsModal and delete<ThreadLibraryView>entirely. The CRUD form in the Settings modal already covers everything the read-only view does. ~50 lines deleted across 3 files.<ThreadLibraryView>to be a quick-glance color preview with click-to-edit affordance (i.e. open the Settings modal focused on that color). Heavier change but preserves the discoverability of the section entry point.The issue body says this is a product decision the user should make. Filing it as its own issue so the decision is explicit and traceable, rather than buried in another issue's bundled finding.
Severity
Low. Two ways to do the same thing is a UX papercut, not a functional bug. The CRUD form works; the read-only view works. They just both exist.
Discovered by
Gap analysis (2026-10-02), bundled in the same finding that produced #135.