Verify transport geometry, playback states and themed icons across both engines

This commit is contained in:
Jonathan Sykes
2026-10-09 16:12:28 +08:00
parent 1e83951972
commit a1048f1c30
6 changed files with 6243 additions and 1 deletions

74
plans/transport-icons.md Normal file
View File

@@ -0,0 +1,74 @@
# Transport icon reconciliation
Branch `codex/transport-icons` starts at completed integration commit `0a5b113`.
The previous shell mixed filled inline SVGs (main/stage/fullscreen) with Unicode
play/pause/previous/next glyphs (mini, service, remote, gesture feedback, queue and
playlist actions). All rendered transport glyphs now use shared currentColor SVG
symbols defined in the already-eager `download-actions.js`; no new runtime file,
loader or worker change is required. The core/playback/queue bodies remain guarded
by their existing byte hashes. `updatePlayBtn` now has a behavioural state/handler
regression test instead of an obsolete byte-identity assertion.
| Location | Change |
|---|---|
| `frontend/download-actions.js:40` | Shared drawing/state or markup |
| `frontend/download-actions.css:13` | Shared drawing/state or markup |
| `frontend/index.html:212` | Shared drawing/state or markup |
| `frontend/app.js:3089` | Shared drawing/state or markup |
| `frontend/fullscreen-orientation.js:112` | Shared drawing/state or markup |
| `frontend/car-mode.js:13` | Shared drawing/state or markup |
| `frontend/remote-client.js:424` | Shared drawing/state or markup |
| `frontend/lyrics-window.js:27` | Shared drawing/state or markup |
| `frontend/views-core.js:225` | Shared drawing/state or markup |
| `frontend/shell-core.js:157` | Shared drawing/state or markup |
| `frontend/share-external.js:189` | Shared drawing/state or markup |
| `frontend/admin.html:388` | Shared drawing/state or markup |
| `frontend/glass-controls.js:10` | Shared drawing/state or markup |
| `frontend/stats-view.js:52` | Shared drawing/state or markup |
| `frontend/watch-party-client.js:350` | Shared drawing/state or markup |
Inventory: main deck previous/play/next/back10/forward10; stage back10/play/forward10;
mini play; service previous/play/next; remote previous/play/next and paired-screen
play; fullscreen HUD; gesture feedback; Car previous/play/back15/next; floating
lyrics play/next; homepage playlist play badges; Queue/sidebar/bottom-navigation
play symbols; Play all/queue/in-full, bookmark jump and Add-to-queue actions;
external-player launch links; admin editor play/pause and Play-here actions;
track-play statistics, party now-playing and empty-state/brand symbols. Speed's
old fast-forward glyph also uses the shared set. Glass's legacy decoder accepts
old input strings but emits shared SVG references; it never restores a transport
Unicode icon from the new markup.
F7 uses round filled shapes and a large circular play button. Classic keeps its
existing surfaces with clean line drawings. Glass uses thin strokes and translucent
surfaces. Bento uses rounded tiles. Labels, IDs and event handlers remain intact;
visible transport targets have at least 44px dimensions. Car retains its readable
high-contrast surface and text labels. Floating lyrics clones symbol definitions
into its separate document and observes playback/layout/theme changes.
Presenter has no transport controls. F7's Up-next sheet uses clickable track rows,
not old transport glyphs. Lock-screen controls are rendered by the OS through
unchanged MediaSession action handlers; website SVG/CSS cannot theme those buttons.
A screenshot/bounding-box check caught a Chromium SVG-reference quirk: ancestor
layout selectors changed styles in referenced groups without switching cloned
geometry (F7 previous remained x=5 instead of x=4). Variant selection now lives on
visible `<use>` elements; the harness checks the rendered bounds, not just styles.
Final verification:
```text
node --test frontend/*.test.js: 246 pass, 0 fail
bun test asset-manifest.test.js static-delivery.test.js: 21 pass, 0 fail
node perf/ui-geometry.mjs: 384 cases; 0 failed checks
node perf/ui-icons.mjs: 24 engine/layout/theme cases passed
```
Both engines passed transport state/geometry checks and the original download-icon
checks. All sources are free of rendered legacy transport glyphs. The only remaining
Unicode transport strings are the legacy decoder input mapping. Evidence is in
`perf/results/transport-icons-2026-10-09.json`; 48 transport preview/remote screenshots
were saved and the four dark-layout previews were visually inspected. Screenshots are local
and ignored in `plans/transport-shots/` and `plans/ui-shots/`. Real iPhone checks:
Car/fullscreen readability and native lock-screen controls; document PiP is browser
feature-dependent and was not verified on a real phone.