Skip to content

Commit 46a1866

Browse files
committed
Audit MIDI Studio V2 control ownership and identify remaining UAT gaps - PR_26146_065-midi-studio-v2-uat-gap-audit-and-control-ownership
1 parent 997c6e4 commit 46a1866

4 files changed

Lines changed: 669 additions & 0 deletions

File tree

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# PR_26146_065 MIDI Studio V2 Control Ownership Matrix
2+
3+
Dynamic repeated controls are grouped by selector/pattern. "Workflow state" means implemented UI state that is not persisted as a song metadata field.
4+
5+
| Control | Owning tab | Editable/read-only | Canonical model field | Wired/unwired |
6+
| --- | --- | --- | --- | --- |
7+
| Import JSON Manifest | Global NAV | Action | Imported game manifest / `tools.midi-studio-v2` payload | Wired |
8+
| Play | Global NAV | Action | Playback from selected canonical song/timeline data | Wired |
9+
| Stop | Global NAV | Action | Playback state | Wired |
10+
| Stop All Audio | Global NAV | Action | Preview/playback audio state | Wired |
11+
| Save Project | Global NAV | Action | Serialized MIDI Studio tool state | Wired |
12+
| Reset Song Edits | Global NAV | Action | Selected song reset baseline | Wired |
13+
| Now Playing label | Global NAV | Read-only | Derived selected/playback status | Wired |
14+
| Dirty state label | Global NAV | Read-only | Derived dirty state | Wired |
15+
| Tab buttons | Tabs | Action/view state | Active tab view state | Wired |
16+
| Accordion headers | Current tab/panel | Action/view state | Accordion view state | Wired |
17+
| Songs list song buttons | Song Setup | Action | `tools.midi-studio-v2.activeSongId` | Wired |
18+
| Add Song | Song Setup | Action | `music.songs[]`, `tools.midi-studio-v2.activeSongId` | Wired |
19+
| Name | Song Setup | Editable | `music.songs[].name` | Wired |
20+
| Id | Song Setup | Read-only derived | `music.songs[].id` derived from Name | Wired |
21+
| Tempo/BPM | Song Setup | Editable | `music.songs[].studioArrangement.tempo` | Wired |
22+
| Key | Song Setup | Editable | `music.songs[].studioArrangement.key` | Wired |
23+
| Style | Song Setup | Editable | `music.songs[].studioArrangement.style` | Wired |
24+
| Notes | Song Setup | Editable | `music.songs[].director.notes` | Wired |
25+
| Song Sheet Sections | Song Setup | Editable | `music.songs[].studioArrangement.songSheet.sections` | Wired |
26+
| Song Sheet Loop sections | Song Setup | Editable | `music.songs[].studioArrangement.songSheet.loopSections` | Wired |
27+
| Parse Guided Song Sheet | Song Setup | Action | `music.songs[].studioArrangement` derived from Song Sheet | Wired |
28+
| Song Sheet Sections summary | Song Setup | Read-only derived | Parsed `studioArrangement.songSheet.sections` | Wired |
29+
| Song Sheet Bars | Song Setup | Read-only computed | Derived from parsed Song Sheet | Wired |
30+
| Song Sheet Chord count | Song Setup | Read-only computed | Derived from parsed Song Sheet | Wired |
31+
| Song Sheet Estimated duration | Song Setup | Read-only computed | Derived from tempo and parsed Song Sheet | Wired |
32+
| Song Sheet Loop sections summary | Song Setup | Read-only derived | Parsed loop section labels | Wired |
33+
| Song Sheet Warnings | Song Setup | Read-only diagnostics | Parser warning summary | Wired |
34+
| Loop enabled | Song Setup | Editable | `music.songs[].loop.enabled` | Wired |
35+
| Loop start | Song Setup | Editable | `music.songs[].loop.startSeconds` | Wired |
36+
| Loop end | Song Setup | Editable | `music.songs[].loop.endSeconds` | Wired |
37+
| Undo | Song Setup | Disabled/action placeholder | Future editing history | Unwired/red |
38+
| Redo | Song Setup | Disabled/action placeholder | Future editing history | Unwired/red |
39+
| Snapshots | Song Setup | Disabled/action placeholder | Future editing history | Unwired/red |
40+
| Revision History | Song Setup | Disabled/action placeholder | Future editing history | Unwired/red |
41+
| Revert To Saved | Song Setup | Disabled/action placeholder | Future editing history | Unwired/red |
42+
| Autosave | Song Setup | Disabled/action placeholder | Future editing history | Unwired/red |
43+
| Quick instrument row selection | Octave Timeline | Action | Shared selected instrument id | Wired |
44+
| Quick Mute | Octave Timeline | Action | `music.songs[].studioArrangement.previewLaneSettings.muted` | Wired |
45+
| Quick Solo | Octave Timeline | Action | `music.songs[].studioArrangement.previewLaneSettings.soloed` | Wired |
46+
| Quick Hide/Show | Octave Timeline | Action | `music.songs[].studioArrangement.previewLaneSettings.visible` | Wired |
47+
| Canvas note cells | Octave Timeline | Editable canvas surface | `music.songs[].studioArrangement.lanes` | Wired |
48+
| Zoom Out | Octave Timeline | Action/view state | Octave timeline zoom state | Wired |
49+
| Zoom In | Octave Timeline | Action/view state | Octave timeline zoom state | Wired |
50+
| Loop playback toggle | Octave Timeline | Editable workflow state | Playback/timing preview loop state | Wired |
51+
| Section preset buttons | Octave Timeline | Action/workflow state | Timing preview section state | Wired |
52+
| Custom section select | Octave Timeline | Editable workflow state | Timing preview section state | Wired |
53+
| Loop start select | Octave Timeline | Editable workflow state | Timing preview region state | Wired |
54+
| Loop end select | Octave Timeline | Editable workflow state | Timing preview region state | Wired |
55+
| Jump To Section | Octave Timeline | Action/workflow state | Timing preview section state | Wired |
56+
| Play Section | Octave Timeline | Action/workflow state | Timing preview playback state | Wired |
57+
| Play Loop | Octave Timeline | Action/workflow state | Timing preview playback state | Wired |
58+
| Timing preview Stop | Octave Timeline | Action/workflow state | Timing preview playback state | Wired |
59+
| Selected timeline details | Octave Timeline | Read-only derived | Selected instrument/cell state | Wired |
60+
| Instrument row selection | Instruments | Action | Shared selected instrument id | Wired |
61+
| Add instrument | Instruments | Action | `music.songs[].studioArrangement.lanes`, preview lane settings | Wired |
62+
| Delete instrument | Instruments | Action | `music.songs[].studioArrangement.lanes`, preview lane settings | Wired |
63+
| Collapse Instruments panel | Instruments | Action/view state | Accordion view state | Wired |
64+
| Instrument display name | Instruments | Editable | `previewLaneSettings.displayNames` | Wired |
65+
| GM Type | Instruments | Editable | `previewLaneSettings.instrumentTypes` | Wired |
66+
| GM Instrument | Instruments | Editable | `previewLaneSettings.instruments` | Wired |
67+
| Audible preview | Instruments | Read-only derived | Preview mapping derived from GM instrument | Wired |
68+
| Volume | Instruments | Editable | `previewLaneSettings.volumes` | Wired |
69+
| Pan/Balance | Instruments | Editable | `previewLaneSettings.pans` | Wired |
70+
| Mute default | Instruments | Editable | `previewLaneSettings.muted` | Wired |
71+
| Solo default | Instruments | Editable | `previewLaneSettings.soloed` | Wired |
72+
| Octave range low/high | Instruments | Editable | `previewLaneSettings.octaveRanges` | Wired |
73+
| Transpose | Instruments | Editable | `previewLaneSettings.transposes` | Wired |
74+
| Velocity | Instruments | Editable | `previewLaneSettings.velocities` | Wired |
75+
| Duration | Instruments | Editable | `previewLaneSettings.durations` | Wired |
76+
| Audition keyboard keys | Instruments | Action | Preview Synth audition action | Wired |
77+
| Reverb | Instruments | Disabled field | Future effect setting | Unwired/red |
78+
| Chorus | Instruments | Disabled field | Future effect setting | Unwired/red |
79+
| Delay | Instruments | Disabled field | Future effect setting | Unwired/red |
80+
| Filter | Instruments | Disabled field | Future effect setting | Unwired/red |
81+
| Brightness/Tone | Instruments | Disabled field | Future effect setting | Unwired/red |
82+
| MIDI Channel | Instruments | Disabled field | Future advanced MIDI setting | Unwired/red |
83+
| GM Program | Instruments | Disabled field | Future advanced MIDI setting | Unwired/red |
84+
| Controller Values | Instruments | Disabled field | Future advanced MIDI setting | Unwired/red |
85+
| Grid sections | Auto-Create Parts | Read-only derived | Derived from `studioArrangement.sections` | Wired |
86+
| Beats/bar | Auto-Create Parts | Editable | `music.songs[].studioArrangement.beatsPerBar` | Wired |
87+
| Subdivision | Auto-Create Parts | Editable | `music.songs[].studioArrangement.subdivision` | Wired |
88+
| Instrument/lane type helper | Auto-Create Parts | Editable workflow state | Helper lane generation selection | Wired |
89+
| Chords source text | Auto-Create Parts | Editable | `music.songs[].studioArrangement.lanes.chords` | Wired |
90+
| Bass source text | Auto-Create Parts | Editable | `music.songs[].studioArrangement.lanes.bass` | Wired |
91+
| Pad source text | Auto-Create Parts | Editable | `music.songs[].studioArrangement.lanes.pad` | Wired |
92+
| Lead source text | Auto-Create Parts | Editable | `music.songs[].studioArrangement.lanes.lead` | Wired |
93+
| Drums source text | Auto-Create Parts | Editable | `music.songs[].studioArrangement.lanes.drums` | Wired |
94+
| Generate Bass From Chords | Auto-Create Parts | Action | `studioArrangement.lanes.bass` | Wired |
95+
| Generate Pad From Chords | Auto-Create Parts | Action | `studioArrangement.lanes.pad` | Wired |
96+
| Generate Arpeggio From Chords | Auto-Create Parts | Action | `studioArrangement.lanes.lead` | Wired |
97+
| Generate Basic Drums | Auto-Create Parts | Action | `studioArrangement.lanes.drums` | Wired |
98+
| Normalize Grid | Auto-Create Parts | Action | `music.songs[].studioArrangement` | Wired |
99+
| MIDI source path | MIDI Import | Read-only | `music.songs[].sourceMidi` | Wired |
100+
| Instrument set | MIDI Import | Read-only | `music.songs[].instrumentSet` | Wired |
101+
| Import MIDI Source | MIDI Import | Action | Source MIDI normalization into `studioArrangement` | Wired |
102+
| Inspect MIDI Source | MIDI Import | Action | MIDI source inspection diagnostics | Wired |
103+
| MIDI source file picker | MIDI Import | Hidden file input | Import-selected MIDI file | Wired |
104+
| MIDI source details | MIDI Import | Read-only derived | MIDI import metadata/status | Wired |
105+
| Enable MIDI Input | MIDI Import | Disabled action placeholder | Future MIDI input | Unwired/red |
106+
| Select MIDI Device | MIDI Import | Disabled select placeholder | Future MIDI input | Unwired/red |
107+
| Record MIDI | MIDI Import | Disabled action placeholder | Future MIDI input | Unwired/red |
108+
| Playback state | Diagnostics | Read-only derived | Preview/playback status | Wired |
109+
| JSON Details | Diagnostics | Read-only derived | Serialized MIDI Studio payload | Wired |
110+
| Copy JSON | Diagnostics | Action | Serialized MIDI Studio payload | Wired |
111+
| Timeline Diagnostics | Diagnostics | Read-only derived | Current instrument grid summary | Wired |
112+
| Audio Diagnostics | Diagnostics | Read-only derived | Preview/playback/audio capability status | Wired |
113+
| Rendered Preview diagnostics | Diagnostics | Read-only derived | Current rendered preview state | Wired |
114+
| Rendered Export Targets diagnostics | Diagnostics | Read-only derived | `music.songs[].rendered` display only | Wired |
115+
| Game Music Director metadata | Diagnostics | Read-only derived | `music.songs[].director` display only | Wired |
116+
| Status log | Diagnostics | Read-only | Tool status output | Wired |
117+
| Clear status | Diagnostics | Action | Status log content | Wired |
118+
| Output Type | Export | Disabled/unwired select | Future rendered audio renderer format | Unwired/red |
119+
| Save WAV/MP3/OGG | Export | Unwired action | Future rendered audio renderer | Unwired/red |
120+
| Render Source details | Export | Read-only derived | Selected song/event summary | Wired |
121+
| WAV target path | Export | Editable | `music.songs[].rendered.wav` | Wired |
122+
| MP3 target path | Export | Editable | `music.songs[].rendered.mp3` | Wired |
123+
| OGG target path | Export | Editable | `music.songs[].rendered.ogg` | Wired |
124+
| SoundFont | Export | Disabled select placeholder | Future render setting | Unwired/red |
125+
| Render Quality | Export | Disabled select placeholder | Future render setting | Unwired/red |
126+
| Sample Rate | Export | Disabled select placeholder | Future render setting | Unwired/red |
127+
| Normalize Volume | Export | Disabled action placeholder | Future render setting | Unwired/red |
128+
| Export Stems | Export | Disabled action placeholder | Future render setting | Unwired/red |
129+
| Loop Export | Export | Disabled action placeholder | Future render setting | Unwired/red |
130+
| Export Status | Export | Read-only derived | Render/export status messages | Wired |
131+
| Export JSON | Export | Action | Serialized MIDI Studio tool state | Wired |
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# PR_26146_065 MIDI Studio V2 UAT Gap Audit
2+
3+
## Scope
4+
5+
- Continued from `PR_26146_064`.
6+
- Audited MIDI Studio V2 visible controls across current tabs only:
7+
- Song Setup
8+
- Octave Timeline
9+
- Instruments
10+
- Auto-Create Parts
11+
- MIDI Import
12+
- Diagnostics
13+
- Export
14+
- No new features, tabs, or playback architecture changes were added.
15+
- Roadmap status was not changed because this PR is audit/test/reporting only and did not execute a new completion milestone beyond the existing PR064 state.
16+
17+
## Method
18+
19+
- Reviewed current tab/accordion/control layout in `tools/midi-studio-v2/index.html`.
20+
- Reviewed immediate MIDI Studio V2 control owners and app handlers:
21+
- `tools/midi-studio-v2/js/MidiStudioV2App.js`
22+
- `tools/midi-studio-v2/js/controls/ActionNavControl.js`
23+
- `tools/midi-studio-v2/js/controls/ExportPanelControl.js`
24+
- `tools/midi-studio-v2/js/controls/RenderedExportActionsControl.js`
25+
- `tools/midi-studio-v2/js/controls/SongDetailsControl.js`
26+
- `tools/midi-studio-v2/js/controls/SongSheetControl.js`
27+
- `tools/midi-studio-v2/js/controls/InstrumentGridControl.js`
28+
- Added Playwright UAT inventory coverage that visits each visible tab and classifies controls by owner, canonical field, and wired/unwired status.
29+
30+
## PASS
31+
32+
- PASS - Current tab set remains unchanged: Song Setup, Octave Timeline, Instruments, Auto-Create Parts, MIDI Import, Diagnostics, Export.
33+
- PASS - Playwright PR065 inventory found no unclassified visible controls in the audited tab surfaces.
34+
- PASS - Visible editable data controls map to canonical fields, or to explicit functional workflow state, or are red/unwired.
35+
- PASS - Unwired/future controls expose shared red unwired styling and title/status text.
36+
- PASS - Song Setup editable controls update canonical song fields for Name, derived Id, Tempo, Key, Style, Notes, Song Sheet Sections, Loop sections, and loop settings.
37+
- PASS - Song Sheet derived values remain display/read-only for Bars, Chord count, Estimated duration, and Warnings.
38+
- PASS - Instruments tab owns editable GM Type, GM Instrument, display name, volume, pan, octave range, transpose, velocity, and duration controls.
39+
- PASS - Effects, Advanced, MIDI Input, Editing History, and future rendering controls remain red/unwired.
40+
- PASS - Export tab owns rendered target path editing and rendered audio save workflow controls.
41+
- PASS - Diagnostics controls are read-only derived displays except explicit diagnostic actions such as Copy JSON and Clear.
42+
- PASS - Canvas Octave Timeline note editing still updates canonical song data and playback reads edited canonical data.
43+
- PASS - Play and Stop still work in targeted MIDI Studio V2 validation.
44+
45+
## WARN
46+
47+
- WARN - A full unfiltered `MidiStudioV2.spec.mjs` Playwright run was attempted and timed out after 15 minutes. Targeted PR060-PR065/export UAT coverage passed after narrowing to the impacted tests.
48+
- WARN - Mute and Solo are intentionally available in both Octave Timeline quick controls and Instruments Mix. They write the same canonical preview lane settings and sync correctly, but product wording still blurs "performance quick controls" vs "default mix settings".
49+
- WARN - Some visible controls are functional workflow state rather than persisted canonical song fields, including timing preview section selectors, Loop playback toggle, and Auto-Create helper lane type. They are classified in the matrix as workflow state instead of model-editing fields.
50+
- WARN - Roadmap text still contains older MIDI Studio V2 ownership wording in places; no status update was made because this PR did not include an execution-backed roadmap milestone change.
51+
52+
## FAIL
53+
54+
- FAIL - None found for the audited PR065 scope.
55+
- FAIL checked and not found - duplicate editable song metadata fields across tabs.
56+
- FAIL checked and not found - derived Song Sheet values exposed as editable controls.
57+
- FAIL checked and not found - visible unwired controls without red/shared unwired styling.
58+
- FAIL checked and not found - editable controls that silently fail to update the canonical model in the sampled UAT checks.
59+
60+
## NEXT
61+
62+
- NEXT - Decide whether Instruments Mix Mute/Solo should remain the same performance state as Octave Timeline quick Mute/Solo or become separate persisted defaults with distinct canonical fields.
63+
- NEXT - Consider adding UI copy or data attributes that distinguish transient workflow controls from canonical model editors.
64+
- NEXT - Split the large MIDI Studio V2 Playwright file into smaller targeted shards if whole-file execution continues exceeding practical local timeouts.
65+
- NEXT - Refresh roadmap wording in a dedicated status/text cleanup PR if the owner wants roadmap prose aligned to current tab ownership.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# PR_26146_065 MIDI Studio V2 UAT Gap Audit Validation
2+
3+
## Scope
4+
5+
- Added a Playwright-only MIDI Studio V2 visible control ownership audit.
6+
- Produced UAT gap and control ownership reports.
7+
- Preserved current MIDI Studio V2 runtime behavior.
8+
- Full samples smoke test was not run per PR instruction.
9+
10+
## Validation
11+
12+
PASS - `node --check tests/playwright/tools/MidiStudioV2.spec.mjs`
13+
14+
PASS - `npx playwright test tests/playwright/tools/MidiStudioV2.spec.mjs --grep "audits PR065"`
15+
16+
Result: 1 passed.
17+
18+
PASS - `npx playwright test tests/playwright/tools/MidiStudioV2.spec.mjs --project=playwright --grep "PR065|PR064|PR063|PR062|PR061|PR060|SSoT export ownership|Export tab usable|JSON wording"`
19+
20+
Result: 9 passed.
21+
22+
WARN - `npx playwright test tests/playwright/tools/MidiStudioV2.spec.mjs --project=playwright`
23+
24+
Result: timed out after 904040 ms before completion. This broad unfiltered spec run was replaced with the targeted PR060-PR065/export UAT suite above.
25+
26+
PASS - `git diff --check`
27+
28+
Result: exit code 0. Git printed a line-ending warning for `tests/playwright/tools/MidiStudioV2.spec.mjs`; no whitespace errors were reported.
29+
30+
PASS - Playwright V8 coverage report generated at `docs/dev/reports/playwright_v8_coverage_report.txt`.
31+
32+
PASS - Changed runtime JS coverage guardrail generated at `docs/dev/reports/coverage_changed_js_guardrail.txt`.
33+
34+
## Playwright Evidence
35+
36+
- PR065 inventory visited Song Setup, Octave Timeline, Instruments, Auto-Create Parts, MIDI Import, Diagnostics, and Export.
37+
- Visible controls were classified by owner, canonical field, and wired/unwired state.
38+
- No unclassified visible controls remained in the audited surfaces.
39+
- Visible editable data controls mapped to canonical fields or to explicit workflow state; future controls remained red/unwired.
40+
- Unwired controls exposed `data-midi-studio-unwired="not-implemented"`, shared unwired class styling, and Not implemented/Incomplete title text.
41+
- Song Setup Name edits updated the derived Id and canonical song data.
42+
- Song Sheet Sections and Loop sections updated canonical `studioArrangement.songSheet`.
43+
- Export OGG target path updated canonical `song.rendered.ogg`.
44+
- Instrument volume, mute, and solo updated canonical preview lane settings.
45+
- Octave Timeline quick mute/solo reflected and updated the same canonical preview lane settings.
46+
- Canvas note editing updated canonical timeline data.
47+
- Play and Stop still transitioned correctly.
48+
49+
## Samples Decision
50+
51+
SKIP - Full samples smoke test was not run. This PR is scoped to MIDI Studio V2 UAT audit/reporting and targeted tool Playwright validation.

0 commit comments

Comments
 (0)