Alex Sample
Synthetic teacher profile
diff --git a/docs/ui-modernisation/PRESERVATION_RECONCILIATION.md b/docs/ui-modernisation/PRESERVATION_RECONCILIATION.md new file mode 100644 index 00000000..ff1316dc --- /dev/null +++ b/docs/ui-modernisation/PRESERVATION_RECONCILIATION.md @@ -0,0 +1,67 @@ +# A3 implementation preservation reconciliation + +3 November 2026. All57 original groups and34 route patterns remain in the unchanged [preservation register](../pre-phase10-ux/preservation.json). The [source census](evidence/cross-app/PRESERVATION_CENSUS.json) retains each original requiredClosure/sourceCriterion. **56 PARTIAL/one DEFERRED remain historical capability statuses.** Owner acceptance of A3 presentation increments does not promote those statuses, waive linked criteria or grant providers/models/production access. + +This table maps each group to bounded implementation evidence and identifies residual work. The accepted evidence remains bound to its implementation commit/manifest. New IM10 secondary qualification passed:85 unit cases/seven suites and16 controlled route journeys/96 scoped axe scans across EN/NB, both themes and320/390/768/1440. See SECONDARY_VALIDATION.md. Pilot/failure attempts do not add coverage; these results do not promote historical capability statuses. + +| Group | Relevant A3 implementation evidence | Scope and remaining qualification | +|---|---|---| +| PRES-E01 | Shared theme; public/plans retained | Separate LAUNCH-SITE visual/claims and real billing availability gates. No new launch or pricing claim. | +| PRES-E02 | Navigation; account/admin; secondary public-auth tests | Controlled local access/recovery presentation. Real mail/challenge/token delivery and native checks remain distinct. | +| PRES-E03 | Account/admin; secondary legacy-relink tests | Existing sign-in provider/link/relink contracts retained. No real OAuth/link/provider validation. | +| PRES-E04 | Account/admin | Local 2FA/recovery/trusted-device fixtures and cancellation. Real credentials/delivery/native qualification open. | +| PRES-E05 | Account/admin | Session guards and confirmation fixtures; no real revocation for visual testing. | +| PRES-E06 | Account/admin | Identity-only fields, avatar/account restrictions; drafts retained across in-page section jumps. Canonical career data remains separate. | +| PRES-E07 | Navigation; shared theme | Sidebar/hybrid mobile/commands retained. Physical-device and full native accessibility remain separate. | +| PRES-E08 | Shared theme; Settings/AI; IM10 localisation | EN/NB hydration, feedback/dialog owners retained. Complete European/native-language qualification remains open. | +| PRES-E09 | Navigation; account/admin; original session boundaries | Existing private-state disposal and stale-request boundaries retained. No integrated-security acceptance inferred. | +| PRES-J01 | Discovery | Existing supported NAV presentation/attribution/geography retained. Global Jobs dependencies and provider rights not granted by A3. | +| PRES-J02 | Discovery | Controlled saved-search actions/alerts qualified; real provider/worker delivery remains separate. | +| PRES-J03 | Applications | Existing manual/URL/paste review and duplicate handling retained; no provider scraping added. | +| PRES-J04 | Applications; Settings capture owner | Existing capture/deep-link surfaces retained; extension/device/platform qualifications unchanged. | +| PRES-J05 | Applications | Table/filter/column/saved-view and mobile actions retained; broader native/device criteria not promoted. | +| PRES-J06 | Applications; secondary trash | Existing trash/restore/bulk contracts retained. Secondary browser trash state is empty; no real delete/restore. | +| PRES-J07 | Applications | Table/board/status/keyboard controlled journeys retained; real pointer/touch qualification separate. | +| PRES-J08 | Theme/navigation; secondary companies | Existing company/contact/relationship owner retained; secondary bounded fixtures, no real CRM writes. | +| PRES-J09 | Secondary offer comparison | Recorded facts/unknown compensation/links retained. No inferred salary, deadline provenance or financial advice. | +| PRES-J10 | Applications; Settings/import owners | CSV/JSON conversion/import/export owners retained. Original full data-fidelity/compatibility closure remains authoritative. | +| PRES-W01 | Applications; Career | Existing full workspace/sections/legacy aliases/context retained; no route removed. | +| PRES-W02 | Applications | Status/progression/details/timeline actions retain existing revision writers and permissions. | +| PRES-W03 | Applications; AI | Controlled analysis/review presentation. Live semantic AI and provider quality remain unqualified. | +| PRES-W04 | Applications | Existing checklist lifecycle/reorder/next-action owner retained. No replacement persistence layer. | +| PRES-W05 | Career | CV attach/select/tailor owner and canonical/variant boundaries retained; no live tailoring quality claim. | +| PRES-W06 | Career; workspace | Manual letter/preview/history/conflict/dirty protections retained, existing atomic assets writer unchanged. | +| PRES-W07 | Career; IM10 attachment localisation | Frozen package/snapshot/download ownership retained; displayed sizes change without changing bytes or filenames. | +| PRES-W08 | Workspace; IM10 attachment localisation | Existing upload/preview/download/consent/category owner retained; no file-access boundary changed. | +| PRES-W09 | Retained interview task components; Applications | Controlled manual/review scope only. No live AI quality or new stored interview scheduling claimed. | +| PRES-W10 | Retained debrief/follow-up components; Calendar | Original readiness/draft/date contracts retained; interview appointment data-model gap remains explicit. | +| PRES-W11 | Calendar; Settings/AI | Recorded date agenda/month and email switch qualified. Original precision/timezone data, real ICS/provider consent/delivery remain separate. | +| PRES-W12 | Workspace; account/admin; secondary operations | Existing async progress/failure/retry/cancel/notification owners retained. No real workers/models activated. | +| PRES-C01 | Career | Canonical full profile/long-tail/custom sections retained; no engine replacement or canonical-owner transfer. | +| PRES-C02 | Career | Overview, completion and edit actions retain existing import/raw/history owners. | +| PRES-C03 | Career | Existing upload/diff/review/accept/cancel controls retained. Deferred CV-import engine overhaul remains excluded. | +| PRES-C04 | Career/evidence owner retained | Original evidence-bank CRUD/source criteria remain authoritative; UI milestone is not full source-quality acceptance. | +| PRES-C05 | Career | Library/templates/share/PDF actions retained; real storage/publication/PDF qualifications remain separately evidenced. | +| PRES-C06 | Career; IM10 caption | Editor-left/preview-right, mobile panes and preview lifecycle retained; caption is app chrome, not renderer content. | +| PRES-C07 | Career | Existing section/item/document overrides and null-as-inherit retained; no settings schema change. | +| PRES-C08 | Career | Existing template/capability/typography/photo controls retained. Physical rendering evidence is reused where unaffected. | +| PRES-C09 | Career | Existing page/density/margins/document language/settings owner retained; UI language never silently translates document content. | +| PRES-C10 | Career | Undo/save/conflict/history/lifecycle contracts retained; focused reruns do not inflate accepted totals. | +| PRES-C11 | AI; IM10 caption | Historical DEFERRED semantic qualification remains. Controlled proposal invalidation/review/apply and caption language are tested; no live inference. | +| PRES-C12 | Career; secondary public CV | Public/private document surfaces retained. Mock HTML/PDF href checks are not renderer, real anonymous-access or physical-PDF qualification. | +| PRES-M01 | Workspace | Existing job-scoped manual correspondence/paste/search/delete owner retained; no real messages changed. | +| PRES-M02 | Workspace | Gmail import/thread/link/conflict owner retained; real provider OAuth/delivery/rights gates remain. | +| PRES-M03 | Workspace | Global inbox/filter/page/detail/source context qualified with fixtures; real provider data not accessed. | +| PRES-M04 | Workspace | Compose/reply/conflict/confirmation/uncertain-send fixtures qualified. No actual delivery or unsafe retry. | +| PRES-M05 | Navigation/workspace; legacy route retained | Existing review/link/reject/notes owner retained; final provider-backed review qualification remains separate. | +| PRES-M06 | Account/admin | Mailbox connections remain separate from sign-in providers; no real connect/disconnect or credentials. | +| PRES-S01 | Dashboard; secondary analytics | Existing metrics/activity/funnel/reporting and query owners retained; fixture values are not live user analytics. | +| PRES-S02 | Dashboard | Optional onboarding/skip/resume and original widget/schema-2/CAS/geometry protections retained. | +| PRES-S03 | Settings/AI; account/admin | Existing preference/rule/draft writers retained. Six numeric thresholds do not provide per-user Ghosted pause. | +| PRES-S04 | AI/Settings | Privacy/usage/entitlement/billing boundaries retained. Mounted entitlement display refresh gap remains OPEN; no inferred client grant. | +| PRES-S05 | Account/admin | Export/recent-sign-in/deletion confirmations retained. Offline fixtures do not qualify real backup/restore/recovery. | +| PRES-A01 | Account/admin | Existing roles/self/last-admin controls and local backend tests retained; no real account mutation for visual testing. | +| PRES-A02 | Account/admin | Existing audit/read/undo/restore owner retained; browser capture is empty and action scenarios are unit fixtures. | +| PRES-A03 | Account/admin | Existing system/mail/probe/benchmark/maintenance controls retained; browser unavailable-state checks are not real diagnostics/security/recovery acceptance. | + +Evidence index: [theme](VALIDATION.md), [navigation](NAVIGATION_VALIDATION.md), [dashboard](DASHBOARD_VALIDATION.md), [applications](APPLICATIONS_VALIDATION.md), [discovery](DISCOVERY_VALIDATION.md), [career](CAREER_VALIDATION.md), [workspace](WORKSPACE_VALIDATION.md), [AI/settings](AI_SETTINGS_VALIDATION.md), [account/admin](ACCOUNT_ADMIN_VALIDATION.md), [IM10 localisation](CROSS_APP_LOCALISATION.md). Processing monitor is also retained at the34th route, /admin/processing; the historical group register is not expanded or rewritten to fabricate acceptance. diff --git a/docs/ui-modernisation/SECONDARY_VALIDATION.md b/docs/ui-modernisation/SECONDARY_VALIDATION.md new file mode 100644 index 00000000..85fc288e --- /dev/null +++ b/docs/ui-modernisation/SECONDARY_VALIDATION.md @@ -0,0 +1,15 @@ +# IM10 secondary-route qualification + +3 November 2026. Approved IM10 continues from published `ccf8d26426235a7a54903162e539d9d613058465`. No application implementation change in this package: existing secondary components are retained and checked, rather than replaced or omitted. + +**85 frontend tests/seven suites PASSED**, zero failed/skipped: companies/relationships, offers, operations, analytics, public authentication, public CV and Microsoft legacy relink. Native report under `evidence/secondary/frontend`. These suites are distinct from the initial IM10 localisation/studio124 cases; count209 distinct cases/ten suites across those two bounded packages, not a full frontend regression pass. + +**16 controlled route journeys/96 scoped axe scans/captures PASSED** at320/390/768/1440, EN/NB and both themes. Six direct-entry surfaces: populated companies; recorded teacher and nursing offers with unknown values kept explicit; processing progress with unavailable task actions absent; populated analytics with24-month query navigation; empty trash; public CV fixture HTML and PDF link. Public route issued no identity read in this fixture. Zero mutations/page errors/returned WCAG-tagged axe violations/document overflow. These are bounded fixtures, not real datasets or provider results. + +The verifier permits static assets at localhost4338 and intercepts every /api request to the app's existing development API origin localhost5202. It never continues API requests to a server. Other origins are blocked; only the existing Google-font stylesheet attempt was observed. The initial pilot blocked5202 too, producing the application read-error state; this was a verifier setup failure, preserved separately. Corrected pilot overlaps the full run, not extra coverage. No app API configuration or service changed. + +No real deletion/restore, operation cancel/retry, credentials, provider, model, anonymous backend-access or PDF render/download operation was performed. The public CV HTML is a controlled preview, not renderer/physical-PDF qualification. Native/keyboard devices, screen readers, deployed security, hosted CI, data recovery and release acceptance remain separate. + +Verifier scoped lint/syntax passed; AST-only graph refresh completed locally (18,882 nodes/46,576 edges/1,131 communities), with existing optional SQL and symbol-less-file limits. No dependency/build-source change justified another application build; the same124-case package export was used. The57-row preservation reconciliation self-check matches all57 original IDs exactly and retains their required closures/statuses. All34 route patterns remain in the separate AST census; six secondary route executions are not a claim of34 runtime routes passing. + +Remaining IM10 work: final integrated evidence reconciliation/combined affected regression and consolidated A3 acceptance proposal; bounded mounted AI-entitlement refresh investigation continues separately. Granular Ghosted pause still lacks a persisted rules contract. Full Phase10, European localisation/Global Jobs/launch/security/recovery/release gates remain open. No main merge, deploy, orchestrator or pre-P10 changes. diff --git a/docs/ui-modernisation/evidence/secondary/SOURCE_MANIFEST.json b/docs/ui-modernisation/evidence/secondary/SOURCE_MANIFEST.json new file mode 100644 index 00000000..77cf3c68 --- /dev/null +++ b/docs/ui-modernisation/evidence/secondary/SOURCE_MANIFEST.json @@ -0,0 +1,213 @@ +{ + "base": "ccf8d26426235a7a54903162e539d9d613058465", + "policy": "LF-normalised text, raw PNG SHA256", + "sources": { + "job-tracker-ui/scripts/verify-a3-secondary.mjs": "c434138e714f80ced03841df012911a2f934d7b0167723c0172cf4dbad94a58e", + "job-tracker-ui/src/App.tsx": "a176e52d81c4b6ded63c5f38cb27e853aa09312f2cc45fc7e5b5e44573e0fef3", + "job-tracker-ui/src/api.ts": "f75ac7be07a743396843ddad5fd3371e2d5fd3d9c5d933e09e26fae2159f2378", + "job-tracker-ui/src/i18n/translations.ts": "d3167487ec82e302bb26c9269b4a79b03a269b85ed8414b11cf38a9bb8f3d0a7", + "job-tracker-ui/src/views/OperationsPage.tsx": "b35c793fd33dcd0638d47df2aa3bfb2926879a8fa709880983b64c1a1309bb98", + "job-tracker-ui/src/views/OfferComparisonPage.tsx": "d8e7c91ff4a48a37e554298fa8cb8887f9d6d6e1ce7a670c3836f2ad4266a86c", + "job-tracker-ui/src/views/AnalyticsPage.tsx": "40100ef5cf7765221897a4bd0ceb18a964423e122965bee21d278d113fdb01dd", + "job-tracker-ui/src/views/PublicCvPage.tsx": "6c368441859b8beccd0f4eb21e439e38388bbcaf772c721f382625b629645255", + "job-tracker-ui/src/components/CompaniesTable.tsx": "0065acb28866cea27fa2165ec248eef51109373b0c2c0faae0ae12fa3235ba1f", + "job-tracker-ui/src/components/JobTable.tsx": "515191502a1bb0629f816936059791ed71dd05b1fc6549f06ec6e88e9c22733c", + "job-tracker-ui/src/components/DashboardView.tsx": "21be089f43dfaec5ac5469c36b4610559421f958f52613b4deadbdaa12eadf4f", + "job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626", + "job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab", + "docs/ui-modernisation/SECONDARY_VALIDATION.md": "40ba7d73ad7c5ba4abd933bc8ef260be9013b5ae33093724d98f0191a3b74fe2", + "docs/ui-modernisation/PRESERVATION_RECONCILIATION.md": "176aff219300d5599e739f077a9b749894f40eac78223de4b796d1b369d46e57", + "docs/pre-phase10-ux/preservation.json": "a4c2a5a0244ea89381008218de32daee1f615a250eb3808b60e0ee103c674d4d", + "job-tracker-ui/src/companies-relationship.test.tsx": "4a4e1b4315ee73e01dd64c4032e5dd78245e0f0ec27e40359e1dcac32d3cb470", + "job-tracker-ui/src/offer-comparison.test.tsx": "a0ae2f26392c3db0416c71760b0ada0fe1f2846d1c7dd0865f28518ff652f8bd", + "job-tracker-ui/src/operations-page.test.tsx": "700d6a69327dba86c3fe5680a4f5aec652647bd1dca1054f45f42328314f4734", + "job-tracker-ui/src/analytics-presentation.test.tsx": "9f5d37200f780f972a80970f886957bb11e2f49e4d7b87b1b6dc05a066b3e049", + "job-tracker-ui/src/public-auth-presentation.test.tsx": "2f40091b13a252a45f4bd2c86da542b5f4648e08c4fffa070946de7f5c4a9811", + "job-tracker-ui/src/public-cv-page.test.tsx": "4f3ef679eb264fa9dd692a368870620dc9019891c3af63d72b8561542e3ac23f", + "job-tracker-ui/src/microsoft-legacy-relink-page.test.tsx": "a139ff3c1af2efb9a20610ab1262432e1eabf4de881d3e5b71a32f735b8fc24c" + }, + "evidence": { + "browser/analytics-en-dark-1440.png": "8704c170d95a3112a1f9fb86e9f3bf4326b252809f9340feb7a541e2cacdb6e1", + "browser/analytics-en-dark-320.png": "b757b93c17651fa4aba0c4cce3728c326ca44d64613f14a6928e1d6583d134e8", + "browser/analytics-en-dark-390.png": "f022579baa91e450776c5b8d89c4783a60cda498722bd9515663c5518fc426c2", + "browser/analytics-en-dark-768.png": "502134d792e842e19a797ebe8de9dce8c656c3030d54b9b4edf0b8863745496c", + "browser/analytics-en-light-1440.png": "4261491be298738d590eff28412e9e36c4ae88858e695ac6e32be5f380fbe758", + "browser/analytics-en-light-320.png": "fcb3dd60893585977d69815d89a568c3f8d142178ac9b15670e270223af48427", + "browser/analytics-en-light-390.png": "e9bb737a10c60af03031f530766f70868e4b2775236d3464750da27d4d738081", + "browser/analytics-en-light-768.png": "a30af6c8b2cf8f432a2f8e31e08a71292b78f9afab582441c94662055c230b79", + "browser/analytics-nb-dark-1440.png": "745e8114aefc62bfa1553a2ac12d91dabf126552c757e56a473fb4aaa99f8009", + "browser/analytics-nb-dark-320.png": "53fa29e5bb23f70ed0c847b2f9bc41ca327d873fcf97695a24849f970ac1d033", + "browser/analytics-nb-dark-390.png": "e71245ad2991a6d9daa873c71d0018832c07a4d3769f2d7fa196a1af1a5f68d8", + "browser/analytics-nb-dark-768.png": "d19bad36235a685b49ea471e6c30e2c889727870d65246e472241d624fef4492", + "browser/analytics-nb-light-1440.png": "d671b26ca898cdc826a82177a870ef9a9af5409d4ddf20d74fdad8f84e4ca425", + "browser/analytics-nb-light-320.png": "8df29290edf880016314f8a2062950489f1583bdd0044808c301992d3882201b", + "browser/analytics-nb-light-390.png": "2e66e1f23adb4d6983541f967601c6df905973556e46c05b117d6ed429ef7226", + "browser/analytics-nb-light-768.png": "dfd7ab77547b8140adb006f8753accc22d6bdb3cda161e24e1d89c53794c63b5", + "browser/BROWSER.json": "38d65935564e2ade73b23f65359c94bb72118b006c43108b52d631fff7ca9dc1", + "browser/companies-en-dark-1440.png": "692890e0e02024768daafddd59e68e4d39ff6f17f89f375ba0a301f915eb30db", + "browser/companies-en-dark-320.png": "ed63776ae436e3174c34474064ba7a563a8b11a00bac13472ffe0900310cff92", + "browser/companies-en-dark-390.png": "10f68b65032f23899ec644ec458f108b020bfd94543b2414a8b39172448b2066", + "browser/companies-en-dark-768.png": "c15f0f8310c18a22971205abba44dabb306923dd7d3d879c9ad7c060bc778ed5", + "browser/companies-en-light-1440.png": "a17fdd68806625e20f18ea5f3be371de0a3e46a60a6baca545fdf28715d9367d", + "browser/companies-en-light-320.png": "5ec695f70cf7e54ead38e352d93786c320ad4d7ec981eaaacd0c0a9c89cc7801", + "browser/companies-en-light-390.png": "a31993ecd61ba9f74e227b05426fd0488ec80562ac00e7dc7b4e3edac388511f", + "browser/companies-en-light-768.png": "a436292c5191bf26e3c264843720062cebf6d82242b254768eabdfe2133d0bf7", + "browser/companies-nb-dark-1440.png": "5da4023ba3670f290ce0b89728054f6ce6c2469e27ad493e89bd3c15b3d7c64a", + "browser/companies-nb-dark-320.png": "3f1b37de00ec0890114942f2d6e71c27cf9a2725877834b69162d4f65f59f2ac", + "browser/companies-nb-dark-390.png": "53d855a55865110d86aa87a9744d1fe514ce8120479dbd397eebc122e054bd04", + "browser/companies-nb-dark-768.png": "e323cfe643ac036fbbaba7bc891f63bebe2ccaff13f6445f6d4fdae8baa2860d", + "browser/companies-nb-light-1440.png": "26155e7de56cc14b5a4c6f4eec9205151bbfd189fe4834e093edfbbd6b58d550", + "browser/companies-nb-light-320.png": "c07bd7c89e491c660e14e3c82ece97dab95be609944793cf02de0c15863416b8", + "browser/companies-nb-light-390.png": "9a9488496838de86ade04471b9c92a93818546b17ab2a48d5c54dae94999651c", + "browser/companies-nb-light-768.png": "a5518d1f308232230829194e96a7a0dcda0807be2f8b2822b181f591433b84c3", + "browser/offers-en-dark-1440.png": "308d1d27eea1ef8a29c8ba6d88e752821893519f639023ea00ad6aa2f8b53650", + "browser/offers-en-dark-320.png": "a9d53596e9b96f8dfe312d5013b8e5c9164ebcaad5334ebcc676e7fe7836997e", + "browser/offers-en-dark-390.png": "9547a0a70923e3b42e93cf9740288555805cc2655ed2fa68aa6028df61c661a3", + "browser/offers-en-dark-768.png": "8cb17def0661b761809bd76acb9fc9419a7f1138bf81223087bc57ed09aadf4c", + "browser/offers-en-light-1440.png": "022c41e0eae432a24fefb438c6bdd6ef19da036944e9e2639298bd2d0508e7b6", + "browser/offers-en-light-320.png": "b154f4e7301ba0c33308bccf965dab77ba5e96d237a9178fbb324dc6995f7c06", + "browser/offers-en-light-390.png": "c53477d227b28fbe967380bbc8e59636192c1d1604c04491f047c9ba4f4b9fcf", + "browser/offers-en-light-768.png": "5a6c2f9c20791f40f4cba6ada4caf19a00f29ba26492661a499e8aba28b198d0", + "browser/offers-nb-dark-1440.png": "fd35d82046b9fc55c9345e597c9cb7987ff58bcc4ffc724fdf8ec85243ef8f56", + "browser/offers-nb-dark-320.png": "56cdf2d97bc51b13cc8585ecbe5bea7f9070ba9e2309b75163c49c30cef102df", + "browser/offers-nb-dark-390.png": "3eb1f6d39a2c1a680710321cda848a58821eef4d1b4affa0a39bee7ea3b8d741", + "browser/offers-nb-dark-768.png": "6bb93f2d6ec8f94b34695c64238e805ddc68a550abcfbe08974e7de99f71920d", + "browser/offers-nb-light-1440.png": "4fea07f5a7888c55dae60cf23bd10885c3f8ab8b9089c8829a2e205706962dea", + "browser/offers-nb-light-320.png": "da26c822a26abc853c7a62fc512a747a8e27b1a7fec3fac5e6acb10d0c6f4af1", + "browser/offers-nb-light-390.png": "fe7f6c09b6ca7809bba6d7c56ab4e3efc1a25d849da225583dba6dff88215792", + "browser/offers-nb-light-768.png": "2108ceb8f814ffc23c66796559ba00ecb61a0d78daab3b061fe3694dbf3ca4d4", + "browser/operations-en-dark-1440.png": "7a8e23cc1e46e1f11df720e1223254df9f4f7d75ffc0f375f43b0fe2046540c5", + "browser/operations-en-dark-320.png": "978aa12a52e446508586300c32b25a554e718c938ddca046b5922b30d2f2c25f", + "browser/operations-en-dark-390.png": "14d57dffc20c33825db3ab9408f8ffaf7d51dd4e3568f1c996086d0f189f8634", + "browser/operations-en-dark-768.png": "d2b5687f1b45c8f0d54c2247c46cb42d479f797b4e6e42e59d4b6ad83fb21ff1", + "browser/operations-en-light-1440.png": "8093455a79262608d9d10f80080101f90705a673287837804e94a7b014e31eff", + "browser/operations-en-light-320.png": "3a63eeea0f3b5e57a5533f17e96c1c0fad6019eb65c158ce131f79be40966fd9", + "browser/operations-en-light-390.png": "8b753bd55af97702c88029f0bcfbc90491bd92be5f399fc8058b6e36c2f71105", + "browser/operations-en-light-768.png": "eac9fa9e142e2ed79cbd57b655b22f92e9b238fc2b9d28dee67e3347e44dcfbe", + "browser/operations-nb-dark-1440.png": "ff1617ea8b4e1596b9fc099e7947cc05eb6705de359dac8c8ecc3b16ebcdfdc9", + "browser/operations-nb-dark-320.png": "9b37a27f9edb6b8ea8467e3c979f643ba490352ad1847e2ab0318e03e5cd3286", + "browser/operations-nb-dark-390.png": "c87b3e01c2e35afc4896b09397219b23598914564b0027564ed89eea11af989f", + "browser/operations-nb-dark-768.png": "c7913db21ce94c89bb95bd8c3aa68d41f3e2098bd46b0085ee79ef9ea57093f4", + "browser/operations-nb-light-1440.png": "d8de138c3d0619e5f27440d9a59d9c3bdc526acac9c98400c6045822422bacf4", + "browser/operations-nb-light-320.png": "72337510eb1a35298d06e91ad167f6e668a2c727f241a0842a69753b50226093", + "browser/operations-nb-light-390.png": "494ba14e70d3e84fe275eaa2d8472e0260a10f159d1aca21e3ad836843d730c1", + "browser/operations-nb-light-768.png": "3dfb743f987e65fec8031ad8ce4ccf4eb05f1dd3ae03da3e40c2b1288ac6b4e4", + "browser/PILOT-ORIGIN-FAILURE.json": "01583f2cccb958361bb842030d82ea842da31694fe078ff9e7a6ff0b54b5fedf", + "browser/PILOT.json": "9fa71f172cdee9620fc8dcdaca50af2e8cb7fc54446b4c91057bb022db201eb0", + "browser/public-cv-en-dark-1440.png": "657158c46767ae1da62eecb91d78cf7077080facf3329ddaddf71416cbc781eb", + "browser/public-cv-en-dark-320.png": "f8fe8ddffdc8461f617d4af129efc96c8f2eef4a009d07ed775ac5409da4e896", + "browser/public-cv-en-dark-390.png": "af7c3cc230f0f7ba9dc9dcb6c4ea17143e6c491859dfe7fcfdc936e2a52f1e14", + "browser/public-cv-en-dark-768.png": "92a1fc2028c01a58dcef4fd25e6757563f7ff395d2ff6945bdaa755c354e74c8", + "browser/public-cv-en-light-1440.png": "dd484cd21038a102141f1579a000366215d2b9d5a8d9a305f9299e62de213bc4", + "browser/public-cv-en-light-320.png": "78ac295867a5d4d548fb85cbcc87aca7c856a457c82d6ec53500e123d3d93fb7", + "browser/public-cv-en-light-390.png": "e97d69e940afd0e9346724eef6fa1fd0df3ee727337a73e802bd4f14b8c897ba", + "browser/public-cv-en-light-768.png": "65dd266e7e6f985cd040cf93bff9fd9737ae9794709cf456a849fb774c106de4", + "browser/public-cv-nb-dark-1440.png": "6e96b64d5b6882eb33aa1ba29c05bb25379f962cd1d58dd64078e88919f6b498", + "browser/public-cv-nb-dark-320.png": "4ed78dbc74b7c119076aebb98e8a6eb1346242fc5fad7958cad236d0971db228", + "browser/public-cv-nb-dark-390.png": "d1fbc5529306c3a4232d163d4cfb491b7c9b72eb7e3fc40b8ae0566ce849c0c4", + "browser/public-cv-nb-dark-768.png": "a885bdbb87860aba0160ed9117cc8eebe90762910bfc5bd1a055068b03beeb19", + "browser/public-cv-nb-light-1440.png": "50bce1f22bca6e38439bb5e7ce88c81f7321a9971dcf8fc3a4870284abff9f74", + "browser/public-cv-nb-light-320.png": "234fd3bf982f9bebfa26d91c110d054047e211beafada4abedaf9affba971074", + "browser/public-cv-nb-light-390.png": "88986bcf5dc9a1b7a6cda846d81d542c58aaaf6c7bd3c714ace3ddc68d8d7ece", + "browser/public-cv-nb-light-768.png": "6eab98f34d3bc3d1b9f2c9022a991a369e2977699b05183d18bf301555a7f83e", + "browser/trash-empty-en-dark-1440.png": "47697ead6f634f208c644cd6845f13b491c08fd581f3dc16af4317e15169087d", + "browser/trash-empty-en-dark-320.png": "70e18765fe6e85a33cdbadb4697d9e80ad63679dfddd71e1e59d09de8206e1ea", + "browser/trash-empty-en-dark-390.png": "e92f49561a19272810dd23a3ae18e9e5855de5814be9823d17ef9fc0012c7384", + "browser/trash-empty-en-dark-768.png": "21523b46121c3dc78b30f058496b0362dd61425ac7c15aaea138afbf560c807c", + "browser/trash-empty-en-light-1440.png": "6faef7592457a53a20785bdab64622a3077edcdb9b0671561dbbd733ff92af2e", + "browser/trash-empty-en-light-320.png": "3dd86e2204de17e602c4af5d1948ed096505e5a7c67425308077dc674706020d", + "browser/trash-empty-en-light-390.png": "67b164e67b16a52ffafc7e4dc877b3af01185695c9086742ac6e3a7c56242d6b", + "browser/trash-empty-en-light-768.png": "84fc65e0bd1b12be09c81838b527f629ec3dda27021491113b8a08adfa7346d6", + "browser/trash-empty-nb-dark-1440.png": "a7cc62436a65e77f6636f990b18db125f647895b8fbdaff3d121860c9a191ae2", + "browser/trash-empty-nb-dark-320.png": "9458baea04d7ff7dc61b940b43eab9861980aa01fb9b07af92a253a47ef8b7be", + "browser/trash-empty-nb-dark-390.png": "969de4985259ccd693a9b7ffda3499ad245e8f7b141bce31f6bc37b134c5099b", + "browser/trash-empty-nb-dark-768.png": "ac797e9f09f515ad0319d601a3b3b087a5200c7968b3d45cc4e278f4cceb697f", + "browser/trash-empty-nb-light-1440.png": "5022a9b27eea420a9dcb4d998d38c6f3b365e79259257f88d57ccade9e2d7151", + "browser/trash-empty-nb-light-320.png": "f4a17517ebfc44e015fc88c61b6923ab02c0dbd3d49eca588d26cc6fe47c91ed", + "browser/trash-empty-nb-light-390.png": "25fa0d574128794d8ee9f342bbfb277d70358b718d8433c0de22bca85a1b48e4", + "browser/trash-empty-nb-light-768.png": "a47d8162aea2ff058ab0aa07c827bdbb2664f0b0f6413568177e4f09e9d81a2b", + "frontend/a3-secondary-tests.json": "cf65f139eeee038b93276b15e2e4de557725e3d7a711561c309538c9aa01aadc" + }, + "export": { + "404.html": "b4c33da6d53512a33d317e329653dfa129b158aeb18d1655377a31fbbebd7b58", + "__next.__PAGE__.txt": "51f937e04cc1bc639c851e5e736bdae59ba173018eee670ec42c70ddef1253a6", + "__next._full.txt": "82bffb4dc5832441a8d1451368558e3f4ec4cda2a3bc96072e5efe87a6cac0b5", + "__next._tree.txt": "8170048bddec2d4f65b53f1cf5ab69fc454081429a0ad9325cb57468110e5efa", + "_next/static/bn2MCY_eRqJUjw-m-UfIm/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea", + "_next/static/bn2MCY_eRqJUjw-m-UfIm/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a", + "_next/static/bn2MCY_eRqJUjw-m-UfIm/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00", + "_next/static/chunks/0-_aq6ipzcshj.js": "39f90c215bf52aef6274ed3dcc0f8af32e21a37fe8845b3bca0d6ea60da6a8c2", + "_next/static/chunks/0ah1fzqmie05a.js": "5c65505a7dcbac63ac71d254e619a4c800943bfb4fa16cd40c10cdbe7e9b6e31", + "_next/static/chunks/0bdt7ln111t48.js": "6184b1a61f22e2a640c17941634fdc75678ce93d142848d9f07f163e0d1fd201", + "_next/static/chunks/0bwvt3mysnclc.js": "7705667a1b75812b7833d9c9dff47fe023015e58e382c40f4507d9948c973af4", + "_next/static/chunks/0c-j9v44ea4gk.js": "d7e04926724f76dc50b5202522fab3bb553370d040396394e84c342de466512b", + "_next/static/chunks/0cz1d0mv5g_q7.js": "0973c1d64c88adc8e3c950410cb58b288f72118d5965b78049438deb8f2f9683", + "_next/static/chunks/0gamdsp7ql8cu.js": "f641cd9e2957f5c01234df02211a085f8e8fe2009cf84817e4143f3c477e1dc2", + "_next/static/chunks/0jcvc3qm6-lyk.js": "7c27e1fe373b822adc68c63096a5bf38444ad605b9743f0920271652989c56f1", + "_next/static/chunks/0q1wd_b10phzr.js": "307f4a4ed0f1ef2d87b9de51dbcac2382a39aa8bab359994ee7aa41529215b4e", + "_next/static/chunks/0q20g9o8x-k8z.js": "3d4d9086985419aa8866b032158196c774acb8bf318f3c8245508c8daa9c5148", + "_next/static/chunks/0q_pwu9jxv4-d.js": "42a43b3d7245a413c7c29b4cbe87823037a6dbc637e2e282c92405470e0f575d", + "_next/static/chunks/0yg1x7i96lj87.js": "2aad3c0f9e8b7b5a5123a2a439970c49db0be353236e22f9b6eafaaf01328c15", + "_next/static/chunks/14-lfugawba2w.js": "6a5780ca3c84d7f130f3c0a14431c85c7a1e799e2645b8c171161dab40a64360", + "_next/static/chunks/1435in_k_-dhc.js": "4757476512d5c4dd25f9264a18b304ed4824b23aff1c09e134fcbff21d9c36b6", + "_next/static/chunks/145oicobmjvm7.js": "d6bbbdeed1381652dc7412e5ce673a077579ecd5cee8934cb6b533c814098764", + "_next/static/chunks/14e7ovj0s3elm.js": "070567dd4d23fb9fa0b9ba132185a697af6578045d43b2b1c7bbb2a1594d935d", + "_next/static/chunks/16lfece6cnlln.js": "716363ba044f30b0e70440756b4e5eafa2d25f2e1628e855e3bc4ab9eabee3d3", + "_next/static/chunks/17eiliiibinqq.js": "790c342b1378a793260f9eac0b8c581261d517ee23320bb68995c43f9eaa36c1", + "_next/static/chunks/19zh-dmyml5oj.js": "2ab304f9b4155cdbac4d22e1b0b56b1c1f775c4bbb3ee93c425e297182bf522e", + "_next/static/chunks/1d0xrdyyzw7qc.js": "c11668ff1e152008e0d7b4454af12eb36c97df46a5860938e2eb5d8429b374a8", + "_next/static/chunks/1ke8pzecwofrg.css": "32e9ab963ebadebcbe2c68dffb24cfbfc8cc24255ad91b48b7941fc777bf7439", + "_next/static/chunks/1m4qrvmbq_fq9.js": "4d36c8ec83dc817f273178dc22f329ab026578075f58de68b6f133bcf911a8a1", + "_next/static/chunks/1req80b9jj38r.js": "eee4d2e3789e1215195dba99ad0f09d34f8c83da848322b76054722233e9dae3", + "_next/static/chunks/1wpxvpfa6li_4.js": "025ec0658f9480ccf14dd9be5cb28320ed14f4921c60ac9a2bf844d07bf4171b", + "_next/static/chunks/1xn023_28rgzj.js": "4f7f2108d030a48d039930736c92a55710975dddf419fe673f84d92899b1f575", + "_next/static/chunks/1xwc-b795syag.css": "f73c002233f931ca14d0ae58815c47ca9f2659f25b1547a6d1fdca12a2a00b3f", + "_next/static/chunks/1zi8i6dnxiac_.js": "8aea28bbe6a138e5d4b619429ca71570883a7aee974b86d5a4a746d90f704dbc", + "_next/static/chunks/22wx8--1b9tnq.js": "3f7d8e762371262c6a740b4dac21725b424847319afac46055e97074a99ff5f5", + "_next/static/chunks/2b49wlharl6fd.js": "40619f8a5a03fc7479b0679717b1e5ec0dea0a1944ce77f4ce9d29d2486fdb5c", + "_next/static/chunks/2br3ad_-bc7k9.js": "80fa55f7a32db4d743fda36747c36994fde00a0f53f2eb25b2a6d07c6fb97cd7", + "_next/static/chunks/2dmc6iqxm14fz.js": "3b20898e0cde315c48d6fd46abd562269bbf73c850528a4be2cfc2b9aa0c8f5e", + "_next/static/chunks/2ftgr1rx3r0dw.js": "8866e9ef62ab057bf9923604724edbb463bbdd6dd3fcbf614585f76005874811", + "_next/static/chunks/2ghgf2s9b2iou.js": "23d8ff31e2128d0541c1887785fb75885323fea7c5d4f35826513b75c12c2ae3", + "_next/static/chunks/2itnratrnd9c5.js": "8be0b191c2d54f7233ebf2f1e169b3bfef680fa93da21c08d8c43b05c3ec174f", + "_next/static/chunks/2kpcazmi6n6mk.js": "bea0de681fceff50056bfeccc5d035aff54d20918288051cb64bb259edd250c7", + "_next/static/chunks/2r6jrtuxq0e_x.js": "ac31577d9e5663a8f82645117a15743264054e5098b707c576e4e505398cc672", + "_next/static/chunks/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10", + "_next/static/chunks/2u5qve004opku.js": "be388d9a6aa423082bafb4584c3facc65ddfed71bcfa5c1d06b097b408c5ff97", + "_next/static/chunks/2xkey6z2nw7xp.js": "0f25bf09513b31298148cd262507b20b5a9ca5533317168c16481c544c6ffd6f", + "_next/static/chunks/2z42el0b2mp8_.js": "86ff990ef32c90c4839583e4f1d1bcbddb165dad3141b9fcd2ecec67f4ff24b8", + "_next/static/chunks/2z9e_b61gtc22.js": "b9d717dad26828438d4ff56cabca41a8055f5eaa54420fd0aeb6b4ba7d5baa0d", + "_next/static/chunks/31n24zcvyae0y.js": "110921bad10425af1d689cb939d97be75c7c0af9c35f8b16c5ff237db6fce893", + "_next/static/chunks/324qfub45abd6.js": "77ef8e17b89234fb19a80796d5d04d3e297c459e5cb41b35b5bc78c0b10b4984", + "_next/static/chunks/32_ah983ce851.js": "0c3cd0d2a5ad789e31226a9ea0506c50016804311a58548c7784b7b45aaecd14", + "_next/static/chunks/3329nxgnx3721.js": "ceedc7c69bf0617733b65bbf9f6a682a5d53177d4e8fdb86b8982cda2175f232", + "_next/static/chunks/357yqeklh7414.js": "0192ab7198ebbe299d34a934c504dd4b562d1cccebb6e9d4c5163930c881b14c", + "_next/static/chunks/3721l8sfm8icl.js": "06b67611b3a93515a375b803b54fe7063c049824f1ebf5c7f7db8701b5091e7c", + "_next/static/chunks/3bqn9b34na0b9.js": "f1b8ebcc1b22251c33c9f3a5d11c1f893cad2da2e8744a441e790f7347aa9e73", + "_next/static/chunks/3ckk_j5ril9ag.js": "87f631dae7b648d32171e9e05a3e000753ecb54f8d3b86a4401c0e4ab4d73553", + "_next/static/chunks/3gkylew_qn7cw.js": "7e6c74c81be0c41ab433e36d65b914f62c48f332922e27f7cc953476f4dd78cb", + "_next/static/chunks/3la4obitihzpv.js": "9a5a57b46db389b98f1fd5baa86eba1a360300dae9d1ff3ffeae7bc3378135b9", + "_next/static/chunks/3q4v10rrqy40n.js": "d87ff7b7a0f07d0d92eab3876481eb686a12d9c43d8b92cbe406aefa227a11c1", + "_next/static/chunks/3s4-jswh8gd_0.js": "38f29a1630a295d009178de7353b0138f8664a421ddf7f6adb7d6105ff747a68", + "_next/static/chunks/3u61o8t7m_jza.js": "86231c12e0f8cacc8638bed0bc4b34f645fc35e60de342dc154d3cce0c9a5afa", + "_next/static/chunks/40y_aqqilokr2.js": "1f5a5260316134d6bffe949400752ee6b42addf908ae714ef4ae4ebde916dddd", + "_next/static/chunks/43b5x8qjjh3ax.js": "6ee7261cf9a63e0e6ea181bbb09125e09948588b6e10b5c02727c686a6062a3a", + "_next/static/chunks/turbopack-25fzg9ay_1ss-.js": "c40f39e993a30c96d6247bb3a7b581538bb046efe8ef8ec07bea3ba32291750f", + "_not-found/__next._full.txt": "f9f9ca590aca43147f8296a55055a2d74adb084b15b1aa96aeb3824e2611c7e1", + "_not-found/__next._not-found/__PAGE__.txt": "9f06d77af71b3cb0cee6ed97464b8126c0a12d49a562ea4b96454b1854ad5253", + "_not-found/__next._tree.txt": "c24fdf123693e1e12f27fde3e9918c2c41030608b4e7883e133ee0cf268e9ca8", + "_not-found.html": "b4c33da6d53512a33d317e329653dfa129b158aeb18d1655377a31fbbebd7b58", + "_not-found.txt": "f9f9ca590aca43147f8296a55055a2d74adb084b15b1aa96aeb3824e2611c7e1", + "favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a", + "favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3", + "index.html": "4e4fde1f40864f519f0552becde231b341e1e9637d66c136ba7e367cbafdfdd1", + "index.txt": "82bffb4dc5832441a8d1451368558e3f4ec4cda2a3bc96072e5efe87a6cac0b5", + "logo192.png": "bc652031597fabd19b9f14e22a71f809490d218037521b3b64d013418c1390b4", + "logo512.png": "5129e9bc1ba812b711fd9a646d3a38a906d365a26ee685df183b8752458944d4", + "manifest.json": "2667ce63c2e0835b7007239816a5597639321d333da396a78638dfa9e8a7c935", + "mockups/dashboard.svg": "318be3adb1324c26eb30f05572a29528a3e38331c6a604652eef75b54f8c29dc", + "mockups/pipeline.svg": "db2ef41faabeb90e7ce85413e168581686c54535d970fc7d8deda3888a479de4", + "mockups/workspace.svg": "9bbab22349147c7b01d6e18c93c622a6f8aed6dedaf23715189ab54d60e1ddbd", + "robots.txt": "e5ab0d231eeb01b4a982d1c79a6729cac9797ad15a69247e4f28ba6afc149b4c" + } +} diff --git a/docs/ui-modernisation/evidence/secondary/browser/BROWSER.json b/docs/ui-modernisation/evidence/secondary/browser/BROWSER.json new file mode 100644 index 00000000..62f119df --- /dev/null +++ b/docs/ui-modernisation/evidence/secondary/browser/BROWSER.json @@ -0,0 +1,944 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "state": "companies", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "offers", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "operations", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "analytics", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "trash-empty", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "public-cv", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "companies", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "offers", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "operations", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "analytics", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "trash-empty", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "public-cv", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "companies", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "offers", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "operations", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "analytics", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "trash-empty", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "public-cv", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "companies", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "offers", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "operations", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "analytics", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "trash-empty", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "public-cv", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "companies", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "offers", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "operations", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "analytics", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "trash-empty", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "public-cv", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "companies", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "offers", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "operations", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "analytics", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "trash-empty", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "public-cv", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "companies", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "offers", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "operations", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "analytics", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "trash-empty", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "public-cv", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "companies", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "offers", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "operations", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "analytics", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "trash-empty", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "public-cv", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "companies", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "offers", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "operations", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "analytics", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "trash-empty", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "public-cv", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "companies", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "offers", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "operations", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "analytics", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "trash-empty", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "public-cv", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "companies", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "offers", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "operations", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "analytics", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "trash-empty", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "public-cv", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "companies", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "offers", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "operations", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "analytics", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "trash-empty", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "public-cv", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "companies", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "offers", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "operations", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "analytics", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "trash-empty", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "public-cv", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "companies", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "offers", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "operations", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "analytics", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "trash-empty", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "public-cv", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "companies", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "offers", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "operations", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "analytics", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "trash-empty", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "public-cv", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "companies", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "offers", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "operations", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "analytics", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "trash-empty", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "public-cv", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "light", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "light", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + } + ], + "errors": [], + "writes": [], + "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", + "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", + "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": [ + "All data/render responses synthetic. No actual job providers, operation workers, public CV access-control or physical PDF qualification.", + "Trash is empty; real restore/delete excluded. Public CV route makes no identity read in this fixture, not deployed anonymous-access acceptance.", + "No models, real credentials, native/human, integrated security, production or release qualification." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/secondary/browser/PILOT-ORIGIN-FAILURE.json b/docs/ui-modernisation/evidence/secondary/browser/PILOT-ORIGIN-FAILURE.json new file mode 100644 index 00000000..68f5a305 --- /dev/null +++ b/docs/ui-modernisation/evidence/secondary/browser/PILOT-ORIGIN-FAILURE.json @@ -0,0 +1,21 @@ +{ + "screens": [], + "journeys": [], + "errors": [], + "writes": [], + "unavailableReads": [], + "blockedExternal": [ + "https://fonts.googleapis.com", + "http://localhost:5202", + "http://localhost:5202", + "http://localhost:5202", + "http://localhost:5202", + "http://localhost:5202", + "http://localhost:5202" + ], + "limits": [ + "All data/render responses synthetic. No actual job providers, operation workers, public CV access-control or physical PDF qualification.", + "Trash is empty; real restore/delete excluded. Public CV route makes no identity read in this fixture, not deployed anonymous-access acceptance.", + "No models, real credentials, native/human, integrated security, production or release qualification." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/secondary/browser/PILOT.json b/docs/ui-modernisation/evidence/secondary/browser/PILOT.json new file mode 100644 index 00000000..d13a3ee4 --- /dev/null +++ b/docs/ui-modernisation/evidence/secondary/browser/PILOT.json @@ -0,0 +1,74 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "state": "companies", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "offers", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "operations", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "analytics", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "trash-empty", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "public-cv", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "sixDirectRoutes": "PASS", + "populatedAndUnknownOffers": "PASS", + "operationActionPermissions": "PASS", + "analyticsPeriodQuery": "PASS", + "publicRouteWithoutIdentityRead": "PASS" + } + ], + "errors": [], + "writes": [], + "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" + ], + "limits": [ + "All data/render responses synthetic. No actual job providers, operation workers, public CV access-control or physical PDF qualification.", + "Trash is empty; real restore/delete excluded. Public CV route makes no identity read in this fixture, not deployed anonymous-access acceptance.", + "No models, real credentials, native/human, integrated security, production or release qualification." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-1440.png new file mode 100644 index 00000000..87f298f3 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-320.png new file mode 100644 index 00000000..f1a22509 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-390.png new file mode 100644 index 00000000..c32eebf0 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-768.png new file mode 100644 index 00000000..6cfe6d4c Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-1440.png new file mode 100644 index 00000000..4fb2e3c2 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-320.png new file mode 100644 index 00000000..c6a235e1 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-390.png new file mode 100644 index 00000000..cafa9d93 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-768.png new file mode 100644 index 00000000..bd26c378 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-1440.png new file mode 100644 index 00000000..30bdf3fe Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-320.png new file mode 100644 index 00000000..2f35aad6 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-390.png new file mode 100644 index 00000000..5edb78b1 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-768.png new file mode 100644 index 00000000..4dea7a23 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-1440.png new file mode 100644 index 00000000..56a77b10 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-320.png new file mode 100644 index 00000000..c494d715 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-390.png new file mode 100644 index 00000000..633b3a94 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-768.png new file mode 100644 index 00000000..96d561b8 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/analytics-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-1440.png new file mode 100644 index 00000000..b619b73e Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-320.png new file mode 100644 index 00000000..3d0d9f7c Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-390.png new file mode 100644 index 00000000..ef939e26 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-768.png new file mode 100644 index 00000000..7d698325 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-1440.png new file mode 100644 index 00000000..d8e4f28c Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-320.png new file mode 100644 index 00000000..0cee678f Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-390.png new file mode 100644 index 00000000..59a58dbd Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-768.png new file mode 100644 index 00000000..4a1a8574 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-1440.png new file mode 100644 index 00000000..f8887e67 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-320.png new file mode 100644 index 00000000..ad1ce95a Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-390.png new file mode 100644 index 00000000..b26668a2 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-768.png new file mode 100644 index 00000000..86854c92 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-1440.png new file mode 100644 index 00000000..85af2db1 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-320.png new file mode 100644 index 00000000..bb7a37b2 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-390.png new file mode 100644 index 00000000..0f893999 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-768.png new file mode 100644 index 00000000..4a380090 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/companies-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-1440.png new file mode 100644 index 00000000..e390e114 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-320.png new file mode 100644 index 00000000..2becc007 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-390.png new file mode 100644 index 00000000..51e33171 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-768.png new file mode 100644 index 00000000..9df4983f Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-1440.png new file mode 100644 index 00000000..76495aef Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-320.png new file mode 100644 index 00000000..957b5692 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-390.png new file mode 100644 index 00000000..5939817f Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-768.png new file mode 100644 index 00000000..c5c1ba60 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-1440.png new file mode 100644 index 00000000..64445bf2 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-320.png new file mode 100644 index 00000000..8135ff6e Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-390.png new file mode 100644 index 00000000..4f6e953d Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-768.png new file mode 100644 index 00000000..01f5a8a3 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-1440.png new file mode 100644 index 00000000..9cdab75f Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-320.png new file mode 100644 index 00000000..5176688a Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-390.png new file mode 100644 index 00000000..6ddbdff3 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-768.png new file mode 100644 index 00000000..52af6017 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/offers-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-1440.png new file mode 100644 index 00000000..c0b31ad9 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-320.png new file mode 100644 index 00000000..2395a266 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-390.png new file mode 100644 index 00000000..949aa807 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-768.png new file mode 100644 index 00000000..fa792c5d Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-1440.png new file mode 100644 index 00000000..7d4a1df9 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-320.png new file mode 100644 index 00000000..8bba51f5 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-390.png new file mode 100644 index 00000000..6d3e9ec6 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-768.png new file mode 100644 index 00000000..99a34f2c Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-1440.png new file mode 100644 index 00000000..ee1c35f1 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-320.png new file mode 100644 index 00000000..78a21fb8 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-390.png new file mode 100644 index 00000000..d5697a3f Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-768.png new file mode 100644 index 00000000..e3c96b4f Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-1440.png new file mode 100644 index 00000000..daa1a21b Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-320.png new file mode 100644 index 00000000..f12a40b1 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-390.png new file mode 100644 index 00000000..b60ec537 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-768.png new file mode 100644 index 00000000..b7c333ab Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/operations-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-1440.png new file mode 100644 index 00000000..0e63dc9c Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-320.png new file mode 100644 index 00000000..3d1cfdce Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-390.png new file mode 100644 index 00000000..6d296156 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-768.png new file mode 100644 index 00000000..4e30a193 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-1440.png new file mode 100644 index 00000000..cd6c597d Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-320.png new file mode 100644 index 00000000..3b633863 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-390.png new file mode 100644 index 00000000..1a1752da Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-768.png new file mode 100644 index 00000000..848840f9 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-1440.png new file mode 100644 index 00000000..ccfd1dc2 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-320.png new file mode 100644 index 00000000..bdc343c3 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-390.png new file mode 100644 index 00000000..7d9a7fdc Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-768.png new file mode 100644 index 00000000..4f51f4aa Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-1440.png new file mode 100644 index 00000000..a914322e Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-320.png new file mode 100644 index 00000000..5710ae88 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-390.png new file mode 100644 index 00000000..0787fbed Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-768.png new file mode 100644 index 00000000..abaa355d Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/public-cv-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-1440.png new file mode 100644 index 00000000..3fef3bd7 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-320.png new file mode 100644 index 00000000..de564734 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-390.png new file mode 100644 index 00000000..861b5770 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-768.png new file mode 100644 index 00000000..45f5e8c4 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-1440.png new file mode 100644 index 00000000..87fc599b Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-320.png new file mode 100644 index 00000000..5ca995e8 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-390.png new file mode 100644 index 00000000..62180fb3 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-768.png new file mode 100644 index 00000000..dd1c1deb Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-1440.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-1440.png new file mode 100644 index 00000000..d98481fc Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-320.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-320.png new file mode 100644 index 00000000..6cd0f443 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-390.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-390.png new file mode 100644 index 00000000..bc34eb28 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-768.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-768.png new file mode 100644 index 00000000..0b0c8d6b Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-1440.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-1440.png new file mode 100644 index 00000000..d91bf98a Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-320.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-320.png new file mode 100644 index 00000000..62f56af1 Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-390.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-390.png new file mode 100644 index 00000000..19a9084b Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-768.png b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-768.png new file mode 100644 index 00000000..0f94ef7c Binary files /dev/null and b/docs/ui-modernisation/evidence/secondary/browser/trash-empty-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/secondary/frontend/a3-secondary-tests.json b/docs/ui-modernisation/evidence/secondary/frontend/a3-secondary-tests.json new file mode 100644 index 00000000..b4e001cb --- /dev/null +++ b/docs/ui-modernisation/evidence/secondary/frontend/a3-secondary-tests.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":7,"numPassedTests":85,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":7,"numTotalTests":85,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793733041469,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":397,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows persistent operation and notification states with accessible actions","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793733047763,"status":"passed","title":"shows persistent operation and notification states with accessible actions"},{"ancestorTitles":[],"duration":95,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows honest empty and failure states","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733048160,"status":"passed","title":"shows honest empty and failure states"},{"ancestorTitles":[],"duration":52,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"localizes operation controls and empty states in Norwegian Bokmål","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733048255,"status":"passed","title":"localizes operation controls and empty states in Norwegian Bokmål"},{"ancestorTitles":[],"duration":106,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] initial failure offers single-flight GET Retry without false empty or writes","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793733048307,"status":"passed","title":"[P7-08 operations] initial failure offers single-flight GET Retry without false empty or writes"},{"ancestorTitles":[],"duration":150,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] cached refresh failure preserves known rows and does not fabricate empty results","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793733048413,"status":"passed","title":"[P7-08 operations] cached refresh failure preserves known rows and does not fabricate empty results"},{"ancestorTitles":[],"duration":190,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] same-render duplicate Cancel reserves exactly one mutation and blocks competing work","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733048563,"status":"passed","title":"[P7-08 operations] same-render duplicate Cancel reserves exactly one mutation and blocks competing work"},{"ancestorTitles":[],"duration":184,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] same-render duplicate Retry reserves exactly one mutation and blocks competing work","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733048753,"status":"passed","title":"[P7-08 operations] same-render duplicate Retry reserves exactly one mutation and blocks competing work"},{"ancestorTitles":[],"duration":169,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] same-render duplicate Mark read reserves exactly one mutation and blocks competing work","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733048937,"status":"passed","title":"[P7-08 operations] same-render duplicate Mark read reserves exactly one mutation and blocks competing work"},{"ancestorTitles":[],"duration":154,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] same-render duplicate Dismiss reserves exactly one mutation and blocks competing work","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733049107,"status":"passed","title":"[P7-08 operations] same-render duplicate Dismiss reserves exactly one mutation and blocks competing work"},{"ancestorTitles":[],"duration":126,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] language and ordinary rerenders reformat cached data without refetch or polling restart","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793733049261,"status":"passed","title":"[P7-08 operations] language and ordinary rerenders reformat cached data without refetch or polling restart"},{"ancestorTitles":[],"duration":94,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] 15-second polling is single-flight and resumes after the held pair completes","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733049387,"status":"passed","title":"[P7-08 operations] 15-second polling is single-flight and resumes after the held pair completes"},{"ancestorTitles":[],"duration":166,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] mutation invalidates a held old poll before adopting the returned same-ID DTO","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733049481,"status":"passed","title":"[P7-08 operations] mutation invalidates a held old poll before adopting the returned same-ID DTO"},{"ancestorTitles":[],"duration":262,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] committed cancel plus failed refresh announces truth and GET Retry cannot replay or unlock stale writes","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793733049647,"status":"passed","title":"[P7-08 operations] committed cancel plus failed refresh announces truth and GET Retry cannot replay or unlock stale writes"},{"ancestorTitles":[],"duration":156,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] committed204 Mark read updates notices locally even when refresh fails without completing a task","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793733049910,"status":"passed","title":"[P7-08 operations] committed204 Mark read updates notices locally even when refresh fails without completing a task"},{"ancestorTitles":[],"duration":161,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] committed204 Dismiss updates notices locally even when refresh fails without completing a task","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793733050066,"status":"passed","title":"[P7-08 operations] committed204 Dismiss updates notices locally even when refresh fails without completing a task"},{"ancestorTitles":[],"duration":182,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] failed POST preserves eligibility and current-locale recovery without false commit or new GET","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793733050227,"status":"passed","title":"[P7-08 operations] failed POST preserves eligibility and current-locale recovery without false commit or new GET"},{"ancestorTitles":[],"duration":86,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] server action admission overrides displayed status and unknown metadata remains honest","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793733050409,"status":"passed","title":"[P7-08 operations] server action admission overrides displayed status and unknown metadata remains honest"},{"ancestorTitles":[],"duration":15,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] unmount aborts a pending read and late completion cannot fetch or publish","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793733050496,"status":"passed","title":"[P7-08 operations] unmount aborts a pending read and late completion cannot fetch or publish"},{"ancestorTitles":[],"duration":95,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] unmount during a write prevents its late follow-up GET, event and focus effects","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793733050511,"status":"passed","title":"[P7-08 operations] unmount during a write prevents its late follow-up GET, event and focus effects"},{"ancestorTitles":[],"duration":208,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] removing the initiating control restores meaningful focus while deliberate focus elsewhere stays put","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733050606,"status":"passed","title":"[P7-08 operations] removing the initiating control restores meaningful focus while deliberate focus elsewhere stays put"},{"ancestorTitles":[],"duration":187,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-08 operations] accepted background polls preserve surviving and deliberate focus and recover removed focused controls","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793733050814,"status":"passed","title":"[P7-08 operations] accepted background polls preserve surviving and deliberate focus and recover removed focused controls"}],"endTime":1793733051004,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\operations-page.test.tsx","startTime":1793733043070,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["public auth presentation"],"duration":125,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation names the password field for login intent and retains its autocomplete contract","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733052721,"status":"passed","title":"names the password field for login intent and retains its autocomplete contract"},{"ancestorTitles":["public auth presentation"],"duration":75,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation names the password field for register intent and retains its autocomplete contract","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733052846,"status":"passed","title":"names the password field for register intent and retains its autocomplete contract"},{"ancestorTitles":["public auth presentation"],"duration":79,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation provides one named main landmark and H1 for password request","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733052921,"status":"passed","title":"provides one named main landmark and H1 for password request"},{"ancestorTitles":["public auth presentation"],"duration":50,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation provides one named main landmark and H1 for password reset","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733053000,"status":"passed","title":"provides one named main landmark and H1 for password reset"},{"ancestorTitles":["public auth presentation"],"duration":43,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation provides one named main landmark and H1 for email verification","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733053050,"status":"passed","title":"provides one named main landmark and H1 for email verification"},{"ancestorTitles":["public auth presentation"],"duration":31,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation provides one named main landmark and H1 for email change","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733053093,"status":"passed","title":"provides one named main landmark and H1 for email change"},{"ancestorTitles":["public auth presentation"],"duration":29,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation provides one named main landmark and H1 for Microsoft recovery","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733053124,"status":"passed","title":"provides one named main landmark and H1 for Microsoft recovery"},{"ancestorTitles":["public auth presentation"],"duration":45,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation announces the pending confirmation without an unnamed progressbar: false","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733053153,"status":"passed","title":"announces the pending confirmation without an unnamed progressbar: false"},{"ancestorTitles":["public auth presentation"],"duration":30,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation announces the pending confirmation without an unnamed progressbar: true","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733053198,"status":"passed","title":"announces the pending confirmation without an unnamed progressbar: true"},{"ancestorTitles":["public auth presentation"],"duration":78,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation retains the entered reset email and a durable error in the page when the command fails","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733053228,"status":"passed","title":"retains the entered reset email and a durable error in the page when the command fails"},{"ancestorTitles":["public auth presentation"],"duration":128,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation retains both new-password fields and the decoded recovery token after a rejected reset","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733053306,"status":"passed","title":"retains both new-password fields and the decoded recovery token after a rejected reset"},{"ancestorTitles":["public auth presentation"],"duration":107,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation keeps a rejected local sign-in beside the retained fields without navigating","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793733053434,"status":"passed","title":"keeps a rejected local sign-in beside the retained fields without navigating"},{"ancestorTitles":["public auth presentation"],"duration":108,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation keeps the reset-request action name while announcing an in-flight command","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733053542,"status":"passed","title":"keeps the reset-request action name while announcing an in-flight command"},{"ancestorTitles":["public auth presentation"],"duration":142,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation announces an in-flight local sign-in while preserving its action name","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733053650,"status":"passed","title":"announces an in-flight local sign-in while preserving its action name"},{"ancestorTitles":["public auth presentation"],"duration":173,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation announces a pending password save without changing its payload or successful destination","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793733053792,"status":"passed","title":"announces a pending password save without changing its payload or successful destination"},{"ancestorTitles":["public auth presentation"],"duration":105,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation focuses the first invalid local-login field and associates its explanation","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733053965,"status":"passed","title":"focuses the first invalid local-login field and associates its explanation"},{"ancestorTitles":["public auth presentation"],"duration":140,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation focuses the invalid new password without losing confirmation input","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733054070,"status":"passed","title":"focuses the invalid new password without losing confirmation input"},{"ancestorTitles":["public auth presentation"],"duration":43,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation focuses and explains the invalid reset-request email without sending a command","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733054211,"status":"passed","title":"focuses and explains the invalid reset-request email without sending a command"},{"ancestorTitles":["public auth presentation"],"duration":132,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation replaces previous reset-request success when a later request fails","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793733054254,"status":"passed","title":"replaces previous reset-request success when a later request fails"},{"ancestorTitles":["public auth presentation"],"duration":68,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation does not assert optional authentication while login configuration is unresolved","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733054386,"status":"passed","title":"does not assert optional authentication while login configuration is unresolved"},{"ancestorTitles":["public auth presentation"],"duration":56,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation does not assert optional authentication while register configuration is unresolved","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733054454,"status":"passed","title":"does not assert optional authentication while register configuration is unresolved"},{"ancestorTitles":["public auth presentation"],"duration":126,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public auth presentation offers a read-only configuration retry while retaining entered sign-in fields","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793733054510,"status":"passed","title":"offers a read-only configuration retry while retaining entered sign-in fields"}],"endTime":1793733054637,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\public-auth-presentation.test.tsx","startTime":1793733051023,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":83,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"public CV exposes the rendered CV and PDF download","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793733056005,"status":"passed","title":"public CV exposes the rendered CV and PDF download"},{"ancestorTitles":[],"duration":51,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a public slug containing path and URL delimiters stays one encoded API and PDF path segment","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733056088,"status":"passed","title":"a public slug containing path and URL delimiters stays one encoded API and PDF path segment"},{"ancestorTitles":[],"duration":43,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a held public CV read has a named page and loading announcement without a document or download","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733056139,"status":"passed","title":"a held public CV read has a named page and loading announcement without a document or download"},{"ancestorTitles":[],"duration":51,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a revoked or missing public slug shows an unavailable state without retry or download","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733056182,"status":"passed","title":"a revoked or missing public slug shows an unavailable state without retry or download"},{"ancestorTitles":[],"duration":96,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a transient failure retries only when requested and keeps focus on the page heading during its held read","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793733056233,"status":"passed","title":"a transient failure retries only when requested and keeps focus on the page heading during its held read"},{"ancestorTitles":[],"duration":104,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"changing public slugs immediately hides the previous document, name and PDF and resets its measured height","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793733056329,"status":"passed","title":"changing public slugs immediately hides the previous document, name and PDF and resets its measured height"},{"ancestorTitles":[],"duration":80,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed public slug cannot hide a subsequently loaded different public CV","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733056433,"status":"passed","title":"a failed public slug cannot hide a subsequently loaded different public CV"},{"ancestorTitles":[],"duration":51,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a late success from the previous slug cannot replace the current CV or its title","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733056513,"status":"passed","title":"a late success from the previous slug cannot replace the current CV or its title"},{"ancestorTitles":[],"duration":52,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a late failure from the previous slug cannot replace the current CV or its title","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733056564,"status":"passed","title":"a late failure from the previous slug cannot replace the current CV or its title"},{"ancestorTitles":[],"duration":101,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"language changes translate loading, failure and loaded chrome without refetching anonymous CV content","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793733056616,"status":"passed","title":"language changes translate loading, failure and loaded chrome without refetching anonymous CV content"},{"ancestorTitles":[],"duration":13,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"the public page removes only its own noindex metadata and ignores a response after unmount","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733056717,"status":"passed","title":"the public page removes only its own noindex metadata and ignores a response after unmount"},{"ancestorTitles":[],"duration":39,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"leaving a loaded public CV restores the prior page title when its candidate title is still current","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793733056730,"status":"passed","title":"leaving a loaded public CV restores the prior page title when its candidate title is still current"},{"ancestorTitles":[],"duration":37,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"leaving a loaded public CV preserves a page title already replaced by another owner","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793733056769,"status":"passed","title":"leaving a loaded public CV preserves a page title already replaced by another owner"},{"ancestorTitles":[],"duration":61,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"returning from A through B to A ignores both earlier held reads until the current A response arrives","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793733056806,"status":"passed","title":"returning from A through B to A ignores both earlier held reads until the current A response arrives"}],"endTime":1793733056868,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\public-cv-page.test.tsx","startTime":1793733054649,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":178,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"opens one company relationship view with applications and recent contact","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733058150,"status":"passed","title":"opens one company relationship view with applications and recent contact"},{"ancestorTitles":[],"duration":73,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"company contact dates follow the en UI locale","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793733058328,"status":"passed","title":"company contact dates follow the en UI locale"},{"ancestorTitles":[],"duration":74,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"company contact dates follow the nb UI locale","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793733058402,"status":"passed","title":"company contact dates follow the nb UI locale"},{"ancestorTitles":[],"duration":753,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-J08 E08] en company save failure remains inside the dialog with the draft available for retry","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793733058476,"status":"passed","title":"[PRES-J08 E08] en company save failure remains inside the dialog with the draft available for retry"},{"ancestorTitles":[],"duration":659,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-J08 E08] nb company save failure remains inside the dialog with the draft available for retry","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793733059229,"status":"passed","title":"[PRES-J08 E08] nb company save failure remains inside the dialog with the draft available for retry"},{"ancestorTitles":[],"duration":631,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a held company save locks all nine fields and cancellation, submits one exact snapshot, and retains a failed draft","invocations":1,"location":null,"numPassingAsserts":27,"retryReasons":[],"startAt":1793733059888,"status":"passed","title":"a held company save locks all nine fields and cancellation, submits one exact snapshot, and retains a failed draft"},{"ancestorTitles":[],"duration":455,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a locale change translates an existing company-save failure without refetching or replacing its draft","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733060519,"status":"passed","title":"a locale change translates an existing company-save failure without refetching or replacing its draft"},{"ancestorTitles":[],"duration":178,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"retrying a failed relationship read loads the same company without reloading the company list","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793733060974,"status":"passed","title":"retrying a failed relationship read loads the same company without reloading the company list"},{"ancestorTitles":[],"duration":498,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a late success for relationship A cannot replace the opened relationship B","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733061152,"status":"passed","title":"a late success for relationship A cannot replace the opened relationship B"},{"ancestorTitles":[],"duration":464,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a late failure for relationship A cannot replace the opened relationship B","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733061650,"status":"passed","title":"a late failure for relationship A cannot replace the opened relationship B"},{"ancestorTitles":[],"duration":449,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a relationship response received after closing stays closed and does not populate another held relationship","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733062115,"status":"passed","title":"a relationship response received after closing stays closed and does not populate another held relationship"},{"ancestorTitles":[],"duration":503,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"the company edit deep link removes only edit while preserving query, hash, state and replace navigation","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733062564,"status":"passed","title":"the company edit deep link removes only edit while preserving query, hash, state and replace navigation"}],"endTime":1793733063067,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\companies-relationship.test.tsx","startTime":1793733056875,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":79,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"compares recorded offer facts without filling missing values","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793733064405,"status":"passed","title":"compares recorded offer facts without filling missing values"},{"ancestorTitles":[],"duration":49,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows an honest empty state when there are no offers","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793733064485,"status":"passed","title":"shows an honest empty state when there are no offers"},{"ancestorTitles":[],"duration":417,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows the first 25 of the real total in server application-date order without inventing the remaining offers","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793733064534,"status":"passed","title":"shows the first 25 of the real total in server application-date order without inventing the remaining offers"},{"ancestorTitles":[],"duration":70,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"opens the full recorded offer source with the same supported filter and ordering","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793733064952,"status":"passed","title":"opens the full recorded offer source with the same supported filter and ordering"},{"ancestorTitles":[],"duration":78,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"distinguishes held and failed reads from empty results and recovers through one explicit identical retry","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793733065022,"status":"passed","title":"distinguishes held and failed reads from empty results and recovers through one explicit identical retry"},{"ancestorTitles":[],"duration":69,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a live locale change translates loaded offer chrome and preserves recorded facts without another GET","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793733065101,"status":"passed","title":"a live locale change translates loaded offer chrome and preserves recorded facts without another GET"},{"ancestorTitles":[],"duration":101,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"an existing read failure translates without refetching and Retry retains the same query","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793733065170,"status":"passed","title":"an existing read failure translates without refetching and Retry retains the same query"},{"ancestorTitles":[],"duration":223,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"structured salaries follow UI locale rather than host locale while preserving zero, bounds, currency, unknown periods and free text","invocations":1,"location":null,"numPassingAsserts":18,"retryReasons":[],"startAt":1793733065271,"status":"passed","title":"structured salaries follow UI locale rather than host locale while preserving zero, bounds, currency, unknown periods and free text"},{"ancestorTitles":[],"duration":100,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses recorded applied/deadline/contact dates, keeps absent applied dates unknown, and opens the exact current application","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793733065494,"status":"passed","title":"uses recorded applied/deadline/contact dates, keeps absent applied dates unknown, and opens the exact current application"}],"endTime":1793733065595,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\offer-comparison.test.tsx","startTime":1793733063078,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":296,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01 S02] all existing reports have exact values independent of hidden Dashboard flags","invocations":1,"location":null,"numPassingAsserts":14,"retryReasons":[],"startAt":1793733067010,"status":"passed","title":"[PRES-S01 S02] all existing reports have exact values independent of hidden Dashboard flags"},{"ancestorTitles":[],"duration":506,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01 E07] period is direct-loadable and browser Back restores the period without refetching snapshot","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733067306,"status":"passed","title":"[PRES-S01 E07] period is direct-loadable and browser Back restores the period without refetching snapshot"},{"ancestorTitles":[],"duration":342,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01] failed snapshot remains an error while trends and retry stay available","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733067812,"status":"passed","title":"[PRES-S01] failed snapshot remains an error while trends and retry stay available"},{"ancestorTitles":[],"duration":104,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01] empty cohorts do not invent a denominator, and unsupported URL periods default safely","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793733068155,"status":"passed","title":"[PRES-S01] empty cohorts do not invent a denominator, and unsupported URL periods default safely"},{"ancestorTitles":[],"duration":282,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-J05 J09] drill-down retains supported raw status and company identities","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793733068259,"status":"passed","title":"[PRES-J05 J09] drill-down retains supported raw status and company identities"}],"endTime":1793733068542,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\analytics-presentation.test.tsx","startTime":1793733065603,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":64,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"legacy Microsoft recovery requires the emailed proof and a fresh matching Microsoft token","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793733069757,"status":"passed","title":"legacy Microsoft recovery requires the emailed proof and a fresh matching Microsoft token"},{"ancestorTitles":[],"duration":89,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pending Microsoft recovery keeps a named action and announces progress before the real confirmation boundary","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793733069821,"status":"passed","title":"pending Microsoft recovery keeps a named action and announces progress before the real confirmation boundary"}],"endTime":1793733069911,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\microsoft-legacy-relink-page.test.tsx","startTime":1793733068550,"status":"passed","summary":""}],"wasInterrupted":false} diff --git a/job-tracker-ui/scripts/verify-a3-secondary.mjs b/job-tracker-ui/scripts/verify-a3-secondary.mjs new file mode 100644 index 00000000..1918d304 --- /dev/null +++ b/job-tracker-ui/scripts/verify-a3-secondary.mjs @@ -0,0 +1,68 @@ +// Secondary routes in the actual export; every API result is a synthetic fixture. +import { chromium, expect } from '@playwright/test'; +import AxeBuilder from '@axe-core/playwright'; +import ts from 'typescript'; +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +const compiled = ts.transpileModule(fs.readFileSync(new URL('../src/i18n/translations.ts', import.meta.url), 'utf8'), { compilerOptions: { module: ts.ModuleKind.ESNext } }).outputText; +const { translations } = await import(`data:text/javascript;base64,${Buffer.from(compiled).toString('base64')}`); +const out = path.resolve(import.meta.dirname, '../../docs/ui-modernisation/evidence/secondary/browser'); +fs.mkdirSync(out, { recursive: true }); +const report = { screens: [], journeys: [], errors: [], writes: [], unavailableReads: [], blockedExternal: [] }; +const browser = await chromium.launch(); +try { + const configurations = process.env.A3_PILOT ? [[320, 'en', 'light']] : [320, 390, 768, 1440].flatMap(width => ['en', 'nb'].flatMap(language => ['light', 'dark'].map(mode => [width, language, mode]))); + for (const [width, language, mode] of configurations) { + console.log(`Checking ${width}/${language}/${mode}`); + const t = key => { assert.ok(translations[language][key], key); return translations[language][key]; }; + const context = await browser.newContext({ viewport: { width, height: 1000 }, reducedMotion: 'reduce' }); + 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 }); + const company = { id: 7, name: 'Recorded school', location: 'Oslo', website: null, contactName: 'Recorded contact', contactEmail: 'contact@example.test', contactPhone: null, notes: '', jobsCount: 1 }; + const offers = [{ id: 42, jobTitle: 'Recorded teacher role', company, status: 'Offer', dateApplied: '2026-10-01', deadline: '2026-12-01', location: 'Oslo', salaryMin: 610000, salaryMax: 710000, salaryCurrency: 'NOK', salaryPeriod: 'year', notes: 'Recorded teaching role', followUpAt: null }, { id: 43, jobTitle: 'Recorded nursing role', company: { id: 8, name: 'Recorded clinic' }, status: 'Offer', dateApplied: '2026-10-02', location: 'Bergen', salaryMin: null, salaryMax: null, notes: '', deadline: null, followUpAt: null }]; + let authReads = 0; + await page.route('**/*', route => { + const req = route.request(), url = new URL(req.url()), p = url.pathname; + if (url.origin !== 'http://localhost:4338' && !(url.origin === 'http://localhost:5202' && p.startsWith('/api/'))) { report.blockedExternal.push(url.origin); return route.abort(); } + if (!p.startsWith('/api/')) return route.continue(); + if (req.method() !== 'GET') { report.writes.push(p); return route.abort(); } + const answer = data => route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(data) }); + if (p === '/api/auth/me') authReads++; + if (p === '/api/jobapplications') return answer({ items: new URL(page.url()).pathname === '/offers' ? offers : [], total: new URL(page.url()).pathname === '/offers' ? 2 : 0, page: 1, pageSize: 25 }); + const fixtures = { + '/api/auth/config': { requireAuth: true }, '/api/auth/me': { id: 'secondary-owner', sessionContext: 'secondary-session', provider: 'local', firstName: 'Alex', displayName: 'Alex Sample', roles: [], plan: 'pro', entitlements: { ai: false, proThemes: true }, uiLanguage: language === 'nb' ? 'nb-NO' : 'en' }, + '/api/companies': [company], '/api/jobapplications/reminders': [], '/api/notifications/unread-count': { count: 0 }, + '/api/operations': [{ id: '11111111-1111-4111-8111-111111111111', taskType: 'cv.process', status: 'running', createdAtUtc: '2026-11-03T10:00:00Z', progressStage: 'Recorded processing stage', progressPercent: 40, canCancel: false, canRetry: false }], '/api/notifications': [], + '/api/jobapplications/stats': { total: 5, active: 4, byStatus: { Applied: 2, Offer: 2, Saved: 1 } }, + '/api/jobapplications/analytics-overview': { funnel: [{ label: 'Applied', count: 2 }], responseRateBySource: [{ label: 'NAV', total: 4, responses: 1, rate: 25 }], topCompanies: [{ companyId: 7, company: company.name, count: 4, responses: 1, responseRate: 25 }], timeInStage: [{ stage: 'Applied', medianDays: 3, count: 2 }], salaryInsights: [{ currency: 'NOK', period: 'year', count: 2, minimum: 610000, maximum: 710000, averageMidpoint: 660000 }] }, + '/api/jobapplications/analytics': [{ month: '2026-10', applied: 2, responses: 1 }], '/api/jobapplications/tags': [{ tag: 'Teaching', count: 2 }], '/api/jobapplications/tag-trends': { months: ['2026-10'], series: [{ tag: 'Teaching', counts: [2] }] }, + '/api/public-cv/synthetic': { name: 'Alex Sample', html: '
Synthetic teacher profile