test(i18n): qualify singular counts across table and board
@@ -1,5 +1,7 @@
|
|||||||
# A3-IM10 Cross-application qualification
|
# A3-IM10 Cross-application qualification
|
||||||
|
|
||||||
|
4 November matching-count source **9bfc51b067c4da4164b84578f5dacf452125ba62**:48 selected native cases/four suites, types/full lint/export build and36 configurations/72 table/board states PASSED,zero writes/unavailable reads/page errors/axe violations. V22 singular text resolved in EN/NB, no new dynamic translation call; existing locale-triggered active-view reload preserved. See visual-correction/MATCHING_COUNT_REVIEW.md for retained RED/path failures and exact superseded counts. Viewer24 families/864 actual bindings/28 frozen references;48 artifact selections passed separately. Discovery receipt **ed4ce4cc3a0fffecfa406793a60680e490fa6674** published and independently verified after one ordinary retry of a remote unpack checksum rejection;1,287 integrity checks matched. No infrastructure change. Remaining IM10/route/workflow/owner/native/European/security/recovery/release gates remain OPEN.
|
||||||
|
|
||||||
4 November discovery→preview→review→tracker qualification on unchanged runtime **a84a97cb61eda975d73690c818d56666f0929515**:36 connected journeys/144 rendered states PASSED;36 intercepted previews and36 creates, original source fields checked, no unexpected writes/unavailable reads/errors/axe violations. No actual provider/backend or attachment/AI execution. Existing wizard controls retained. Count grammar V22 found and remains open for the next bounded fix. Comparison viewer22 families/792 actual bindings/28 frozen references;44 artifact selections passed separately. Evidence Bank receipt **b5b9069d1e835197cc37c5e7e293c3a60857ec2f** is published/readback-verified with1,321 integrity checks. Other connected journeys and all final roadmap/native/owner/security/recovery/release gates remain OPEN.
|
4 November discovery→preview→review→tracker qualification on unchanged runtime **a84a97cb61eda975d73690c818d56666f0929515**:36 connected journeys/144 rendered states PASSED;36 intercepted previews and36 creates, original source fields checked, no unexpected writes/unavailable reads/errors/axe violations. No actual provider/backend or attachment/AI execution. Existing wizard controls retained. Count grammar V22 found and remains open for the next bounded fix. Comparison viewer22 families/792 actual bindings/28 frozen references;44 artifact selections passed separately. Evidence Bank receipt **b5b9069d1e835197cc37c5e7e293c3a60857ec2f** is published/readback-verified with1,321 integrity checks. Other connected journeys and all final roadmap/native/owner/security/recovery/release gates remain OPEN.
|
||||||
|
|
||||||
4 November Evidence Bank qualification on unchanged runtime **a84a97cb61eda975d73690c818d56666f0929515**:36 controlled journeys/216 rendered states PASSED, drafts retained across sections/retry, valid drafts blocked while read fails, deletion cancelled. Zero writes, preview requests, page exceptions or axe violations;108 company fixture reads unavailable. Component/test unchanged fromb31; no unnecessary rebuild or native rerun. Existing form/owned evidence boundaries intentionally retained. See visual-correction/EVIDENCE_BANK_REVIEW.md. Comparison viewer21 families/756 image bindings/28 frozen references;42 artifact selections passed separately. Settings receipt **505b0c01b953002ef777eca9aea550715b217216** published/readback-verified with1,268 integrity checks. Full IM10/34 routes/57 groups, connected journeys, owner/native/European/Phase10/security/recovery/release acceptance remain OPEN.
|
4 November Evidence Bank qualification on unchanged runtime **a84a97cb61eda975d73690c818d56666f0929515**:36 controlled journeys/216 rendered states PASSED, drafts retained across sections/retry, valid drafts blocked while read fails, deletion cancelled. Zero writes, preview requests, page exceptions or axe violations;108 company fixture reads unavailable. Component/test unchanged fromb31; no unnecessary rebuild or native rerun. Existing form/owned evidence boundaries intentionally retained. See visual-correction/EVIDENCE_BANK_REVIEW.md. Comparison viewer21 families/756 image bindings/28 frozen references;42 artifact selections passed separately. Settings receipt **505b0c01b953002ef777eca9aea550715b217216** published/readback-verified with1,268 integrity checks. Full IM10/34 routes/57 groups, connected journeys, owner/native/European/Phase10/security/recovery/release acceptance remain OPEN.
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ Owner correction: 3 November 2026. This register extends IM10 and the original 3
|
|||||||
| V19 | Mail localisation | One-label count rendered as 1 labels / 1 etiketter | RESOLVED in cd116ab8:44 native cases and36 focused label states; no writes or new dynamic translation calls | Native-language/European and whole-application acceptance remain separate |
|
| V19 | Mail localisation | One-label count rendered as 1 labels / 1 etiketter | RESOLVED in cd116ab8:44 native cases and36 focused label states; no writes or new dynamic translation calls | Native-language/European and whole-application acceptance remain separate |
|
||||||
| V20 | Shared feedback | ToastProvider outside the application theme produced failing information-toast contrast3.85:1 | Fixed provider order in a84a97cb;70 native cases and36 configurations/252 Settings states passed, toast visible during contrast analysis | Other feedback/workflow and human/native acceptance remain separate; failed scan retained |
|
| V20 | Shared feedback | ToastProvider outside the application theme produced failing information-toast contrast3.85:1 | Fixed provider order in a84a97cb;70 native cases and36 configurations/252 Settings states passed, toast visible during contrast analysis | Other feedback/workflow and human/native acceptance remain separate; failed scan retained |
|
||||||
| V21 | Administration hierarchy | Repeated generic route/page headings remain after opening section surfaces | OPEN minor visual discrepancy from rendered review | Review current route heading ownership and focus/test contracts before removing repetition |
|
| V21 | Administration hierarchy | Repeated generic route/page headings remain after opening section surfaces | OPEN minor visual discrepancy from rendered review | Review current route heading ownership and focus/test contracts before removing repetition |
|
||||||
| V22 | Application localisation | One result renders `1 matching jobs` / `1 jobber samsvarer` | OPEN reproduced from discovery-to-tracker screenshot and shared table/board count caller | Add paired singular count text with current-locale/table/board regression; preserve loading/error suppression and actual counts |
|
| V22 | Application localisation | One result renders `1 matching jobs` / `1 jobber samsvarer` | RESOLVED in9bfc51b0:48 native cases and36 configurations/72 focused table/board count states passed,zero writes | Existing active-view locale reload/loading/error suppression retained; owner/native/European acceptance separate |
|
||||||
|
|
||||||
The owner-approved design foundation remains original A1 dashboard, D1 visual system, B1 tracking, editor left / preview right, application context right, desktop sidebar and hybrid mobile navigation. No controls, imports, revisions, permissions or provider rights may be removed to obtain visual simplicity.
|
The owner-approved design foundation remains original A1 dashboard, D1 visual system, B1 tracking, editor left / preview right, application context right, desktop sidebar and hybrid mobile navigation. No controls, imports, revisions, permissions or provider rights may be removed to obtain visual simplicity.
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Matching-result count localisation
|
||||||
|
|
||||||
|
4 November 2026. Source `9bfc51b067c4da4164b84578f5dacf452125ba62`, after published discovery workflow receipted4ce4cc. V22 was reproduced in a real tracked-row capture and confirmed at the shared JobTable table/board count caller.
|
||||||
|
|
||||||
|
Add paired literal `jobsMatchingSingle` text (`{count} matching job` / `{count} jobb samsvarer`) for exactly1. Preserve the plural key and count0/2+, active view's actual count, hidden loading/refresh/error count and Trash behavior. Both translator calls are literal; no new dynamic translation key. Query, pagination, filtering, membership, revisions, status writes, provider acquisition and UI/generated-content language ownership remain unchanged.
|
||||||
|
|
||||||
|
RED: four singular cases failed and eight zero/plural cases passed; six older cases filtered. The initial test also assumed locale switching never re-fetches, but both existing resource owners explicitly depend on `t`. Preserve that existing behavior; correct the test scope to verify live text/membership and no reads of the inactive view. Initial assumption failure retained separately. Three older tests encoded the wrong English singular and were corrected. The first combined native command used a nonexistent catalogue test path (45 cases passed, command failed); the corrected full targeted run below supersedes it.
|
||||||
|
|
||||||
|
PASSED:48 native cases/four suites (18 table/board integration including12 new EN/NB×table/board×0/1/2 live-locale cases; remaining table-density, grouped-board and catalogue cases), type-check, full lint, export build and scoped verifier lint. No overlapping failed/focused run is added to48.
|
||||||
|
|
||||||
|
PASSED:36 configurations/72 actual table/board count states at all nine widths/EN/NB/themes. One-record labels are visible in both views; zero status/mutation requests, unexpected writes, page exceptions or axe violations. The count-only scope explicitly leaves detail, alias and mutation workflows NOT RUN. The prior36/144 discovery-to-tracker journey remains bound to the unchanged callback sourcea84/ed4 rather than being repeated for a text-only correction. All API results are synthetic; no backend/provider/native-language/human/device/European/security/release qualification is inferred.
|
||||||
|
|
||||||
|
Rollback reverts the paired catalogue entry/shared count selection and associated expected labels; no data, dependency or migration rollback. Final A3/Phase10 and remaining route/error/journey/security/recovery/release/owner gates remain OPEN.
|
||||||
@@ -68,9 +68,9 @@
|
|||||||
"JobTable"
|
"JobTable"
|
||||||
],
|
],
|
||||||
"visualStatus": "FLAT_ROWS_CORRECTED_PENDING_FINAL_VISUAL_REVIEW",
|
"visualStatus": "FLAT_ROWS_CORRECTED_PENDING_FINAL_VISUAL_REVIEW",
|
||||||
"afterStatus": "PASSED:36 configurations; table/focused table/board/Add Job=144 scans; all row outline checks visible and phone outlines unclipped",
|
"afterStatus": "PASSED:36 configurations; table/focused table/board/Add Job=144 scans; all row outline checks visible and phone outlines unclipped; singular count successor36/72 table/board states at9bfc51b0,zero writes",
|
||||||
"functionalCriteria": "Original preservation register retained; no capability acceptance promotion",
|
"functionalCriteria": "Original preservation register retained; no capability acceptance promotion",
|
||||||
"evidence": "evidence/applications-flat/BROWSER.json; APPLICATION_FLAT.md"
|
"evidence": "evidence/applications-flat/BROWSER.json; APPLICATION_FLAT.md; MATCHING_COUNT_REVIEW.md; evidence/matching-count/BROWSER.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"route": "/jobs/:id",
|
"route": "/jobs/:id",
|
||||||
|
|||||||
@@ -0,0 +1,811 @@
|
|||||||
|
{
|
||||||
|
"screens": [
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "table",
|
||||||
|
"violations": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"state": "board",
|
||||||
|
"violations": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"journeys": [
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 320,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 360,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 430,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 768,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1024,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1280,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "en",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "light",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1920,
|
||||||
|
"language": "nb",
|
||||||
|
"mode": "dark",
|
||||||
|
"singularTableAndBoard": "PASS",
|
||||||
|
"mutationsDetailAliases": "NOT RUN"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"aliases": [],
|
||||||
|
"focusChecks": [],
|
||||||
|
"errors": [],
|
||||||
|
"unexpectedWrites": [],
|
||||||
|
"mockedWrites": [],
|
||||||
|
"unavailableReads": [],
|
||||||
|
"blockedExternal": [
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com",
|
||||||
|
"https://fonts.googleapis.com"
|
||||||
|
],
|
||||||
|
"limits": [
|
||||||
|
"controlled fixtures, not real backend integration",
|
||||||
|
"secondary service reads may return honest unavailable states",
|
||||||
|
"no native device, provider, model, security or release qualification"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 62 KiB |
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"checks": [
|
||||||
|
{
|
||||||
|
"width": 390,
|
||||||
|
"language": "nb",
|
||||||
|
"theme": "dark",
|
||||||
|
"selections": 24,
|
||||||
|
"errors": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 1440,
|
||||||
|
"language": "en",
|
||||||
|
"theme": "light",
|
||||||
|
"selections": 24,
|
||||||
|
"errors": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scope": "Static comparison artifact only, not application acceptance."
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 199 KiB |
@@ -26,7 +26,9 @@ const screens = [
|
|||||||
{name:'Application table',reference:'applications',folder:'applications-flat',state:'table',source:'b6d830f2',scope:'Scoped populated table/phone rows; columns and actions retained.'},
|
{name:'Application table',reference:'applications',folder:'applications-flat',state:'table',source:'b6d830f2',scope:'Scoped populated table/phone rows; columns and actions retained.'},
|
||||||
{name:'Application detail',reference:'detail',folder:'applications-flat',state:'detail',source:'b6d830f2',scope:'Recorded role hierarchy and right-side context; scoped fixture only.'},
|
{name:'Application detail',reference:'detail',folder:'applications-flat',state:'detail',source:'b6d830f2',scope:'Recorded role hierarchy and right-side context; scoped fixture only.'},
|
||||||
{name:'Job discovery',reference:'discover',folder:'discovery',state:'results',source:'a7d72673',scope:'Divided vacancies and existing supported source semantics. Synthetic NAV-shaped data; no new provider permissions.'},
|
{name:'Job discovery',reference:'discover',folder:'discovery',state:'results',source:'a7d72673',scope:'Divided vacancies and existing supported source semantics. Synthetic NAV-shaped data; no new provider permissions.'},
|
||||||
{name:'Discovery to tracker',reference:'applications',folder:'discovery-track',state:'tracked',source:'a84a97cb',scope:'Connected preview/review/create fixture journey. Original source fields checked; provider/backend qualification separate. Count grammar V22 remains visible in this historical capture.'},
|
{name:'Discovery to tracker',reference:'applications',folder:'discovery-track',state:'tracked',source:'a84a97cb',scope:'Connected preview/review/create fixture journey. Original source fields checked; provider/backend qualification separate. Historical count grammar is corrected in9bfc51b0; select Matching count table/board.'},
|
||||||
|
{name:'Matching count table',reference:'applications',folder:'matching-count',state:'table',source:'9bfc51b0',scope:'Focused singular EN/NB count successor; zero writes. Native0/1/2/live-locale and membership regression passed.'},
|
||||||
|
{name:'Matching count board',reference:'applications',folder:'matching-count',state:'board',source:'9bfc51b0',scope:'The same single-count rule in Board; real count/membership retained. Mutation/detail qualification is not repeated.'},
|
||||||
{name:'Career overview',reference:'career',folder:'career',state:'overview',source:'b31ce617',scope:'Open overview sections and all14 edit actions. Scoped216-state qualification passed; company/preview reads remain unavailable.'},
|
{name:'Career overview',reference:'career',folder:'career',state:'overview',source:'b31ce617',scope:'Open overview sections and all14 edit actions. Scoped216-state qualification passed; company/preview reads remain unavailable.'},
|
||||||
{name:'Career evidence',reference:'career',folder:'career-evidence',state:'populated',source:'a84a97cb',scope:'Evidence form/record boundaries retained intentionally. Unsaved drafts, cancelled deletion and error/retry qualified with synthetic data; no evidence mutations.'},
|
{name:'Career evidence',reference:'career',folder:'career-evidence',state:'populated',source:'a84a97cb',scope:'Evidence form/record boundaries retained intentionally. Unsaved drafts, cancelled deletion and error/retry qualified with synthetic data; no evidence mutations.'},
|
||||||
{name:'Calendar agenda',reference:'calendar',folder:'calendar',state:'agenda',source:'b31ce617',scope:'Recorded deadlines/follow-ups only. Scoped108-state qualification passed; no invented interview appointments or original timezone precision.'},
|
{name:'Calendar agenda',reference:'calendar',folder:'calendar',state:'agenda',source:'b31ce617',scope:'Recorded deadlines/follow-ups only. Scoped108-state qualification passed; no invented interview appointments or original timezone precision.'},
|
||||||
|
|||||||
@@ -6,10 +6,12 @@ import fs from 'node:fs';
|
|||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
const visualMatrix = Boolean(process.env.A3_VISUAL_MATRIX);
|
const visualMatrix = Boolean(process.env.A3_VISUAL_MATRIX);
|
||||||
const flatWorkspace = Boolean(process.env.A3_FLAT_WORKSPACE);
|
const flatWorkspace = Boolean(process.env.A3_FLAT_WORKSPACE);
|
||||||
|
const matchingCountOnly = Boolean(process.env.A3_MATCHING_COUNT);
|
||||||
|
assert.ok(!matchingCountOnly || !flatWorkspace, 'Count presentation does not repeat workspace qualification.');
|
||||||
assert.ok(!flatWorkspace || visualMatrix, 'Flat workspace qualification uses the visual matrix.');
|
assert.ok(!flatWorkspace || visualMatrix, 'Flat workspace qualification uses the visual matrix.');
|
||||||
const widths = visualMatrix ? [320, 360, 390, 430, 768, 1024, 1280, 1440, 1920] : [320, 390, 768, 1440];
|
const widths = visualMatrix || matchingCountOnly ? [320, 360, 390, 430, 768, 1024, 1280, 1440, 1920] : [320, 390, 768, 1440];
|
||||||
const configurations = process.env.A3_PILOT ? [[320, 'en', 'light']] : widths.flatMap(width => ['en', 'nb'].flatMap(language => ['light', 'dark'].map(mode => [width, language, mode])));
|
const configurations = process.env.A3_PILOT ? [[320, 'en', 'light']] : widths.flatMap(width => ['en', 'nb'].flatMap(language => ['light', 'dark'].map(mode => [width, language, mode])));
|
||||||
const out = path.resolve(import.meta.dirname, flatWorkspace ? '../../docs/ui-modernisation/visual-correction/evidence/applications-flat' : visualMatrix ? '../../docs/ui-modernisation/visual-correction/evidence/applications' : '../../docs/ui-modernisation/evidence/applications/browser');
|
const out = path.resolve(import.meta.dirname, matchingCountOnly ? '../../docs/ui-modernisation/visual-correction/evidence/matching-count' : flatWorkspace ? '../../docs/ui-modernisation/visual-correction/evidence/applications-flat' : visualMatrix ? '../../docs/ui-modernisation/visual-correction/evidence/applications' : '../../docs/ui-modernisation/evidence/applications/browser');
|
||||||
fs.mkdirSync(out, { recursive: true });
|
fs.mkdirSync(out, { recursive: true });
|
||||||
const report = { screens: [], journeys: [], aliases: [], focusChecks: [], errors: [], unexpectedWrites: [], mockedWrites: [], unavailableReads: [], blockedExternal: [] };
|
const report = { screens: [], journeys: [], aliases: [], focusChecks: [], errors: [], unexpectedWrites: [], mockedWrites: [], unavailableReads: [], blockedExternal: [] };
|
||||||
const browser = await chromium.launch();
|
const browser = await chromium.launch();
|
||||||
@@ -20,12 +22,13 @@ try {
|
|||||||
const page = await context.newPage(); page.on('pageerror', error => report.errors.push(error.message));
|
const page = await context.newPage(); page.on('pageerror', error => report.errors.push(error.message));
|
||||||
await page.addInitScript(({ language, mode }) => { localStorage.setItem('uiLanguage', language); localStorage.setItem('jobtracker.themeMode', mode); }, { language, mode });
|
await page.addInitScript(({ language, mode }) => { localStorage.setItem('uiLanguage', language); localStorage.setItem('jobtracker.themeMode', mode); }, { language, mode });
|
||||||
const jobs = ['Community nurse', 'Primary teacher', 'Electrical engineer'].map((jobTitle, index) => ({ id: 42 + index, version: 7, jobTitle, company: { id: 1, name: 'Fjord Care' }, companyId: 1, status: 'Saved', location: 'Oslo', countryCode: 'NO', source: 'nav', salary: null, dateApplied: null, savedAt: '2026-10-01T09:00:00Z', deadline: '2026-11-12', followUpAt: null, tags: 'Care coordination', description: 'Recorded source advertisement.', isDeleted: false, needsFollowUp: false, workflowSignal: null }));
|
const jobs = ['Community nurse', 'Primary teacher', 'Electrical engineer'].map((jobTitle, index) => ({ id: 42 + index, version: 7, jobTitle, company: { id: 1, name: 'Fjord Care' }, companyId: 1, status: 'Saved', location: 'Oslo', countryCode: 'NO', source: 'nav', salary: null, dateApplied: null, savedAt: '2026-10-01T09:00:00Z', deadline: '2026-11-12', followUpAt: null, tags: 'Care coordination', description: 'Recorded source advertisement.', isDeleted: false, needsFollowUp: false, workflowSignal: null }));
|
||||||
|
if (matchingCountOnly) jobs.splice(1);
|
||||||
await page.route('**/*', route => {
|
await page.route('**/*', route => {
|
||||||
const req = route.request(), url = new URL(req.url());
|
const req = route.request(), url = new URL(req.url());
|
||||||
if (url.origin !== 'http://localhost:4338' && !(url.origin === 'http://localhost:5202' && url.pathname.startsWith('/api/'))) { report.blockedExternal.push(url.origin); return route.abort(); }
|
if (url.origin !== 'http://localhost:4338' && !(url.origin === 'http://localhost:5202' && url.pathname.startsWith('/api/'))) { report.blockedExternal.push(url.origin); return route.abort(); }
|
||||||
if (!url.pathname.startsWith('/api/')) return route.continue();
|
if (!url.pathname.startsWith('/api/')) return route.continue();
|
||||||
const answer = data => route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(data) });
|
const answer = data => route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(data) });
|
||||||
if (req.method() === 'PATCH' && url.pathname === '/api/jobapplications/42/status') {
|
if (!matchingCountOnly && req.method() === 'PATCH' && url.pathname === '/api/jobapplications/42/status') {
|
||||||
const { status } = req.postDataJSON(); assert.equal(status, 'Waiting'); jobs[0].status = status;
|
const { status } = req.postDataJSON(); assert.equal(status, 'Waiting'); jobs[0].status = status;
|
||||||
report.mockedWrites.push({ width, language, mode, status }); return answer({});
|
report.mockedWrites.push({ width, language, mode, status }); return answer({});
|
||||||
}
|
}
|
||||||
@@ -56,6 +59,13 @@ try {
|
|||||||
await page.goto('http://localhost:4338/jobs');
|
await page.goto('http://localhost:4338/jobs');
|
||||||
const search = page.getByRole('textbox', { name: language === 'en' ? 'Search' : 'Søk', exact: true }); await search.waitFor();
|
const search = page.getByRole('textbox', { name: language === 'en' ? 'Search' : 'Søk', exact: true }); await search.waitFor();
|
||||||
await page.locator('[data-job-row-id="42"], [data-job-card-id="42"]').first().waitFor();
|
await page.locator('[data-job-row-id="42"], [data-job-card-id="42"]').first().waitFor();
|
||||||
|
if (matchingCountOnly) {
|
||||||
|
const label = language === 'en' ? '1 matching job' : '1 jobb samsvarer';
|
||||||
|
await expect(page.getByText(label, { exact: true })).toBeVisible(); await scan('table');
|
||||||
|
await page.getByRole('link', { name: language === 'en' ? 'Board' : 'Tavle', exact: true }).click();
|
||||||
|
await expect(page.locator('[data-kanban-card-id="42"]')).toBeVisible(); await expect(page.getByText(label, { exact: true })).toBeVisible(); await scan('board');
|
||||||
|
report.journeys.push({ width, language, mode, singularTableAndBoard: 'PASS', mutationsDetailAliases: 'NOT RUN' }); await context.close(); continue;
|
||||||
|
}
|
||||||
await scan('table');
|
await scan('table');
|
||||||
if (flatWorkspace) {
|
if (flatWorkspace) {
|
||||||
await page.keyboard.press('Tab');
|
await page.keyboard.press('Tab');
|
||||||
@@ -121,7 +131,7 @@ try {
|
|||||||
}
|
}
|
||||||
await context.close();
|
await context.close();
|
||||||
}
|
}
|
||||||
assert.equal(report.screens.length, configurations.length * (flatWorkspace ? 6 : visualMatrix ? 4 : 3)); assert.equal(report.journeys.length, configurations.length); assert.equal(report.mockedWrites.length, configurations.length); assert.equal(report.aliases.length, visualMatrix ? 3 : 0);
|
assert.equal(report.screens.length, configurations.length * (matchingCountOnly ? 2 : flatWorkspace ? 6 : visualMatrix ? 4 : 3)); assert.equal(report.journeys.length, configurations.length); assert.equal(report.mockedWrites.length, matchingCountOnly ? 0 : configurations.length); assert.equal(report.aliases.length, visualMatrix && !matchingCountOnly ? 3 : 0);
|
||||||
assert.deepEqual(report.errors, []); assert.deepEqual(report.unexpectedWrites, []);
|
assert.deepEqual(report.errors, []); assert.deepEqual(report.unexpectedWrites, []);
|
||||||
assert.ok(report.blockedExternal.every(origin => origin === 'https://fonts.googleapis.com'));
|
assert.ok(report.blockedExternal.every(origin => origin === 'https://fonts.googleapis.com'));
|
||||||
console.log(`PASS:${report.journeys.length} controlled table/board/detail journeys,${report.screens.length} axe scans/captures;${report.mockedWrites.length} mocked status writes.`);
|
console.log(`PASS:${report.journeys.length} controlled table/board/detail journeys,${report.screens.length} axe scans/captures;${report.mockedWrites.length} mocked status writes.`);
|
||||||
|
|||||||