You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
node -e "const fs=require('fs'); for (const file of ['tools/midi-studio-v2/styles/midiStudioV2.css']) { const text=fs.readFileSync(file,'utf8'); let depth=0; for (const ch of text) { if (ch==='{') depth++; if (ch==='}') depth--; if (depth<0) throw new Error(file+': unexpected }'); } if (depth!==0) throw new Error(file+': unbalanced braces'); console.log(file+': CSS brace check OK'); }"
40
+
npx.cmd playwright test tests/playwright/tools/MidiStudioV2.spec.mjs -g "octave timeline freezes compact headers and note labels while active cells stay textless|renders timing ruler, section navigation, and loop region visualization|reports invalid section and invalid loop handling|fast octave note editing supports drag painting keyboard shortcuts selection and timeline scroll sync" --config=codex_playwright_system_chrome.config.cjs --reporter=list --workers=1 --timeout=60000
41
+
git diff --check
42
+
```
43
+
44
+
Playwright result:
45
+
46
+
```text
47
+
Running 4 tests using 1 worker
48
+
49
+
ok 1 MIDI Studio V2 - fast octave note editing supports drag painting keyboard shortcuts selection and timeline scroll sync
50
+
ok 2 MIDI Studio V2 - octave timeline freezes compact headers and note labels while active cells stay textless
51
+
ok 3 MIDI Studio V2 - renders timing ruler, section navigation, and loop region visualization
52
+
ok 4 MIDI Studio V2 - reports invalid section and invalid loop handling
53
+
54
+
4 passed
55
+
```
56
+
57
+
Notes:
58
+
59
+
-`git diff --check` exited 0. Git emitted line-ending warnings for existing LF/CRLF handling in touched files; no whitespace errors were reported.
60
+
- Full samples smoke test was not run.
61
+
62
+
## Test Evidence
63
+
64
+
- Bar/Beat rows use `#3600af`: Playwright verifies computed header backgrounds are `rgb(54, 0, 175)`.
65
+
- Piano keys distinguish natural and sharp/flat notes: Playwright verifies white/black key classes, background/color differences, and left-aligned text.
66
+
- Section buttons have reduced padding/margins: Playwright verifies zero margins and compact padding on all five section preset buttons.
67
+
- Invalid section names show WARN: Playwright verifies missing Bridge emits actionable WARN status text.
68
+
- Valid section selection updates highlight: Playwright verifies selecting `bridge` creates visible selected-section region cells for that range.
69
+
- Loop changes update highlight/status: Playwright verifies `loop -> boss` highlights a loop region and logs the updated loop region.
70
+
- Play Section range: Playwright verifies Play Section starts `bridge` playback, sets the playhead to bridge, and Preview Synth snapshot records section mode.
71
+
- Play Loop range: Playwright verifies Play Loop starts `loop to boss`, sets the playhead to loop, and Preview Synth snapshot records loop mode with an active loop.
72
+
- Play/Stop: Playwright verifies existing keyboard/button Play and Stop behavior remains functional.
73
+
74
+
## Samples
75
+
76
+
Full samples smoke test: SKIP.
77
+
78
+
Reason: PR scope is limited to MIDI Studio V2 tool UI/runtime and targeted Playwright coverage; sample JSON alignment and full samples smoke are explicitly out of scope.
79
+
80
+
## Manual UAT
81
+
82
+
1. Open MIDI Studio V2 and import the UAT manifest.
83
+
2. Confirm Bar/Beat headers are purple `#3600af` except active playhead cells.
84
+
3. Confirm left note labels resemble piano keys and all labels are left-aligned.
85
+
4. Select section and loop controls; confirm selected section and loop regions update visibly.
86
+
5. Click missing section shortcuts and confirm WARN status text is actionable.
87
+
6. Play a section and a loop; confirm status text names the selected range and Stop halts playback.
this.statusLog.fail(`Instrument grid section not found: ${detail.label}. Normalize a section map containing that label or choose a listed custom section.`);
634
+
this.statusLog.warn(`section ${detail.label} does not exist. Normalize a section map containing that label or choose a listed custom section.`);
0 commit comments