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 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 20:49:29 -04:00
parent e0465bc45e
commit 8267da50dc
+18 -5
View File
@@ -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