P8-04 — Responsive and accessibility qualification
The final feature build uses the existing app theme, header measurements and MUI controls. No dependencies were added. The final acceptance report records the succeeding whole-browser run separately from the focused evidence below.
Executed focused browser evidence
browser-qualification.json records 13 passed / 0 failed, skipped, flaky or retried in93.929s: retained two Analytics journeys, retained two Dashboard journeys and nine Phase 8 cases. Actual local API/SQLite/accounts/session cookies/CSRF are used. Explicitly controlled GET/PUT503 and route-abort transport failures exercise recovery without implying a physical network outage. Fresh contexts and real logout/login prove account persistence across browser lifetimes; these are not physically separate devices.
Viewports320/390/768/1440px cover editor EN/Bokmål and light/dark; retained dashboard journeys also cover1024/1920px. Every measured root page has no horizontal overflow. Native selects keep long translated labels accessible; visual Size labels are short while complete widget-specific accessible names remain. Desktop pointer handle drag, keyboard Earlier/Later with live position/focus, emulated-touch button reordering and readback all pass. Summary stays full width; one logical DOM order becomes a single-column feed on small screens.
Forty-two initial Dashboard/editor PNGs were inspected through four contact sheets and representative full-size crops. Final desktop/light/English and320px/dark/Bokmål editor crops were separately inspected after the focus repair; final raw qualification contains60 distinct screenshots including Analytics. This does not claim an individual full-size inspection of every image. Exact metric/month/sample/source-link and persisted API assertions supply behavioral evidence beyond screenshots.
Two final-build captures from the uninterrupted whole-browser run are retained with this checkpoint: English/light desktop editor and Bokmål/dark320px editor. Both were inspected; they show the repaired edit-entry position and short visible size labels with the complete control names preserved in the accessibility tree.
Reproduced issues and repairs
- A subsequent populated sizing review found salary amounts breaking into digit fragments at standard width despite passing overflow checks. The new diagnostic first failed its actual text-line assertion (one failed, one passed), then passed both complete standard/full cases after the standard personal widget's salary groups became a single column. Full-width and Analytics retain their existing three-column desktop layout. All eight resizable widgets were saved/read back at both sizes and measured at320/768/1024/1440px, with tables/charts contained and no root overflow. Eight captures were produced; the standard1024 capture was inspected and its salary crop retained. The complete ordinary browser suite was then rerun against the rebuilt bundle; final results are recorded in acceptance.
- Edit entry focused the panel beneath the fixed app header. A browser geometry check first failed (
focus-red.json); deliberate preventScroll focus, the existing--app-shell-header-heightscroll margin and explicit scroll now pass at320/768/1440px. The final reviewed crops show the heading and Save/Cancel controls below the header. - Pending-save route navigation offered a misleading discard promise. A deferred acknowledgement unit regression first failed, then passed; SPA navigation now waits with a localized status while saving. Browser unload warnings do not promise rollback of server writes.
- Axe's incomplete triage identified a labelled preview
divwithout a valid role. A role-based test failed first (preview-semantics-red.log); the preview is now a named region. The new editor browser case explicitly rejectsaria-prohibited-attrincompletes. Final scan totals are in final acceptance; the earlier ten scans had0 automated violations and68 incomplete nodes (61contrast,6preview semantics,1drawer focus), so those earlier results are not presented as the repaired totals. - The Analytics all-hidden fixture still set only the original five local flags. Its failure remains in the interrupted full run. It now saves all nine hidden flags through the real owner endpoint, preserving the original Analytics exact-value/navigation/isolation assertions. The focused successor passes.
- The initial prebuilt browser run pointed to5202 rather than isolated5302; ten startup/data failures are retained. Rebuilt with explicit test API URL; no product default, API assertion or auth guard was weakened.
- Lint identified the Playwright fixture callback named
useas a React hook; renamed the callback toprovidewithout changing test behavior.
Required manual qualification
Human screen readers, physical touch/software keyboard, complete actual browser zoom/text enlargement/reflow, other browsers, deployed Linux/fonts/photo/native print, manual layered-contrast review and retained drawer settled-state focus require real operators. Automated axe/emulation/screenshots do not satisfy them. No production or provider test is inferred. Existing vendor strings and Phase 7 accessibility/output conditions remain visible in Phase 7 acceptance.