diff --git a/docs/ui-modernisation/JOB_EXPORT_LIFETIME.md b/docs/ui-modernisation/JOB_EXPORT_LIFETIME.md new file mode 100644 index 00000000..755a0df8 --- /dev/null +++ b/docs/ui-modernisation/JOB_EXPORT_LIFETIME.md @@ -0,0 +1,22 @@ +# Job export and CSV conversion session lifetime + +Baseline214eb25f; source/test/verifier2a02e102 on codex/a3-ui-10. + +Job imports already capture their initiating session and stop queued work after unmount/account invalidation. Export downloads and local CSV conversion lacked that boundary. A delayed response/read could therefore download and announce data after its panel/session had ended. The same existing guard now serves all three paths, preserving the import busy flag, create allow-list and partial-failure handling. Delayed feedback uses the current UI language. + +## Verification + +- RED:11 failures/three passes across14 new lifetime cases. Failures reproduced late export/conversion downloads and feedback, invalidated starts and stale-language errors. +- PASSED:35 cases/four suites:14 new export cases plus existing job import, Settings import lifetime and picker activation. Tests cover successful JSON/CSV/conversion, unmount, changed session context, invalidation event, stale rejection, already-invalidated starts and live EN→NB failure feedback. Counts overlap earlier import evidence. +- PASSED:production build/TypeScript and scoped ESLint. +- PASSED:12 actual exported-app configurations at390/768/1440 ×EN/NB ×light/dark;36 native browser downloads and12 accessibility scans. JSON/CSV match the synthetic response bytes exactly, including CSV UTF-8 BOM/CRLF/Unicode. Converted JSON retains its synthetic occupation/company Unicode values. Gzip artifacts preserve native bytes with raw/compressed receipts. +- Each configuration additionally probes a held export and held File.text conversion across a real React Router SPA unmount. Neither produces an extra download during the bounded250ms quiet window after response/read completion. These probes complement deterministic unit promise checks; they are not exhaustive scheduling or native-device proof. +- Zero page exceptions, API writes or unavailable fixture reads. Every API response/file is synthetic; external traffic including fonts is blocked. The single pilot overlaps the final matrix. Mobile Bokmål dark controls were visually inspected. + +Evidence: `evidence/job-export-lifetime/`; source/evidence/export bindings: `JOB_EXPORT_SOURCE_MANIFEST.json`. The unknown-route SPA destination is a controlled unmount probe, not a product journey acceptance claim. + +## Preservation and remaining gates + +Export URL, filenames/MIME, includeDeleted=false, CSV BOM, conversion schema and download mechanism are unchanged. No backend/API, dependency, migration, physical CV/PDF or real private-data export occurred. An already-delivered download cannot be revoked; this guard suppresses later UI delivery, not a completed server request. Pending duplicate download clicks and broader real-service/session/security acceptance remain separate. + +Rollback: revert2a02e102, rebuild and run affected import/export checks. Final A3/Phase10, native/human, integrated security/recovery and release decisions remain open. diff --git a/docs/ui-modernisation/JOB_EXPORT_SOURCE_MANIFEST.json b/docs/ui-modernisation/JOB_EXPORT_SOURCE_MANIFEST.json new file mode 100644 index 00000000..d8e7b6cc --- /dev/null +++ b/docs/ui-modernisation/JOB_EXPORT_SOURCE_MANIFEST.json @@ -0,0 +1,160 @@ +{ + "sourceContentCommit": "2a02e1023e0869d32af23e31d51d5ac895d3e8cd", + "policy": "LF-normalised source and text evidence; raw PNG/gzip/zip/export. Content binding for offline UI verification; release candidate/image identity remains separate.", + "sources": { + "job-tracker-ui/src/App.tsx": "e0c50ec92954b90cf62b9d8b8e0d5b5802c2408e577e5e255a8d78c3dfdf7135", + "job-tracker-ui/src/components/SettingsView.tsx": "250b80b2d18f82ab63e7341c0779380345f386acc0d89161064d8e41439636d2", + "job-tracker-ui/src/components/ImportExportJobs.tsx": "ac55e064d0c3eb861a5c2682348527b3817e05dbeb35a94a242fa919e437ffe9", + "job-tracker-ui/src/sessionBoundary.ts": "09edca77c98294818d2ad0c409ce595f1b6ca0c1f60419fc1078b70f96f5b7b9", + "job-tracker-ui/src/api.ts": "f75ac7be07a743396843ddad5fd3371e2d5fd3d9c5d933e09e26fae2159f2378", + "job-tracker-ui/src/i18n/I18nProvider.tsx": "dfa8d95510a7dd872e1b9bbddf9bb4ab31da4d4b5e932b0099397d11e08ad108", + "job-tracker-ui/src/i18n/translations.ts": "a0b706a859264773418ec3f1275332e97add913de65c4d6efaef04b23ae8e1c5", + "job-tracker-ui/src/job-export-lifetime.test.tsx": "e7748a54af7b3b3ac0fc35c1c99e1ef4b09bfa4c2d237dacdbe07b305878bbc6", + "job-tracker-ui/src/job-import.test.tsx": "9c69000a6f8ca744fb425c2007ce48247be46ecad01a177c2f002ba2ac9a0d73", + "job-tracker-ui/src/settings-import-lifetime.test.tsx": "24af2a5954533087ddbff40659ff9f8dcf70805435dca772314c2be7d8bf6133", + "job-tracker-ui/src/file-picker-activation.test.tsx": "accb87f94a7b36373eec6583a391a17ede7e7779cf18d81d4a86b43e0bd6afbe", + "job-tracker-ui/scripts/verify-job-export-lifetime.mjs": "2d1e19b5cadcc6ada79bf7cfcafa47f7b96248d69213b0c14a3e1630b8ba739e", + "job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626", + "job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab" + }, + "evidence": { + "docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-exports.png": "81504f9a97c6f3124a731932403651f008975f94ca33b1b42778aafb78dd4140", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-exports.png": "512695e85b638a8f6f87a6918dc819dab0de3ef916277ccca73d0a3f5a85c5c3", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-exports.png": "bda22bf62d11940aec2fd144185918c3c21d0fbe34376573c70b59d69228c713", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-exports.png": "4728bb5d7983ab3ac1ccffc967199aed130e74481887f4c970c066129760bd3f", + "docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-exports.png": "6f218fcd5680d21047bdc544664735b3763c30774b00cf3387d7aabb4216bd27", + "docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-exports.png": "cc468490f72a8dccb1b2033a35d99eb69d7a717310ec39b7af58697ea7099412", + "docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-exports.png": "690ad34c73cf259544bc196f61261d2753b0486fc6ac85aca298c60f40d96e88", + "docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-exports.png": "543e8d87b697c1b354870d84525810872e08fd77de3ebf50622a8f43165bc02e", + "docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-exports.png": "8a39bc78b948b8dede64160eb19b4542eb8d23c3130929c6a54a307c4e180af7", + "docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-exports.png": "117ee647d088c0208cae2ad55d5476f05fc136d1522040732f1380bcadce2715", + "docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-exports.png": "f68c2321cfb6114e35dbb98fe7f584e221d669a3f6a10d306f5238aaa950c246", + "docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-converted.gz": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5", + "docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-csv.gz": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f", + "docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-exports.png": "aae5533476aa5f1ca701c2279c37200ba318d78a6d491c80f92fddfd9777902e", + "docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-json.gz": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a", + "docs/ui-modernisation/evidence/job-export-lifetime/BROWSER.json": "2fc8c93a85aa7867032215b3ec79af56b8e35f4ef3ea0854f32064b2c8ca37ba", + "docs/ui-modernisation/evidence/job-export-lifetime/BROWSER.txt": "b53f74200f05ba0cd66144e541042a0a5f4ac928b8c029468b81603024b2b185", + "docs/ui-modernisation/evidence/job-export-lifetime/BUILD.txt": "3b63b5414aeff33c23b08da78fed69e8f1dc0b1da0118af62b5033b9cda5d14c", + "docs/ui-modernisation/evidence/job-export-lifetime/LINT.txt": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "docs/ui-modernisation/evidence/job-export-lifetime/PILOT.json": "e6ef272587dcdf833e9b40cc2ecda2bcaa9db7464c580596da08d8c569671e51", + "docs/ui-modernisation/evidence/job-export-lifetime/RED.txt": "7703237fb0d3ec3530fcfec5bec3a754b4e9212cd588ba6f3a414f3a44fa33b1", + "docs/ui-modernisation/evidence/job-export-lifetime/TESTS.txt": "cbd89c7d4222e7d66f80856edc46b659f98cbbac74e8ea5f2e40b19f896c39af", + "docs/ui-modernisation/JOB_EXPORT_LIFETIME.md": "ddfe181782854bfa67178c24d2c8a42d245d4dcd54455854520bb444951377a1" + }, + "export": { + "job-tracker-ui/out/404.html": "f6c96a7319ff77819dd62bec8f925fca7b7034b0aa2c02ba73e09640ebd1e64a", + "job-tracker-ui/out/__next.__PAGE__.txt": "f6e4d9abf739246e8532c3cfb9108495d7bf068ab46502200f034eb0a586d9de", + "job-tracker-ui/out/__next._full.txt": "a91f2466ec01e9c54499a2fa90b2c3c70aa0289ad6463449003385867a03b55a", + "job-tracker-ui/out/__next._tree.txt": "84b9d7a1d2e724513ec8e110a00576fce6156a61c2bf44d458cee109a82c4188", + "job-tracker-ui/out/_next/static/chunks/0--vhwu1kmht5.js": "426fae50ff0485fb6af8e28a7d1751dfaefcb6118a24dab39b3a7099d38c18dd", + "job-tracker-ui/out/_next/static/chunks/0-_aq6ipzcshj.js": "39f90c215bf52aef6274ed3dcc0f8af32e21a37fe8845b3bca0d6ea60da6a8c2", + "job-tracker-ui/out/_next/static/chunks/00sdty8f_wo6_.js": "047077072852a0211c228c75d5e29836ba970771382ba0da4bac9fdd0bfac29f", + "job-tracker-ui/out/_next/static/chunks/05rgc5zsm9p5i.js": "1da7305ab9d8e95795327cce11a16db4c56d90429d7e1dea4c4088c085f20d69", + "job-tracker-ui/out/_next/static/chunks/0afg9bl7a8pj5.js": "bd0cec651950d5007f84273af5be8d8255806da4db54238f5c512442c7449459", + "job-tracker-ui/out/_next/static/chunks/0ah1fzqmie05a.js": "5c65505a7dcbac63ac71d254e619a4c800943bfb4fa16cd40c10cdbe7e9b6e31", + "job-tracker-ui/out/_next/static/chunks/0b3nrgli_w65x.js": "bf23e1a05a97de3a950e76eb206b2fbbe9003460891ecd5ab091155aa385badc", + "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/0og1crk78cn4a.js": "aa5031605cb2f46a612e94d9d71473f48a71aa4a5acfe8fe5f2dfc66d951ab40", + "job-tracker-ui/out/_next/static/chunks/0pvbhqkwp15b6.js": "f210cc1a8c203de6008b6137c0324afabb33f233c1ab56800fe9e6c963c0c34a", + "job-tracker-ui/out/_next/static/chunks/0q20g9o8x-k8z.js": "3d4d9086985419aa8866b032158196c774acb8bf318f3c8245508c8daa9c5148", + "job-tracker-ui/out/_next/static/chunks/0q_pwu9jxv4-d.js": "42a43b3d7245a413c7c29b4cbe87823037a6dbc637e2e282c92405470e0f575d", + "job-tracker-ui/out/_next/static/chunks/0qxm1h9uqfgpa.js": "a5af3192c76f3b8dac5c17afbe90d96a5c7652810ce69b7f39fbcf1f1231fd8c", + "job-tracker-ui/out/_next/static/chunks/0ta69108309yl.js": "07b8069d13ddaf7aaa24daf1070144a2e98b444ca162b628b8bfb8e1068d2967", + "job-tracker-ui/out/_next/static/chunks/0vo4_3wcjs1gy.js": "5e4d305fc346f9ecf48328ab0416397d8bd7c100f0de99dea16d2a1463b386a9", + "job-tracker-ui/out/_next/static/chunks/0zep-wknuuxm3.js": "cc13d0dc908a4b047a165a50a226b787ee7707135b3f2c5894aab8cbd618a29c", + "job-tracker-ui/out/_next/static/chunks/1-8ykqf0n88k2.js": "eb208124ec838cb9a9ae366745bd81fba1c35eeceac128c567bbb7977ebb6a2e", + "job-tracker-ui/out/_next/static/chunks/10qxrc5f9nore.js": "512bfc44077703fa4e03e15ca48acf3501231c5e2cb9bf7beb2ec30224fe287b", + "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/15saa2mllmdp7.js": "6664972f61e1669d2ca1ed9af467df87d316efeadf59496ce8c68d8c84fd7512", + "job-tracker-ui/out/_next/static/chunks/16lfece6cnlln.js": "716363ba044f30b0e70440756b4e5eafa2d25f2e1628e855e3bc4ab9eabee3d3", + "job-tracker-ui/out/_next/static/chunks/188aj_hr_p4eq.js": "f10e4af24bebfb8b9e7306a5688ef45f07f280c920dc01815ac578fbe18e2182", + "job-tracker-ui/out/_next/static/chunks/1avt7t-z_q80r.js": "8cbd919d971eaf46e508f9e6b073a9183a29457c3c42c9566ec74b018894c061", + "job-tracker-ui/out/_next/static/chunks/1ke8pzecwofrg.css": "32e9ab963ebadebcbe2c68dffb24cfbfc8cc24255ad91b48b7941fc777bf7439", + "job-tracker-ui/out/_next/static/chunks/1q7j-caec8blc.js": "25fbaafa2e50558a1d47d8eb5fccfa6fd953797b50ef447c34ee502d9aade03b", + "job-tracker-ui/out/_next/static/chunks/1req80b9jj38r.js": "eee4d2e3789e1215195dba99ad0f09d34f8c83da848322b76054722233e9dae3", + "job-tracker-ui/out/_next/static/chunks/1svx1qnrof8xa.js": "111c502a1ca939f7bf971ed1b3e3cda011b130c313a7f7df742ae4b1e14486ae", + "job-tracker-ui/out/_next/static/chunks/1w3q8yrcjn2jk.js": "365200e241ee9290e93d7c2fdba169f2b0a8e774541e3cbf3f6f2781110fa644", + "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/1zo-sj761lhgx.js": "c9fac0eae0b37185a81f9dd97e9e9ff7ddf8a97c5566b303a0fb84239c3ff260", + "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/2edynwqicn6ym.js": "c694af15bb117955e6f7f0962f47495b2be017dfdea93b6d4ede4d5e4fcd7efd", + "job-tracker-ui/out/_next/static/chunks/2ha8nlh4rv92e.js": "5cb4b4cee708f35ed54ef6289269fa866afbaa64fd47bf9275ff691664d3132e", + "job-tracker-ui/out/_next/static/chunks/2php_9zkhprrb.js": "4f91e63b1181693e7a3b269b1b24004d9abee13413b8396a916799b8c01620e8", + "job-tracker-ui/out/_next/static/chunks/2pllop_q35dkw.js": "21c9a7c53763010317a2d09460066017e1fd192691e6a0bd83ed20ea6e1fe9dd", + "job-tracker-ui/out/_next/static/chunks/2rmlosyqcyx85.js": "a5baeaa4f2e8df219ee6c69bcf027cb9a70f7cfc58bfeb994bf9999ef3cc69d6", + "job-tracker-ui/out/_next/static/chunks/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10", + "job-tracker-ui/out/_next/static/chunks/2sj7ufu_6n9af.js": "69d7471c01b8001d52abc848910a8c35457dac3aaa4ce66eae2a03ca29ad623b", + "job-tracker-ui/out/_next/static/chunks/2vo512u2siee8.js": "30cdfec178acfe49c1e0ae28fb23c67507bcf7f7b17008b48c05198f638c348d", + "job-tracker-ui/out/_next/static/chunks/30-q9iimktiql.js": "db89d5da1f101216d7f99e9518dc7f5ed84f8b40ac84a6ea55f73c01bf1aca1b", + "job-tracker-ui/out/_next/static/chunks/315n7snxk3fgw.js": "1993429aafa0753d5e9fd1ca63a4f6079ce7f7f37faa44716191f59c972c4d41", + "job-tracker-ui/out/_next/static/chunks/33at73n-mzpir.js": "1605cc3311cc6ca3b2f44b2e0217fe5441a2799fa32b0b0c94d7634f4861ac83", + "job-tracker-ui/out/_next/static/chunks/357yqeklh7414.js": "0192ab7198ebbe299d34a934c504dd4b562d1cccebb6e9d4c5163930c881b14c", + "job-tracker-ui/out/_next/static/chunks/35pq4ixaltkev.js": "f1e9d53e2481de01d7b04aa938397c2545b7d7dc42ce3d0ac5cd3f1141bda182", + "job-tracker-ui/out/_next/static/chunks/3_4dnl1l3809g.js": "50288c2864a9e8c7ef25c93762edb86e4e617778737b5b5a028c53c5b93d3b70", + "job-tracker-ui/out/_next/static/chunks/3bqn9b34na0b9.js": "f1b8ebcc1b22251c33c9f3a5d11c1f893cad2da2e8744a441e790f7347aa9e73", + "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/3nzgmz1t8r_64.js": "de2688cd6bfc8b411e9445d857cd1d776f9960f9d63e9f06c24cbc2a98040fca", + "job-tracker-ui/out/_next/static/chunks/3q4v10rrqy40n.js": "d87ff7b7a0f07d0d92eab3876481eb686a12d9c43d8b92cbe406aefa227a11c1", + "job-tracker-ui/out/_next/static/chunks/3xbcgmkebja05.js": "bb1e98db2657a4b067676ead2ea26172478a79c1b384a9f9fe6588e1481d33ee", + "job-tracker-ui/out/_next/static/chunks/turbopack-25fzg9ay_1ss-.js": "c40f39e993a30c96d6247bb3a7b581538bb046efe8ef8ec07bea3ba32291750f", + "job-tracker-ui/out/_next/static/FZd5Z8jyvwzGAFEjT3jZ_/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea", + "job-tracker-ui/out/_next/static/FZd5Z8jyvwzGAFEjT3jZ_/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a", + "job-tracker-ui/out/_next/static/FZd5Z8jyvwzGAFEjT3jZ_/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00", + "job-tracker-ui/out/_not-found/__next._full.txt": "6d4e100adf585b7977ecb48650fa9b5b43d3b6a0df724d349aee2d5d531e7ac5", + "job-tracker-ui/out/_not-found/__next._not-found/__PAGE__.txt": "b167d247c1b19ccd984aec62cc93a2e1c3add5f5ace318741796f1bb931887c2", + "job-tracker-ui/out/_not-found/__next._tree.txt": "7bc65934ea907382668fee6c15ef9d3d1b6a0bd3abe43a97500e98669f61165f", + "job-tracker-ui/out/_not-found.html": "f6c96a7319ff77819dd62bec8f925fca7b7034b0aa2c02ba73e09640ebd1e64a", + "job-tracker-ui/out/_not-found.txt": "6d4e100adf585b7977ecb48650fa9b5b43d3b6a0df724d349aee2d5d531e7ac5", + "job-tracker-ui/out/favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a", + "job-tracker-ui/out/favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3", + "job-tracker-ui/out/index.html": "458087f01cc931f7f197a2f76677d8b3668e2d359df5d4e2e9d4c32a4d83d06d", + "job-tracker-ui/out/index.txt": "a91f2466ec01e9c54499a2fa90b2c3c70aa0289ad6463449003385867a03b55a", + "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" + } +} diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-exports.png new file mode 100644 index 00000000..adca5f2e Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-dark-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-exports.png new file mode 100644 index 00000000..59518756 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-en-light-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-exports.png new file mode 100644 index 00000000..33abbec4 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-dark-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-exports.png new file mode 100644 index 00000000..0e3bf715 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/1440-nb-light-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-exports.png new file mode 100644 index 00000000..021f5844 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-dark-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-exports.png new file mode 100644 index 00000000..1f76fb9e Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-en-light-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-exports.png new file mode 100644 index 00000000..05b830da Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-dark-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-exports.png new file mode 100644 index 00000000..b12922a3 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/390-nb-light-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-exports.png new file mode 100644 index 00000000..849bf1f6 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-dark-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-exports.png new file mode 100644 index 00000000..fcf87cbd Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-en-light-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-exports.png new file mode 100644 index 00000000..d5096e0e Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-dark-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-converted.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-converted.gz new file mode 100644 index 00000000..4b7c8e6f Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-converted.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-csv.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-csv.gz new file mode 100644 index 00000000..4ef10f35 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-csv.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-exports.png b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-exports.png new file mode 100644 index 00000000..e2915aa1 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-exports.png differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-json.gz b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-json.gz new file mode 100644 index 00000000..7570c394 Binary files /dev/null and b/docs/ui-modernisation/evidence/job-export-lifetime/768-nb-light-json.gz differ diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/BROWSER.json b/docs/ui-modernisation/evidence/job-export-lifetime/BROWSER.json new file mode 100644 index 00000000..91f7d255 --- /dev/null +++ b/docs/ui-modernisation/evidence/job-export-lifetime/BROWSER.json @@ -0,0 +1,457 @@ +{ + "journeys": [ + { + "name": "390-en-light", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "390-en-dark", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "390-nb-light", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "390-nb-dark", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "768-en-light", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "768-en-dark", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "768-nb-light", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "768-nb-dark", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "1440-en-light", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "1440-en-dark", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "1440-nb-light", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + }, + { + "name": "1440-nb-dark", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + } + ], + "downloads": [ + { + "name": "390-en-light", + "kind": "json", + "filename": "390-en-light-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "390-en-light", + "kind": "csv", + "filename": "390-en-light-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "390-en-light", + "kind": "converted", + "filename": "390-en-light-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "390-en-dark", + "kind": "json", + "filename": "390-en-dark-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "390-en-dark", + "kind": "csv", + "filename": "390-en-dark-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "390-en-dark", + "kind": "converted", + "filename": "390-en-dark-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "390-nb-light", + "kind": "json", + "filename": "390-nb-light-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "390-nb-light", + "kind": "csv", + "filename": "390-nb-light-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "390-nb-light", + "kind": "converted", + "filename": "390-nb-light-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "390-nb-dark", + "kind": "json", + "filename": "390-nb-dark-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "390-nb-dark", + "kind": "csv", + "filename": "390-nb-dark-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "390-nb-dark", + "kind": "converted", + "filename": "390-nb-dark-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "768-en-light", + "kind": "json", + "filename": "768-en-light-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "768-en-light", + "kind": "csv", + "filename": "768-en-light-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "768-en-light", + "kind": "converted", + "filename": "768-en-light-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "768-en-dark", + "kind": "json", + "filename": "768-en-dark-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "768-en-dark", + "kind": "csv", + "filename": "768-en-dark-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "768-en-dark", + "kind": "converted", + "filename": "768-en-dark-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "768-nb-light", + "kind": "json", + "filename": "768-nb-light-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "768-nb-light", + "kind": "csv", + "filename": "768-nb-light-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "768-nb-light", + "kind": "converted", + "filename": "768-nb-light-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "768-nb-dark", + "kind": "json", + "filename": "768-nb-dark-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "768-nb-dark", + "kind": "csv", + "filename": "768-nb-dark-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "768-nb-dark", + "kind": "converted", + "filename": "768-nb-dark-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "1440-en-light", + "kind": "json", + "filename": "1440-en-light-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "1440-en-light", + "kind": "csv", + "filename": "1440-en-light-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "1440-en-light", + "kind": "converted", + "filename": "1440-en-light-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "1440-en-dark", + "kind": "json", + "filename": "1440-en-dark-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "1440-en-dark", + "kind": "csv", + "filename": "1440-en-dark-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "1440-en-dark", + "kind": "converted", + "filename": "1440-en-dark-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "1440-nb-light", + "kind": "json", + "filename": "1440-nb-light-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "1440-nb-light", + "kind": "csv", + "filename": "1440-nb-light-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "1440-nb-light", + "kind": "converted", + "filename": "1440-nb-light-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + }, + { + "name": "1440-nb-dark", + "kind": "json", + "filename": "1440-nb-dark-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "1440-nb-dark", + "kind": "csv", + "filename": "1440-nb-dark-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "1440-nb-dark", + "kind": "converted", + "filename": "1440-nb-dark-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + } + ], + "captures": [ + { + "name": "390-en-light", + "violations": [] + }, + { + "name": "390-en-dark", + "violations": [] + }, + { + "name": "390-nb-light", + "violations": [] + }, + { + "name": "390-nb-dark", + "violations": [] + }, + { + "name": "768-en-light", + "violations": [] + }, + { + "name": "768-en-dark", + "violations": [] + }, + { + "name": "768-nb-light", + "violations": [] + }, + { + "name": "768-nb-dark", + "violations": [] + }, + { + "name": "1440-en-light", + "violations": [] + }, + { + "name": "1440-en-dark", + "violations": [] + }, + { + "name": "1440-nb-light", + "violations": [] + }, + { + "name": "1440-nb-dark", + "violations": [] + } + ], + "errors": [], + "writes": [], + "unavailableReads": [], + "blockedExternal": [ + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com" + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/BROWSER.txt b/docs/ui-modernisation/evidence/job-export-lifetime/BROWSER.txt new file mode 100644 index 00000000..c5b87041 --- /dev/null +++ b/docs/ui-modernisation/evidence/job-export-lifetime/BROWSER.txt @@ -0,0 +1,13 @@ +Checking 390-en-light +Checking 390-en-dark +Checking 390-nb-light +Checking 390-nb-dark +Checking 768-en-light +Checking 768-en-dark +Checking 768-nb-light +Checking 768-nb-dark +Checking 1440-en-light +Checking 1440-en-dark +Checking 1440-nb-light +Checking 1440-nb-dark +PASS 12 configurations, 36 native downloads, 12 accessibility scans; no API writes diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/BUILD.txt b/docs/ui-modernisation/evidence/job-export-lifetime/BUILD.txt new file mode 100644 index 00000000..ebdb7b3e --- /dev/null +++ b/docs/ui-modernisation/evidence/job-export-lifetime/BUILD.txt @@ -0,0 +1,23 @@ + +> job-tracker-ui@0.1.0 build +> node --max-old-space-size=4096 ./node_modules/next/dist/bin/next build + +▲ Next.js 16.4.1 (Turbopack) +✓ Running next.config.js took 30ms + + Creating an optimized production build ... +✓ Compiled successfully in 497ms + Running TypeScript ... + Finished TypeScript in 5.5s ... + Collecting page data using 4 workers ... + Generating static pages using 4 workers (0/3) ... +✓ Generating static pages using 4 workers (3/3) in 807ms + Finalizing page optimization ... + +Route (app) +┌ ○ / +└ ○ /_not-found + + +○ (Static) prerendered as static content + diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/LINT.txt b/docs/ui-modernisation/evidence/job-export-lifetime/LINT.txt new file mode 100644 index 00000000..e69de29b diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/PILOT.json b/docs/ui-modernisation/evidence/job-export-lifetime/PILOT.json new file mode 100644 index 00000000..76ad0499 --- /dev/null +++ b/docs/ui-modernisation/evidence/job-export-lifetime/PILOT.json @@ -0,0 +1,50 @@ +{ + "journeys": [ + { + "name": "390-nb-dark", + "downloads": 3, + "jsonAndCsvBytes": "PASS", + "convertedUnicode": "PASS", + "unmountProbes": 2, + "quietWindowMs": 250 + } + ], + "downloads": [ + { + "name": "390-nb-dark", + "kind": "json", + "filename": "390-nb-dark-json.gz", + "bytes": 97, + "rawSha256": "4769ba10f5dd0e9494e530513df9ef561859a218cfb085710e7be41a79ecd912", + "gzipSha256": "ed6e92c98b4c76f77644bb1035b08d564e424dedf0a35bd76bcf7eaccc8c706a" + }, + { + "name": "390-nb-dark", + "kind": "csv", + "filename": "390-nb-dark-csv.gz", + "bytes": 56, + "rawSha256": "05de17e2de37862304a7d2af71bda128e0bd3e868892e4cd7c12da9628f982b9", + "gzipSha256": "b3e28095953e50f071eea4273b2d23d0ec82dfccbbfb198e4726f49dfd56517f" + }, + { + "name": "390-nb-dark", + "kind": "converted", + "filename": "390-nb-dark-converted.gz", + "bytes": 235, + "rawSha256": "6af2ec936c07ea767b72978f5e31f17bd750fb942628b6765a5befb544a60bf5", + "gzipSha256": "2117b71f51b07c27587ff99d40acd9ef43b538a62658ce52ea060ab4a3c2cba5" + } + ], + "captures": [ + { + "name": "390-nb-dark", + "violations": [] + } + ], + "errors": [], + "writes": [], + "unavailableReads": [], + "blockedExternal": [ + "https://fonts.googleapis.com" + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/RED.txt b/docs/ui-modernisation/evidence/job-export-lifetime/RED.txt new file mode 100644 index 00000000..75b49a54 --- /dev/null +++ b/docs/ui-modernisation/evidence/job-export-lifetime/RED.txt @@ -0,0 +1,441 @@ + +> job-tracker-ui@0.1.0 test +> jest --runInBand job-export-lifetime.test.tsx + + console.error + An update to ToastProvider inside a test was not wrapped in act(...). + + When testing, code that causes React state updates should be wrapped into act(...): + + act(() => { + /* fire events that update state */ + }); + /* assert on the output */ + + This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act + + 41 | const toast = useCallback( + 42 | (message: string, severity: Severity = "info", action?: { label: string; onClick: () => void }) => { + > 43 | setT({ + | ^ + 44 | open: true, + 45 | message, + 46 | severity, + + at node_modules/react-dom/cjs/react-dom-client.development.js:18758:19 + at runWithFiberInDEV (node_modules/react-dom/cjs/react-dom-client.development.js:874:13) + at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom-client.development.js:18757:9) + at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:16409:11) + at dispatchSetStateInternal (node_modules/react-dom/cjs/react-dom-client.development.js:9170:13) + at dispatchSetState (node_modules/react-dom/cjs/react-dom-client.development.js:9127:7) + at setT (src/toast.tsx:43:7) + at toast (src/components/ImportExportJobs.tsx:313:7) + + console.error + An update to ToastProvider inside a test was not wrapped in act(...). + + When testing, code that causes React state updates should be wrapped into act(...): + + act(() => { + /* fire events that update state */ + }); + /* assert on the output */ + + This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act + + 41 | const toast = useCallback( + 42 | (message: string, severity: Severity = "info", action?: { label: string; onClick: () => void }) => { + > 43 | setT({ + | ^ + 44 | open: true, + 45 | message, + 46 | severity, + + at node_modules/react-dom/cjs/react-dom-client.development.js:18758:19 + at runWithFiberInDEV (node_modules/react-dom/cjs/react-dom-client.development.js:874:13) + at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom-client.development.js:18757:9) + at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom-client.development.js:16409:11) + at dispatchSetStateInternal (node_modules/react-dom/cjs/react-dom-client.development.js:9170:13) + at dispatchSetState (node_modules/react-dom/cjs/react-dom-client.development.js:9127:7) + at setT (src/toast.tsx:43:7) + at toast (src/components/ImportExportJobs.tsx:385:7) + +FAIL src/job-export-lifetime.test.tsx (10.711 s) + ● json lifetime › a pending completion after unmount cannot download or announce success + + expect(jest.fn()).not.toHaveBeenCalled() + + Expected number of calls: 0 + Received number of calls: 1 + + 1: called with 0 arguments + + 59 | else act(() => window.dispatchEvent(new Event(SESSION_INVALIDATED_EVENT))); + 60 | await act(async () => pending.resolve(action === "json" ? { data: new Blob(["[]"]) } : "Job Title,Company\nTeacher,Synthetic school")); + > 61 | expect(download).not.toHaveBeenCalled(); expect(URL.createObjectURL).not.toHaveBeenCalled(); + | ^ + 62 | expect(screen.queryByText(action === "json" ? translations.en.exportedJobs.replace("{format}", "JSON") : translations.en.convertedRows.replace("{count}", "1"))).not.toBeInTheDocument(); + 63 | expect(client.post).not.toHaveBeenCalled(); + 64 | }); + + at toHaveBeenCalled (src/job-export-lifetime.test.tsx:61:26) + + ● json lifetime › a pending completion after context cannot download or announce success + + expect(jest.fn()).not.toHaveBeenCalled() + + Expected number of calls: 0 + Received number of calls: 1 + + 1: called with 0 arguments + + 59 | else act(() => window.dispatchEvent(new Event(SESSION_INVALIDATED_EVENT))); + 60 | await act(async () => pending.resolve(action === "json" ? { data: new Blob(["[]"]) } : "Job Title,Company\nTeacher,Synthetic school")); + > 61 | expect(download).not.toHaveBeenCalled(); expect(URL.createObjectURL).not.toHaveBeenCalled(); + | ^ + 62 | expect(screen.queryByText(action === "json" ? translations.en.exportedJobs.replace("{format}", "JSON") : translations.en.convertedRows.replace("{count}", "1"))).not.toBeInTheDocument(); + 63 | expect(client.post).not.toHaveBeenCalled(); + 64 | }); + + at toHaveBeenCalled (src/job-export-lifetime.test.tsx:61:26) + + ● json lifetime › a pending completion after event cannot download or announce success + + expect(jest.fn()).not.toHaveBeenCalled() + + Expected number of calls: 0 + Received number of calls: 1 + + 1: called with 0 arguments + + 59 | else act(() => window.dispatchEvent(new Event(SESSION_INVALIDATED_EVENT))); + 60 | await act(async () => pending.resolve(action === "json" ? { data: new Blob(["[]"]) } : "Job Title,Company\nTeacher,Synthetic school")); + > 61 | expect(download).not.toHaveBeenCalled(); expect(URL.createObjectURL).not.toHaveBeenCalled(); + | ^ + 62 | expect(screen.queryByText(action === "json" ? translations.en.exportedJobs.replace("{format}", "JSON") : translations.en.convertedRows.replace("{count}", "1"))).not.toBeInTheDocument(); + 63 | expect(client.post).not.toHaveBeenCalled(); + 64 | }); + + at toHaveBeenCalled (src/job-export-lifetime.test.tsx:61:26) + + ● json lifetime › a stale rejection cannot display feedback in the new session + + expect(element).not.toBeInTheDocument() + + expected document not to contain element, found
Export failed.
instead + + 72 | context.mockReturnValue("owner-b-session"); + 73 | await act(async () => pending.reject(new Error("offline"))); + > 74 | expect(screen.queryByText(action === "json" ? translations.en.exportFailed : translations.en.csvConversionFailed)).not.toBeInTheDocument(); + | ^ + 75 | expect(download).not.toHaveBeenCalled(); + 76 | }); + 77 | }); + + at Object.toBeInTheDocument (src/job-export-lifetime.test.tsx:74:124) + + ● convert lifetime › a pending completion after unmount cannot download or announce success + + expect(jest.fn()).not.toHaveBeenCalled() + + Expected number of calls: 0 + Received number of calls: 1 + + 1: called with 0 arguments + + 59 | else act(() => window.dispatchEvent(new Event(SESSION_INVALIDATED_EVENT))); + 60 | await act(async () => pending.resolve(action === "json" ? { data: new Blob(["[]"]) } : "Job Title,Company\nTeacher,Synthetic school")); + > 61 | expect(download).not.toHaveBeenCalled(); expect(URL.createObjectURL).not.toHaveBeenCalled(); + | ^ + 62 | expect(screen.queryByText(action === "json" ? translations.en.exportedJobs.replace("{format}", "JSON") : translations.en.convertedRows.replace("{count}", "1"))).not.toBeInTheDocument(); + 63 | expect(client.post).not.toHaveBeenCalled(); + 64 | }); + + at toHaveBeenCalled (src/job-export-lifetime.test.tsx:61:26) + + ● convert lifetime › a pending completion after context cannot download or announce success + + expect(jest.fn()).not.toHaveBeenCalled() + + Expected number of calls: 0 + Received number of calls: 1 + + 1: called with 0 arguments + + 59 | else act(() => window.dispatchEvent(new Event(SESSION_INVALIDATED_EVENT))); + 60 | await act(async () => pending.resolve(action === "json" ? { data: new Blob(["[]"]) } : "Job Title,Company\nTeacher,Synthetic school")); + > 61 | expect(download).not.toHaveBeenCalled(); expect(URL.createObjectURL).not.toHaveBeenCalled(); + | ^ + 62 | expect(screen.queryByText(action === "json" ? translations.en.exportedJobs.replace("{format}", "JSON") : translations.en.convertedRows.replace("{count}", "1"))).not.toBeInTheDocument(); + 63 | expect(client.post).not.toHaveBeenCalled(); + 64 | }); + + at toHaveBeenCalled (src/job-export-lifetime.test.tsx:61:26) + + ● convert lifetime › a pending completion after event cannot download or announce success + + expect(jest.fn()).not.toHaveBeenCalled() + + Expected number of calls: 0 + Received number of calls: 1 + + 1: called with 0 arguments + + 59 | else act(() => window.dispatchEvent(new Event(SESSION_INVALIDATED_EVENT))); + 60 | await act(async () => pending.resolve(action === "json" ? { data: new Blob(["[]"]) } : "Job Title,Company\nTeacher,Synthetic school")); + > 61 | expect(download).not.toHaveBeenCalled(); expect(URL.createObjectURL).not.toHaveBeenCalled(); + | ^ + 62 | expect(screen.queryByText(action === "json" ? translations.en.exportedJobs.replace("{format}", "JSON") : translations.en.convertedRows.replace("{count}", "1"))).not.toBeInTheDocument(); + 63 | expect(client.post).not.toHaveBeenCalled(); + 64 | }); + + at toHaveBeenCalled (src/job-export-lifetime.test.tsx:61:26) + + ● convert lifetime › a stale rejection cannot display feedback in the new session + + expect(element).not.toBeInTheDocument() + + expected document not to contain element, found
CSV conversion failed.
instead + + 72 | context.mockReturnValue("owner-b-session"); + 73 | await act(async () => pending.reject(new Error("offline"))); + > 74 | expect(screen.queryByText(action === "json" ? translations.en.exportFailed : translations.en.csvConversionFailed)).not.toBeInTheDocument(); + | ^ + 75 | expect(download).not.toHaveBeenCalled(); + 76 | }); + 77 | }); + + at Object.toBeInTheDocument (src/job-export-lifetime.test.tsx:74:124) + + ● an already invalidated session starts neither an export nor a file read + + expect(jest.fn()).not.toHaveBeenCalled() + + Expected number of calls: 0 + Received number of calls: 1 + + 1: "/export/jobs?format=json&includeDeleted=false", {"responseType": "blob"} + + 82 | const read = jest.fn(); const file = new File([], "jobs.csv"); Object.defineProperty(file, "text", { value: read }); + 83 | fireEvent.change(document.querySelector('input[accept=".csv,text/csv"]')!, { target: { files: [file] } }); + > 84 | expect(client.get).not.toHaveBeenCalled(); expect(read).not.toHaveBeenCalled(); + | ^ + 85 | }); + 86 | + 87 | test.each(["json", "convert"] as const)("%s delayed rejection uses the current UI language", async action => { + + at Object.toHaveBeenCalled (src/job-export-lifetime.test.tsx:84:26) + + ● json delayed rejection uses the current UI language + + Unable to find an element with the text: Eksport mislyktes.. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. + + Ignored nodes: comments, script, style + +
+
+
+
+

+ Import / eksport +

+

+ Import forventer JSON eksportert av denne appen (en matrise med jobbobjekter med innebygd selskap). +

+
+
+
+
+

+ Import oppretter nye jobber fra støttede felt. ID-er, eiere, historikk, vedlegg og CV-koblinger gjenopprettes ikke. Hold Innstillinger åpent til importen er ferdig. Hvis du går ut, kan importen bli ufullstendig. +

+
+ + + + + + +
+
+
+
+
+ + + 94 | await act(async () => window.dispatchEvent(new StorageEvent("storage", { key: "uiLanguage", newValue: "nb" }))); + 95 | await act(async () => pending.reject(new Error("offline"))); + > 96 | expect(await screen.findByText(action === "json" ? translations.nb.exportFailed : translations.nb.csvConversionFailed)).toBeVisible(); + | ^ + 97 | }); + 98 | + + at waitForWrapper (node_modules/@testing-library/dom/dist/wait-for.js:163:27) + at node_modules/@testing-library/dom/dist/query-helpers.js:86:33 + at findByText (src/job-export-lifetime.test.tsx:96:23) + + ● convert delayed rejection uses the current UI language + + Unable to find an element with the text: CSV-konvertering mislyktes.. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. + + Ignored nodes: comments, script, style + +
+
+
+
+

