docs: record Wave 8 track 8.A landed
This commit is contained in:
+13
-3
@@ -34,11 +34,21 @@ The single-track-per-release rule for Session/Mix is enforced only in the CMS fo
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 9.8 Wave 8 — Remediation (partial: tracks 8.B, 8.D, 8.F, 8.G, 8.H, 8.I, 8.J, 8.L landed; 8.A, 8.C, 8.E, 8.K, 8.M remain pending)
|
### 9.8 Wave 8 — Remediation (partial: tracks 8.A, 8.B, 8.D, 8.F, 8.G, 8.H, 8.I, 8.J, 8.L landed; 8.C, 8.E, 8.K, 8.M remain pending)
|
||||||
|
|
||||||
**Landed:** 2026-06-13 on dev (eight tracks).
|
**Landed:** 2026-06-13 on dev (nine tracks).
|
||||||
|
|
||||||
Daniel tested the landed Phase 9 surface (Waves 1–7) and produced a punch-list. Wave 8 is remediation — the gap between what the specs *built* and what hands-on use *wants*. Full design, acceptance criteria, and dependencies: `product-notes/phase-9-wave-8-remediation.md`. The wave spans CMS, public site, and label polish. Eight tracks landed; remaining tracks (8.A, 8.C, 8.E) are blocked on architectural work or dependencies; 8.K (Mix Visualizer) is pulled out of Phase-9-completion scope (post-Phase-9 wave, design-complete); 8.M (legacy-form retirement) is a code-surface-reduction follow-on that trails.
|
Daniel tested the landed Phase 9 surface (Waves 1–7) and produced a punch-list. Wave 8 is remediation — the gap between what the specs *built* and what hands-on use *wants*. Full design, acceptance criteria, and dependencies: `product-notes/phase-9-wave-8-remediation.md`. The wave spans CMS, public site, and label polish. Nine tracks landed; remaining gate tracks (8.C, 8.E) layer onto the tab strip; 8.K (Mix Visualizer) is pulled out of Phase-9-completion scope (post-Phase-9 wave, design-complete); 8.M (legacy-form retirement) is a code-surface-reduction follow-on that trails.
|
||||||
|
|
||||||
|
**8.A — Release Archive as medium tabs, not cards**
|
||||||
|
|
||||||
|
- **What:** Retire the three navigate-away medium cards (`ReleaseArchiveBrowser`); replace with an in-page `MudTabs` 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).
|
||||||
|
- **Why:** The card-grid landing required navigation away to reach per-medium grids. Daniel's testing pass identified the correct shape as an in-page tab strip — medium selection without leaving the page.
|
||||||
|
- **Shape:** `TrackList.razor` renders a `MudTabs` strip when `VM.Mode == BrowseMode.Albums`: the `ALL` panel hosts `CmsAllReleasesGrid` (the 8.B component); per-medium tabs are enum-driven via `Enum.GetValues<ReleaseMedium>()` with a `MediumTabLabels` dictionary for display text and a `MediumGrid(medium)` render-fragment `switch` for content (Cut → `CmsCutBrowser`, Session → `CmsSessionBrowser Embedded="true"`, Mix → `CmsMixBrowser Embedded="true"`, fallback `_ =>`). The `/tracks/archive` deep-link route resolves to the Releases/Albums mode via URL inspection in `OnInitializedAsync`. `ReleaseArchiveBrowser.razor` and its `.razor.css` were deleted. `BrowseMode.Archive` was removed from `CmsTrackBrowserViewModel.cs`. New `CmsCutBrowser.razor` (a Cut-filtered grid) derives from `CmsMediumBrowserBase`, `Medium => ReleaseMedium.Cut`. `CmsSessionBrowser.razor` and `CmsMixBrowser.razor` each gained an `[Parameter] public bool Embedded { get; set; }` on the subclass (not on `CmsMediumBrowserBase`, which is untouched); when `true`, standalone page chrome (container, title, "Back to Release Archive" button) is suppressed and only the grid renders; standalone routes keep the chrome. Their §9.5.E per-row Edit and hero/waveform row actions are preserved in both contexts. `/tracks/sessions`, `/tracks/mixes`, `/tracks/archive` remain reachable by direct URL. No `@rendermode` override; no constructor growth; no `IServiceProvider`. No new automated tests (DeepDrftTests has no bUnit harness / no DeepDrftManager reference). Known internally-consistent characteristic: CUTS/SESSIONS/MIXES tabs use the thin `CmsMediumTable` grid (cover/title/artist/edit) while ALL uses the richer `CmsAllReleasesGrid` (expand-tracks/delete/Type-chip); per-medium grid richness deferred to 8.C.
|
||||||
|
|
||||||
|
**Completion note:** `TrackList.razor` replaced its former three-way toggle (Tracks / Releases / Release Archive) with a two-item toggle (Tracks / Releases); the Releases arm hosts a `MudTabs` strip with `ALL` (→ `CmsAllReleasesGrid`) and enum-driven medium tabs rendered via `MediumTabLabels` + `MediumGrid` render-fragment switch. `ReleaseArchiveBrowser.razor` and `ReleaseArchiveBrowser.razor.css` deleted. `BrowseMode.Archive` removed from `CmsTrackBrowserViewModel.cs`. New file `CmsCutBrowser.razor` (Cut-filtered, derives from `CmsMediumBrowserBase`, no standalone page route). `CmsSessionBrowser.razor` and `CmsMixBrowser.razor` each gained `[Parameter] public bool Embedded { get; set; }` on the subclass; base class untouched. `/tracks/archive` deep-link resolves to Albums mode. All gate acceptance criteria met; 8.C and 8.E layer onto this foundation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
**8.D — Type column chip reads "Session" / "DJ Mix" for non-Cuts**
|
**8.D — Type column chip reads "Session" / "DJ Mix" for non-Cuts**
|
||||||
|
|
||||||
|
|||||||
@@ -176,7 +176,6 @@ 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:
|
Full track decomposition, acceptance criteria, and parallel/dependent analysis: `product-notes/phase-9-wave-8-remediation.md`. The tracks in brief:
|
||||||
|
|
||||||
**CMS (`DeepDrftManager`):**
|
**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.E layer onto it.)*
|
|
||||||
- **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.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.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.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.)*
|
- **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.)*
|
||||||
@@ -186,7 +185,7 @@ Full track decomposition, acceptance criteria, and parallel/dependent analysis:
|
|||||||
**Mix Visualizer — out of Phase-9-completion scope:**
|
**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`.
|
- **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.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.A–8.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.B, 8.D, 8.F, 8.G, 8.H, 8.I, 8.J, 8.L.
|
**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.A–8.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.A, 8.B, 8.D, 8.F, 8.G, 8.H, 8.I, 8.J, 8.L.
|
||||||
|
|
||||||
|
|
||||||
## Working with this file
|
## Working with this file
|
||||||
|
|||||||
Reference in New Issue
Block a user