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
L3 finding from the 2026-04-30 UI consistency audit. The build-632
sweep noted that ~70 in-app action buttons were rendered as
<span class="btn"> rather than <button class="btn">. Visually
identical (Splunk's .btn rule applies to both) but <span> does
NOT receive browser default keyboard tab-traversal or screen-
reader "button" role announcement. Tab traversal skipped them and
Enter/Space did not activate them.
- Convert all 70+ <span class="btn"> action sites to
<button type="button" class="btn ..."> across control_panel.js,
wl_modals.js, wl_save.js, wl_versions.js, wl_presence.js,
wl_nav.js, wl_table.js, wl_approval_ui.js. type="button" so
buttons inside any wrapping form do NOT auto-submit on click.
- Inline-opacity locking pattern (opacity:0.5;pointer-events:none)
preserved on buttons that gate Remove/Reject/Cancel until reason
filled - pointer-events:none works on <button> the same as
<span>, JS swap-style remains unchanged.
- Inline colour overrides on action buttons (background:#e74c3c
etc.) replaced with class attribution where redundant - simulated
btn-warning / btn-danger now class-driven via build-631 rules.
- Make E2E test selectors element-agnostic (span.btn-primary ->
.btn-primary) in test_e2e_realworld.py, test_e2e_manual_browser.py,
test_wl_save.py, test_ui_browser.py - selectors pass for both
before AND after migration.
- L1 panel title alignment - resolved by build-632 M2 empty-state
fix; verified post-deploy.
- L2 active-tab 1px nudge - explicit border:1px solid transparent
+ 5px 14px padding on .wl-cp-tab regardless of active state so
switching tabs no longer shifts content.
Verified in browser: tab traversal reaches migrated buttons
(interactive button count went from 0 -> 71 on Control Panel),
Enter activates focused tabs, modal lifecycle preserved, click
handlers all fire (find by #id / data-attr, element-agnostic),
disabled-state inline-opacity pattern intact.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments