# P5-15-02 — Responsive and accessibility audit ## Post-audit successor The following NO-GO is the historical audit decision. The owner's later continuous mission independently repaired its two P1 defects and the drawer/source/report findings; see [current parent reconciliation](../README.md) and linked P5-15-04 proof. Historical failures and all human/device obligations remain intact. The audit itself did not repair application code or supply postponed operator acceptance. **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](../../PHASE5_PLAN.md), [parent programme](../README.md), [57 preservation groups](../PRESERVATION_ACCEPTANCE.md), [Phase 3 accessibility](../../../phase-3/ACCESSIBILITY_PLAN.md)/[responsive strategy](../../../phase-3/RESPONSIVE_STRATEGY.md), [P4 acceptance](../../../phase-4/p4-06/README.md), 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](evidence/fresh-audit.json), [validation](evidence/validation.json), [responsive ledger](evidence/responsive-ledger.json), [actual zoom](evidence/fresh-zoom.json), [mobile/native-PDF proof](evidence/mobile-preview-proof.json) and [repository checks](evidence/repository-summary.json) retain command/results, native observations and source hashes. Raw full reports/logs/native PDFs stay in the ignored `.artifacts/p5-15-02/` directory. [Coverage](TEST_COVERAGE.md) 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](RESPONSIVE_RESULTS.md) 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](AXE_TRIAGE.md) 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](AXE_TRIAGE.md#fresh-final-run) 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](DEFECTS.md) 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](../PRESERVATION_ACCEPTANCE.md) 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](../p5-15-01/INTERMITTENT_FAILURES.md) 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](MANUAL_ACCEPTANCE.md) 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](evidence/fresh-audit.json); the mobile native comparison has its own [proof](evidence/mobile-preview-proof.json). 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.