test(a11y): demonstrate clipped initial mobile CV preview

This commit is contained in:
cesnimda
2026-10-10 21:02:38 +02:00
parent 6fb440aa23
commit 84e3bb5b44
9 changed files with 144 additions and 7 deletions
@@ -10,9 +10,11 @@ Audit source `cf847e9b256d9aec733abf3f37c42852c9dd2421`,2026-10-10. These findin
| **A11Y-02 — Mobile drawer focus and immediate Escape. E07** | Jobs390×900 EN/light, reduced motion: focus Open navigation, Enter; drawer visible, Dashboard does not receive focus. Focus remains on the now-hidden background trigger before and after axe. Immediate Escape leaves drawer open. Tab then Escape can close it, but restores focus to another background button. CV390×844 NB/dark emulated tap also fails immediate Escape return. | **P2, release acceptance blocker**; focus order/modal containment/return (WCAG2.4.3/2.4.7 and PRES-E07). Recovery exists through an additional Tab, so this evidence does not establish every navigation action permanently unusable. Ordinary historical shell checks passing do not close the new reduced-motion path. No security/data finding. | Shell/accessibility owner; independent **P5-15-04-A11Y-02**, deterministic reduced-motion entry, containment, Escape/Tab and correct trigger return at breakpoints; retain existing shell behavior. Exact transition/focus race diagnosis remains required. **OPEN**. |
| **A11Y-03 — CV source-editor destination. C07** | Native CV Content, desktop EN/light: keyboard-activate Open Career Profile; actual href/destination `/career/profile`, which has no current route and resolves404. Expected existing `/career` or `/career?section=profile`, preserving canonical source isolation. Source action is equally incorrect for pointer activation. | **P2, functional acceptance blocker**; accessible destination/product source-versus-override contract. Canonical editor is reachable through shell; no canonical mutation, CV/history corruption or lost persisted data demonstrated. | CV/navigation owner; independent **P5-15-04-A11Y-03**, minimal existing-route correction and real source/action/Back/localisation tests. **OPEN**. Do not add a second embedded canonical editor. |
| **A11Y-11 — Initial mobile visible-page measurement. C06; C09/C12 supporting** | Open the synthetic CV directly at390×844 EN/light in initial Edit mode, wait for the native ready signal, Enter Preview and settle fonts/two animation frames. Hidden measurement width793.6875 is physical; visible page width/flow remains0 with ready=true/non-finite page dataset. Preview says1page and shows collapsed/clipped text. The same owned native export API returns200 and **1 A4 PDF page**: page count matches, content placement does not. [Native proof](evidence/mobile-preview-proof.json), [preview](evidence/screenshots/mobile-preview-measurement-390-en-light.png), [PDF page1](evidence/screenshots/mobile-preview-native-pdf-page1.png). Bokmål/dark emulated screenshot independently shows the same collapsed strip. | **P1, production/progression-blocking** materially incorrect content placement/clipping and unusable preview; no page-count mismatch is claimed for this fixture. [CV frame](../../../../../job-tracker-ui/src/views/CvBuilderEditor.tsx) hides visible-page frames in compact Edit mode; [pagination](../../../../../job-tracker-ui/src/cvPreview.ts) reads their width under display:none and publishes ready/page data without visible-mode remeasurement. The finite direct-renderer/desktop-first16 fixtures can pass while this lifecycle fails. Native PDF remains correct/authoritative; no content/revision/source mutation observed. | CV/rendering owner; independent **P5-15-04-CV-01**, regression-first deterministic visible-page physical measurement when initially hidden, readiness/layout after mode switch, EN/NB/themes/mobile/direct reload and full fidelity gates. Do not alter print geometry/PDF to match collapsed preview. **OPEN**. |
## Automated findings requiring a contextual disposition
These are rule entries/nodes, not a count of independent defects. Best-practice tags are not mislabeled as WCAG-AA violations; absence of a human reader is not a functional FAIL.
These are rule entries/nodes, not a count of independent defects. Best-practice tags are not mislabeled as WCAG-AA violations; absence of completed human-reader results is not a functional FAIL.
| ID / route / PRES | Measured evidence | Classification and next action |
|---|---|---|
@@ -34,4 +36,4 @@ These are rule entries/nodes, not a count of independent defects. Best-practice
## Scope and stop conditions
**A11Y-01 makes P5-15-02 NO-GO for P5-15-03 until the severe keyboard gap is repaired or explicitly reviewed with adequate evidence.** Continue only safe audit collection; no upload of real user data, emergency broad UI change or automatic next slice. Other findings remain separately owned in P5-15-04; production additionally stays NO-GO for F04, backup/restore, configuration/schema/secrets, rollback and deployed acceptance. No new authentication/tenant-integrity regression is demonstrated by these UI findings. P5-13 remains deferred/unqualified/Production-withheld (0/366, no human semantic reviews/UI); no Docker/provider/B07/deployment work.
**A11Y-01 and A11Y-11 make P5-15-02 NO-GO for P5-15-03 until the severe keyboard gap is repaired or explicitly reviewed with adequate evidence.** Continue only safe audit collection; no upload of real user data, emergency broad UI change or automatic next slice. Other findings remain separately owned in P5-15-04; production additionally stays NO-GO for F04, backup/restore, configuration/schema/secrets, rollback and deployed acceptance. No new authentication/tenant-integrity regression is demonstrated by these UI findings. P5-13 remains deferred/unqualified/Production-withheld (0/366, no human semantic reviews/UI); no Docker/provider/B07/deployment work.
@@ -26,3 +26,7 @@ The two remaining controls failures are genuine: source action goes to unsupport
Genuine zoom collection **2/2 passes**,102 geometry observations. Earlier zoom harness attempts are retained locally: explicit `deviceScaleFactor:undefined` is required with `viewport:null`; Correspondence has two actual H1s, so readiness now identifies its intended inbox heading exactly while still recording both headings. Those harness corrections do not close product heading/manual-review issues. Earlier metadata incorrectly implied tag-only axe selection: installed builder `.options()` replaces earlier `.withTags()` options. The committed collector correctly declares **all enabled rules**, including best practices; per-rule tags distinguish them from WCAG failures.
App and E2E TypeScript, lint and whitespace checks pass. Complete ordinary regression and final rule/viewport/57-group reconciliation are separate pending audit evidence at this commit; neither the previous134 passes nor collection success is used to claim this audit green. Production remains NO-GO. P5-13 remains deferred, unqualified and Production-withheld; no UI/qualification/Docker work.
## Supplemental initial-mobile preservation regression
A tenth ordinary audit case was added after the main143-case discovery snapshot: `[P5-15-02 C06 C09 C12] mobile edit-to-preview retains physical document measurement`. Native direct390px initial Edit, settled layout/ready state, Enter Preview and owned export-PDF200 reproduce the defect without axe or mocked rendering. It **fails** on zero measurement width; preview1 versus1 native PDF pages. [Proof](evidence/mobile-preview-proof.json) retains exact measurements, page dimensions/hash and representative preview/PDF images. This is a separately executed1-case supplement, not represented as a single144-case full run. No tolerance, app renderer or PDF semantics changed. The known16fixture/36page corpus remains a separate finite gate.
@@ -0,0 +1,94 @@
{
"sourceReportSha256": "ab1e812bc98e68c2298d4aacbaa7b103decea8636cc61ebb27c7ff21d2234874",
"stats": {
"startTime": "2026-10-10T18:59:43.272Z",
"duration": 23714.858,
"expected": 0,
"skipped": 0,
"unexpected": 1,
"flaky": 0
},
"nativeMeasurements": {
"inEdit": [
{
"title": "CV preview",
"hiddenMeasurement": true,
"frameVisible": false,
"measuredWidth": 793.6875,
"measuredPages": 1,
"ready": "true",
"physicalPageWidth": 793.6875,
"flowWidth": 793.6875
},
{
"title": "CV preview page 1",
"hiddenMeasurement": false,
"frameVisible": false,
"measuredWidth": 0,
"measuredPages": null,
"ready": "true",
"physicalPageWidth": 0,
"flowWidth": 0
}
],
"inPreview": [
{
"title": "CV preview",
"hiddenMeasurement": true,
"frameVisible": true,
"measuredWidth": 793.6875,
"measuredPages": 1,
"ready": "true",
"physicalPageWidth": 793.6875,
"flowWidth": 793.6875
},
{
"title": "CV preview page 1",
"hiddenMeasurement": false,
"frameVisible": true,
"measuredWidth": 0,
"measuredPages": null,
"ready": "true",
"physicalPageWidth": 0,
"flowWidth": 0
}
],
"pageCountText": [
"1-page CV"
],
"method": "native DOM measurements before axe; A4 physical width 210mm =793.7008CSSpx at96dpi"
},
"measurementWidthCssPx": 793.6875,
"measurementWidthAfterSwitchCssPx": 793.6875,
"visibleMeasuredWidthCssPx": 0,
"visibleFlowWidthCssPx": 0,
"previewPages": 1,
"pageIndicator": [
"1-page CV"
],
"pdfPages": 1,
"pageCountMismatch": false,
"pdfDimensions": [
{
"widthMm": 209.88865255555555,
"heightMm": 297.0106596111111,
"textCharacters": 1718
}
],
"nativePdfSha256": "931002209d8ce6af7303cbf1e2c9e27afb0928dff6b328759f655795a4ce872f",
"nativePdfPath": "ignored artifact; not a production or personal CV",
"confirmedMaterialMismatch": true,
"screenshots": [
{
"file": "screenshots/mobile-preview-measurement-390-en-light.png",
"sha256": "5c74bcea99890b52591dbb108c2c7b2802817deee80d19fe518074b0b3c0986f"
},
{
"file": "screenshots/mobile-preview-native-pdf-page1.png",
"sha256": "5ccd04217a5acea2b6c09b7bc7cdb0a6135216f392e07c090df39385173c6b13"
}
],
"method": "Synthetic native owned CV; measurement before axe, fonts and two animation frames settled; real API Chromium PDF export200. PDF is authoritative. No tolerance changes or app fixes.",
"finding": "Initially compact edit pane hides visible-page iframe while it paginates. Hidden measurement frame has physical width793.6875 and reports1page; visible-page document instead publishes0width and non-finite page count. Switching exposes its previously zero-width flow without recalculating it. Native PDF comparison establishes actual page count separately; no false count is assumed from collapsed content.",
"scope": "Direct initial390px mobile route; standard direct-renderer/desktop-first16 fixtures do not cover this hidden-pane lifecycle. Physical devices and production fonts/photos remain unqualified."
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB