15 KiB
P5-15-02 — Responsive and accessibility audit
NO-GO for P5-15-03. Production remains NO-GO. The audit demonstrates P1 keyboard file-picker failure and materially clipped initial mobile CV preview content. Normal remediation requires independently authorized, bounded P5-15-04 checkpoints. No application/API/renderer/schema/provider/production configuration was changed; this checkpoint adds evidence and ordinary failing regression tests.
Source cf847e9b256d9aec733abf3f37c42852c9dd2421; development codex/ui-redesign-phase4, 2026-10-10. Production main remains 27657f31131cd95d42f0e1290853ec9c9b3959a4. No deployment, main merge/push, P5-15-03, P5-13 or B07 occurred.
Method and evidence
The binding sources are the Phase 5 plan, parent programme, 57 preservation groups, Phase 3 accessibility/responsive strategy, P4 acceptance, P5-01–14 implementation records and all three functional repair records. Tests use disposable owned SQLite/API records, synthetic English/Bokmål content and loopback-only requests. Component/DOM inspection is weaker evidence than a completed native workflow, and none substitutes for a human reader/device.
Fresh audit, validation, responsive ledger, actual zoom, mobile/native-PDF proof and repository checks retain command/results, native observations and source hashes. Raw full reports/logs/native PDFs stay in the ignored .artifacts/p5-15-02/ directory. Coverage preserves earlier harness corrections and focused runs without summing repeated cases into final totals.
Coverage matrix
PASS applies only to a named, executed assertion. PARTIAL means important acceptance remains outstanding, FAIL means a demonstrated defect, and NOT VERIFIED means no actual evidence. All whole-area rows remain below unconditional acceptance. Every area has NOT VERIFIED human screen-reader, physical touch/software-keyboard and mobile AT lanes; the owner reports a screen-reader operator available, but no actual announcements/results were supplied.
| Area / PRES | Automated and real browser keyboard/pointer evidence | Responsive/reflow and EN/NB/theme evidence | Whole-area status / remaining acceptance |
|---|---|---|---|
| Authentication E02–E06/E09 | AUTH-01/non-default query, return-path security, login failure/expiry and route authorization regressions pass; sign-in naming/structure scanned | Sign-in320 and actual zoom; EN/light and NB/dark; retained locale/theme variants | PARTIAL: registration/provider/2FA spoken errors and production identity paths not human-qualified; login landmark/headings review |
| Shell E07/E08/E09 | Commands/rail/account/utility historical paths pass; reduced-motion drawer entry/Escape/return FAIL | Both sides767/768,899/900,1023/1024; portrait/landscape; actual zoom | FAIL A11Y-02; full reader/device menu traversal and clipped-name triage open |
| Global commands E07/E08/W11/W12 | Ctrl+K, selection/empty feedback, Escape/return and Add dialog PASS in corrected native journey; generated ID references retained | 390 dialog, actual zoom/text spacing; EN/NB inherited states | PARTIAL: exact spoken counts/loading/errors and every dialog focus path not verified |
| Jobs J01–J10 | Native saved searches, owner denial, reload/apply/retry, table/Board parity and ordinary P2-D01 pass | 320/1440, landscape and real200/400%; bounded table scroller | PARTIAL: enabled multipage footer at400%, all row/error speech and native device operation open |
| Board J07 | Retained pointer/keyboard movement and query tests pass; named columns/card controls scanned | 390/1280, real zoom; intentional horizontal Board scroller | PARTIAL: native touch drag/cancel, full-result scaling and reader traversal remain open |
| Dashboard S01/S02 | Native metric definitions/retry/preference-view tests pass; exact values/statuses inspected | 768/1440/844landscape; real zoom, themes/locales | PARTIAL: human nonvisual summary, contrast/incomplete checks; historical generic preference500 not closed |
| Analytics S01 | AUTH-01/query/reports/navigation pass; explicit target-size finds standalone status links below minimum | 390/1024, landscape/zoom, EN/NB exact-value alternatives retained | FAIL A11Y-04: contextual exception/target repair and nonvisual chart/table review required; no calculations changed |
| Job workspace W01–W12 | Native deep-link/history/back/frozen-package/notes/tasks and manual-activation tab tests pass; document picker keyboard FAIL | 320Timeline,768Overview,1024Documents, real zoom | FAIL A11Y-01/W08; full dialog/document speech and physical interaction open; followMode metadata/UI deferral retained |
| Career Profile C01–C05 | Source/override isolation regression remains green; native repeated-entry region/name scans | 390/1440, zoom/spacing, EN/NB and themes | PARTIAL: avatar contrast exception/heading/nonvisual form/error review; all import device paths not qualified |
| CV Builder C06–C12 | Native keyboard select/reorder/persist/preview entry-scroll-exit pass; source link404 and initial mobile preview FAIL | 390/768/1440,899/900 transitions, emulated taps/landscape; actual zoom | FAIL A11Y-03/A11Y-11. Finite desktop fidelity passes; initially hidden visible-page layout does not. Human status/save/conflict and physical workflows remain open |
| Documents W08/J10 | Native owned attachments/package APIs remain green; six Enter/Space chooser failures versus three pointer successes | 320/1024/768 and zoom; long non-ASCII title | FAIL A11Y-01; no real files imported/uploaded by picker probe, no inaccessible control relabeled as passing |
| Settings S03–S05/J10 | Rules draft/save/validation/error/retry/discard/account regressions pass; import/CSV keyboard FAIL | 320/1440, landscape/zoom; English/Bokmål,light/dark retained | FAIL A11Y-01/J10; tab/panel speech/associations, switch visible hitbox and mobile keyboard need review |
| Administration A01–A03 | Native owned admin fixture scans and retained server role/tenant denial pass | 390/768/1280, actual zoom/spacing; bounded table scroll | PARTIAL: full destructive/admin reader journeys and deployed sensitive-output qualification open |
Responsive and keyboard findings
Responsive measurements cover actual breakpoints. Current shell drawer is below1024, unlike historical Phase3 prose below768; compact CV modes are below900, while grid/sticky change at1024. Narrow samples320/390, tablet768/1024, desktop1280/1440 and boundary widths767/768/899/900/1023/1024 are distributed across routes, not a full cross-product. Landscape844×390/text-spacing is tested separately.
Actual Chromium151.0.7922.34 tab zoom100/200/400 uses the same1280×900 outer window, inner widths1264/632/316, DPR1/2/4 and pinch scale1. 102 zoom/spacing geometry records and the native viewport samples report zero outer-page overflow. Table/Board/document and scrollable-tab content is classified separately. Clipping candidates still require enabled-action/device verification; geometry collection success is not usability acceptance. Parent text-spacing does not change renderer iframe geometry.
Keyboard command/dialog/manual Job-tab activation, CV section selection/reorder persistence and desktop preview entry/end-scroll/exit pass. Upload/import cannot be operated by Enter/Space. Reduced-motion mobile drawer retains hidden background focus, ignores immediate Escape, then closes after Tab+Escape with incorrect return target. This is recoverable, not a proven permanent trap. Emulated CV mode/orientation/readback succeeds before that drawer assertion fails; actual mobile preview correctness is separately unsafe.
Axe results and manual triage
Authoritative inherited R-03 execution: 267 scans, zero reported violations, 2,041 incomplete node occurrences. Baseline triage classifies1,769contrast/209prohibited ARIA/41hidden-focus/18invalid-reference/4table-cell incompletes. The approximate2,040 count was not authoritative. Repeated nodes/states are not distinct defects.
Fresh full-run retained-rule output: 267 scans, 0 violation node occurrences, 2038 incomplete node occurrences. Supplemental all-enabled-rules output: 45 scans, 47 violation node occurrences, 374 incomplete node occurrences. Different rule sets remain separate; target-size is explicitly enabled, and installed AxeBuilder.options replaces earlier withTags options. Per-rule tags distinguish WCAG failures from best-practice headings/landmarks/label-role warnings. Exact fresh counts/dispositions and JSON retain representative targets/messages rather than declaring a global compliance result.
Contrast overlap/obscured/too-short nodes need human rendered-pair review. Invalid dialog references need settled computed/spoken-name review; prohibited ARIA on generic labels needs meaning/state review; hidden-focus requires actual keyboard/reader traversal; table cells require populated/empty associations. Confirmed native picker/focus faults are more serious than their tool warnings. Avatar initials may be incidental/redundant; iframe main is cross-document, not duplicate outer Preview-region naming; clipped drawer child names are not four proven unnamed buttons.
Defects and preservation
Defect register records exact reproduction, criterion, severity, owner and independently bounded04 repair. P1: A11Y-01 keyboard file-picker and A11Y-11 initial mobile preview content clipping. P2: A11Y-02 drawer focus/Escape, A11Y-03 source action404, A11Y-04 Analytics targets. Heading/contrast/landmark/name/reflow candidates remain explicit review gaps rather than manufactured functional failures. No new account/tenant/source/revision corruption is demonstrated; unsupported AI remains Production-withheld.
The 57-group matrix retains every historical column. Before02:56PARTIAL/0FAIL/1DEFERRED. After02: 0PASS /50PARTIAL /6FAIL /1DEFERRED /0BLOCKED /0NOT VERIFIED =57. E07,J10,W08,C06,C07,S01 FAIL only their demonstrated boundaries; C11 remains deferred. Missing human/device evidence keeps entire otherwise functional groups PARTIAL, without treating every incomplete as failure.
Fresh regression results
| Gate | Fresh result / count change |
|---|---|
| Backend / revision / focused AI | 1033pass /5of5 /108pass; subsets not added to total; no backend additions |
| Frontend | 490pass,82suites,0fail; no unit-test additions |
| Main browser snapshot | 139pass /4fail /0skipped,143unique cases:134 inherited +9 audit cases |
| Supplemental mobile native/PDF diagnostic | 0pass /1fail, one newly added case after main discovery; union 139pass /5fail =144unique cases. This is not represented as one144-case full execution |
| Separate diagnostics / real HTTP | 2pass /2pass; not part of ordinary144 |
| Sidecar | 49pass |
| Standard renderer corpus | 16of16,36preview=36PDF pages, unchanged tolerances; finite fixtures do not cover the failed hidden mobile pane |
| Settings native exports | 8of8,24=24pages, unchanged tolerances |
| Rate-limit / ingress / PDF admission / configuration | 9 / 6 / 1 / 3 passing; development fixtures do not prove production ingress/configuration |
| Static/build/hygiene | App+E2E TypeScript,lint,frontend production/API Release builds,secrets,whitespace,local-document checks pass; commands/hashes retained |
All134 inherited browser cases remain passing, including saved-search/Rules/AUTH-01 repairs and ordinary P2-D01. Four ordinary audit failures remain genuine and unskipped; supplemental mobile adds a fifth failure. Earlier incorrect ArrowRight auto-selection expectation was corrected to existing manual activation and is not an unresolved product defect. No retries, expected failures or quarantine conceal issues. The unexplained historical CV Unsaved intermittent observation stays OPEN despite passing current cases.
The mobile diagnostic measured physical width793.6875 in the hidden measurement iframe, but visible-page measured width/flow0 after showing Preview. Its dataset page count is non-finite despite ready=true. The displayed1 preview page and 1 native PDF page match for this fixture; materially collapsed/clipped content does not. PDF remains authoritative and unchanged. The visible-page lifecycle measures getBoundingClientRect under display:none and retains that flow after a later pane switch; desktop-first/direct renderer tests cannot qualify that path. No geometry repair is hidden in this audit.
Human evidence, screenshots and next actions
Manual packet supplies M01–M13 with actual reader/browser/device/build identifiers, expected versus observed speech, focus/error/status/reorder/zoom/software-keyboard steps and per-variant results. An authorized operator is available; actual results have not arrived. NOT VERIFIED: screen-reader speech, native touch/drag/software keyboard, mobile AT, human contrast/forced-colors, text-only preferences and full enabled-action400% acceptance. Zero axe violations on a subset cannot close them.
On2026-10-10 the owner requested returning to screen-reader testing later. It is explicitly NOT COMPLETE / NOT VERIFIED, with the operator session postponed and the full acceptance obligation retained. Resume via the manual packet; this scheduling decision changes neither PRES totals nor the P5-15-02/production NO-GO decisions.
Representative screenshots are indexed with route/viewport/locale/theme/state and hashes in fresh audit; the mobile native comparison has its own proof. They cover the13areas, light/dark,English/Bokmål, narrow/tablet/desktop, interaction failures and actual zoom. Automated screenshot review is not independent human acceptance. Production font/photo qualification remains separate and open.
The two400% Playwright raster captures contain only the top-left header crop; they do not prove full-window content/focus visibility. Actual tab-zoom assertions and geometry remain separately recorded. Full visual zoom/task acceptance stays NOT VERIFIED.
Completed units were individually pushed: 4faeb96 baseline/operator packet, b90cae9 coverage/native proof, 4ccbe2d findings/reflow, 6fb440a preservation reconciliation, and 84e3bb5 mobile diagnostic/proof. Final evidence/docs receive their own immediate push; exact final SHA and clean-tree/remote equality are checked after creation rather than inventing a self-referential commit hash.
Before progression, independently repair and verify bothP1 boundaries and disposition the other confirmed defects, then collect actual operator/device evidence. No automatic04 or03 implementation is authorized here. F04/current backup+tested restore/configuration-schema-secrets/tested rollback/deployed health remain production release blockers. P5-13 stays deferred/unqualified/Production-withheld0of366calls,0human semantic reviews,UIunimplemented; followMode, Board scaling/native touch and Dashboard preference500 debt remain tracked. Stop after02; do not declare Phase5 complete.