From 8267da50dc1d5ab87f0c67f1e445f0a6e7eedf18 Mon Sep 17 00:00:00 2001 From: debont80 Date: Tue, 30 Jun 2026 20:49:29 -0400 Subject: [PATCH] Mark M5/M6/UX1 done in CODE-AUDIT (wired in the prior two commits) Housekeeping: the command-preview / incognito / per-download-options features were implemented and self-reviewed in the previous commits but their audit checkboxes were still open. Marks M5, M6, UX1 done with fix notes. Completes the SHOULD-fix-for-1.0 release-gate tier. Co-Authored-By: Claude Opus 4.8 --- CODE-AUDIT.md | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/CODE-AUDIT.md b/CODE-AUDIT.md index 01c7d4a..dca9877 100644 --- a/CODE-AUDIT.md +++ b/CODE-AUDIT.md @@ -260,14 +260,22 @@ token system + shared primitives (UI/SIMP — high value, larger effort) · i18n `markDownloaded` in both `applyEvent('done')` and the preview ticker). Subsumed by C2. - [ ] **M4 — Decide queue persistence explicitly.** Scheduler/queue is renderer-memory only; `saved`/scheduled items don't survive a quit. Persist or document as a non-goal in code. -- [ ] **M5 — Command-preview feature is fully built but unwired.** `CommandPreviewResult` type + +- [x] **M5 — Command-preview feature is fully built but unwired.** `CommandPreviewResult` type + `command:preview` channel + `previewCommand` (download.ts) + `formatCommandLine`/ `quoteForDisplay` (buildArgs) + preload method all exist, but no renderer component calls `window.api.previewCommand` (only the `main.tsx` mock references it). Wire it into the - DownloadBar Options panel, or remove the dead chain. -- [ ] **M6 — Private/incognito mode is plumbed but unreachable.** `incognito` flows through + DownloadBar Options panel, or remove the dead chain. *Fixed: a "Show command / Hide command" + toggle in [DownloadBar.tsx](src/renderer/src/components/DownloadBar.tsx) calls + `window.api.previewCommand` and renders the exact yt-dlp argv (monospace). The preview mirrors + what `download()` spawns — probe-selected `formatId`/`formatHasAudio`, `quality`, per-download + `options`, and `trim` — and is invalidated whenever any of those inputs (or the URL / a re-probe) + changes, so the shown command never goes stale. Wired with M6/UX1 in the same panel.* +- [x] **M6 — Private/incognito mode is plumbed but unreachable.** `incognito` flows through `AddOptions` → `buildItem` → history-skip → the QueueItem "Private" badge, but nothing in the - UI ever sets `incognito: true`. Add the toggle or remove the dead plumbing. + UI ever sets `incognito: true`. Add the toggle or remove the dead plumbing. *Fixed: an + "Incognito mode (no logging, no history, no cookies)" checkbox in the DownloadBar Advanced panel + sets `incognito` on the enqueued item (via `AddOptions`), lighting up the existing QueueItem + "Private" badge. Reset to off after each download so it never silently carries over to the next.* - [x] **M7 — `newId()` duplicated 3×** (`store/downloads.ts`, `TerminalView.tsx`, `TemplateManager.tsx`) with divergent fallback prefixes (`item-`/`t-`/`tpl-`). Extract one helper. *Fixed: one [`newId(prefix)`](src/renderer/src/id.ts) helper; the three copies import it and pass their @@ -925,13 +933,18 @@ root cause is already filed. ### High — core-flow friction -- [ ] **UX1 — Per-download options are unreachable; you must change global Settings for one video.** +- [x] **UX1 — Per-download options are unreachable; you must change global Settings for one video.** The DownloadBar exposes only URL · Video/Audio · quality · Trim · Schedule. There is **no** per-download post-processing panel, custom-command panel, command preview, or incognito toggle — so `DownloadItem.options`/`extraArgs` and the whole Phase A/C per-download-override plumbing are unreachable; every download uses `settings.downloadOptions`. To grab one video as MP3-with-subs a user must edit global Settings, download, then revert. (Supersedes/expands M5, M6.) **Fix:** add a collapsible per-download Options panel (reuse `DownloadOptionsForm`) — the plumbing already exists. + *Fixed: a collapsible "Advanced" panel in [DownloadBar.tsx](src/renderer/src/components/DownloadBar.tsx) + reuses `DownloadOptionsForm` for per-download overrides (audio format, container, codec, format-sort, + subtitles, SponsorBlock), passed via `AddOptions.options` → `startDownload`. The panel also carries the + M6 incognito checkbox and sits beside the M5 command preview. Overrides are one-shot: they reset to the + global defaults after each download (matching Trim/Schedule).* - [ ] **UX2 — "Fetch" vs "Download" is ambiguous, and Enter does the wrong thing.** Two unlabeled icon buttons (magnifier = "Fetch", clipboard = "Paste") sit next to "Download"; a first-timer can't tell that Download works without Fetch. Pressing **Enter** in the URL field runs a *probe*, not the