|
| 1 | +# PR_26163_066-user-controls-layout-polish |
| 2 | + |
| 3 | +## Branch Validation |
| 4 | + |
| 5 | +- PASS: Current branch is `main`. |
| 6 | +- PASS: Expected branch is `main`. |
| 7 | +- Evidence: `git branch --show-current` returned `main`. |
| 8 | + |
| 9 | +## Requirement Checklist |
| 10 | + |
| 11 | +- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before implementation. |
| 12 | +- PASS: `account/user-controls.html` renders Supported Control Types with `list--multi-column list--multi-column-3`. |
| 13 | +- PASS: Supported Control Types render as exactly 3 columns. |
| 14 | +- PASS: Bullet alignment is maintained with the existing outside bullet positioning and padding from `list--multi-column`. |
| 15 | +- PASS: Alphabetical ordering remains unchanged because the DOM order is still generated from the sorted `SUPPORTED_CONTROL_TYPES` list. |
| 16 | +- PASS: Columns fill top-to-bottom, then left-to-right; Playwright validates column-local top order and cross-column index order. |
| 17 | +- PASS: Controller selection toolbar renders as one line: `[ Refresh Devices ] [ Controller ] [ Controller Dropdown ] [ Create User Control Profile ]`. |
| 18 | +- PASS: Controller dropdown consumes remaining horizontal space with reusable `content-cluster__grow`. |
| 19 | +- PASS: Controller names do not force the toolbar onto multiple lines at 1440px desktop width; Playwright validates no-wrap layout before and after selecting a controller. |
| 20 | +- PASS: Refresh Devices and Create User Control Profile remain visible and sized to content. |
| 21 | +- PASS: Workflow/profile behavior was not changed; no account runtime JavaScript changed. |
| 22 | +- PASS: Reused and extended Theme V2 only; no page-local CSS, inline styles, or new layout system. |
| 23 | + |
| 24 | +## Theme V2 Notes |
| 25 | + |
| 26 | +- Existing Theme V2 already had `list--multi-column` for 2-column lists and `content-cluster` for wrapping control rows. |
| 27 | +- This PR added small reusable modifiers in Theme V2: |
| 28 | + - `list--multi-column-3` |
| 29 | + - `content-cluster--nowrap` |
| 30 | + - `content-cluster__grow` |
| 31 | +- These are reusable modifiers on existing Theme V2 patterns, not page-local CSS. |
| 32 | + |
| 33 | +## Changed Files |
| 34 | + |
| 35 | +- `account/user-controls.html` |
| 36 | +- `assets/theme-v2/css/layout.css` |
| 37 | +- `assets/theme-v2/css/typography.css` |
| 38 | +- `tests/playwright/tools/InputMappingV2Tool.spec.mjs` |
| 39 | +- `docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md` |
| 40 | +- `docs_build/dev/reports/codex_changed_files.txt` |
| 41 | +- `docs_build/dev/reports/codex_review.diff` |
| 42 | + |
| 43 | +## Impacted Lane |
| 44 | + |
| 45 | +- Account/User Controls layout lane. |
| 46 | +- Theme V2 reusable CSS modifier lane. |
| 47 | +- Targeted Account/User Controls Playwright lane. |
| 48 | +- Required legacy workspace command: `npm run test:workspace-v2`. |
| 49 | + |
| 50 | +Note: `npm run test:workspace-v2` is a legacy command name retained by repo scripts. |
| 51 | + |
| 52 | +## Skipped Lanes |
| 53 | + |
| 54 | +- Full samples smoke: SKIP. Safe because this PR changes account layout/CSS and targeted Playwright assertions only; no sample JSON, sample loader, or game runtime sample path changed. |
| 55 | +- Engine input lane: SKIP. Safe because `src/engine/input` was not modified. |
| 56 | +- Account/User Controls runtime DB lane: SKIP. Safe because no runtime JavaScript or persistence behavior changed. |
| 57 | + |
| 58 | +## Testing Performed |
| 59 | + |
| 60 | +- PASS: `node --check tests/playwright/tools/InputMappingV2Tool.spec.mjs` |
| 61 | +- PASS: `git diff --check` |
| 62 | +- PASS: `rg -n "<style| on[a-z]+=" account/user-controls.html` returned no inline style/event handler matches. |
| 63 | +- PASS: `npx playwright test tests/playwright/tools/InputMappingV2Tool.spec.mjs --grep "User Controls owns physical input mapping accordions and profiles" --reporter=line` passed 1 test. |
| 64 | +- PASS: `npm run test:workspace-v2` passed; workspace-contract lane reported 5 passed. |
| 65 | + |
| 66 | +## Playwright Result |
| 67 | + |
| 68 | +- PASS: Targeted Account/User Controls Playwright checks passed. |
| 69 | +- PASS: Required `npm run test:workspace-v2` passed. |
| 70 | + |
| 71 | +## Coverage |
| 72 | + |
| 73 | +- PASS: Playwright V8 coverage report was not produced for PR066 because no runtime JavaScript changed. |
| 74 | + |
| 75 | +## Manual Validation Steps |
| 76 | + |
| 77 | +1. Open `/account/user-controls.html` at a normal desktop width. |
| 78 | +2. Open Supported Control Types and confirm it displays exactly 3 bullet columns. |
| 79 | +3. Confirm Supported Control Types remains alphabetical and fills down each column before continuing to the next column. |
| 80 | +4. Open Game Controllers and confirm the toolbar stays on one line. |
| 81 | +5. Confirm Refresh Devices and Create User Control Profile remain visible and content-sized. |
| 82 | +6. Confirm the Controller dropdown expands to use the available horizontal space. |
| 83 | +7. Refresh devices, select a detected controller, and confirm the selected controller name does not wrap the toolbar. |
| 84 | + |
| 85 | +## Samples Validation Decision |
| 86 | + |
| 87 | +- SKIP: Full samples smoke was not run because no samples, sample JSON, sample loader, or production game runtime behavior changed. |
| 88 | + |
| 89 | +## ZIP Artifact |
| 90 | + |
| 91 | +- PASS: Repo-structured delta ZIP produced at `tmp/PR_26163_066-user-controls-layout-polish_delta.zip`. |
0 commit comments