diff --git a/docs/ui-modernisation/visual-correction/DASHBOARD_BASELINE_MANIFEST.json b/docs/ui-modernisation/visual-correction/DASHBOARD_BASELINE_MANIFEST.json new file mode 100644 index 00000000..162bb7ff --- /dev/null +++ b/docs/ui-modernisation/visual-correction/DASHBOARD_BASELINE_MANIFEST.json @@ -0,0 +1,431 @@ +{ + "runtimeCommit": "fa6bd5d98ea121d4d91dbae214bcd826806377ed", + "policy": "Runtime/export identities reused from independently verified public receipt09904ecc. Dashboard baseline measured before default-height change; no later offer/default/discovery edits built.", + "sources": { + "job-tracker-ui/src/App.test.tsx": "f3b39f696867c1027df473821005be312205ff9a9d6a4183882227efa1190fa9", + "job-tracker-ui/src/App.tsx": "651227b873a95a02b345bf7cb52c0cd197b14731af8bb6774842a375d24cc966", + "job-tracker-ui/src/ClientApp.tsx": "51ac4ff04829b60caf6fdfb597ee8943e378bece9222b38ce67e1d99f01be10c", + "job-tracker-ui/src/LandingPage.authRedirect.test.tsx": "3aac7d0b9fa8606765cf657d0d850d448c6bec8ef8e4fa39eebd3c25bb326bf6", + "job-tracker-ui/src/ThemeProvider.tsx": "1d25fd091ca632f7671e413db24e917d4ca4a375fddade0ca1ff397a8ae9f950", + "job-tracker-ui/src/a3-navigation.test.tsx": "942c3adc70bc2108c8fb75ea871239254751556ae3d1222f2c63bf836f7616f6", + "job-tracker-ui/src/a3-theme-contract.test.ts": "039382d49d84f84df81d583079f217a21ca0be4b9c90c82f2da744998fbfe73d", + "job-tracker-ui/src/account-data-export.test.tsx": "05e55a62459d7c2c4d04d110e411b25a53786460b13d375bf50b482699e154e5", + "job-tracker-ui/src/account-providers.test.tsx": "fbb7748829fe01fa33e977a0c77bd8bc5b850a33fb43866a37c81962c090c664", + "job-tracker-ui/src/account-scoped-state.test.tsx": "f9dcc4d75a0dbac01fd622f7552fa37e5a96c1daa0cba50eedcfaa2d04761a01", + "job-tracker-ui/src/account-security-flows.test.tsx": "8ff99509f50342fbb8ada67ec5f646404ac60773f2d72c84b772aca063c7cc8b", + "job-tracker-ui/src/account-security-presentation.test.tsx": "12f8fc05eea372c6b1b7d60907f14845a23dcf79b7f44848ad04eb80ae5a0d35", + "job-tracker-ui/src/accountPlan.tsx": "37e21dd83f277a18f1b593f2c379846ed0517e78f069a34a9e23549a88ae0511", + "job-tracker-ui/src/admin-audit-page.test.tsx": "45f2a6274f465aa0c2b805d1ef163cee920b806827b2f3199ef7f89d76b1de3f", + "job-tracker-ui/src/admin-processing-page.test.tsx": "e6cb36eaa4d1a245f4f3ec1cad59395aed458cf5d655bf326e48d93aa0637391", + "job-tracker-ui/src/admin-system-page.test.tsx": "794fc020315dad975453102001b8d2e405dc289f020d5b817c4dc4d7c970a60c", + "job-tracker-ui/src/admin-users-page.test.tsx": "af86966ae40f05115b38bd592ba6f43f6f78c7cdfda14eaa7189c2fded893eeb", + "job-tracker-ui/src/ai-privacy-settings.test.tsx": "d5806b1890513aa42cdbe39e1e6d3fea8966c08289745f01ab2d69e69a6aa378", + "job-tracker-ui/src/ai-section-assistant.test.tsx": "bcf642a670c5b2741ba8dd46fbf1b1f231c4801b4f1c8bebec6eab6dabd31396", + "job-tracker-ui/src/ai-usage-card.test.tsx": "b894953ab331341c0920aa71b667eb7c30659da95744cafcbbf825f35eef7d02", + "job-tracker-ui/src/aiWorkspace.ts": "d2ebe2565a01af05f786e35d25cd36a0a3b8135921c140b319e2c000256f9322", + "job-tracker-ui/src/analytics-presentation.test.tsx": "9f5d37200f780f972a80970f886957bb11e2f49e4d7b87b1b6dc05a066b3e049", + "job-tracker-ui/src/api-error-localisation.test.ts": "7d0ebc8a171c21506e0f941ec2b3e3e93daf1437c1dc67f987e56869c9106d46", + "job-tracker-ui/src/api.ts": "f75ac7be07a743396843ddad5fd3371e2d5fd3d9c5d933e09e26fae2159f2378", + "job-tracker-ui/src/app-shell-navigation.test.tsx": "69876c7ad9ae5be695a830f7328c63b7c4fe42fbec9ec18c1dceefc7b01d5aa5", + "job-tracker-ui/src/app-shell-notifications.test.tsx": "d35c49270169df7210bf291883f6a5faf1aa36944eaa3af3d7c9965d84521b00", + "job-tracker-ui/src/application-assets.test.tsx": "d07f22661d8efbd65dbf4e92aa9722d6159438e6b354ed0c3c4a41c6d55b43ac", + "job-tracker-ui/src/application-calendar.test.tsx": "d82d87ccd456ada0797fa32e1d437224cae1edf62e40c05e1cb87f233a0eb40e", + "job-tracker-ui/src/application-checklist.test.tsx": "f214590032840e98aeddbd75974de85fee5444b723e0a6da69a903308c4f5847", + "job-tracker-ui/src/application-drafts.test.ts": "f702cac59903ee4110d4af448c3f00e4582a568ee9eb1ecfaf7adebc8965cfc3", + "job-tracker-ui/src/application-intelligence.test.tsx": "b0bc623e5ce4ae0192fd0264091d9ea2a5305fd037064a9cd9f5ce61b7d7758e", + "job-tracker-ui/src/application-route-contracts.test.ts": "67b56fd2832cd8b40b77262a40cc2c81d42b30dd41c5280ee26171fac2418423", + "job-tracker-ui/src/application-workflow-assist.test.tsx": "11a1d057ad2ba652da12f0c6529b8a9b7b5bdbf9cdd52799fbbbd524bc5c8e33", + "job-tracker-ui/src/application-workspace-overlay.test.tsx": "86ec993ae4e0c2f96eec71e2797502247f4e5335cf6f39001e881d0c44991152", + "job-tracker-ui/src/applicationDrafts.ts": "fec1146d10fc8feff66e4f0fee76429ee597545be7006e060916d62fe387b9f2", + "job-tracker-ui/src/applicationWorkspace.test.ts": "bd068a208d40f782f66f77e6196378f4fa2a5be6f0eacd71e4f6271276e89362", + "job-tracker-ui/src/applicationWorkspace.ts": "3b00a4fe16159bdb9603eeb37bfdf5e5eb9a87d7815227fa3aa2f0da6e4f232c", + "job-tracker-ui/src/assets/JobbjaktMark.tsx": "4a9f2ccaf87a8a488e3750d227010a495a480b89837032e9b87cb04adee45d95", + "job-tracker-ui/src/attachments.test.tsx": "89bb3e277ae7be652073eec6d3b6188bcbeaea8b29b07478ff5b21654be8e7c1", + "job-tracker-ui/src/auth.ts": "1cbdd59f73c5a961613b2569679f96630cded407974876a4ca8abccf28780b0e", + "job-tracker-ui/src/backup-lifetime.test.tsx": "e67d22d13a5edaedc29d57e3afc36614cdf4844d510d1ecd661d5254d39e2ca3", + "job-tracker-ui/src/build-metadata-localisation.test.tsx": "065c5550a18f7b3c7dca9bbb26c5564a53a53eaf389e7c9695596fcbb2c06f6e", + "job-tracker-ui/src/calendar-agenda.test.tsx": "38a8345d1ccd4200c1759e179dd680644155244c0f6dac9ea48f8179f6b384db", + "job-tracker-ui/src/captureUrl.test.ts": "949261f9e4929e70d4d0e1ef1cbeada58d23fe6241e77572d97b35b51094b7ad", + "job-tracker-ui/src/captureUrl.ts": "3fe1b5fbed55ab3035bbeac3c3a9c5b7fb87a92aed66955b179f979e35128a13", + "job-tracker-ui/src/career-completeness-labels.test.ts": "c1fa2781449ddc4f6bcaed5f89900a7af925227e134b19cb5ce4ff5173a7aaae", + "job-tracker-ui/src/career-editor.test.tsx": "9c296fbf5d5871184869058e405fbc5a2f7467cbf2302baebef979bb41acef6b", + "job-tracker-ui/src/career-evidence.test.tsx": "28df09fbd3bafa1a53b098c72c1ee6aeeccc83498bd2a7aa8b22a7380268e585", + "job-tracker-ui/src/career-history-view.test.tsx": "dfed6b3ccce38aba1492bc39bd94b1427ed307ea3ef1221f34095d8441e2cb59", + "job-tracker-ui/src/career-import-review.test.tsx": "23460ed154dd9a90bfa364c18326fb3d196ca281f12aae66d4aec97a37c05374", + "job-tracker-ui/src/career-workspace-page.test.tsx": "3d232575525624246cf056d6d357cdb9c27a334ecc198046e2581f09873dbd99", + "job-tracker-ui/src/checklist-translation-token.test.ts": "54d5f49c6200fcca8877f2981b70dddeae37f1feb861a97637f07aeb5c9f3fa2", + "job-tracker-ui/src/companies-relationship.test.tsx": "4a4e1b4315ee73e01dd64c4032e5dd78245e0f0ec27e40359e1dcac32d3cb470", + "job-tracker-ui/src/components/AddJobModal.tsx": "97ec677ba82022349f77d52ccfb06735ab689dcbd33e93a669164fc9bb2aa1db", + "job-tracker-ui/src/components/AiPrivacySettingsCard.tsx": "fe4cb91623c1fe2749772e6d13a58d198891d666c4a9c6b2eca10494d1a97125", + "job-tracker-ui/src/components/AiUsageCard.tsx": "d7386337609d54cbe10916100ee443168870bdc00fc0974a66cca48b4975e91d", + "job-tracker-ui/src/components/ApplicationAssets.tsx": "95465d9a881af97e55ad6f74ff283f81c452c645cc37ff28e7212ea7a32e9d57", + "job-tracker-ui/src/components/ApplicationCalendarActions.tsx": "e0f60554a36e049a34fa4fc1b93450eb61cc40abd6d061467426dbb1127c07a8", + "job-tracker-ui/src/components/ApplicationChecklist.tsx": "0f198e90559b30952cbf7d0f4973211e3fbffcbb183e9e4b4f2ee2e2a9d02f56", + "job-tracker-ui/src/components/ApplicationIntelligence.tsx": "90540576dba4d705ed9234df7091f2b725500d4301287ba151a520956c03f073", + "job-tracker-ui/src/components/ApplicationWorkflowAssist.tsx": "daee742a2d50ca588df8abe7f41e348f871c8a94c6da83eeb646343c84686f0a", + "job-tracker-ui/src/components/Attachment.tsx": "c1a85ed64a067830ca24d06eee503043e18224d6c21b6e4d0e5840ff9c994393", + "job-tracker-ui/src/components/Attachments.tsx": "02081be8282cb3d1a525b336bededb8aabe561cc3b73e1b98e924f9ef945add1", + "job-tracker-ui/src/components/AuthStatusCard.tsx": "7a397cc55db165e85794b12be7c21984759bca5fbc83a6ed75e574744f59187c", + "job-tracker-ui/src/components/BackupCard.tsx": "274dc6b5bd4e497b737441d508c9491930c496f2f6036b440d2c34bb2ead8a53", + "job-tracker-ui/src/components/CalendarAgenda.tsx": "0ae978f9b555ed267eee8bbc73a934c8cd5f67868df861713872d9893473afb4", + "job-tracker-ui/src/components/CompaniesTable.tsx": "0065acb28866cea27fa2165ec248eef51109373b0c2c0faae0ae12fa3235ba1f", + "job-tracker-ui/src/components/Correspondence.tsx": "45f0b6b442676e62e8644b57863d595936d43608841d4fadaafa936d5606036a", + "job-tracker-ui/src/components/CoverLetterDocument.tsx": "d76d0cc3a21230043e91a0d28d03953c236b731c5fecd48e2ba11fd610281053", + "job-tracker-ui/src/components/CropImageDialog.tsx": "53db90f13a72adfa0035503ab2e1dcfa67e20c2d2ab529af51bc204ff54abc96", + "job-tracker-ui/src/components/CvTemplateGallery.tsx": "d7f28fd9479dabd5a988b6a8b656c36c6c9b6622beb13530b7011590edb7965e", + "job-tracker-ui/src/components/CvTemplateThumbnail.tsx": "4c748eea07617767eb74d0f6e439ba30d363f4ad1d6d05e8e4e1172710c274c9", + "job-tracker-ui/src/components/DashboardGrid.test.tsx": "423ba80f06cc92ace630a731a5536fc74256f921e2caa29d6b0dffd6d62513bc", + "job-tracker-ui/src/components/DashboardGrid.tsx": "1f9dfb5dc17b7804c00cca823e7045ec1804d3bcf162bb56590bcd3cf85358d8", + "job-tracker-ui/src/components/DashboardLayoutEditor.tsx": "86714ee75bfeddfe62e4c4c9d535c4e641d1213422615fab76838d6aa401984a", + "job-tracker-ui/src/components/DashboardView.tsx": "21be089f43dfaec5ac5469c36b4610559421f958f52613b4deadbdaa12eadf4f", + "job-tracker-ui/src/components/DashboardWeek.tsx": "12ba41a7df41da9ea9e964c594ebb7f2c5364b4a7c523966912f31a048407340", + "job-tracker-ui/src/components/EditJobDialog.tsx": "02f364b532988b4e1b6de464905c211a3de39ed5edec61f34f1db4334fe3fe98", + "job-tracker-ui/src/components/EmailProviderConnections.tsx": "e43fb12ef3ed1d3f0a86573d9e269dd4913ec470ee6e28fe53d19ebfb1af2b2d", + "job-tracker-ui/src/components/ErrorBoundary.tsx": "26563b031bbc078598b6705f99c3ea31ebd4d4476b4ebacf74afb216bba4de65", + "job-tracker-ui/src/components/GoogleAuthCard.tsx": "747afc361183bff1c558110eae9e2108d1e0ddb793dc789719623a7f3f38f4df", + "job-tracker-ui/src/components/GradientButton.tsx": "1f8fd757d9ee066603f1629607ce09f88f226a386020863834a46a200a8e85f1", + "job-tracker-ui/src/components/ImportExportJobs.tsx": "327f1b31f27ada5822570e15c1e633315fa9015e71183fbdd21c238ccfd4b0f1", + "job-tracker-ui/src/components/InterviewPrep.tsx": "ef8161cc982c9068d3c7eec80f7dd6ef565f05ba0b36bcf58e3b643285b22f0f", + "job-tracker-ui/src/components/JobDetailsPanels.tsx": "79e5474bb0d74d751d0b9714e5d4967cfcbfd8f7f3c9c8de55f381adfdb766a2", + "job-tracker-ui/src/components/JobFlowBar.tsx": "cd54b8599d429e779858559266f7f8bd4b32ce45d8ad305224155144d6d4003e", + "job-tracker-ui/src/components/JobTable.tsx": "c94feace146e070de1d83b87a7d41ab246e78b5281d3f025cbd44583eb577b5a", + "job-tracker-ui/src/components/KanbanBoard.tsx": "9bb9b08fa66884e0f40fa751c540d421fa4c4c604a796c30e21a0ca53e0c7387", + "job-tracker-ui/src/components/Markdown.tsx": "d3288d410d3757d195180521b898af804fdb37634a6eaf8a380995452251dd3d", + "job-tracker-ui/src/components/MicrosoftAuthCard.tsx": "36558ba83de1bca2a5b60d55c891c18a0d87ca9795404027e332ea1c67545ca5", + "job-tracker-ui/src/components/NotificationsPopover.tsx": "db9150fc46a70df83d56fb559c8d6dd50cd86b5bd71bd9b121320091970513d6", + "job-tracker-ui/src/components/OnboardingChecklist.tsx": "78b3112465fb62c381c48e32253763f22b6f2034fbcd23c27faeaa0dddf380e6", + "job-tracker-ui/src/components/ProFeatureNotice.tsx": "e293b1e52f95c4572aa228cea2d175df5337b0bd365c0051aaf4ac3038a6a9c5", + "job-tracker-ui/src/components/QuickCaptureCard.tsx": "394b2a298b4edbdbc7acea98ac871f69b8924aae69ba9afd9ce49200cbfb2f76", + "job-tracker-ui/src/components/QuickCommandDialog.tsx": "6da1b0f3d7d4a0704fea8e953bbba5874b4a094a9802d32bce0bc143848496f6", + "job-tracker-ui/src/components/RemindersView.tsx": "e550e76cb28cb4236100bb1a35158a329e4ecd3a12be56f6cdaf28fb75fa0091", + "job-tracker-ui/src/components/RichTextField.tsx": "7b732cfbb9b8dc8b19e71415054649e0a2404cc17ec29d036817d63fea58a994", + "job-tracker-ui/src/components/RulesSettingsCard.tsx": "229c6e7350586eb554fce18a1665ec6b6ba87e0d2b556dfa3c2422bede21f33e", + "job-tracker-ui/src/components/SavedViewsMenu.tsx": "742d99802af0bcfced244926c576381aa5e734d684a8c6d31f3f0162c3e8785d", + "job-tracker-ui/src/components/SessionsSettingsCard.tsx": "19d53aca5a1be27b9b4518431f6d3997ed03f0675bab33fd8aee586078af318a", + "job-tracker-ui/src/components/SettingsView.tsx": "250b80b2d18f82ab63e7341c0779380345f386acc0d89161064d8e41439636d2", + "job-tracker-ui/src/components/TagsInput.tsx": "3d93f945ccad6b308882aa2a65f020e76bc77aed938efbb1ecbee1fa096f6348", + "job-tracker-ui/src/components/TurnstileWidget.tsx": "86fbfd0e52d13f467d6ab84ed352dc95cdd97ab9e46c4e5add11b113e655389f", + "job-tracker-ui/src/components/TwoFactorChallenge.tsx": "1d9f7f21bc85a8c79f79bf293d3cba8c3a826a1579a8c6d66fec7307e513fffc", + "job-tracker-ui/src/components/TwoFactorSettingsCard.tsx": "d334bbaeef04df06ed3ca487e4ba740488549acb62b8f799b6872352521d1637", + "job-tracker-ui/src/components/UserManagementCard.tsx": "3699b1942a6defa29192b93dc946ef2db75207d32cea5b5c90a61f491efbb7da", + "job-tracker-ui/src/components/ViewStateNotice.tsx": "7b6c3e6c311860897eb5327936dbb129e860781929cfd9a4d4e17f81c607c70c", + "job-tracker-ui/src/components/cv/AiSectionAssistant.tsx": "40475ae87da5a1966bdd52a5107b4c54e34a28a4be31687dc5471217105c4d7a", + "job-tracker-ui/src/components/cv/CvCustomizeTab.tsx": "b9163dd4b13349edbf58d92df699808064086a870f73d1fbba548150f729af3c", + "job-tracker-ui/src/components/cv/CvTemplatePreviewDialog.tsx": "9690dc4f725a003aa9274b2ec12068cc3f015ae6a2aa473a905fc3289e44807b", + "job-tracker-ui/src/components/job-workspace/useJobWorkspaceBaseData.ts": "d0a979cc1a9d2e3472cc0a6a1b9aed2d3146fb00b5d2ca2b6773ca10ba17821e", + "job-tracker-ui/src/components/job-workspace/useWorkspaceTabCache.ts": "9799f178657a9db1fe0129d5434f04e345273a63d0e3b058cbab18865ccdec7e", + "job-tracker-ui/src/confirm-flow.test.tsx": "79e61f0d98f81d273e48f89e2bdd4c669d0bf6ec15c7859b19fe354c3e19a3a3", + "job-tracker-ui/src/confirm.test.tsx": "2f60cf4481d843b3f57d5a540bc356378571bcfdb0c2b8baf184423658832c2f", + "job-tracker-ui/src/confirm.tsx": "4900f13ef766a05cfcfc2321a6741fc580450f699c9fe91635f9dfdfcb023cc9", + "job-tracker-ui/src/correspondence-gmail-import.test.tsx": "f59abb397a716951399c64dfa6fbaeba3c63aaddd60e45eed7cdd5caf590a1e8", + "job-tracker-ui/src/correspondence-inbox-page.test.tsx": "d2b9a9633d69fa56a94d7ec71b0d8672607bca681a01a225550bf482fc8244dc", + "job-tracker-ui/src/correspondence-search-context.test.ts": "8fc52ff3e10827e96194d6eb293e4872f65d4c73213b0b29e275bad9bbac5b15", + "job-tracker-ui/src/cover-letter-document.test.tsx": "6305a6c729fec3854a7d213ca89b9ca8ec78d6714200370d880ffa9d98249a5d", + "job-tracker-ui/src/csv-export.test.tsx": "a12080de3f1c571fa27874d72ffcfa2212aa4a4f4b7cb6abab277b4ce8d0a1e2", + "job-tracker-ui/src/cv-builder-deep-link.test.tsx": "bbbd4c8be5d01e3e01a83d4f61756913edd31b86b087b49354cc8e7252377144", + "job-tracker-ui/src/cv-builder-page.test.tsx": "7c1211e25b85fcc9e979b6c50926e297da6705c899d64d601de4cbc7f4a9a758", + "job-tracker-ui/src/cv-document-controls.test.tsx": "5fe17d351402dbf5c676d069525d9670c83885c5b58ad8926675ed3911e86919", + "job-tracker-ui/src/cv-import-mapping.test.tsx": "95530490d504a1a2c20be20f2696d4cdc9762f99358dcf2814c4a80ece6143ee", + "job-tracker-ui/src/cv-import-review.test.tsx": "084ac4933dbf13c5c4ba9c5ceddb4fbfccb3437b3bdfed30780a34d25ebf12ba", + "job-tracker-ui/src/cv-photo-controls.test.tsx": "f3d3a500bbc70a19d6e1e8504295ba79e01c829e06b66c81ebf5f3b1a6bb5436", + "job-tracker-ui/src/cv-template-gallery.test.tsx": "379baeb733fb9da8e7b3cc3ae6b89f745178e67be61ba2184055fb1632aa9402", + "job-tracker-ui/src/cv-template-preview.test.tsx": "469db6a104ef8147613c6f176c8fc6279a6c3f8493c13c22574abb220d2e7cf0", + "job-tracker-ui/src/cv-template-thumbnail.test.tsx": "c6a065c31c5eb19caa1dde69b704982ed4baa6afe21474485872f3239d9af6f3", + "job-tracker-ui/src/cvBuilder.test.ts": "9a26dd2abb6b5e2138a826c05a57ebf509e66bbee5c4909f4a56757a8a01efa6", + "job-tracker-ui/src/cvBuilder.ts": "c021bafeabbc8ad3526d1b10b90ad8f7f0958ded8ed26eac8c1d28b53098b64d", + "job-tracker-ui/src/cvPreview.ts": "38d0aadb4a080c72a8c4f04b6972b4252593c5e2d07af95a421abc47dcacb88d", + "job-tracker-ui/src/daily-control-loop.test.tsx": "9bd0a047e384ced6616129271e771658bd6bf133aaf7c3a7fa6d6a8f1e9a735e", + "job-tracker-ui/src/dashboard-customisation.test.tsx": "9fbdf02f6f4815b7d98e32c8bb295a72dafc552118567eebbd885cd1b1d5be94", + "job-tracker-ui/src/dashboard-presentation.test.tsx": "23743259e498bc525cb6e228d71ddb9a16e95868b1ddf93fdb19ec5a295ed91b", + "job-tracker-ui/src/dashboard-week.test.tsx": "a6d6fd1931057428695be595a4dc344e70ae4ac8dc95a0551e7dccb0201e4cdc", + "job-tracker-ui/src/dashboardLayout.test.ts": "4ec561778ee9cedd5fb578d18822124d38caa2357eef749eb32486a2922dddb3", + "job-tracker-ui/src/dashboardLayout.ts": "eead1fb296d50d914cd6ff6bea6c1411dd906ec4cbd96fd8ec378c2a1b9645f3", + "job-tracker-ui/src/dialog-flow.test.tsx": "ca84737b9946a356be59b2de83077fcf9134535c1531d6db18775bb2065ff8dd", + "job-tracker-ui/src/dialogs.ts": "c817739a302e765709b747a4fed7cb28f229920b6720f4096000a997c02bd200", + "job-tracker-ui/src/documents-page.test.tsx": "9f48be69724d9ed691238874cd5f474f70024a30ed10ad9e2e3cf4dd8af572c7", + "job-tracker-ui/src/edit-job-revision.test.tsx": "c9d6e693990c839ddf9d267d95c51c1ba944a9a2f62787da568e0405a574a301", + "job-tracker-ui/src/email-provider-connections.test.tsx": "764315a88dd7becbcda26b647c5258915f8e380f0ff2f9c031f7fb322b339b87", + "job-tracker-ui/src/emailOAuth.ts": "dfd0f0ac46d295a2c5a0b9a6bb6bfffcceef6b6871cec7c92c429418cdbce8a9", + "job-tracker-ui/src/end-to-end-trust-loop.test.tsx": "32d2a2133edadd1cc193508658671faec8ea902fd95742370adbbf466c48615a", + "job-tracker-ui/src/file-picker-activation.test.tsx": "accb87f94a7b36373eec6583a391a17ede7e7779cf18d81d4a86b43e0bd6afbe", + "job-tracker-ui/src/gmail-review-page.test.tsx": "667bdfe4aa2cae9669777a066a8df2b7b7bf1fbb1fe719f20204bf3360231790", + "job-tracker-ui/src/hooks/useCompanies.ts": "a48e2ec2abf50c89b9a983bed93bc3c8b91fc537af6673eb9245cc4bdd5fac10", + "job-tracker-ui/src/hooks/useDashboardLayout.test.tsx": "4937c40959487ab39f98036d9c674fbb149bb26d2728fcf4a80096e7fdaf95a3", + "job-tracker-ui/src/hooks/useDashboardLayout.ts": "fa47ca4fb8aaacbc62641f5adca4120fa057e78290791cd62fad1844b2f46314", + "job-tracker-ui/src/hooks/useDebouncedValue.ts": "b704d1c40387dd4d668dab0abb59927ba86a377095a6cba9583c3493512b3f25", + "job-tracker-ui/src/hooks/useDragReorder.ts": "367e064052df27171f34ed638f1542319fa223f3ecf419000811c92e809ccb5a", + "job-tracker-ui/src/hooks/useViewResource.ts": "5912131c525ba85ae6994efc38306a10ec2e673cc0082686226b59f00df5da99", + "job-tracker-ui/src/i18n-provider.test.tsx": "520b8559ebd0c206649008c98705c24bd8caac7e00a642984a75b11f7d851fbe", + "job-tracker-ui/src/i18n/I18nProvider.tsx": "dfa8d95510a7dd872e1b9bbddf9bb4ab31da4d4b5e932b0099397d11e08ad108", + "job-tracker-ui/src/i18n/translations.ts": "d871583747786fad8f6518636bc62f23c0418e7f6a36c1766ac6c1a703aa7db5", + "job-tracker-ui/src/index.css": "daf22c296c801d3d533083361cc59fbdc22e5bfe528aa4bad1973b54cc5448a4", + "job-tracker-ui/src/interview-prep.test.tsx": "e43c7da9b08bff64457f2f0b7b86448bb780f716d0d21aec097871081b2435d5", + "job-tracker-ui/src/job-discovery.test.tsx": "16f740b867166aa9bf51377e8732a14e76a539f6d5eb8df989cede48297a1eaa", + "job-tracker-ui/src/job-import.test.tsx": "9c69000a6f8ca744fb425c2007ce48247be46ecad01a177c2f002ba2ac9a0d73", + "job-tracker-ui/src/job-table-density.test.tsx": "02a150fe7594a954160f4f41f305ed8dd50f8c85a234c9923410e55e04a6112a", + "job-tracker-ui/src/jobWorkflowSignals.ts": "cde4372017c13f21de8b4e2259923d80beda36506784d7be089432622fbd6b0b", + "job-tracker-ui/src/jobWorkspaceRoute.ts": "eaeb4fedba53220f855bcce64cf79046f5b1c89323d43f2e7fcc4c922a61edf4", + "job-tracker-ui/src/jobs-view-integration.test.tsx": "ad7a5c84dcb7cda29f3d276201de794379f0552827116f88339dd172d47961c9", + "job-tracker-ui/src/jobsQuery.ts": "ef2b8e804162f9d059cc087f7f57b2c4ccb5760b59e2d3d586e753871b6a0490", + "job-tracker-ui/src/kanban-grouped-board.test.tsx": "cba56a5211028f5f410715999c3f3f70d33c1a3e4d3f8f43567ad9869c0cdb60", + "job-tracker-ui/src/landing-page.test.tsx": "0e82209229cc318abea674d0e524383d73ebf97bfe9a95e5ce6aff1dfc83c594", + "job-tracker-ui/src/layout/AppShell.tsx": "e75bf9adff81b6d7a7dda4cc3428e87eeffa2d2865c5c534e83899a9c4d9db7d", + "job-tracker-ui/src/layout/AuthPageFrame.tsx": "9b2115cd03366e334b62cf23df1cbce4bee8fdffcbeeccb56a8dd841f862f561", + "job-tracker-ui/src/layout/PageLayout.tsx": "a11c5636068ab4c80e065b360f9d5a6af6da8fb7a1d06a0c59492e02cec2f5af", + "job-tracker-ui/src/loaded-theme-states.test.tsx": "a54e28943c2219842fdb5066b95490c4663568b2adbfcb02cb1984c62e9fe6a3", + "job-tracker-ui/src/locale-fetch-stability.test.tsx": "e647fcd387c54ffd50f45f1f8ae3f4133a2858fd0594ec9c0df51ce328a95814", + "job-tracker-ui/src/login-page.test.tsx": "b24f3286a54b79d3f7995cdb579a32251eed5f164940131a33d5ce42ef6a5c20", + "job-tracker-ui/src/logo.svg": "6000b0e9b0b05b3f112de04f0d039768a1db63588ff9b6ef7099dbd71632f383", + "job-tracker-ui/src/microsoft-legacy-relink-page.test.tsx": "a139ff3c1af2efb9a20610ab1262432e1eabf4de881d3e5b71a32f735b8fc24c", + "job-tracker-ui/src/modal-state.test.tsx": "6f7f32cde109bad6df5d3fae40566a692aecb4739f97fa9d302b41a603b64258", + "job-tracker-ui/src/mui-theme.d.ts": "b9e96b260cec865afbdef2669a2d7741d772a282c7569dacb01d6cf23ac37bb4", + "job-tracker-ui/src/named-controls.test.tsx": "c8b519701685c434a729a50aeb5e0dfafbaf8a166fb223ab400b28554c5c445f", + "job-tracker-ui/src/nginx-config.test.ts": "9c636e62579466d1238c0fa41498274b128f2c1585b9e7a161fdc633599612ad", + "job-tracker-ui/src/not-found-page.test.tsx": "24b2c53441f13dd6d9b9faeb36033ba625d14be101096cfa44b8fc4502f2628d", + "job-tracker-ui/src/notifications-popover.test.tsx": "5af75c9d910da518cfbc552c73b5af355b6071bc2bdb75448eacc475ac261db6", + "job-tracker-ui/src/notifications.ts": "118f08f1c90d50ce52fb03baaf7df15c47a26d6de42457a5ecf2746502f86aab", + "job-tracker-ui/src/offer-comparison.test.tsx": "d9f1c66e986932c7716bc562827da6be5b50421829087c458b8883100826284a", + "job-tracker-ui/src/onboarding-checklist.test.tsx": "614d1be16911f87e12ac1ecd47da2aa3e914446f533dbafeb6cf48ea8873ac28", + "job-tracker-ui/src/operations-page.test.tsx": "700d6a69327dba86c3fe5680a4f5aec652647bd1dca1054f45f42328314f4734", + "job-tracker-ui/src/page-layout.test.tsx": "a224a684f69c59043509c3cd7120783b76494ca50520110b9dee01ef89f92807", + "job-tracker-ui/src/pipeline.test.ts": "263da260802d748b97b46aeca4c0a4f0cac2120c0781d3ca56384e8e8e45ed3f", + "job-tracker-ui/src/pipeline.ts": "f5cb6d36e81268b2533c4f5ba4e53781007f166c217a4d805c9a8f9f66c2b9ca", + "job-tracker-ui/src/planCatalog.test.ts": "3c4649febe1103d7b11018be5f9c94b0e998ea5cab96bf9eae622bb49d890c7d", + "job-tracker-ui/src/planCatalog.ts": "068871cc43669d6f8a0581fbaefe8e6d0d2ab7f1c47e0b31cb131e767c2d13b2", + "job-tracker-ui/src/pro-feature-notice.test.tsx": "514e2094aeff267e95be302e29271576a4e36487dba14063d04df95fe24def47", + "job-tracker-ui/src/profile-page.test.tsx": "fdb98a4e6b681b0196bb4bb44678681525a53e75a4e2fa6e298fe996d86839c7", + "job-tracker-ui/src/profileCv.test.ts": "03f6742fcf7d981d46b46574fa0d72b57e7e2a4d898a0e93af0a2356163f9f12", + "job-tracker-ui/src/profileCv.ts": "80c39b7c7558a96c1b7da4eef0d3580849203bc2da4ecd823aeac387b35cf963", + "job-tracker-ui/src/prompt.test.tsx": "dc499a145812564d2dd67d708052e5fe46e0bb77e33a098d1599cf033c97de95", + "job-tracker-ui/src/prompt.tsx": "eb42e7f400d65090301d681b22965dd30cc3701c7378ef28e7e8fa08cab98457", + "job-tracker-ui/src/public-auth-presentation.test.tsx": "d1cc86bf3f083deebb98291940a931d44bcc0f1546f9d3940113a722df996b81", + "job-tracker-ui/src/public-cv-page.test.tsx": "4f3ef679eb264fa9dd692a368870620dc9019891c3af63d72b8561542e3ac23f", + "job-tracker-ui/src/quick-capture.test.tsx": "1a15409c11877bebad60492f26b0d4cf3d045265712e43fdec84666479d1a07f", + "job-tracker-ui/src/quick-command-preservation.test.tsx": "86ef134be10b85bddd980d09672a07cb4ef43807ac740e9283364d784d709bca", + "job-tracker-ui/src/reminders-presentation.test.tsx": "700594101a38593e950ee10340fa0d22bafbd18f928912bf4af58172642ace9e", + "job-tracker-ui/src/salary.ts": "9c46a23c52a5fa06ab76f44d4e0538c99697e2905e2fec4b63d9f43fc2b924cd", + "job-tracker-ui/src/session-boundary-message.test.tsx": "e6de52e667e361784c9c0990c77ee2e5b93f152b8ec320650734ae6c32c6e627", + "job-tracker-ui/src/session-boundary.test.ts": "3c78849fc0966bcfeac81126b24d01adc592f66e51dc6a087ebd27bf3ab1b10e", + "job-tracker-ui/src/sessionBoundary.ts": "09edca77c98294818d2ad0c409ce595f1b6ca0c1f60419fc1078b70f96f5b7b9", + "job-tracker-ui/src/settings-import-lifetime.test.tsx": "24af2a5954533087ddbff40659ff9f8dcf70805435dca772314c2be7d8bf6133", + "job-tracker-ui/src/settings-view.test.tsx": "819ff890e95bd3ee4ca5d696adccecce6b423c768df98f98c62644d546a48576", + "job-tracker-ui/src/setupTests.ts": "5f38d9f2757627e41c2646bcb6c0243237d856eac85016a841bdc8b164986b98", + "job-tracker-ui/src/shell-readiness.test.tsx": "481648d0ecc42a219b5f2b44761125d48327d26b2d3b9b0819808f702f8f806d", + "job-tracker-ui/src/sidebar-active-nav.test.ts": "43e1aa28a11a65a1945a85036d0de4c27b56d9cc8e00b6b35d7a8252916cd2ce", + "job-tracker-ui/src/tailoredCvDraft.ts": "af683500146e4a5ffa493926aa9deaaba917535bc10a445f660a9d031d935faa", + "job-tracker-ui/src/theme-contrast.test.ts": "f17b594bb9fd64d9fcf0c8f84bc19551052d6ba2eae9d2c2c031376f35a6be66", + "job-tracker-ui/src/theme-state.test.tsx": "513156913a36b4c9a3dab109feccba29d78c078e5880ba471529a12d1970766b", + "job-tracker-ui/src/theme.ts": "6b3c28a2a920e53e01ed9ee12ee2f5cdaa0fe7c3752415a97ca544c82fce8cfa", + "job-tracker-ui/src/themeBootstrap.ts": "0035725a9d43077ede757c1f20382465a6f04511b63fb22ac65adcfb8ce5f2d0", + "job-tracker-ui/src/themePrefs.ts": "d775741cd6b2fc7ac59dca13e5e6cf5ffd3856cf4a2e011948b2dfb0d9c319ca", + "job-tracker-ui/src/toast.tsx": "8f11b9ecce244a99a7cc7b6d247751e24089f8396a834924a4fa1eb421ab17bc", + "job-tracker-ui/src/translation-catalogue.test.ts": "f20e8099f2c4dda76574ea3ed1e95b743eef5da82507d7cbc3f9925d52356b98", + "job-tracker-ui/src/turnstile-widget.test.tsx": "1afed75d79a9e771936dcfd30738d3c5fc4c7f61119940c4594c332b05a94d69", + "job-tracker-ui/src/two-factor-settings.test.tsx": "a1466d20f4991e12a2e59702ab76827bae047f48450b04615befcc73a6e72b9b", + "job-tracker-ui/src/types.ts": "bae01df8de079b16546fca1c738f6d49564befcf62ae0449b039faf61bff1158", + "job-tracker-ui/src/use-drag-reorder.test.tsx": "7c6717759b4afbfd28737e6c5e4cbe74bb21825650262dbf70f17de3e47b0716", + "job-tracker-ui/src/use-view-resource.test.tsx": "00a8797f899a633a3b62a0a95bf0173fc69d3c22d79f3964d63b69c82b48fe28", + "job-tracker-ui/src/verify-email-page.test.tsx": "e081ffbb991fd2f481af9dce7008d9a91a654b0e7d749af005aaea40d1013a30", + "job-tracker-ui/src/view-state-announcements.test.tsx": "680dddfb12de6b06c566c4e1c476758ce3a43f1365c9a947270ac96af720b24d", + "job-tracker-ui/src/views/AdminAuditPage.tsx": "a9415d7c759e67079b5db64c05c9cecfe9d062cc5b0532c909261fc064c91343", + "job-tracker-ui/src/views/AdminProcessingPage.tsx": "e58d9a86dc937eac291c2d7114b514576b9d38bb6232e8a6a15bfac9b3137304", + "job-tracker-ui/src/views/AdminSystemPage.tsx": "64e85d9b13088b5229b6635674e9e6ff9ee6c4a62db7f66accb1dcddcedd16c0", + "job-tracker-ui/src/views/AdminUsersPage.tsx": "ed2377d7e004c78c3274c43d534c0a3db7b3468b2de2fa11210841e2cf31b53a", + "job-tracker-ui/src/views/AnalyticsPage.tsx": "40100ef5cf7765221897a4bd0ceb18a964423e122965bee21d278d113fdb01dd", + "job-tracker-ui/src/views/ApplicationWorkspacePage.tsx": "2d31056102c277585bf382a04c8137d3c0502cff068d4bd63f7869bef4b9b7c9", + "job-tracker-ui/src/views/CalendarPage.tsx": "45c827d8268bc6be93735508dd45c464a3c40246a7e530555a0ff90bcd03359e", + "job-tracker-ui/src/views/CareerProfilePage.tsx": "d666136aee79eb29be86606823b5fc5457298e5c62078f8a378d91224431f438", + "job-tracker-ui/src/views/CareerWorkspacePage.tsx": "dc95b1860b658c5e27b4ed9327e805807e935ac19cb65870ff1d531c54c53f39", + "job-tracker-ui/src/views/ConnectedAccountsPage.tsx": "09cbe497948cecacacc9e6e1b6c216bb0feb24977afcfe6c3a1ed0c10bd2708e", + "job-tracker-ui/src/views/CorrespondenceInboxPage.tsx": "1bb8d2743742d96a436f834324a30fa3e3ee835d49996b9e4102d14b6eecbb2b", + "job-tracker-ui/src/views/CvBuilderEditor.tsx": "9db7982ed4bf40716de0b02c9333e2bafe4d89ed1e6bd66d5b2a3521061951ba", + "job-tracker-ui/src/views/CvBuilderPage.tsx": "dc6c1561dde562deb829aff1fed7f595861d2112633572482069ec4c8c05ba2e", + "job-tracker-ui/src/views/DocumentsPage.tsx": "d44ff0ad6402ac5200db3b5e981e9956af86dbbe6ae84ff4ff577c4a25ac7a5f", + "job-tracker-ui/src/views/ForgotPasswordPage.tsx": "7eacaf63d5e1f15e442468897136f2a3db9b605e459fa62224a2e3c422a1f569", + "job-tracker-ui/src/views/GmailReviewPage.tsx": "5e87cad1c5f5118fdd6d62d3aae35b83b3ab10d8d60722ed18c1dbb4487f9890", + "job-tracker-ui/src/views/JobDiscoveryPage.tsx": "1ca763c2d260857b4668874f7edc7e97094b4f5c47cac57fb4a1a1fd5f19e28d", + "job-tracker-ui/src/views/LandingPage.tsx": "aedcdbc8bfc22f7cd4bc9737a06b07f318ca7b4970836bd6c20e805ebfa36c74", + "job-tracker-ui/src/views/LoginPage.tsx": "a853d8d83bcb4026ebc1e10296e1297647b672230f33abb58ea7cf6d2d97067f", + "job-tracker-ui/src/views/MicrosoftLegacyRelinkPage.tsx": "c133fa86c233b2add7eb4e537513dc73534251f5105f22ff8cf61c0746934324", + "job-tracker-ui/src/views/NotFoundPage.tsx": "fe6726f9ae262d4afc05fe5fa7b766db50bb9ee429436db4e36c651a53f7844d", + "job-tracker-ui/src/views/OfferComparisonPage.tsx": "596d5581672045b643172c012a931517c3dad1d734527b562fb40c06150196ce", + "job-tracker-ui/src/views/OperationsPage.tsx": "a618a575393524ad02f9355422802d1f3945c71d5f375364b1ebf3af39cdad51", + "job-tracker-ui/src/views/ProfilePage.tsx": "b55b7c90dc81b966e54ee57693cd65f8376d5926e39f46512a68b877c18c6037", + "job-tracker-ui/src/views/PublicCvPage.tsx": "6c368441859b8beccd0f4eb21e439e38388bbcaf772c721f382625b629645255", + "job-tracker-ui/src/views/ResetPasswordPage.tsx": "272b2c29b0230b3a4133fdb699a0c278e548375928274e2fde65f5975d7ca3df", + "job-tracker-ui/src/views/RouteErrorPage.tsx": "b674a33a01c5ed9f38266dab031eba2338c6573c4cf21e31da88de6d9cb05cf8", + "job-tracker-ui/src/views/VerifyEmailPage.tsx": "e8bb434f57e95f72431a5e696af755c69a327395d1416aaf8fd0ee7381ec01de", + "job-tracker-ui/src/views/career/CareerEvidenceBank.tsx": "51cab7289717c9f26006a9d34ac1f8aac9e09d19e549a3666a15adc41d5d4724", + "job-tracker-ui/src/views/career/CareerProfileSections.tsx": "07396e14214ecdb6c5f37f02d0e448453710a596b5ffb68042aa8ce032520e1c", + "job-tracker-ui/src/views/career/CareerWorkspaceOverview.tsx": "0650f72784b2211f703dfefd4d91a604957678369de2e2f365cf162458cc8d25", + "job-tracker-ui/src/views/career/CvImportMappingEditor.tsx": "57f733276b823bf9cc26c94b7b38c0f12f84ca126985f8a3e3dbff20f0ac0bfa", + "job-tracker-ui/src/views/career/CvImportReview.tsx": "dbbf0bcebd4fc46f55deaa6bb70a0abd37ecb0f01608335bcaf4de46e05f4a48", + "job-tracker-ui/src/views/career/ProfileCompleteness.tsx": "caadfe1462fb68456ad66834be3b2e40244a8367720e5345e3406d51a4cc9454", + "job-tracker-ui/src/views/career/careerCompletenessLabels.ts": "9e53eab4592a341b6b369b3408843b21b2c9233e9b765115367bb3586a1b8401", + "job-tracker-ui/src/workflow-trust-signals.test.tsx": "94b573ba2c07849db50fc028cf4235f91897902a65c43c54ea1fd6c5097f2975", + "job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626", + "job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab", + "docs/pre-phase10-ux/preservation.json": "a4c2a5a0244ea89381008218de32daee1f615a250eb3808b60e0ee103c674d4d" + }, + "harnesses": { + "job-tracker-ui/scripts/verify-a3-dashboard.mjs": "9c80daab56c56cad3d4946cc54710d5f58bfa63a30d87c76c8cb923e103a1be6" + }, + "evidence": { + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/BROWSER.json": "e486b9c97170729229f3f578c5fd8763aab3c81b4847199fff069745e220dd23", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1024.png": "18d0828a50330ef9b40146a1136a15e4ed85d92484d36cd5e0c273b68d51fd93", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1280.png": "69e387c148465b11eb8f20235e349399e50d6223a2eaad543faefaf6fa98d1fc", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1440.png": "698d80591fa93b5f022cb68bf6b3f666f6da6d50ec8e72748186ab8fad043fde", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1920.png": "74465336061112c7bd9ef6fba8bb8a5bbeea79efec4f936293a32bd3510cc587", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-320.png": "514969a0bb99f9676e5fa8d146cffae999f23376ad5fdd3050931c92971d0d04", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-360.png": "17ced4ee00f17d5a86aafca3d5cc498c098e5fbc4c6b31394af90a31d7c82d49", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-390.png": "39dc2b265b5846e6416e1df4c18efb4371e6b4538e4568f636335c5a00b4ca42", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-430.png": "9bfd46cc282ef2a6e637d5115ca539c2408a25a13ab91c28c70ab206ee5aea23", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-768.png": "938501f1f30ae9bd0353fcc67e073b9b78cfed5213395274ed8461737e2762ba", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1024.png": "6a6383dfb89f6e3f0c7c08bd5ec76678a676c1643246a5304c611da8d2ace7cc", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1280.png": "f0cfa56db5dabb8c7e22bf5091d78b4d58fa13f8e206fabc5d9062ba87ee47dc", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1440.png": "f477f221e1dfe6aff24f0e81bc5b77cef4e9e40750be9ee768b78e773532bcd8", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1920.png": "6344a20feaad45687ae4ddb716a1c40df350d90faf686b56482fa9ae0593a0aa", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-320.png": "bc5deee316577a9363d130216b10ff88d694cbc4e0c42dc9d21fc33bfac5a152", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-360.png": "da8e61b97e44eb0d03359e8798124ef21e42f3519ec51185f1848c56effbcc24", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-390.png": "a6ae5fdaa0815e3785234ed3db9237cb3cd8418f5dbd5853b4cfc15de1442256", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-430.png": "39d5c42d7ec20c0864805e149528c69ca75e3415ff5690d7de6d475e89566020", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-768.png": "8913262d808293d3c6e8d11376438c123199d685ff55e27c72a1a0356d70fc90", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1024.png": "5e73f5813db336220d13eafb34c038f3b0cfec1a37f6cc3a08d9952f59cc3c15", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1280.png": "dc602f148dec37240268554ad053b6e386c4abb4894b2e98d8d4a3416dd506f8", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1440.png": "8f43bbbd1ac106a7233d0c5b09a7535b03de06c0bd2afe508f52ed4108419c98", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1920.png": "c3d7a7f8034d6ac7a99e3e91b99523e2864bf21ab82a8adbbbb99cc3de9fa85c", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-320.png": "edcd534c735ab84a5e569415a137a5e3c4e82637c26dbe4dee85290a2104d044", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-360.png": "26b5387f15eb20c27639c9a846ec4b6ce95faada85dde5c995c16a3bc226e5dc", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-390.png": "e372ade43b8b1f9f4f0d953c3876bd5baa3401f298ea6fd8b61a3ef91db4f22c", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-430.png": "af92679bfbed89452009213bf3df29b6b934837418ce3154881f3d10da621aa6", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-768.png": "449a2cf5084eef1c4c1eb341fde7a40a4098f93d1b654a10d7aa267ed57da341", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1024.png": "ace35101d7032ef7bad47c8af637a74e9a6e6fd5d2d23b37184d54b831e3e5a6", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1280.png": "1f255741d4732c01ab6aedb3ee6ca37495a470f286218041abe6b4dec0e28342", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1440.png": "044a8139cfd717d1401f1d139a936893b19e6ace1500db9808952a6a5478529b", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1920.png": "505325b91a3cd85e26268d2ae3d66a6d957429dfe51c37387e386f4f6541cfe2", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-320.png": "7887117fffb1bd57a4235564a2e4fad6511d08bf246e93c0fb6027d19640deda", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-360.png": "6c074e3b5509d2db25366ed00e1f1205c65d87f9a7af8060cb207f0ac0da6c59", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-390.png": "4f2288f2582f601a4c96cce84e1635d6118df3ce794fe175919e4b692e0d1867", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-430.png": "638b6592e67d64443e4d3f5dfedeb3b863248818914edb014c49739f4acf5dca", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-768.png": "38940ad3b7bcb7dcfe6be49e63726d315396421cd30d7c6e063c7e1e24ee94d2", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/PILOT.json": "1f1e8fee60b3d4f28b9a0c4a7b65a697d977cf3b236fbec989d4a854b2b48913", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1024.png": "74a5878631c5a8e850849079980c70cd5e30e6592f07dfa24c8ad41fc89986ba", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1280.png": "5281471f5fcd0acee3f8d28321507917856ee8c0ded5208a6e93158fc2defb74", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1440.png": "2782ccdc656a873fd58468c98ffc83be083750c80e162196f05d5ccbe882adc5", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1920.png": "92ceb248c2ba446fa00cd8bb0b851c4cb772926178ecb9a5c84dafb14a78d993", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-320.png": "937cce203f3228da7d171e9889a0334e804390230164f877178ae4207239d670", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-360.png": "e30d5c832a0e793936dc068dbcc5aaabf346fec7f34e61b4a0f0c60a8f341868", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-390.png": "c0744816d19497de9654248b6707a10cc95a5000e88208c41e4e6985dea6f5f3", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-430.png": "227db6c9a2d4f0726430cff8b6afbdf23ef57c1f2b407eb4eb468e7d2aa3a5dc", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-768.png": "bdb6623e2544ea460800d086d9a66a8bb10c517f032cced51af1a8986176217e", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1024.png": "0a77514f9598aa2d55060d46fd236245069f7f9748426b3e0328c52ab15422ef", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1280.png": "1b5e1e5b725089f923f646daa533203ef921aefa88d341dc40d330955f1f7409", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1440.png": "43d62172deef99cd650e6cd6228c56eed0715ae07811d2f2b4841836e4b00968", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1920.png": "a64a683159037c67b65d770c4e9346f4093eef45988bbf5ce6fd23e36179f09b", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-320.png": "7663c7349f674a76f57b2eba8df69b77e829f3fa98aa369565be4548b423f353", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-360.png": "4f8bc0e1e4649fb0a59e972d8df2107a2889ce81b250bb6d98c2575785c63863", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-390.png": "7ee3d197d78caea722816c1fbc50f0901ddc34195ae43510770ab9f564288038", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-430.png": "fe8e9f98ae22e0c173f710800fd498565683f10e5443778f790673d23969e3a2", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-768.png": "4ec86a5918db24c2884b28defd0de21e2c4b4ea8c33b830ac52dfc477c185bf6", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1024.png": "c9fcb91b9a0ad0af398a15ab9df923d2a59b04f0b047d17de9c6e85912425a40", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1280.png": "296fcbd711e583b255afd556955fba341c1df49675776128559f327b2bf7fc19", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1440.png": "04c709088d5492676c828fdb4c950c35aa6fd4a5e27d23784cc2cdf9a2b7e13e", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1920.png": "377128949135402518ddf75c1e8a1492c52431872c2411571d983d7c308ffe52", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-320.png": "f7fb50cb44f830a76a117090edc5a0cde1eee749f54c90f3c7a3fe6fab6c6b07", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-360.png": "43c534fe489a481829b249819a20b6633543e8baf5cca9201d03e13532f9b3dc", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-390.png": "d329efe08e576a434812a25218c07953b4c9f5217bfde8314a67bd122b5b4bd5", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-430.png": "a29a06c96c519a4b8c6a4511a1edee9f8b16635dfa54192597d986de16445875", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-768.png": "433b69e12991e6fc46d80be8a5726acf2bea81407e7e8091e4fe28fb853675f0", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1024.png": "0ba3e7b92552d17f20646e7a61a8992628db002633d5ad25609a04dcd44a10de", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1280.png": "ff165537d1b1cfa45eaec1dce43b8c3092ced180359c712bfcc9571b99daf681", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1440.png": "39965e5c4fa2995459d3455df4e1ccf0ff9bf52b6185744f8f5a2ba2bd614d66", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1920.png": "abb555d65acad602b8d890f6bed27096a2f4d033b47711f965863c82cd324406", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-320.png": "f875afd404352a4f008d63d7f8eeaaada7facdff79717d7ac13020b7534154a2", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-360.png": "8144191c1545eaf8a07d874c5b01e9be00465c654e594eeef50f14244fecdbb3", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-390.png": "c2abdf32f9b7bdb728f2ed00ded47bc7ee6180839dbda44dfa5521ca1ecb3031", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-430.png": "3bf5f68206a6de4c2afb91c3ba67fccf4a08fed2f68ed773075920c579810000", + "docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-768.png": "6e0352334c0c0e0789102168a70564ffbf3ea927253f213f3dfdc1acad8e550c" + }, + "export": { + "job-tracker-ui/out/404.html": "72f5780ad3024cc7257960defa624bd15941c33bc90a67fdb16e2a3c7a9d4101", + "job-tracker-ui/out/favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a", + "job-tracker-ui/out/favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3", + "job-tracker-ui/out/index.html": "ccefaa27286b57f155aa45f186d2cfcef349cabe24582fd0919a87d54b77257b", + "job-tracker-ui/out/index.txt": "84c5949667c5de886bea32a1c0a4fa80a2a5833db5920bc8ea2d6e893b4e1cc1", + "job-tracker-ui/out/logo192.png": "bc652031597fabd19b9f14e22a71f809490d218037521b3b64d013418c1390b4", + "job-tracker-ui/out/logo512.png": "5129e9bc1ba812b711fd9a646d3a38a906d365a26ee685df183b8752458944d4", + "job-tracker-ui/out/manifest.json": "2667ce63c2e0835b7007239816a5597639321d333da396a78638dfa9e8a7c935", + "job-tracker-ui/out/mockups/dashboard.svg": "318be3adb1324c26eb30f05572a29528a3e38331c6a604652eef75b54f8c29dc", + "job-tracker-ui/out/mockups/pipeline.svg": "db2ef41faabeb90e7ce85413e168581686c54535d970fc7d8deda3888a479de4", + "job-tracker-ui/out/mockups/workspace.svg": "9bbab22349147c7b01d6e18c93c622a6f8aed6dedaf23715189ab54d60e1ddbd", + "job-tracker-ui/out/robots.txt": "e5ab0d231eeb01b4a982d1c79a6729cac9797ad15a69247e4f28ba6afc149b4c", + "job-tracker-ui/out/_next/static/chunks/0-_aq6ipzcshj.js": "39f90c215bf52aef6274ed3dcc0f8af32e21a37fe8845b3bca0d6ea60da6a8c2", + "job-tracker-ui/out/_next/static/chunks/02pclekj6sxrn.js": "8de8b7bb4d26955b3f334c338dc6c2cdef52b134b6be2396e9c5cf85c3657448", + "job-tracker-ui/out/_next/static/chunks/0469gyudlgy5b.js": "a3b3bd46632b3678b27b3ef29ef63c1ca38b36ec29bf751fb223c0e2a5cfb243", + "job-tracker-ui/out/_next/static/chunks/05rgc5zsm9p5i.js": "1da7305ab9d8e95795327cce11a16db4c56d90429d7e1dea4c4088c085f20d69", + "job-tracker-ui/out/_next/static/chunks/06uj_cr-l0wxa.js": "42bcafb6776a31f4ecf896c60d188bde349da352874b09cfa340f43890f7c2a8", + "job-tracker-ui/out/_next/static/chunks/0ah1fzqmie05a.js": "5c65505a7dcbac63ac71d254e619a4c800943bfb4fa16cd40c10cdbe7e9b6e31", + "job-tracker-ui/out/_next/static/chunks/0bdt7ln111t48.js": "6184b1a61f22e2a640c17941634fdc75678ce93d142848d9f07f163e0d1fd201", + "job-tracker-ui/out/_next/static/chunks/0cz1d0mv5g_q7.js": "0973c1d64c88adc8e3c950410cb58b288f72118d5965b78049438deb8f2f9683", + "job-tracker-ui/out/_next/static/chunks/0gamdsp7ql8cu.js": "f641cd9e2957f5c01234df02211a085f8e8fe2009cf84817e4143f3c477e1dc2", + "job-tracker-ui/out/_next/static/chunks/0jcvc3qm6-lyk.js": "7c27e1fe373b822adc68c63096a5bf38444ad605b9743f0920271652989c56f1", + "job-tracker-ui/out/_next/static/chunks/0og1crk78cn4a.js": "aa5031605cb2f46a612e94d9d71473f48a71aa4a5acfe8fe5f2dfc66d951ab40", + "job-tracker-ui/out/_next/static/chunks/0q20g9o8x-k8z.js": "3d4d9086985419aa8866b032158196c774acb8bf318f3c8245508c8daa9c5148", + "job-tracker-ui/out/_next/static/chunks/0qxm1h9uqfgpa.js": "a5af3192c76f3b8dac5c17afbe90d96a5c7652810ce69b7f39fbcf1f1231fd8c", + "job-tracker-ui/out/_next/static/chunks/0q_pwu9jxv4-d.js": "42a43b3d7245a413c7c29b4cbe87823037a6dbc637e2e282c92405470e0f575d", + "job-tracker-ui/out/_next/static/chunks/0xwbx2zs8qod6.js": "42959f315a234810f4e6b77f40f78e192c0926f329e447977c6d575344eec59c", + "job-tracker-ui/out/_next/static/chunks/1-8ykqf0n88k2.js": "eb208124ec838cb9a9ae366745bd81fba1c35eeceac128c567bbb7977ebb6a2e", + "job-tracker-ui/out/_next/static/chunks/1435in_k_-dhc.js": "4757476512d5c4dd25f9264a18b304ed4824b23aff1c09e134fcbff21d9c36b6", + "job-tracker-ui/out/_next/static/chunks/145oicobmjvm7.js": "d6bbbdeed1381652dc7412e5ce673a077579ecd5cee8934cb6b533c814098764", + "job-tracker-ui/out/_next/static/chunks/14e7ovj0s3elm.js": "070567dd4d23fb9fa0b9ba132185a697af6578045d43b2b1c7bbb2a1594d935d", + "job-tracker-ui/out/_next/static/chunks/16lfece6cnlln.js": "716363ba044f30b0e70440756b4e5eafa2d25f2e1628e855e3bc4ab9eabee3d3", + "job-tracker-ui/out/_next/static/chunks/1artropt-724g.js": "a3c10a972f1f1465f6c11f0ef34e8056945cae29a9dd04cbc830e1e9153c8db1", + "job-tracker-ui/out/_next/static/chunks/1bgarpoxnr3-g.js": "0567f19d903dbb891f6ba1dfbc6d73bca083634f42cdec4bf1532e010a61818f", + "job-tracker-ui/out/_next/static/chunks/1d0xrdyyzw7qc.js": "c11668ff1e152008e0d7b4454af12eb36c97df46a5860938e2eb5d8429b374a8", + "job-tracker-ui/out/_next/static/chunks/1fsplt8ynm23o.js": "0a82ec48984596cecc33ba70607e5e0b99819c6af0b0909db7fe8502db727269", + "job-tracker-ui/out/_next/static/chunks/1gizj1a2nyrkl.js": "e3e636761a666af64efae2e765ed48e2cd0552a5a07896276b0e3ddbce5d3b00", + "job-tracker-ui/out/_next/static/chunks/1ke8pzecwofrg.css": "32e9ab963ebadebcbe2c68dffb24cfbfc8cc24255ad91b48b7941fc777bf7439", + "job-tracker-ui/out/_next/static/chunks/1m4qrvmbq_fq9.js": "4d36c8ec83dc817f273178dc22f329ab026578075f58de68b6f133bcf911a8a1", + "job-tracker-ui/out/_next/static/chunks/1req80b9jj38r.js": "eee4d2e3789e1215195dba99ad0f09d34f8c83da848322b76054722233e9dae3", + "job-tracker-ui/out/_next/static/chunks/1xn023_28rgzj.js": "4f7f2108d030a48d039930736c92a55710975dddf419fe673f84d92899b1f575", + "job-tracker-ui/out/_next/static/chunks/1xwc-b795syag.css": "f73c002233f931ca14d0ae58815c47ca9f2659f25b1547a6d1fdca12a2a00b3f", + "job-tracker-ui/out/_next/static/chunks/22wx8--1b9tnq.js": "3f7d8e762371262c6a740b4dac21725b424847319afac46055e97074a99ff5f5", + "job-tracker-ui/out/_next/static/chunks/274f8aifi_wup.js": "bc5bc5617b4acbbbb1c7966322c508bb5554024d78e71e523e27f7f5bba5a8ab", + "job-tracker-ui/out/_next/static/chunks/2b49wlharl6fd.js": "40619f8a5a03fc7479b0679717b1e5ec0dea0a1944ce77f4ce9d29d2486fdb5c", + "job-tracker-ui/out/_next/static/chunks/2br3ad_-bc7k9.js": "80fa55f7a32db4d743fda36747c36994fde00a0f53f2eb25b2a6d07c6fb97cd7", + "job-tracker-ui/out/_next/static/chunks/2dmc6iqxm14fz.js": "3b20898e0cde315c48d6fd46abd562269bbf73c850528a4be2cfc2b9aa0c8f5e", + "job-tracker-ui/out/_next/static/chunks/2ghgf2s9b2iou.js": "23d8ff31e2128d0541c1887785fb75885323fea7c5d4f35826513b75c12c2ae3", + "job-tracker-ui/out/_next/static/chunks/2itnratrnd9c5.js": "8be0b191c2d54f7233ebf2f1e169b3bfef680fa93da21c08d8c43b05c3ec174f", + "job-tracker-ui/out/_next/static/chunks/2kpcazmi6n6mk.js": "bea0de681fceff50056bfeccc5d035aff54d20918288051cb64bb259edd250c7", + "job-tracker-ui/out/_next/static/chunks/2php_9zkhprrb.js": "4f91e63b1181693e7a3b269b1b24004d9abee13413b8396a916799b8c01620e8", + "job-tracker-ui/out/_next/static/chunks/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10", + "job-tracker-ui/out/_next/static/chunks/2ud29c_uda_ji.js": "a8aebc85235f1000afcdd9763722ee9aafd4fed6751bc19e3ee908118d920420", + "job-tracker-ui/out/_next/static/chunks/2z42el0b2mp8_.js": "86ff990ef32c90c4839583e4f1d1bcbddb165dad3141b9fcd2ecec67f4ff24b8", + "job-tracker-ui/out/_next/static/chunks/2z9e_b61gtc22.js": "b9d717dad26828438d4ff56cabca41a8055f5eaa54420fd0aeb6b4ba7d5baa0d", + "job-tracker-ui/out/_next/static/chunks/3-erj6o63cizm.js": "56b3ffeb0c3ea44cf5fa4f0cfd0efd327ff282423be7973c3616bed1bc45f8b1", + "job-tracker-ui/out/_next/static/chunks/30-q9iimktiql.js": "db89d5da1f101216d7f99e9518dc7f5ed84f8b40ac84a6ea55f73c01bf1aca1b", + "job-tracker-ui/out/_next/static/chunks/324qfub45abd6.js": "77ef8e17b89234fb19a80796d5d04d3e297c459e5cb41b35b5bc78c0b10b4984", + "job-tracker-ui/out/_next/static/chunks/357yqeklh7414.js": "0192ab7198ebbe299d34a934c504dd4b562d1cccebb6e9d4c5163930c881b14c", + "job-tracker-ui/out/_next/static/chunks/3bqn9b34na0b9.js": "f1b8ebcc1b22251c33c9f3a5d11c1f893cad2da2e8744a441e790f7347aa9e73", + "job-tracker-ui/out/_next/static/chunks/3ckk_j5ril9ag.js": "87f631dae7b648d32171e9e05a3e000753ecb54f8d3b86a4401c0e4ab4d73553", + "job-tracker-ui/out/_next/static/chunks/3eupzm2out6bo.js": "07ff8eb883381791bf067722b5ce6261f9528fc4ea2042960df412762b54b219", + "job-tracker-ui/out/_next/static/chunks/3gkylew_qn7cw.js": "7e6c74c81be0c41ab433e36d65b914f62c48f332922e27f7cc953476f4dd78cb", + "job-tracker-ui/out/_next/static/chunks/3la4obitihzpv.js": "9a5a57b46db389b98f1fd5baa86eba1a360300dae9d1ff3ffeae7bc3378135b9", + "job-tracker-ui/out/_next/static/chunks/3q4v10rrqy40n.js": "d87ff7b7a0f07d0d92eab3876481eb686a12d9c43d8b92cbe406aefa227a11c1", + "job-tracker-ui/out/_next/static/chunks/3u61o8t7m_jza.js": "86231c12e0f8cacc8638bed0bc4b34f645fc35e60de342dc154d3cce0c9a5afa", + "job-tracker-ui/out/_next/static/chunks/40y_aqqilokr2.js": "1f5a5260316134d6bffe949400752ee6b42addf908ae714ef4ae4ebde916dddd", + "job-tracker-ui/out/_next/static/chunks/43b5x8qjjh3ax.js": "6ee7261cf9a63e0e6ea181bbb09125e09948588b6e10b5c02727c686a6062a3a", + "job-tracker-ui/out/_next/static/chunks/turbopack-25fzg9ay_1ss-.js": "c40f39e993a30c96d6247bb3a7b581538bb046efe8ef8ec07bea3ba32291750f", + "job-tracker-ui/out/_next/static/O-iIPXpNeQ05QXWtgTbtM/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea", + "job-tracker-ui/out/_next/static/O-iIPXpNeQ05QXWtgTbtM/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a", + "job-tracker-ui/out/_next/static/O-iIPXpNeQ05QXWtgTbtM/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00", + "job-tracker-ui/out/_not-found/__next._full.txt": "1e439f0ac83e661015d605254edf8be7f0d40f9d8eb1d7ab71a7c22e03a3eb44", + "job-tracker-ui/out/_not-found/__next._not-found/__PAGE__.txt": "d59c94a9d2d63179446ee58454ab2547ab0919e2723fef8164f01a0f9a509afa", + "job-tracker-ui/out/_not-found/__next._tree.txt": "f6b40b2f3447743a0471dca8410040bf45cab1c8c0c2fa57ff7ad0a74ed5d36f", + "job-tracker-ui/out/_not-found.html": "72f5780ad3024cc7257960defa624bd15941c33bc90a67fdb16e2a3c7a9d4101", + "job-tracker-ui/out/_not-found.txt": "1e439f0ac83e661015d605254edf8be7f0d40f9d8eb1d7ab71a7c22e03a3eb44", + "job-tracker-ui/out/__next._full.txt": "84c5949667c5de886bea32a1c0a4fa80a2a5833db5920bc8ea2d6e893b4e1cc1", + "job-tracker-ui/out/__next._tree.txt": "70142649d7f01c8990d716d053be13422284ee155c5606edcdcbfa1606df3d3d", + "job-tracker-ui/out/__next.__PAGE__.txt": "86389ea2c7db3cc208c6fcc7c71c538a64d83cdcc62a4d5e2f60174b19f43f11" + } +} diff --git a/docs/ui-modernisation/visual-correction/DASHBOARD_DENSITY_RED.json b/docs/ui-modernisation/visual-correction/DASHBOARD_DENSITY_RED.json new file mode 100644 index 00000000..1e77ca2f --- /dev/null +++ b/docs/ui-modernisation/visual-correction/DASHBOARD_DENSITY_RED.json @@ -0,0 +1 @@ +{"numFailedTestSuites":1,"numFailedTests":1,"numPassedTestSuites":0,"numPassedTests":0,"numPendingTestSuites":1,"numPendingTests":16,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":2,"numTotalTests":17,"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":1793753724025,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"loads once, migrates only owner legacy flags, and cancels without writing","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726293,"status":"pending","title":"loads once, migrates only owner legacy flags, and cancels without writing"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"save waits for acknowledgement and retains draft on conflict until explicit reload","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726293,"status":"pending","title":"save waits for acknowledgement and retains draft on conflict until explicit reload"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed or future-version reads cannot enable editing or saves","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726293,"status":"pending","title":"failed or future-version reads cannot enable editing or saves"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"old save handlers and delayed reads cannot affect a new owner","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726293,"status":"pending","title":"old save handlers and delayed reads cannot affect a new owner"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pending save acknowledgement is ignored after identity changes","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726293,"status":"pending","title":"pending save acknowledgement is ignored after identity changes"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"does not import anonymous legacy flags or replace saved server choices","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726293,"status":"pending","title":"does not import anonymous legacy flags or replace saved server choices"}],"coverage":{},"endTime":1793753726614,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\hooks\\useDashboardLayout.test.tsx","startTime":1793753726614,"status":"skipped","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"legacy preferences migrate to bounded geometry while preserving order, visibility and revision","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726583,"status":"pending","title":"legacy preferences migrate to bounded geometry while preserving order, visibility and revision"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"schema two preserves chosen hidden geometry without resetting the owner revision","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726583,"status":"pending","title":"schema two preserves chosen hidden geometry without resetting the owner revision"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"default catalogue preserves every section and supported widths","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726583,"status":"pending","title":"default catalogue preserves every section and supported widths"},{"ancestorTitles":[],"duration":3,"failing":false,"failureDetails":[{"matcherResult":{"message":"expect(received).toBeLessThanOrEqual(expected)\n\nExpected: <= 42\nReceived: 54","pass":false}}],"failureMessages":["Error: expect(received).toBeLessThanOrEqual(expected)\n\nExpected: <= 42\nReceived: 54\n at Object.toBeLessThanOrEqual (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\dashboardLayout.test.ts:45:73)\n at Promise.finally.completed (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1561:28)\n at new Promise ()\n at callAsyncCircusFn (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1501:10)\n at _callCircusTest (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1011:40)\n at _runTest (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:951:3)\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:853:7\n at _runTestsForDescribeBlock (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:866:11)\n at run (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:765:3)\n at runAndTransformResultsToJestFormat (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1993:21)\n at jestAdapter (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\runner.js:111:19)\n at runTestInternal (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-runner\\build\\index.js:276:16)\n at runTest (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-runner\\build\\index.js:344:7)"],"fullName":"initial dashboard keeps every widget in a denser bounded layout without resizing saved geometry","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753726583,"status":"failed","title":"initial dashboard keeps every widget in a denser bounded layout without resizing saved geometry"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"new schema 1 preferences use task-first A1 defaults without omitting widgets","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726596,"status":"pending","title":"new schema 1 preferences use task-first A1 defaults without omitting widgets"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"new schema 2 preferences use task-first A1 defaults without omitting widgets","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726596,"status":"pending","title":"new schema 2 preferences use task-first A1 defaults without omitting widgets"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saved layouts retain known order, reject duplicates and append missing sections hidden","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726596,"status":"pending","title":"saved layouts retain known order, reject duplicates and append missing sections hidden"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid input has safe defaults: null","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726596,"status":"pending","title":"invalid input has safe defaults: null"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid input has safe defaults: {}","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726596,"status":"pending","title":"invalid input has safe defaults: {}"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid input has safe defaults: {\"version\":3,\"revision\":8,\"widgets\":[]}","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726596,"status":"pending","title":"invalid input has safe defaults: {\"version\":3,\"revision\":8,\"widgets\":[]}"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid input has safe defaults: {\"version\":1,\"revision\":-1,\"widgets\":[]}","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793753726596,"status":"pending","title":"invalid input has safe defaults: {\"version\":1,\"revision\":-1,\"widgets\":[]}"}],"endTime":1793753726607,"message":" ● initial dashboard keeps every widget in a denser bounded layout without resizing saved geometry\n\n expect(received).toBeLessThanOrEqual(expected)\n\n Expected: <= 42\n Received: 54\n\n 43 | expect(fresh.widgets).toHaveLength(10);\n 44 | expect(fresh.widgets.every(widget => widget.visible)).toBe(true);\n > 45 | expect(Math.max(...fresh.widgets.map(widget => widget.y + widget.h))).toBeLessThanOrEqual(42);\n | ^\n 46 | const saved = { version: 2, revision: 4, widgets: [\n 47 | { id: 'sources', visible: true, size: 'standard', x: 0, y: 14, w: 6, h: 8 },\n 48 | { id: 'salary', visible: false, size: 'full', x: 0, y: 26, w: 12, h: 12 },\n\n at Object.toBeLessThanOrEqual (src/dashboardLayout.test.ts:45:73)\n","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\dashboardLayout.test.ts","startTime":1793753726306,"status":"failed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/visual-correction/DASHBOARD_DENSITY_TESTS.json b/docs/ui-modernisation/visual-correction/DASHBOARD_DENSITY_TESTS.json new file mode 100644 index 00000000..900058ff --- /dev/null +++ b/docs/ui-modernisation/visual-correction/DASHBOARD_DENSITY_TESTS.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":6,"numPassedTests":63,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":6,"numTotalTests":63,"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":1793753751902,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":4,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"legacy preferences migrate to bounded geometry while preserving order, visibility and revision","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793753754064,"status":"passed","title":"legacy preferences migrate to bounded geometry while preserving order, visibility and revision"},{"ancestorTitles":[],"duration":0,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"schema two preserves chosen hidden geometry without resetting the owner revision","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793753754069,"status":"passed","title":"schema two preserves chosen hidden geometry without resetting the owner revision"},{"ancestorTitles":[],"duration":1,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"default catalogue preserves every section and supported widths","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793753754069,"status":"passed","title":"default catalogue preserves every section and supported widths"},{"ancestorTitles":[],"duration":1,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"initial dashboard keeps every widget in a denser bounded layout without resizing saved geometry","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753754070,"status":"passed","title":"initial dashboard keeps every widget in a denser bounded layout without resizing saved geometry"},{"ancestorTitles":[],"duration":0,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"new schema 1 preferences use task-first A1 defaults without omitting widgets","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753754071,"status":"passed","title":"new schema 1 preferences use task-first A1 defaults without omitting widgets"},{"ancestorTitles":[],"duration":0,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"new schema 2 preferences use task-first A1 defaults without omitting widgets","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753754071,"status":"passed","title":"new schema 2 preferences use task-first A1 defaults without omitting widgets"},{"ancestorTitles":[],"duration":0,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saved layouts retain known order, reject duplicates and append missing sections hidden","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753754072,"status":"passed","title":"saved layouts retain known order, reject duplicates and append missing sections hidden"},{"ancestorTitles":[],"duration":0,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid input has safe defaults: null","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793753754072,"status":"passed","title":"invalid input has safe defaults: null"},{"ancestorTitles":[],"duration":0,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid input has safe defaults: {}","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793753754073,"status":"passed","title":"invalid input has safe defaults: {}"},{"ancestorTitles":[],"duration":0,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid input has safe defaults: {\"version\":3,\"revision\":8,\"widgets\":[]}","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793753754073,"status":"passed","title":"invalid input has safe defaults: {\"version\":3,\"revision\":8,\"widgets\":[]}"},{"ancestorTitles":[],"duration":1,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid input has safe defaults: {\"version\":1,\"revision\":-1,\"widgets\":[]}","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793753754073,"status":"passed","title":"invalid input has safe defaults: {\"version\":1,\"revision\":-1,\"widgets\":[]}"}],"endTime":1793753754074,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\dashboardLayout.test.ts","startTime":1793753752813,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":1007,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"visibility is a preview; cancel restores the saved layout without a write","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793753755635,"status":"passed","title":"visibility is a preview; cancel restores the saved layout without a write"},{"ancestorTitles":[],"duration":961,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed save keeps the draft and retry persists visibility, order and size","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753756643,"status":"passed","title":"failed save keeps the draft and retry persists visibility, order and size"},{"ancestorTitles":[],"duration":1042,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"all hidden widgets leave an accessible recovery and reset remains cancellable","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753757604,"status":"passed","title":"all hidden widgets leave an accessible recovery and reset remains cancellable"},{"ancestorTitles":[],"duration":761,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keyboard ordering keeps focus and announces the resulting position without refetching reports","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753758646,"status":"passed","title":"keyboard ordering keeps focus and announces the resulting position without refetching reports"},{"ancestorTitles":[],"duration":968,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"dirty route navigation uses the existing confirmation and can stay on the dashboard","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753759407,"status":"passed","title":"dirty route navigation uses the existing confirmation and can stay on the dashboard"},{"ancestorTitles":[],"duration":822,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"navigation waits for an in-flight save instead of promising to discard a possible commit","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793753760375,"status":"passed","title":"navigation waits for an in-flight save instead of promising to discard a possible commit"}],"endTime":1793753761198,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\dashboard-customisation.test.tsx","startTime":1793753754085,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":172,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"A1 week glance shows recorded upcoming dates from attention data without inventing missing dates","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753762048,"status":"passed","title":"A1 week glance shows recorded upcoming dates from attention data without inventing missing dates"},{"ancestorTitles":[],"duration":173,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01] exact monthly values, sample, custom statuses and separate salary group remain readable","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753762220,"status":"passed","title":"[PRES-S01] exact monthly values, sample, custom statuses and separate salary group remain readable"},{"ancestorTitles":[],"duration":829,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S02] all widget visibility choices save and survive remount","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793753762393,"status":"passed","title":"[PRES-S02] all widget visibility choices save and survive remount"},{"ancestorTitles":[],"duration":249,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01] a trends failure retains summary and retries without showing a false zero response rate","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753763222,"status":"passed","title":"[PRES-S01] a trends failure retains summary and retries without showing a false zero response rate"},{"ancestorTitles":[],"duration":93,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01] a summary failure does not suppress independent trends","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753763471,"status":"passed","title":"[PRES-S01] a summary failure does not suppress independent trends"},{"ancestorTitles":[],"duration":246,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-J05 J09 S01] raw status and company destinations use supported exact query fields","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753763564,"status":"passed","title":"[PRES-J05 J09 S01] raw status and company destinations use supported exact query fields"},{"ancestorTitles":[],"duration":179,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01 S02] period changes only reload trends and retain current snapshot meaning","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753763811,"status":"passed","title":"[PRES-S01 S02] period changes only reload trends and retain current snapshot meaning"},{"ancestorTitles":[],"duration":49,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01] zero activity is an explicit window-empty state without a fabricated response percentage","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753763990,"status":"passed","title":"[PRES-S01] zero activity is an explicit window-empty state without a fabricated response percentage"},{"ancestorTitles":[],"duration":68,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S01] activity chart uses one shared zero-based scale and a readable legend","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753764039,"status":"passed","title":"[PRES-S01] activity chart uses one shared zero-based scale and a readable legend"},{"ancestorTitles":[],"duration":213,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-02 PRES-S01 S02] setup guidance treats pending and failed summaries as unknown until their owner retries","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753764107,"status":"passed","title":"[P7-02 PRES-S01 S02] setup guidance treats pending and failed summaries as unknown until their owner retries"}],"endTime":1793753764321,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\dashboard-presentation.test.tsx","startTime":1793753761208,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":111,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a dismissed optional checklist resumes without losing source-backed progress","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793753765139,"status":"passed","title":"a dismissed optional checklist resumes without losing source-backed progress"},{"ancestorTitles":[],"duration":117,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"individual skips persist for their owner but do not count as completed data","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793753765251,"status":"passed","title":"individual skips persist for their owner but do not count as completed data"},{"ancestorTitles":[],"duration":80,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"on-demand walkthrough changes guidance and focus without changing completion or connecting providers","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793753765369,"status":"passed","title":"on-demand walkthrough changes guidance and focus without changing completion or connecting providers"},{"ancestorTitles":[],"duration":49,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses structured career data and connected inbox status for four source-backed onboarding steps","invocations":1,"location":null,"numPassingAsserts":15,"retryReasons":[],"startAt":1793753765449,"status":"passed","title":"uses structured career data and connected inbox status for four source-backed onboarding steps"},{"ancestorTitles":[],"duration":33,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a stored /microsoft-graph/status connection counts without connecting or syncing","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753765498,"status":"passed","title":"a stored /microsoft-graph/status connection counts without connecting or syncing"},{"ancestorTitles":[],"duration":31,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a stored /imap/status connection counts without connecting or syncing","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753765531,"status":"passed","title":"a stored /imap/status connection counts without connecting or syncing"},{"ancestorTitles":[],"duration":33,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"manual skills preserves the existing career-content criterion without claiming a CV import","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753765562,"status":"passed","title":"manual skills preserves the existing career-content criterion without claiming a CV import"},{"ancestorTitles":[],"duration":46,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"raw career text preserves the existing career-content criterion without claiming a CV import","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753765595,"status":"passed","title":"raw career text preserves the existing career-content criterion without claiming a CV import"},{"ancestorTitles":[],"duration":32,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"contact only preserves the existing career-content criterion without claiming a CV import","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753765641,"status":"passed","title":"contact only preserves the existing career-content criterion without claiming a CV import"},{"ancestorTitles":[],"duration":30,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"career names and account email alone do not count as account identity details","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753765673,"status":"passed","title":"career names and account email alone do not count as account identity details"},{"ancestorTitles":[],"duration":66,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"unknown job summary has indeterminate progress, then responds to known jobs without refetching sources","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793753765703,"status":"passed","title":"unknown job summary has indeterminate progress, then responds to known jobs without refetching sources"},{"ancestorTitles":[],"duration":10,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"all four recorded steps hide the optional checklist after the sources settle","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753765769,"status":"passed","title":"all four recorded steps hide the optional checklist after the sources settle"},{"ancestorTitles":[],"duration":65,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed /auth/me status stays unknown and retries only the same source reads","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793753765779,"status":"passed","title":"failed /auth/me status stays unknown and retries only the same source reads"},{"ancestorTitles":[],"duration":61,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed /career/profile status stays unknown and retries only the same source reads","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793753765844,"status":"passed","title":"failed /career/profile status stays unknown and retries only the same source reads"},{"ancestorTitles":[],"duration":78,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed /gmail/status status stays unknown and retries only the same source reads","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793753765905,"status":"passed","title":"failed /gmail/status status stays unknown and retries only the same source reads"},{"ancestorTitles":[],"duration":60,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed /microsoft-graph/status status stays unknown and retries only the same source reads","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793753765983,"status":"passed","title":"failed /microsoft-graph/status status stays unknown and retries only the same source reads"},{"ancestorTitles":[],"duration":77,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed /imap/status status stays unknown and retries only the same source reads","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793753766043,"status":"passed","title":"failed /imap/status status stays unknown and retries only the same source reads"},{"ancestorTitles":[],"duration":45,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"onboardingStepProfileAction keeps its source-owned destination","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753766120,"status":"passed","title":"onboardingStepProfileAction keeps its source-owned destination"},{"ancestorTitles":[],"duration":46,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"onboardingStepCvAction keeps its source-owned destination","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753766165,"status":"passed","title":"onboardingStepCvAction keeps its source-owned destination"},{"ancestorTitles":[],"duration":47,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"onboardingStepEmailAction keeps its source-owned destination","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753766211,"status":"passed","title":"onboardingStepEmailAction keeps its source-owned destination"},{"ancestorTitles":[],"duration":46,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"onboardingStepJobAction keeps its source-owned destination","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753766258,"status":"passed","title":"onboardingStepJobAction keeps its source-owned destination"},{"ancestorTitles":[],"duration":7,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a legacy owner dismissal skips all reads on mount","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753766304,"status":"passed","title":"a legacy owner dismissal skips all reads on mount"},{"ancestorTitles":[],"duration":86,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"dismissal survives reload for its owner and stays separate from another owner's checklist and Dashboard flags","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793753766311,"status":"passed","title":"dismissal survives reload for its owner and stays separate from another owner's checklist and Dashboard flags"},{"ancestorTitles":[],"duration":37,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"unavailable dismissal storage still permits setup and an in-memory dismissal","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753766397,"status":"passed","title":"unavailable dismissal storage still permits setup and an in-memory dismissal"},{"ancestorTitles":[],"duration":17,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"loading is announced without guessed progress and dismissal prevents late failure from reopening the checklist","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793753766434,"status":"passed","title":"loading is announced without guessed progress and dismissal prevents late failure from reopening the checklist"},{"ancestorTitles":[],"duration":23,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål guidance keeps semantic list and progress names without additional source reads","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793753766451,"status":"passed","title":"Bokmål guidance keeps semantic list and progress names without additional source reads"}],"endTime":1793753766474,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\onboarding-checklist.test.tsx","startTime":1793753764329,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":121,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"library collision handling resolves resize overlaps but leaves deliberate gaps unchanged","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753767172,"status":"passed","title":"library collision handling resolves resize overlaps but leaves deliberate gaps unchanged"},{"ancestorTitles":[],"duration":91,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"mount and compaction do not save; completed resize keeps hidden geometry and uses the draft owner revision","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753767293,"status":"passed","title":"mount and compaction do not save; completed resize keeps hidden geometry and uses the draft owner revision"},{"ancestorTitles":[],"duration":279,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"narrow viewport retains desktop geometry and keyboard height changes are bounded","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753767384,"status":"passed","title":"narrow viewport retains desktop geometry and keyboard height changes are bounded"},{"ancestorTitles":[],"duration":92,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"conflict disables pointer operations and ignores a late completion callback","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753767663,"status":"passed","title":"conflict disables pointer operations and ignores a late completion callback"}],"endTime":1793753767755,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\components\\DashboardGrid.test.tsx","startTime":1793753766482,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":74,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"loads once, migrates only owner legacy flags, and cancels without writing","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753768003,"status":"passed","title":"loads once, migrates only owner legacy flags, and cancels without writing"},{"ancestorTitles":[],"duration":77,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"save waits for acknowledgement and retains draft on conflict until explicit reload","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793753768078,"status":"passed","title":"save waits for acknowledgement and retains draft on conflict until explicit reload"},{"ancestorTitles":[],"duration":76,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed or future-version reads cannot enable editing or saves","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793753768155,"status":"passed","title":"failed or future-version reads cannot enable editing or saves"},{"ancestorTitles":[],"duration":153,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"old save handlers and delayed reads cannot affect a new owner","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753768231,"status":"passed","title":"old save handlers and delayed reads cannot affect a new owner"},{"ancestorTitles":[],"duration":155,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pending save acknowledgement is ignored after identity changes","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753768384,"status":"passed","title":"pending save acknowledgement is ignored after identity changes"},{"ancestorTitles":[],"duration":79,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"does not import anonymous legacy flags or replace saved server choices","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753768539,"status":"passed","title":"does not import anonymous legacy flags or replace saved server choices"}],"endTime":1793753768618,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\hooks\\useDashboardLayout.test.tsx","startTime":1793753767764,"status":"passed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/visual-correction/DASHBOARD_DISCOVERY.md b/docs/ui-modernisation/visual-correction/DASHBOARD_DISCOVERY.md new file mode 100644 index 00000000..80a01b37 --- /dev/null +++ b/docs/ui-modernisation/visual-correction/DASHBOARD_DISCOVERY.md @@ -0,0 +1,11 @@ +# Dashboard defaults and discovery density + +4 November 2026. Public-language receipt09904ecc is published and independently remotely verified. New visual correction is within approved IM10, not a new design concept or final acceptance. + +Dashboard: current36-configuration baseline passed72 scans/captures and36 fixture layout-save/reload/onboarding journeys on runtimefa6bd5d9. Real desktop captures show excessive unused widget space compared with approved A3. Only the initial defaults for stage-age, source, salary, company and skill widgets change from8 rows to4. Initial total height reduces from54 to42 grid rows. All10 widgets remain visible. Saved geometry, explicit hidden widgets, order, revision, deliberate gaps and existing collision/drag/resize/keyboard controls are unchanged. Sparse new widgets retain content scrolling on wide screens; mobile remains flowing content. This is a default-density improvement, not complete dashboard visual parity. + +Discovery: the pre-change320px pilot passed three scans and the existing saved-search journey but visibly nests the saved-search collection around saved-search objects and frames each vacancy. Remove only the collection border/padding and make vacancies open divided rows. Saved-search object outlines, source attribution, dates, rights/geography semantics, filters, saved-search actions and result actions remain. Result overflow remains visible to preserve keyboard outlines. Phone screenshots use actual viewports so fixed mobile navigation is not misleadingly composited midway through tall full-page captures. Preserve the old pilot separately; it is not a full baseline matrix. + +PASSED before build:63 dashboard/layout/grid/hook/onboarding tests in six suites plus38 discovery/offer tests in two disjoint suites (101 distinct); TypeScript, full lint and verifier syntax checks. The six offer date regressions are included in38, not additive to it. RED density case measured54 rows against the42-row bound; saved visible/hidden geometry regression remains in the green suite. + +Pending: settled export build, affected rendered offer dates (EN/NB in three timezone contexts), dashboard and discovery pilots and36-configuration matrices, manual comparisons and source-bound receipt/publication. Prior public504-state evidence does not qualify these new source changes. Full34-route/57-group, connected workflows, native/device/human and final security/release/owner visual acceptance stay OPEN. diff --git a/docs/ui-modernisation/visual-correction/DISCOVERY_OFFER_TESTS.json b/docs/ui-modernisation/visual-correction/DISCOVERY_OFFER_TESTS.json new file mode 100644 index 00000000..bab75e41 --- /dev/null +++ b/docs/ui-modernisation/visual-correction/DISCOVERY_OFFER_TESTS.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":2,"numPassedTests":38,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":2,"numTotalTests":38,"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":1793753813485,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":192,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps en filters before results with keyboard jump/return and no automatic provider search","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753817022,"status":"passed","title":"keeps en filters before results with keyboard jump/return and no automatic provider search"},{"ancestorTitles":[],"duration":74,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps nb filters before results with keyboard jump/return and no automatic provider search","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753817214,"status":"passed","title":"keeps nb filters before results with keyboard jump/return and no automatic provider search"},{"ancestorTitles":[],"duration":156,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows honest source metadata and offers the existing reviewed save flow","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793753817288,"status":"passed","title":"shows honest source metadata and offers the existing reviewed save flow"},{"ancestorTitles":[],"duration":85,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"distinguishes the initial guidance from a completed empty search","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753817444,"status":"passed","title":"distinguishes the initial guidance from a completed empty search"},{"ancestorTitles":[],"duration":180,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"retries the last submitted search after an error","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753817529,"status":"passed","title":"retries the last submitted search after an error"},{"ancestorTitles":[],"duration":172,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"sorts returned vacancies by title","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793753817709,"status":"passed","title":"sorts returned vacancies by title"},{"ancestorTitles":[],"duration":79,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"renders the discovery workflow in Norwegian Bokmål","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793753817881,"status":"passed","title":"renders the discovery workflow in Norwegian Bokmål"},{"ancestorTitles":[],"duration":247,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"runs a saved search, marks unseen vacancies, and dismisses them","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793753817960,"status":"passed","title":"runs a saved search, marks unseen vacancies, and dismisses them"},{"ancestorTitles":[],"duration":125,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"lets the user pause automatic alerts for a saved search","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753818207,"status":"passed","title":"lets the user pause automatic alerts for a saved search"},{"ancestorTitles":[],"duration":51,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"announces saved-search loading without presenting a successful empty list","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793753818332,"status":"passed","title":"announces saved-search loading without presenting a successful empty list"},{"ancestorTitles":[],"duration":312,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"reports saved-search failure and retries that read without replacing active discovery filters or results","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793753818383,"status":"passed","title":"reports saved-search failure and retries that read without replacing active discovery filters or results"},{"ancestorTitles":[],"duration":52,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"rejects malformed saved-search payload null as a failed read rather than an empty list","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753818695,"status":"passed","title":"rejects malformed saved-search payload null as a failed read rather than an empty list"},{"ancestorTitles":[],"duration":63,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"rejects malformed saved-search payload {\"message\":\"not a list\"} as a failed read rather than an empty list","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753818747,"status":"passed","title":"rejects malformed saved-search payload {\"message\":\"not a list\"} as a failed read rather than an empty list"},{"ancestorTitles":[],"duration":47,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"rejects malformed saved-search payload [{\"id\":7}] as a failed read rather than an empty list","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793753818810,"status":"passed","title":"rejects malformed saved-search payload [{\"id\":7}] as a failed read rather than an empty list"},{"ancestorTitles":[],"duration":191,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a manual search after saved-search results has no dismiss action belonging to the saved search","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793753818857,"status":"passed","title":"a manual search after saved-search results has no dismiss action belonging to the saved search"},{"ancestorTitles":[],"duration":274,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"starting saved search B hides saved search A's results and actions while the B response is held","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793753819048,"status":"passed","title":"starting saved search B hides saved search A's results and actions while the B response is held"},{"ancestorTitles":[],"duration":297,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"retrying a failed saved-search run repeats that saved ID instead of running a manual query","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793753819322,"status":"passed","title":"retrying a failed saved-search run repeats that saved ID instead of running a manual query"},{"ancestorTitles":[],"duration":196,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed saved-search creation retains its draft and recovers only through the save action","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793753819620,"status":"passed","title":"failed saved-search creation retains its draft and recovers only through the save action"},{"ancestorTitles":[],"duration":101,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed alert toggle retains its checked state and recovers through that same toggle without manual search retry","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793753819816,"status":"passed","title":"a failed alert toggle retains its checked state and recovers through that same toggle without manual search retry"},{"ancestorTitles":[],"duration":393,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed saved-search deletion preserves the search and requires another explicit confirmation to recover","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793753819917,"status":"passed","title":"failed saved-search deletion preserves the search and requires another explicit confirmation to recover"},{"ancestorTitles":[],"duration":309,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed dismissal retains the vacancy and recovers only through that same result's dismiss action","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793753820310,"status":"passed","title":"failed dismissal retains the vacancy and recovers only through that same result's dismiss action"},{"ancestorTitles":[],"duration":140,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a held saved-search creation locks its request snapshot and prevents a second start while preserving a failed draft","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793753820619,"status":"passed","title":"a held saved-search creation locks its request snapshot and prevents a second start while preserving a failed draft"},{"ancestorTitles":[],"duration":182,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a saved-run failure follows the current language without refetching or replaying the request","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793753820759,"status":"passed","title":"a saved-run failure follows the current language without refetching or replaying the request"}],"endTime":1793753820943,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\job-discovery.test.tsx","startTime":1793753814448,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":60,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"compares recorded offer facts without filling missing values","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793753821670,"status":"passed","title":"compares recorded offer facts without filling missing values"},{"ancestorTitles":[],"duration":34,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows an honest empty state when there are no offers","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793753821730,"status":"passed","title":"shows an honest empty state when there are no offers"},{"ancestorTitles":[],"duration":258,"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":1793753821764,"status":"passed","title":"shows the first 25 of the real total in server application-date order without inventing the remaining offers"},{"ancestorTitles":[],"duration":46,"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":1793753822022,"status":"passed","title":"opens the full recorded offer source with the same supported filter and ordering"},{"ancestorTitles":[],"duration":54,"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":1793753822068,"status":"passed","title":"distinguishes held and failed reads from empty results and recovers through one explicit identical retry"},{"ancestorTitles":[],"duration":43,"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":1793753822122,"status":"passed","title":"a live locale change translates loaded offer chrome and preserves recorded facts without another GET"},{"ancestorTitles":[],"duration":64,"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":1793753822165,"status":"passed","title":"an existing read failure translates without refetching and Retry retains the same query"},{"ancestorTitles":[],"duration":157,"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":1793753822229,"status":"passed","title":"structured salaries follow UI locale rather than host locale while preserving zero, bounds, currency, unknown periods and free text"},{"ancestorTitles":[],"duration":60,"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":1793753822386,"status":"passed","title":"uses recorded applied/deadline/contact dates, keeps absent applied dates unknown, and opens the exact current application"},{"ancestorTitles":[],"duration":33,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps a literal calendar date while timestamps retain local semantics: en/America/Los_Angeles","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753822446,"status":"passed","title":"keeps a literal calendar date while timestamps retain local semantics: en/America/Los_Angeles"},{"ancestorTitles":[],"duration":25,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps a literal calendar date while timestamps retain local semantics: nb/America/Los_Angeles","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753822479,"status":"passed","title":"keeps a literal calendar date while timestamps retain local semantics: nb/America/Los_Angeles"},{"ancestorTitles":[],"duration":31,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps a literal calendar date while timestamps retain local semantics: en/Europe/Oslo","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753822504,"status":"passed","title":"keeps a literal calendar date while timestamps retain local semantics: en/Europe/Oslo"},{"ancestorTitles":[],"duration":34,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps a literal calendar date while timestamps retain local semantics: nb/Europe/Oslo","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753822535,"status":"passed","title":"keeps a literal calendar date while timestamps retain local semantics: nb/Europe/Oslo"},{"ancestorTitles":[],"duration":32,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps a literal calendar date while timestamps retain local semantics: en/Pacific/Kiritimati","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753822569,"status":"passed","title":"keeps a literal calendar date while timestamps retain local semantics: en/Pacific/Kiritimati"},{"ancestorTitles":[],"duration":29,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps a literal calendar date while timestamps retain local semantics: nb/Pacific/Kiritimati","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793753822601,"status":"passed","title":"keeps a literal calendar date while timestamps retain local semantics: nb/Pacific/Kiritimati"}],"endTime":1793753822631,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\offer-comparison.test.tsx","startTime":1793753820955,"status":"passed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/BROWSER.json b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/BROWSER.json new file mode 100644 index 00000000..8858b03c --- /dev/null +++ b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/BROWSER.json @@ -0,0 +1,1132 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 360, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 360, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 360, + "language": "en", + "mode": "dark", + "violations": [] + }, + { + "width": 360, + "language": "en", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 360, + "language": "nb", + "mode": "light", + "violations": [] + }, + { + "width": 360, + "language": "nb", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 360, + "language": "nb", + "mode": "dark", + "violations": [] + }, + { + "width": 360, + "language": "nb", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 430, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 430, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 430, + "language": "en", + "mode": "dark", + "violations": [] + }, + { + "width": 430, + "language": "en", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 430, + "language": "nb", + "mode": "light", + "violations": [] + }, + { + "width": 430, + "language": "nb", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 430, + "language": "nb", + "mode": "dark", + "violations": [] + }, + { + "width": 430, + "language": "nb", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1024, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 1024, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1024, + "language": "en", + "mode": "dark", + "violations": [] + }, + { + "width": 1024, + "language": "en", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1024, + "language": "nb", + "mode": "light", + "violations": [] + }, + { + "width": 1024, + "language": "nb", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1024, + "language": "nb", + "mode": "dark", + "violations": [] + }, + { + "width": 1024, + "language": "nb", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1280, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 1280, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1280, + "language": "en", + "mode": "dark", + "violations": [] + }, + { + "width": 1280, + "language": "en", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1280, + "language": "nb", + "mode": "light", + "violations": [] + }, + { + "width": 1280, + "language": "nb", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1280, + "language": "nb", + "mode": "dark", + "violations": [] + }, + { + "width": 1280, + "language": "nb", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1920, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 1920, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1920, + "language": "en", + "mode": "dark", + "violations": [] + }, + { + "width": 1920, + "language": "en", + "mode": "dark", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1920, + "language": "nb", + "mode": "light", + "violations": [] + }, + { + "width": 1920, + "language": "nb", + "mode": "light", + "state": "walkthrough", + "violations": [] + }, + { + "width": 1920, + "language": "nb", + "mode": "dark", + "violations": [] + }, + { + "width": 1920, + "language": "nb", + "mode": "dark", + "state": "walkthrough", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 360, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 360, + "language": "en", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 360, + "language": "nb", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 360, + "language": "nb", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 430, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 430, + "language": "en", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 430, + "language": "nb", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 430, + "language": "nb", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1024, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1024, + "language": "en", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1024, + "language": "nb", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1024, + "language": "nb", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1280, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1280, + "language": "en", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1280, + "language": "nb", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1280, + "language": "nb", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1920, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1920, + "language": "en", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1920, + "language": "nb", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + }, + { + "width": 1920, + "language": "nb", + "mode": "dark", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + } + ], + "errors": [], + "unexpectedWrites": [], + "mockedWrites": [ + { + "width": 320, + "language": "en", + "mode": "light", + "revision": 1 + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "revision": 1 + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "revision": 1 + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "revision": 1 + }, + { + "width": 360, + "language": "en", + "mode": "light", + "revision": 1 + }, + { + "width": 360, + "language": "en", + "mode": "dark", + "revision": 1 + }, + { + "width": 360, + "language": "nb", + "mode": "light", + "revision": 1 + }, + { + "width": 360, + "language": "nb", + "mode": "dark", + "revision": 1 + }, + { + "width": 390, + "language": "en", + "mode": "light", + "revision": 1 + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "revision": 1 + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "revision": 1 + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "revision": 1 + }, + { + "width": 430, + "language": "en", + "mode": "light", + "revision": 1 + }, + { + "width": 430, + "language": "en", + "mode": "dark", + "revision": 1 + }, + { + "width": 430, + "language": "nb", + "mode": "light", + "revision": 1 + }, + { + "width": 430, + "language": "nb", + "mode": "dark", + "revision": 1 + }, + { + "width": 768, + "language": "en", + "mode": "light", + "revision": 1 + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "revision": 1 + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "revision": 1 + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "revision": 1 + }, + { + "width": 1024, + "language": "en", + "mode": "light", + "revision": 1 + }, + { + "width": 1024, + "language": "en", + "mode": "dark", + "revision": 1 + }, + { + "width": 1024, + "language": "nb", + "mode": "light", + "revision": 1 + }, + { + "width": 1024, + "language": "nb", + "mode": "dark", + "revision": 1 + }, + { + "width": 1280, + "language": "en", + "mode": "light", + "revision": 1 + }, + { + "width": 1280, + "language": "en", + "mode": "dark", + "revision": 1 + }, + { + "width": 1280, + "language": "nb", + "mode": "light", + "revision": 1 + }, + { + "width": 1280, + "language": "nb", + "mode": "dark", + "revision": 1 + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "revision": 1 + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "revision": 1 + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "revision": 1 + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "revision": 1 + }, + { + "width": 1920, + "language": "en", + "mode": "light", + "revision": 1 + }, + { + "width": 1920, + "language": "en", + "mode": "dark", + "revision": 1 + }, + { + "width": 1920, + "language": "nb", + "mode": "light", + "revision": 1 + }, + { + "width": 1920, + "language": "nb", + "mode": "dark", + "revision": 1 + } + ], + "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", + "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": [ + "synthetic API fixtures, not real backend end-to-end", + "no native device/screen reader/model/provider/security/release qualification" + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/PILOT.json b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/PILOT.json new file mode 100644 index 00000000..cf909c94 --- /dev/null +++ b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/PILOT.json @@ -0,0 +1,47 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "walkthrough", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "skipResumeDismissWalkthrough": "PASS", + "noGuidanceWrites": "PASS", + "explicitLayoutSaveReload": "PASS" + } + ], + "errors": [], + "unexpectedWrites": [], + "mockedWrites": [ + { + "width": 320, + "language": "en", + "mode": "light", + "revision": 1 + } + ], + "blockedExternal": [ + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com" + ], + "limits": [ + "synthetic API fixtures, not real backend end-to-end", + "no native device/screen reader/model/provider/security/release qualification" + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1024.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1024.png new file mode 100644 index 00000000..64f9d9b1 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1024.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1280.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1280.png new file mode 100644 index 00000000..0b7a1694 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1280.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1440.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1440.png new file mode 100644 index 00000000..e91d3cc0 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1440.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1920.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1920.png new file mode 100644 index 00000000..257a091c Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-1920.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-320.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-320.png new file mode 100644 index 00000000..4d894898 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-360.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-360.png new file mode 100644 index 00000000..97be87a4 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-360.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-390.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-390.png new file mode 100644 index 00000000..f46423f7 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-390.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-430.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-430.png new file mode 100644 index 00000000..eda46041 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-430.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-768.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-768.png new file mode 100644 index 00000000..d0ebb318 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-dark-768.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1024.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1024.png new file mode 100644 index 00000000..77cc9a0c Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1024.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1280.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1280.png new file mode 100644 index 00000000..4185a7df Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1280.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1440.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1440.png new file mode 100644 index 00000000..8469a337 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1440.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1920.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1920.png new file mode 100644 index 00000000..8fbc5e06 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-1920.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-320.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-320.png new file mode 100644 index 00000000..e9254dfb Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-360.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-360.png new file mode 100644 index 00000000..b772c784 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-360.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-390.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-390.png new file mode 100644 index 00000000..448b7f4b Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-390.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-430.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-430.png new file mode 100644 index 00000000..ae19c7c1 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-430.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-768.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-768.png new file mode 100644 index 00000000..ccada904 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-en-light-768.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1024.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1024.png new file mode 100644 index 00000000..bd6b1916 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1024.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1280.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1280.png new file mode 100644 index 00000000..16528425 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1280.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1440.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1440.png new file mode 100644 index 00000000..cc9241b7 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1920.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1920.png new file mode 100644 index 00000000..ebad4b26 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-1920.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-320.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-320.png new file mode 100644 index 00000000..c156c8a2 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-360.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-360.png new file mode 100644 index 00000000..099d420d Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-360.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-390.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-390.png new file mode 100644 index 00000000..ea2a8236 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-390.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-430.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-430.png new file mode 100644 index 00000000..a106d660 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-430.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-768.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-768.png new file mode 100644 index 00000000..0afae278 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-dark-768.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1024.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1024.png new file mode 100644 index 00000000..c96454c2 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1024.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1280.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1280.png new file mode 100644 index 00000000..03361fb6 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1280.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1440.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1440.png new file mode 100644 index 00000000..e7e82cf9 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1440.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1920.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1920.png new file mode 100644 index 00000000..8853d226 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-1920.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-320.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-320.png new file mode 100644 index 00000000..902c5c18 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-360.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-360.png new file mode 100644 index 00000000..e8581e0f Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-360.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-390.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-390.png new file mode 100644 index 00000000..e798c154 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-390.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-430.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-430.png new file mode 100644 index 00000000..1038e962 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-430.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-768.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-768.png new file mode 100644 index 00000000..d7f7a8a6 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/dashboard-nb-light-768.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1024.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1024.png new file mode 100644 index 00000000..792e3384 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1024.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1280.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1280.png new file mode 100644 index 00000000..00b6f654 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1280.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1440.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1440.png new file mode 100644 index 00000000..0a77294c Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1440.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1920.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1920.png new file mode 100644 index 00000000..f8627c20 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-1920.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-320.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-320.png new file mode 100644 index 00000000..b5a4fce4 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-360.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-360.png new file mode 100644 index 00000000..fe156d59 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-360.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-390.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-390.png new file mode 100644 index 00000000..a302226f Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-390.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-430.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-430.png new file mode 100644 index 00000000..617277b7 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-430.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-768.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-768.png new file mode 100644 index 00000000..0de9aa57 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-dark-768.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1024.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1024.png new file mode 100644 index 00000000..b2c71a8d Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1024.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1280.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1280.png new file mode 100644 index 00000000..b181e70e Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1280.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1440.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1440.png new file mode 100644 index 00000000..a331ff52 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1440.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1920.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1920.png new file mode 100644 index 00000000..3732f716 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-1920.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-320.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-320.png new file mode 100644 index 00000000..89d6a700 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-360.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-360.png new file mode 100644 index 00000000..bffc7d48 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-360.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-390.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-390.png new file mode 100644 index 00000000..6f691026 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-390.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-430.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-430.png new file mode 100644 index 00000000..10baea60 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-430.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-768.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-768.png new file mode 100644 index 00000000..2b125f72 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-en-light-768.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1024.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1024.png new file mode 100644 index 00000000..629d00fb Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1024.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1280.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1280.png new file mode 100644 index 00000000..a0f2c5f6 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1280.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1440.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1440.png new file mode 100644 index 00000000..6c7593c7 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1920.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1920.png new file mode 100644 index 00000000..59dfb627 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-1920.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-320.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-320.png new file mode 100644 index 00000000..1442afd5 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-360.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-360.png new file mode 100644 index 00000000..cb055e93 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-360.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-390.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-390.png new file mode 100644 index 00000000..48df864b Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-390.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-430.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-430.png new file mode 100644 index 00000000..a9eaf096 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-430.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-768.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-768.png new file mode 100644 index 00000000..8aa8bee5 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-dark-768.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1024.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1024.png new file mode 100644 index 00000000..aea1118d Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1024.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1280.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1280.png new file mode 100644 index 00000000..f4dfe0bc Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1280.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1440.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1440.png new file mode 100644 index 00000000..e388c829 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1440.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1920.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1920.png new file mode 100644 index 00000000..5f9a6a26 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-1920.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-320.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-320.png new file mode 100644 index 00000000..0b36c8e4 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-360.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-360.png new file mode 100644 index 00000000..0a9598a9 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-360.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-390.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-390.png new file mode 100644 index 00000000..1b086c41 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-390.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-430.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-430.png new file mode 100644 index 00000000..0c1dda7b Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-430.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-768.png b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-768.png new file mode 100644 index 00000000..146f3146 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/dashboard-before/walkthrough-nb-light-768.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/discovery-before/PILOT.json b/docs/ui-modernisation/visual-correction/evidence/discovery-before/PILOT.json new file mode 100644 index 00000000..08b8a87c --- /dev/null +++ b/docs/ui-modernisation/visual-correction/evidence/discovery-before/PILOT.json @@ -0,0 +1,74 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "state": "initial", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "results", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "saved", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "searchSavePauseRunDismissConfirmedDelete": "PASS" + } + ], + "errors": [], + "unexpectedWrites": [], + "mockedWrites": [ + { + "width": 320, + "language": "en", + "mode": "light", + "action": "create" + }, + { + "width": 320, + "language": "en", + "mode": "light", + "action": "pauseAlerts" + }, + { + "width": 320, + "language": "en", + "mode": "light", + "action": "manualRun" + }, + { + "width": 320, + "language": "en", + "mode": "light", + "action": "dismiss" + }, + { + "width": 320, + "language": "en", + "mode": "light", + "action": "confirmedDelete" + } + ], + "blockedExternal": [ + "https://fonts.googleapis.com" + ], + "limits": [ + "synthetic provider/API fixtures, not live NAV or backend qualification", + "no new providers/geography or native/security/release acceptance" + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/visual-correction/evidence/discovery-before/initial-en-light-320.png b/docs/ui-modernisation/visual-correction/evidence/discovery-before/initial-en-light-320.png new file mode 100644 index 00000000..d0e30530 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/discovery-before/initial-en-light-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/discovery-before/results-en-light-320.png b/docs/ui-modernisation/visual-correction/evidence/discovery-before/results-en-light-320.png new file mode 100644 index 00000000..41a8b836 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/discovery-before/results-en-light-320.png differ diff --git a/docs/ui-modernisation/visual-correction/evidence/discovery-before/saved-en-light-320.png b/docs/ui-modernisation/visual-correction/evidence/discovery-before/saved-en-light-320.png new file mode 100644 index 00000000..5c51e730 Binary files /dev/null and b/docs/ui-modernisation/visual-correction/evidence/discovery-before/saved-en-light-320.png differ diff --git a/job-tracker-ui/scripts/verify-a3-dashboard.mjs b/job-tracker-ui/scripts/verify-a3-dashboard.mjs index 561398ec..30327b1f 100644 --- a/job-tracker-ui/scripts/verify-a3-dashboard.mjs +++ b/job-tracker-ui/scripts/verify-a3-dashboard.mjs @@ -4,12 +4,18 @@ import AxeBuilder from '@axe-core/playwright'; import assert from 'node:assert/strict'; import fs from 'node:fs'; import path from 'node:path'; -const out = path.resolve(import.meta.dirname, '../../docs/ui-modernisation/evidence/dashboard/browser'); +const visualMatrix = process.env.A3_VISUAL_MATRIX === '1'; +const widths = process.env.A3_PILOT ? [320] : visualMatrix ? [320, 360, 390, 430, 768, 1024, 1280, 1440, 1920] : [320, 390, 768, 1440]; +const languages = process.env.A3_PILOT ? ['en'] : ['en', 'nb']; +const modes = process.env.A3_PILOT ? ['light'] : ['light', 'dark']; +const expectedJourneys = widths.length * languages.length * modes.length; +const out = path.resolve(import.meta.dirname, visualMatrix ? '../../docs/ui-modernisation/visual-correction/evidence/dashboard' : '../../docs/ui-modernisation/evidence/dashboard/browser'); fs.mkdirSync(out, { recursive: true }); const report = { screens: [], journeys: [], errors: [], unexpectedWrites: [], mockedWrites: [], blockedExternal: [] }; const browser = await chromium.launch(); try { - for (const width of [320, 390, 768, 1440]) for (const language of ['en', 'nb']) for (const mode of ['light', 'dark']) { + for (const width of widths) for (const language of languages) for (const mode of modes) { + console.log(`Checking ${width}/${language}/${mode}`); 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 }); @@ -58,7 +64,7 @@ try { assert.equal(await week.locator('time').first().getAttribute('datetime'), deadline); assert.equal(await week.getByRole('link', { name: 'Community nurse' }).count(), 0); assert.equal(await page.evaluate(() => document.documentElement.scrollWidth > innerWidth + 1), false); - if (width === 1440) await page.waitForFunction(() => { + if (width >= 1440) await page.waitForFunction(() => { const a = document.querySelector('[data-dashboard-widget=agenda]').getBoundingClientRect(), b = document.querySelector('[data-dashboard-widget=funnel]').getBoundingClientRect(); return Math.abs(a.top - b.top) < 2 && a.left < b.left; }); @@ -94,9 +100,11 @@ try { } assert.deepEqual(report.errors, []); assert.deepEqual(report.unexpectedWrites, []); assert.ok(report.blockedExternal.every(origin => origin === 'https://fonts.googleapis.com')); - assert.equal(report.mockedWrites.length, 16); - console.log('PASS: 16 dashboard journeys,32 scoped axe sweeps,32 captures; controlled API persistence only.'); + assert.equal(report.mockedWrites.length, expectedJourneys); + assert.equal(report.journeys.length, expectedJourneys); + assert.equal(report.screens.length, expectedJourneys * 2); + console.log(`PASS:${report.journeys.length} dashboard journeys,${report.screens.length} scoped axe sweeps/captures; controlled API persistence only.`); } finally { - fs.writeFileSync(path.join(out, 'BROWSER.json'), JSON.stringify({ ...report, limits: ['synthetic API fixtures, not real backend end-to-end','no native device/screen reader/model/provider/security/release qualification'] }, null, 2)); + fs.writeFileSync(path.join(out, process.env.A3_PILOT ? 'PILOT.json' : 'BROWSER.json'), JSON.stringify({ ...report, limits: ['synthetic API fixtures, not real backend end-to-end','no native device/screen reader/model/provider/security/release qualification'] }, null, 2)); await browser.close(); } diff --git a/job-tracker-ui/scripts/verify-a3-discovery.mjs b/job-tracker-ui/scripts/verify-a3-discovery.mjs index f578ed31..8a941f2d 100644 --- a/job-tracker-ui/scripts/verify-a3-discovery.mjs +++ b/job-tracker-ui/scripts/verify-a3-discovery.mjs @@ -4,12 +4,18 @@ import AxeBuilder from '@axe-core/playwright'; import assert from 'node:assert/strict'; import fs from 'node:fs'; import path from 'node:path'; -const out = path.resolve(import.meta.dirname, '../../docs/ui-modernisation/evidence/discovery/browser'); +const visualMatrix = process.env.A3_VISUAL_MATRIX === '1'; +const widths = process.env.A3_PILOT ? [320] : visualMatrix ? [320, 360, 390, 430, 768, 1024, 1280, 1440, 1920] : [320, 390, 768, 1440]; +const languages = process.env.A3_PILOT ? ['en'] : ['en', 'nb']; +const modes = process.env.A3_PILOT ? ['light'] : ['light', 'dark']; +const expectedJourneys = widths.length * languages.length * modes.length; +const out = path.resolve(import.meta.dirname, visualMatrix ? '../../docs/ui-modernisation/visual-correction/evidence/discovery' : '../../docs/ui-modernisation/evidence/discovery/browser'); fs.mkdirSync(out, { recursive: true }); const report = { screens: [], journeys: [], errors: [], unexpectedWrites: [], mockedWrites: [], blockedExternal: [] }; const browser = await chromium.launch(); try { - for (const width of [320, 390, 768, 1440]) for (const language of ['en', 'nb']) for (const mode of ['light', 'dark']) { + for (const width of widths) for (const language of languages) for (const mode of modes) { + console.log(`Checking ${width}/${language}/${mode}`); 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 }); @@ -50,7 +56,7 @@ try { const result = await new AxeBuilder({ page }).withTags(['wcag2a', 'wcag2aa', 'wcag21aa', 'wcag22aa']).analyze(); report.screens.push({ width, language, mode, state, violations: result.violations }); assert.deepEqual(result.violations, []); await page.evaluate(() => window.scrollTo(0, 0)); - await page.screenshot({ path: path.join(out, `${state}-${language}-${mode}-${width}.png`), fullPage: true }); + await page.screenshot({ path: path.join(out, `${state}-${language}-${mode}-${width}.png`), fullPage: width >= 768 }); }; await page.goto('http://localhost:4338/discover'); const filters = page.getByRole('complementary', { name: language === 'en' ? 'Search filters' : 'Søkefiltre' }); await filters.waitFor(); @@ -84,11 +90,11 @@ try { report.journeys.push({ width, language, mode, searchSavePauseRunDismissConfirmedDelete: 'PASS' }); await context.close(); } - assert.equal(report.screens.length, 48); assert.equal(report.journeys.length, 16); assert.equal(report.mockedWrites.length, 80); + assert.equal(report.screens.length, expectedJourneys * 3); assert.equal(report.journeys.length, expectedJourneys); assert.equal(report.mockedWrites.length, expectedJourneys * 5); assert.deepEqual(report.errors, []); assert.deepEqual(report.unexpectedWrites, []); assert.ok(report.blockedExternal.every(origin => origin === 'https://fonts.googleapis.com')); - console.log('PASS:16 controlled discovery journeys,48 axe scans/captures,80 intercepted fixture mutations.'); + console.log(`PASS:${report.journeys.length} controlled discovery journeys,${report.screens.length} axe scans/captures,${report.mockedWrites.length} intercepted fixture mutations.`); } finally { - fs.writeFileSync(path.join(out, 'BROWSER.json'), JSON.stringify({ ...report, limits: ['synthetic provider/API fixtures, not live NAV or backend qualification', 'no new providers/geography or native/security/release acceptance'] }, null, 2)); + fs.writeFileSync(path.join(out, process.env.A3_PILOT ? 'PILOT.json' : 'BROWSER.json'), JSON.stringify({ ...report, limits: ['synthetic provider/API fixtures, not live NAV or backend qualification', 'no new providers/geography or native/security/release acceptance'] }, null, 2)); await browser.close(); } diff --git a/job-tracker-ui/src/dashboardLayout.test.ts b/job-tracker-ui/src/dashboardLayout.test.ts index 3ecdd91a..832defd7 100644 --- a/job-tracker-ui/src/dashboardLayout.test.ts +++ b/job-tracker-ui/src/dashboardLayout.test.ts @@ -38,6 +38,21 @@ test('default catalogue preserves every section and supported widths', () => { expect(defaultDashboardLayout().widgets[0].visible).toBe(true); }); +test('initial dashboard keeps every widget in a denser bounded layout without resizing saved geometry', () => { + const fresh = defaultDashboardLayout(); + expect(fresh.widgets).toHaveLength(10); + expect(fresh.widgets.every(widget => widget.visible)).toBe(true); + expect(Math.max(...fresh.widgets.map(widget => widget.y + widget.h))).toBeLessThanOrEqual(42); + const saved = { version: 2, revision: 4, widgets: [ + { id: 'sources', visible: true, size: 'standard', x: 0, y: 14, w: 6, h: 8 }, + { id: 'salary', visible: false, size: 'full', x: 0, y: 26, w: 12, h: 12 }, + ] }; + const normalized = normalizeDashboardLayout(saved); + expect(normalized.revision).toBe(4); + expect(normalized.widgets.slice(0, 2)).toEqual(saved.widgets); + expect(normalized.widgets.slice(2).every(widget => !widget.visible)).toBe(true); +}); + test.each([1, 2])('new schema %s preferences use task-first A1 defaults without omitting widgets', version => { const layout = normalizeDashboardLayout({ version, revision: 0, widgets: [] }); expect(layout.widgets[0]).toMatchObject({ id: 'attention', visible: true, x: 0, y: 0, w: 12 }); diff --git a/job-tracker-ui/src/dashboardLayout.ts b/job-tracker-ui/src/dashboardLayout.ts index 20485401..737c4bdf 100644 --- a/job-tracker-ui/src/dashboardLayout.ts +++ b/job-tracker-ui/src/dashboardLayout.ts @@ -34,7 +34,8 @@ export function defaultDashboardLayout(): DashboardLayout { return { version: 2, revision: 0, widgets: arrangeDashboardWidgets(order.map(id => { const definition = WIDGETS.find(widget => widget.id === id)!; const w = id === 'attention' ? 12 : id === 'agenda' ? 8 : id === 'funnel' ? 4 : definition.defaultSize === 'full' ? 12 : 6; - return { id, visible: true, size: w === 12 ? 'full' : 'standard', x: 0, y: 0, w, h: id === 'cards' ? 5 : id === 'attention' ? 9 : 8 }; + const h = id === 'cards' ? 5 : id === 'attention' ? 9 : ['stageAge', 'sources', 'salary', 'companies', 'skills'].includes(id) ? 4 : 8; + return { id, visible: true, size: w === 12 ? 'full' : 'standard', x: 0, y: 0, w, h }; })) }; } diff --git a/job-tracker-ui/src/views/JobDiscoveryPage.tsx b/job-tracker-ui/src/views/JobDiscoveryPage.tsx index 3ea8c454..5a770588 100644 --- a/job-tracker-ui/src/views/JobDiscoveryPage.tsx +++ b/job-tracker-ui/src/views/JobDiscoveryPage.tsx @@ -192,8 +192,8 @@ export default function JobDiscoveryPage() { setLocation(event.target.value)} /> - - + + {t("jobDiscoverySavedSearches")} {t("jobDiscoverySavedSearchesHelp")} @@ -226,8 +226,8 @@ export default function JobDiscoveryPage() { ))} )} - - + + queryRef.current?.focus()}>{t("jobDiscoveryReturnFilters")}} /> @@ -252,8 +252,8 @@ export default function JobDiscoveryPage() { ) : null} {sortedJobs.map((job) => ( - - + + {job.isNew ? : null} @@ -270,7 +270,7 @@ export default function JobDiscoveryPage() { {t("jobDiscoveryWorkArrangementMissing")} - + {activeSavedSearchId !== null ? : null}