+ Import / eksport +

+

+ Import forventer JSON eksportert av denne appen (en matrise med jobbobjekter med innebygd selskap). +

+
+
+
+
+

+ Import oppretter nye jobber fra støttede felt. ID-er, eiere, historikk, vedlegg og CV-koblinger gjenopprettes ikke. Hold Innstillinger åpent til importen er ferdig. Hvis du går ut, kan importen bli ufullstendig. +

+
+ + + + + + +
+
+
+
+
+ + + 94 | await act(async () => window.dispatchEvent(new StorageEvent("storage", { key: "uiLanguage", newValue: "nb" }))); + 95 | await act(async () => pending.reject(new Error("offline"))); + > 96 | expect(await screen.findByText(action === "json" ? translations.nb.exportFailed : translations.nb.csvConversionFailed)).toBeVisible(); + | ^ + 97 | }); + 98 | + + at waitForWrapper (node_modules/@testing-library/dom/dist/wait-for.js:163:27) + at node_modules/@testing-library/dom/dist/query-helpers.js:86:33 + at findByText (src/job-export-lifetime.test.tsx:96:23) + +Test Suites: 1 failed, 1 total +Tests: 11 failed, 3 passed, 14 total +Snapshots: 0 total +Time: 11.629 s +Ran all test suites matching job-export-lifetime.test.tsx. diff --git a/docs/ui-modernisation/evidence/job-export-lifetime/TESTS.txt b/docs/ui-modernisation/evidence/job-export-lifetime/TESTS.txt new file mode 100644 index 00000000..5cf34466 --- /dev/null +++ b/docs/ui-modernisation/evidence/job-export-lifetime/TESTS.txt @@ -0,0 +1,10 @@ + +> job-tracker-ui@0.1.0 test +> jest --runInBand job-export-lifetime.test.tsx job-import.test.tsx settings-import-lifetime.test.tsx file-picker-activation.test.tsx + + +Test Suites: 4 passed, 4 total +Tests: 35 passed, 35 total +Snapshots: 0 total +Time: 9.805 s, estimated 16 s +Ran all test suites matching job-export-lifetime.test.tsx|job-import.test.tsx|settings-import-lifetime.test.tsx|file-picker-activation.test.tsx.