docs: record Wave 8 tracks 8.D/8.G/8.J/8.L landed

This commit is contained in:
daniel-c-harvey
2026-06-13 20:18:04 -04:00
parent eeab0a1c4c
commit 18f4b596f2
2 changed files with 53 additions and 7 deletions
+3 -7
View File
@@ -176,25 +176,21 @@ Two surfaces dominate: the **CMS Release Archive** (the card-grid landing is the
Full track decomposition, acceptance criteria, and parallel/dependent analysis: `product-notes/phase-9-wave-8-remediation.md`. The tracks in brief:
**CMS (`DeepDrftManager`):**
- **8.A — Release Archive as medium tabs, not cards.** Retire the three navigate-away medium cards (`ReleaseArchiveBrowser`); replace with an in-page tab strip (`ALL` + one tab per medium) that swaps the grid below in place. Retire the redundant top-level **Releases** toggle item (the `ALL` tab subsumes it). *(Depends on 8.B for the shared grid contract; 8.C/8.D/8.E layer onto it.)*
- **8.A — Release Archive as medium tabs, not cards.** Retire the three navigate-away medium cards (`ReleaseArchiveBrowser`); replace with an in-page tab strip (`ALL` + one tab per medium) that swaps the grid below in place. Retire the redundant top-level **Releases** toggle item (the `ALL` tab subsumes it). *(Depends on 8.B for the shared grid contract; 8.C/8.E layer onto it.)*
- **8.B — `ALL` tab: all-releases grid with edit.** Left-most tab showing the current cross-medium releases grid with working edit buttons — the surface the retired Releases toggle used to show.
- **8.C — Per-medium grids gain working edit affordances.** Cut / Session / Mix tab grids each get an Edit action routing to the correct edit page for that medium. *(Parallel with 8.D, 8.E once 8.A lands.)*
- **8.D — Type chip reads "Session" / "DJ Mix" for non-Cuts.** The cross-medium grid's Type column must not show a Cut-only `ReleaseType` chip for Session/Mix rows. *(Independent.)*
- **8.C — Per-medium grids gain working edit affordances.** Cut / Session / Mix tab grids each get an Edit action routing to the correct edit page for that medium. *(Parallel with 8.E once 8.A lands.)*
- **8.E — Add-Track buttons in all modes, medium-aware routing.** Every tab surfaces an Add Track button routing to the upload page pre-set to that tab's medium. The `ALL`-tab Add Track defaults to **Cut**; the medium selector stays user-changeable after landing on the form. *(Depends on 8.A.)*
- **8.F — Session hero image in the upload form (retire the two-step).** Compose the hero-image field into the Session upload form so a Session is authored in one pass; remove the "set it later from the browser" alert. Hero is **optional but warns if missing** (no hard gate). *(Independent of the tab work; touches the upload form + the resource-addressed hero endpoint ordering — see note.)*
- **8.G — "Album Name" → "Release Name" label.** Rename the `AlbumHeaderFields` label. *(Independent, trivial. Sequence before 8.L.)*
- **8.L — Consolidate release name + track name for single-track releases.** For Session/Mix the form presents **one** name field (Release Name); the underlying track name is derived from it (**decided: kept synced on create and edit** so they never diverge — Daniel, 2026-06-13). Cuts (multi-track) are unaffected. Blast radius (discovery done): CMS `BatchUpload` single-track branch and `BatchEdit` via `BatchTrackDetail`**batch forms only**. The legacy `TrackNew`/`TrackEdit` forms are **not** patched here; their consolidation is **8.M**. The public detail/gallery views already key off the release title only (no public work). *(Pairs with 8.G/8.E/8.F — same upload/edit forms. Independent of 8.M.)*
- **8.M — Retire the legacy single-track forms; consolidate onto the batch forms.** Fold `TrackNew` (`/tracks/new`) and `TrackEdit` (`/tracks/{Id:long}`) into `BatchUpload`/`BatchEdit`'s single-track branch and retire them, reducing duplicate form surface (Daniel, 2026-06-13: "consolidate the forms and reduce the code surface"). **Feasibility: retirement-with-reconciliation.** `TrackNew` is a clean retirement (no live inbound link — every Add-Track points at `/tracks/upload`). `TrackEdit` requires reconciling an **addressing-model gap**: it is addressed by *track id* while `BatchEdit` is addressed by *release title* and loads the whole release — so the single-Cut-track edit from Track mode's per-row Edit (`CmsTrackGrid``/tracks/{id}`, the one live inbound link) needs a decision (open the parent release, or address a single track within the batch edit). **Architectural — staff-engineer scope** (route-map change + two component removals + navigation-model decision). Not a Phase-9-completion gate; sequence after 8.L. *(Independent of 8.L for build.)*
**Public site (`DeepDrftPublic.Client`):**
- **8.H — Archive page becomes the searchable all-releases browser (release-cardinal, decided H2).** Build a new release-cardinal searchable browser at `/archive` (search + medium/genre filter, cards → per-medium detail); retire the three-card overview on every breakpoint. Cascade: `/tracks` (`TracksView`) is demoted from the nav (route kept reachable); mobile ARCHIVE → the new browser. *(Gates 8.I.)*
- **8.I — Nav slimmed: ARCHIVE + three medium modes inline, GENRES removed.** Above the medium breakpoint the appbar carries ARCHIVE (the new release-cardinal browser) and the three medium links directly; **GENRES is removed from the nav only** (route + `GenresView` kept reachable). *(Depends on 8.H for the ARCHIVE target.)*
- **8.J — ARCHIVE popover click does not close (bug).** Clicking a popover child leaves the pure-CSS hover dropdown stuck open on SPA navigation. Fix the dismissal. *(Independent bug fix.)*
**Mix Visualizer — out of Phase-9-completion scope:**
- **8.K — Mix Visualizer redesign. `[post-Phase-9, design-complete]`.** A windowed, playback-coupled, bottom-to-top scrolling waveform showing the currently-playing region; zoom couples to apparent scroll speed (Guitar-Hero model, anchored at 1 quarter note @ 180 BPM = 333 ms visible at max zoom); lava-lamp aesthetic (theme-aware gradients, glassy), **strictly read-only**; standard Canvas/WebGL, no tricks, well-commented. The datum analysis recommends switching the Mix loudness profile from a fixed 2048 buckets to **constant-time-resolution capture (~333 samples/sec)** so long mixes aren't under-sampled at max zoom. **Phase 9 closes without this**; it runs as a post-Phase-9 wave, dispatchable straight from the finished spec: `product-notes/phase-9-mix-visualizer-redesign.md`.
**Dependency shape:** 8.B is the foundation for the CMS tab work (8.A consumes the shared grid; 8.C/8.E layer on once 8.A lands). 8.D, 8.G are independent and parallelizable immediately; 8.L follows 8.G and coordinates with 8.E/8.F (same forms). 8.M (legacy-form retirement) follows 8.L and is architectural (route map + addressing decision). On the public side, 8.J is an independent bug fix; 8.H (decided H2 — the new release-cardinal archive) gates 8.I. **Phase 9 completion = 8.A8.J + 8.L landed; 8.K and 8.M are excluded from the completion gate** (8.K is a post-Phase-9 design-complete wave; 8.M is a code-surface-reduction follow-on that can trail).
**Dependency shape:** 8.B is the foundation for the CMS tab work (8.A consumes the shared grid; 8.C/8.E layer on once 8.A lands). 8.L follows 8.G and coordinates with 8.E/8.F (same forms). 8.M (legacy-form retirement) follows 8.L and is architectural (route map + addressing decision). On the public side, 8.H (decided H2 — the new release-cardinal archive) gates 8.I. **Phase 9 completion = 8.A8.I landed; 8.K and 8.M are excluded from the completion gate** (8.K is a post-Phase-9 design-complete wave; 8.M is a code-surface-reduction follow-on that can trail). **Landed tracks (2026-06-13):** 8.D, 8.G, 8.J, 8.L.
## Working with this file