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'); }"
36
+
npx.cmd playwright test tests/playwright/tools/MidiStudioV2.spec.mjs -g "octave timeline freezes compact headers and note labels while active cells stay textless|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
37
+
git diff --check
38
+
```
39
+
40
+
Playwright result:
41
+
42
+
```text
43
+
Running 2 tests using 1 worker
44
+
45
+
ok 1 MIDI Studio V2 - fast octave note editing supports drag painting keyboard shortcuts selection and timeline scroll sync
46
+
ok 2 MIDI Studio V2 - octave timeline freezes compact headers and note labels while active cells stay textless
47
+
48
+
2 passed
49
+
```
50
+
51
+
Notes:
52
+
53
+
-`git diff --check` exited 0. Git emitted line-ending warnings for existing LF/CRLF handling in touched files; no whitespace errors were reported.
54
+
- An initial expanded Playwright command also included `updates play and stop control state without requiring real audio output`; that standalone legacy test timed out during V8 coverage cleanup. The final focused passing command covers Play/Stop through the fast-edit keyboard workflow and direct Play/Stop button assertions added to the PR040 grid test.
55
+
56
+
## Test Evidence
57
+
58
+
- Left key/chord column has no independent fixed row height: Playwright verifies piano row label height tracks square note cell height and changes with zoom.
59
+
- Natural and sharp/flat piano rows are visually distinct: Playwright verifies `white` and `black` key kinds, CSS classes, colors, and labels.
60
+
- Row alignment: Playwright verifies C5 and C#5 labels align with matching timeline cells by top and height.
61
+
- Grid viewport height: Playwright verifies `#instrumentGridOutput` renders at 50% of `window.innerHeight`.
62
+
- Vertical scrolling: Playwright verifies the grid can scroll vertically and header rows stay frozen beneath the top horizontal scrollbar.
63
+
- Horizontal scrolling: Playwright verifies top scrollbar, native bottom scroll, and header/body positions remain synchronized.
64
+
- Square cells and zoom controls: Playwright verifies width equals height and zoom in/out changes square cell size without breaking header/body alignment.
65
+
- Editing: Playwright verifies active notes remain highlighted without printed note text and cells remain editable after zoom changes.
66
+
- Play/Stop: Playwright verifies Space keyboard Play/Stop and button Play/Stop state transitions.
67
+
68
+
## Samples
69
+
70
+
Full samples smoke test: SKIP.
71
+
72
+
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.
73
+
74
+
## Manual UAT
75
+
76
+
1. Open MIDI Studio V2 and import the UAT manifest.
77
+
2. Confirm the Octave Timeline viewport is about half the screen height and vertical scrolling reveals additional notes.
78
+
3. Scroll horizontally and confirm left piano-style labels stay frozen and aligned with rows.
79
+
4. Use zoom in/out and confirm cells remain square while key labels stay aligned.
80
+
5. Toggle notes/chords and confirm highlighted notes stay textless.
81
+
6. Start and stop playback and confirm the playhead/header behavior remains aligned.
0 commit comments