diff --git a/CODE-AUDIT.md b/CODE-AUDIT.md index 4011a01..3f454eb 100644 --- a/CODE-AUDIT.md +++ b/CODE-AUDIT.md @@ -1673,17 +1673,24 @@ root cause is already filed. "Refusing to open this file type.") as an error **toast** — the new transient-notification surface (see UX9). Both the downloads and history stores route through it. `safeShowInFolder` was upgraded to return an error string like `safeOpenPath` (it previously no-op'd silently), so reveal failures surface too.* -- [ ] **UX7 — Settings is one long unsegmented scroll** of ~11 cards with no section nav/anchors; the +- [x] **UX7 — Settings is one long unsegmented scroll** of ~11 cards with no section nav/anchors; the only finder is the hide-cards search (M14). Order is arbitrary and related items are split. **Fix:** group into sub-sections (or a left rail) with a stable, logical order. - *Deferred (visual, own pass): a Settings section-nav / left-rail is a layout redesign whose value is - entirely in how it looks and scrolls — it wants the app running and eyeballed, not an unattended edit. - Grouped with the visual/UX polish pass.* -- [ ] **UX8 — "Default format" vs "Format & post-processing" are two places for one concept.** Kind + + *Fixed (Batch 19): the 11 cards are grouped into five stable sections — Downloads (defaults + + post-processing + filenames), Appearance, Network & accounts, Advanced, App & maintenance — each with a + section heading, plus a jump nav under the search box that smooth-scrolls to a section (anchors work inside + the screen's own scroll shell from L161; `scrollMarginTop` lands the heading cleanly). The search filter + still works per-card and now hides a whole section when all its cards are filtered out; the jump nav hides + while searching. Heading hierarchy corrected (page h1 → section h2 → card h3). Verified in the preview + probe: nav renders, jumping lands on "App & maintenance", searching "proxy" leaves exactly the matching + cards + their section headings visible (screenshots).* +- [x] **UX8 — "Default format" vs "Format & post-processing" are two places for one concept.** Kind + quality live under Downloads; container/codec/subs/SponsorBlock live in a separate card. **Fix:** co-locate, or clearly label one "defaults" and the other "advanced post-processing." - *Deferred (ties to UX7): co-locating or re-labelling these cards is part of the same Settings - information-architecture pass; done together there with the app running.* + *Fixed (Batch 19, both halves of the fix): the cards are now **co-located** — the post-processing card sits + directly under the Downloads card in the new Downloads section (UX7) — **and** clearly labeled: the card is + renamed "Post-processing" with a hint stating it's the advanced conversion half and that the default format + itself is set in the Downloads card above.* - [x] **UX9 — No global completion feedback off the Downloads tab** (UI25). If OS notifications are off/suppressed (focus assist) and you're on another tab, a finished download gives no in-app sign. **Fix:** a sidebar Downloads badge / lightweight in-app toast. @@ -1763,7 +1770,11 @@ root cause is already filed. on demand (sets `hasCompletedOnboarding: false`), so it's revisitable (closes **L67**'s revisit half). Onboarding does offer folder choice already (Video/Audio "Choose…"), and it gained the Ctrl+K tip (UX21). The remaining "shallow" (only a few tips) is a content judgment left as-is.* -- [ ] **UX23 — Settings folder paths are read-only** (L71) — no paste; Browse-dialog only. +- [x] **UX23 — Settings folder paths are read-only** (L71) — no paste; Browse-dialog only. + *Resolved (Batch 19) — stale duplicate of L71, which was already fixed: the Video/Audio folder inputs are + editable (typed or pasted paths commit through the settings store), main validates via `isSafeOutputDir` + (unit-tested in validation.test.ts), and the M34 reconcile means a rejected path never sticks in the UI. + Verified editable in the Batch 19 preview probe.* - [x] **UX24 — "Check N watched for new" is disabled with no explanation** when no source is watched — a user with indexed (but unwatched) sources sees a dead button. **Fix:** tooltip / enable with a hint to watch a source. *Fixed: the button uses `disabledFocusable` (not `disabled`) when nothing is watched, so it stays