From 40e001cc7aa009b691077455659c6ab60f347e22 Mon Sep 17 00:00:00 2001 From: daniel-c-harvey Date: Sun, 7 Jun 2026 16:46:17 -0400 Subject: [PATCH] docs: move Phase 2.1 cover art to COMPLETED.md --- COMPLETED.md | 16 ++++++++++++++++ PLAN.md | 12 ------------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/COMPLETED.md b/COMPLETED.md index c153416..a8c2951 100644 --- a/COMPLETED.md +++ b/COMPLETED.md @@ -6,6 +6,22 @@ Newest entries at the top. Group by phase/wave header (mirroring `PLAN.md` / `CM --- +## Phase 2.1 โ€” Cover art / image vault wired through + +**Status:** Fully landed on 2026-06-07 across three waves (Wave 1: API + vault; Wave 2-A: public proxy + TrackCard; Wave 2-B: CMS upload UI), merged to dev. + +- **What:** `MediaVaultType.Image` is implemented end-to-end and exercised by tests, but the production surface only registers a `tracks` vault of type `Audio`. `ImagePath` on `TrackEntity` is a free-form URL string today; it should resolve to an entry in an image vault served by `DeepDrftContent`. +- **Why it matters:** Prerequisite for any album/release/genre view that wants to look like a music site rather than a list of rows. Also closes a free-form-string surface area that will otherwise calcify. +- **Shape:** + - Register a second vault (`images` or `art`, type `Image`) in `Startup.ConfigureDomainServices` and in the CLI. + - Add `GET api/image/{entryKey}` (unauthenticated, mirrors track read) and `PUT api/image/{entryKey}` (ApiKey, mirrors track write) on `DeepDrftContent`. + - Change `TrackEntity.ImagePath` semantics from "URL" to "image vault entry key" (column rename optional โ€” could remain `image_path` with semantic shift, or could become `image_entry_key` for clarity). + - Add an image processor sibling of `AudioProcessor`. +- **Prerequisite:** None. +- **Constraint:** This is a small schema-semantics migration. Existing rows have `null` ImagePath in production so there is no data to migrate, but commit before the field has real content to avoid a backfill. + +--- + ## Embeddable iframe player **Status:** Feature complete on 2026-06-07 (commit `c83b132 feature: Embed Frame Player`, merged to dev). diff --git a/PLAN.md b/PLAN.md index 8ae6d79..d969a08 100644 --- a/PLAN.md +++ b/PLAN.md @@ -79,18 +79,6 @@ These were flagged during the audit but classified as feature work, not defect f These follow from `CONTEXT.md ยง5`. Direction is strongly implied but no specific UI has been committed. -### 2.1 Cover art / image vault wired through - -- **What:** `MediaVaultType.Image` is implemented end-to-end and exercised by tests, but the production surface only registers a `tracks` vault of type `Audio`. `ImagePath` on `TrackEntity` is a free-form URL string today; it should resolve to an entry in an image vault served by `DeepDrftContent`. -- **Why it matters:** Prerequisite for any album/release/genre view that wants to look like a music site rather than a list of rows. Also closes a free-form-string surface area that will otherwise calcify. -- **Shape:** - - Register a second vault (`images` or `art`, type `Image`) in `Startup.ConfigureDomainServices` and in the CLI. - - Add `GET api/image/{entryKey}` (unauthenticated, mirrors track read) and `PUT api/image/{entryKey}` (ApiKey, mirrors track write) on `DeepDrftContent`. - - Change `TrackEntity.ImagePath` semantics from "URL" to "image vault entry key" (column rename optional โ€” could remain `image_path` with semantic shift, or could become `image_entry_key` for clarity). - - Add an image processor sibling of `AudioProcessor`. -- **Prerequisite:** None. -- **Constraint:** This is a small schema-semantics migration. Existing rows have `null` ImagePath in production so there is no data to migrate, but commit before the field has real content to avoid a backfill. - ### 2.2 Album and genre views - **What:** `TrackCard` already renders album/genre/release date; the data is there. Missing are gallery groupings (album view, genre view), filters, and the API-side support for filter expressions in `TrackService.GetPaged`.