test(correspondence): retain recovery and accessibility evidence
@@ -0,0 +1,29 @@
|
||||
# Correspondence read and manual-note recovery
|
||||
|
||||
Baseline `b9bb3c44`; implementation/test/verifier `c751b427` on `codex/a3-ui-10`.
|
||||
|
||||
## Changes and preservation
|
||||
|
||||
- Superseded message reads cannot replace the current application or its error/loading state. Previous messages clear when the application changes; obsolete callbacks cannot start a previous-job read. The existing job/unmount lifecycle and request counter guard these boundaries.
|
||||
- Manual note submission locks its captured form and rejects duplicate clicks. Rejected writes retain the draft and permit a deliberate retry. Old-job/unmounted completions cannot clear a newer draft, show an unrelated failure or trigger another read.
|
||||
- A committed note followed by failed refresh clears the submitted draft and presents the existing read-retry notice. It does not report a failed write or invite another POST.
|
||||
- Read errors translate at render time without another request or lost draft. Pending note rejection uses the current UI language. Existing Gmail connection/import/linking permissions and the manual note payload remain unchanged.
|
||||
- Disabled character-count helper text remains readable; the first real-browser pending-state scan measured 4.46:1 before this correction. The input remains disabled. No accessibility rule was suppressed.
|
||||
|
||||
## Verification
|
||||
|
||||
PASSED: 27 frontend cases across correspondence recovery and the existing Gmail import suite: 14 recovery cases plus 13 existing cases. Earlier 18/22/25/26-case runs overlap this final run. Red receipts retain three initial read-boundary failures, three manual-note failures and one unnecessary locale-read failure. An initial TypeScript failure from unsupported test-only `exact` selectors was corrected before the final successful build.
|
||||
|
||||
PASSED: production static build/TypeScript and scoped ESLint. No backend, dependency, schema or migration changed.
|
||||
|
||||
PASSED: eight controlled real-application journeys at 390/1440 widths × EN/NB × light/dark. Forty accessibility captures cover read error, rejected write, pending write, committed-write/read error and recovery. Sixteen intercepted write attempts comprise eight deliberate fixture500 rejections and eight fixture commitments. Each journey checks live language switching without extra reads, retained drafts, keyboard read retry, pending duplicate exclusion and read-only recovery after commitment. Zero page errors/unavailable API reads; external Google Fonts requests were blocked. The single pilot overlaps the final eight configurations. Incomplete-fixture and failed-contrast receipts are retained separately, not counted as passes.
|
||||
|
||||
Desktop light and mobile Bokmål dark captures were visually inspected. Existing nested correspondence surfaces remain a visual follow-up; these states do not establish whole-route parity with A3.
|
||||
|
||||
Evidence: `evidence/correspondence-recovery/`. `CORRESPONDENCE_RECOVERY_SOURCE_MANIFEST.json` binds LF-normalised source/text evidence and raw images/export files. It is content provenance, not a release image or full integrated acceptance.
|
||||
|
||||
## Remaining work and rollback
|
||||
|
||||
Manual pasted-email recording still needs the equivalent pending-write, stale completion and committed-refresh qualification. Gmail candidate/link/refresh mutation races, cross-job unsaved-draft navigation policy and wider mail workflows retain their own open review. Provider-shaped API responses here are synthetic; no real mail is fetched or sent. Human/native-device, assistive-technology, integrated security/recovery, final A3 and release gates remain open.
|
||||
|
||||
Rollback: revert `c751b427`, rebuild and rerun affected correspondence checks. No stored data changes are made by the patch itself. A real in-flight POST may have committed even if the UI is unmounted; no automatic write retry or server idempotency claim is introduced.
|
||||
@@ -0,0 +1,158 @@
|
||||
{
|
||||
"sourceContentCommit": "c751b4272ecaadc66ef8c8e3306faf00b06853be",
|
||||
"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/ThemeProvider.tsx": "1d25fd091ca632f7671e413db24e917d4ca4a375fddade0ca1ff397a8ae9f950",
|
||||
"job-tracker-ui/src/DateLocalizationProvider.tsx": "cd46fdfda8c145d7c634e1ed6a714ffeb898a5ef30d705aa019390c9b8456870",
|
||||
"job-tracker-ui/src/i18n/I18nProvider.tsx": "dfa8d95510a7dd872e1b9bbddf9bb4ab31da4d4b5e932b0099397d11e08ad108",
|
||||
"job-tracker-ui/src/i18n/translations.ts": "a0b706a859264773418ec3f1275332e97add913de65c4d6efaef04b23ae8e1c5",
|
||||
"job-tracker-ui/src/components/Correspondence.tsx": "1421f15d4807553f4088680add79e85ead5d1e502b323b5eccf69e07a868b7a3",
|
||||
"job-tracker-ui/src/components/ViewStateNotice.tsx": "7b6c3e6c311860897eb5327936dbb129e860781929cfd9a4d4e17f81c607c70c",
|
||||
"job-tracker-ui/src/views/ApplicationWorkspacePage.tsx": "2d31056102c277585bf382a04c8137d3c0502cff068d4bd63f7869bef4b9b7c9",
|
||||
"job-tracker-ui/src/api.ts": "f75ac7be07a743396843ddad5fd3371e2d5fd3d9c5d933e09e26fae2159f2378",
|
||||
"job-tracker-ui/src/correspondence-recovery.test.tsx": "74edffc2e7b0e56dd7724ea446ce428bac099566282dae2892098b9a67051d28",
|
||||
"job-tracker-ui/src/correspondence-gmail-import.test.tsx": "f59abb397a716951399c64dfa6fbaeba3c63aaddd60e45eed7cdd5caf590a1e8",
|
||||
"job-tracker-ui/scripts/verify-correspondence-recovery.mjs": "005cbdfa53e0eb51d6ec878e39cf92c9351fa37a6110f672f4db84618b35f263",
|
||||
"job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626",
|
||||
"job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab"
|
||||
},
|
||||
"evidence": {
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-dark-committed-read-error.png": "52a24abfe8ab4335922cbbb77951f95abaadd5ef6ecd179b7baf8218a68494fd",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-dark-read-error.png": "b0c0c0bfa815fb6bf393f9ea26da9a7cb90ea473f3d8e9715908dd5a279a28da",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-dark-recovered.png": "2d69a56b7472c57fedd0f6d90b17e4bfc9145c1e1e5debbf793dcc0770b235cb",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-dark-write-error.png": "37c94caca9dfee592d7f3c51ae60be5585d6592d0e6f32bbbd132f619f03817f",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-dark-write-pending.png": "692ddd5744ff1b0f7900345bcdba4471a1a1f8b98cc7f47567a0fdcedd18a65d",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-light-committed-read-error.png": "374f40e14e3f61282cea9406de8a082386a25db148d7f38048ae78808d28642d",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-light-read-error.png": "c9dc2eba30e96e97be63164ed9175c958dba47c3328090711c3fd29a83ebfff8",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-light-recovered.png": "6f492e41eb195628e17d8e0e823acfb30f7820b43557137cbd2771fd59a43fd6",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-light-write-error.png": "b1733d9f2483a4ce7333e8d72876288b54ca1bd47da03972ac66e02082f7e600",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-en-light-write-pending.png": "993b11a9b5bf2740e7961c74a25f6e6f426f287efcdf75e0f5d6872a7d2acc90",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-dark-committed-read-error.png": "1d1fa100fa9496a5285f1b1e40155c87b94df27a745469e65d47c06002c8fba5",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-dark-read-error.png": "d9f3c40532f9678be57d414c012b0c61666ef18861b2008f87fd9d7f6801cf2f",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-dark-recovered.png": "571ec92467b4f186aadd3f458e4d509a5f8b5738eebde75aa1fd702f8bcc6b43",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-dark-write-error.png": "a0dedb967597c0213a89250d101cb580a8c5e22bcf2da88b240de0398868f4fd",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-dark-write-pending.png": "712d5c2c011f1e34b8c9213b80527f937cf723ecba6b5f64c29a4085f22c8f39",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-light-committed-read-error.png": "e87b60d74608e16886b069052444f5256898e07516eb9ff67550dae3d740684f",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-light-read-error.png": "54130b6492f91a44c9202ba559e1ea35463508423a4ba41c762127f3fe833cad",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-light-recovered.png": "9917bd31d08d295f980cd2a3e3798a80d1e9dfd00836aa442999cbdfeb18c7f6",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-light-write-error.png": "aa9ea953aadcab3293885a7bbdddf2d7b5797d01c8e8658eb7c6d51e1899764d",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/1440-nb-light-write-pending.png": "72bef0a68b5a58721421312de189760390b7f08ffe72f4b57a60418388bee225",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-dark-committed-read-error.png": "71f98b92819f2da6c3623fca07fdd7e62deb39889828752ab9053667cd65c8ca",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-dark-read-error.png": "db89385e241a7be313d5cd8be9fd7d72caba9fff75e85fca7d4af0f8b028ef71",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-dark-recovered.png": "20f2a1bcb968532478d65be519906c87fe11d1d332fc9d84b8e2abfee7676355",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-dark-write-error.png": "b9f0980b4ce8bec2a5c2e844fc2db4825a8cafd3710db243cc465970baf8c4f6",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-dark-write-pending.png": "76622f6bb0209c0a8b4d578179c520dc9ec9c4d414d2725e69ff10afd0309b05",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-light-committed-read-error.png": "045be4dffacd0646d829306c50898e986a64f00b2b6c5c3af5e20de98367983d",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-light-read-error.png": "652a024aeb9d7c8ef3613cf707355d31548e75227d4bee154ac1f62940050aff",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-light-recovered.png": "8db80ba964bd505dc1a4257c16db36b2be8e5fa7a1e705f8bdf33e42e5364c54",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-light-write-error.png": "f8615167ccb1818697a05b058caf7a22fac4dae620a7f5eb0c7f0c3b769dc928",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-en-light-write-pending.png": "67b54f4ae84e4ea0f75dfa7308a0fc916151c8f28efe88211fcf38149b3987ba",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-dark-committed-read-error.png": "799a27d3fe790c8dfadd69a1db19f4ea5c3787066250f116c54fa30e019c6b84",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-dark-read-error.png": "60152bda8486dc18556dcd6c4e94134c542de53ec596e562449f4e97a641d552",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-dark-recovered.png": "a08443bcdc65f3f5a056de7f2c528ac631b64622ba43acb5c29086aadb2393ba",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-dark-write-error.png": "b25e95cb6c96acdfff9597652d121662e933945b8695ff7d627775ce307a207f",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-dark-write-pending.png": "09a9362c85ec4c84f04f37d9f12f1a61ba6b5b4e6a73b019a89fdc4036138155",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-light-committed-read-error.png": "d7248cd297e0c6646b2cc6c3ba1ce68d19e78c65b8cb936db2f8a982955927a3",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-light-read-error.png": "1400fc9102c268a7727573c136e961452d68c50964ea8a11b3cc1d408f55e646",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-light-recovered.png": "2586fc39be8a1d6cc702765f8049e115d0a92e802921770449a6b19ff5df4835",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-light-write-error.png": "ce5dc9ee6819f4e140f75b4cdbfb9a009136408122b2214fbdae9dcccaad5ab9",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/390-nb-light-write-pending.png": "28c3f85deba32cd909b738b387039773fef92d873b64d80aaff40e71be4face0",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/BROWSER.json": "df98ca22872dd532067424724a0dad8fa6f7c7d3a78287261fe008e1286dd3cd",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/BROWSER.txt": "17e88f360f262e0382ebb7cd8edc02a68bddb0b525b219f4dc26dacb6928244d",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/BUILD.txt": "49f28f616feca3e25089dd5330e506badda0714f42e5ee609a0fb17ed45149f2",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/INCOMPLETE_FIXTURE.json": "9b8ea7d84e207fbccdb8bcf3c544925e7cacf9881ac89f61e151d6f4aa1048d7",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/INCOMPLETE_FIXTURE.txt": "dc1df8ea826a4aecee0492773e42b6707c1889cb7b887185808d51b5539304da",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/LINT.txt": "4fdab9a86694d3bd23b27ed16d9678ff6301455473d7f15c97c04b7d3ecece97",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/PILOT.json": "72a23e7c4670a8616f86a6b446331737b24d2620c3b9dafbf7e9b7bd2c55ea24",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/RED_BROWSER.json": "324b7ff105c934e23606556f0cfd01f581eb2081fe7425e941549cd7f4158f71",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/RED_BROWSER.txt": "2f1d309d491f8bb96719a3cc7d4158f5050899a7fa6c5b08bf95bda4c41dc63f",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/RED_LOCALE.txt": "59e1a4a4c7a6b0776d5cafdcf9490ba05d6921cd7e7ac1e0086d5245ebcfc14c",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/RED_NOTE.txt": "dab2694df1858d6bfca7924434577dbcb7e28f9b9d6b98425dd3ec8e1bb44436",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/RED_READS.txt": "80f85083fabec4c4cc0729ce42ea618c993fea6976cd3eded487069bda371403",
|
||||
"docs/ui-modernisation/evidence/correspondence-recovery/TESTS.txt": "38f26d7b378200e17979ec1829f8cf7741b38b8dd974fb81eb59dcbe5196bbc4",
|
||||
"docs/ui-modernisation/CORRESPONDENCE_RECOVERY.md": "5eccd188bfb0c0bb18dd4e18eba98dae332249a01f648b22bba0294acd32c18d"
|
||||
},
|
||||
"export": {
|
||||
"job-tracker-ui/out/404.html": "04f1f9c9e050a356020515230edb029bf95180f70bb4d556eba38f65339547c6",
|
||||
"job-tracker-ui/out/__next.__PAGE__.txt": "51f97f33f5a8dbf16a3dcb5c6f01f547fcfa4345fb72345bf7a8ce11d2c6f11a",
|
||||
"job-tracker-ui/out/__next._full.txt": "60995404429cd72e8d2c9ca8221a0e2e97f1ef98e34ff10c0df46d9b8067c8d6",
|
||||
"job-tracker-ui/out/__next._tree.txt": "cb486519ee155c2e2d541247fe755bb04fb73e638b4c3052e05b413b5e4bfa97",
|
||||
"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/0tfel3w7fxsh1.js": "3855f980ca8a126b94efa47d3afd369e56a34cdddb13e5542d27704945f85909",
|
||||
"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/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/22wx8--1b9tnq.js": "3f7d8e762371262c6a740b4dac21725b424847319afac46055e97074a99ff5f5",
|
||||
"job-tracker-ui/out/_next/static/chunks/274f8aifi_wup.js": "bc5bc5617b4acbbbb1c7966322c508bb5554024d78e71e523e27f7f5bba5a8ab",
|
||||
"job-tracker-ui/out/_next/static/chunks/29jdblthf0w7a.js": "e84b4f7c225d58099aa89999544f7318cb23c0c71f2385c31b3c9181a62ab7f0",
|
||||
"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/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10",
|
||||
"job-tracker-ui/out/_next/static/chunks/2sj7ufu_6n9af.js": "69d7471c01b8001d52abc848910a8c35457dac3aaa4ce66eae2a03ca29ad623b",
|
||||
"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/38su3jk5728xn.js": "739aa11cfaf9c252af387a31db658f707099b59e27b79b54c316b36da645e0e7",
|
||||
"job-tracker-ui/out/_next/static/chunks/3_4dnl1l3809g.js": "50288c2864a9e8c7ef25c93762edb86e4e617778737b5b5a028c53c5b93d3b70",
|
||||
"job-tracker-ui/out/_next/static/chunks/3_50_lnzqdlp4.js": "31de490feabaef5ce9c57b0c6ad94e3bb3f3df03348cd402962f6bc3e1fa8964",
|
||||
"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/hiDMI7mhgNrQe04qeFv2j/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea",
|
||||
"job-tracker-ui/out/_next/static/hiDMI7mhgNrQe04qeFv2j/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a",
|
||||
"job-tracker-ui/out/_next/static/hiDMI7mhgNrQe04qeFv2j/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00",
|
||||
"job-tracker-ui/out/_not-found/__next._full.txt": "e31a15438afbb38c5cc95cf47f06634342e329211fd58efd92dc3f365757ed18",
|
||||
"job-tracker-ui/out/_not-found/__next._not-found/__PAGE__.txt": "aa58fca9e59519154c78d2323da5b377fc81afc6fe37e0f2bf8c8f2fff9e77bf",
|
||||
"job-tracker-ui/out/_not-found/__next._tree.txt": "b47beea9be8f022b2cfe5879dc1765b3c80ac3ef52f9d338886f30f3ad5e1b68",
|
||||
"job-tracker-ui/out/_not-found.html": "04f1f9c9e050a356020515230edb029bf95180f70bb4d556eba38f65339547c6",
|
||||
"job-tracker-ui/out/_not-found.txt": "e31a15438afbb38c5cc95cf47f06634342e329211fd58efd92dc3f365757ed18",
|
||||
"job-tracker-ui/out/favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a",
|
||||
"job-tracker-ui/out/favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3",
|
||||
"job-tracker-ui/out/index.html": "f182d10f02356bc977f0a07d7e97d1c258da49022127ab41306fa0264e9acf8b",
|
||||
"job-tracker-ui/out/index.txt": "60995404429cd72e8d2c9ca8221a0e2e97f1ef98e34ff10c0df46d9b8067c8d6",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 36 KiB |
@@ -0,0 +1,452 @@
|
||||
{
|
||||
"journeys": [
|
||||
{
|
||||
"name": "390-en-light",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
},
|
||||
{
|
||||
"name": "390-en-dark",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
},
|
||||
{
|
||||
"name": "390-nb-light",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
},
|
||||
{
|
||||
"name": "1440-en-light",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
},
|
||||
{
|
||||
"name": "1440-en-dark",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-light",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-dark",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
}
|
||||
],
|
||||
"captures": [
|
||||
{
|
||||
"name": "390-en-light",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-en-light",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-en-light",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-en-light",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-en-light",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-en-dark",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-en-dark",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-en-dark",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-en-dark",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-en-dark",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-light",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-light",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-light",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-light",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-light",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-light",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-light",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-light",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-light",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-light",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-dark",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-dark",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-dark",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-dark",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-en-dark",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-light",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-light",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-light",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-light",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-light",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-dark",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-dark",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-dark",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-dark",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-dark",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
}
|
||||
],
|
||||
"writes": [
|
||||
{
|
||||
"name": "390-en-light",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "390-en-light",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
},
|
||||
{
|
||||
"name": "390-en-dark",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "390-en-dark",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
},
|
||||
{
|
||||
"name": "390-nb-light",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "390-nb-light",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
},
|
||||
{
|
||||
"name": "1440-en-light",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "1440-en-light",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
},
|
||||
{
|
||||
"name": "1440-en-dark",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "1440-en-dark",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-light",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-light",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-dark",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "1440-nb-dark",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
Checking 390-en-light
|
||||
Checking 390-en-dark
|
||||
Checking 390-nb-light
|
||||
Checking 390-nb-dark
|
||||
Checking 1440-en-light
|
||||
Checking 1440-en-dark
|
||||
Checking 1440-nb-light
|
||||
Checking 1440-nb-dark
|
||||
PASS 8 recovery journeys, 40 accessibility captures, 16 intercepted write attempts
|
||||
@@ -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 26ms
|
||||
|
||||
Creating an optimized production build ...
|
||||
✓ Compiled successfully in 540ms
|
||||
Running TypeScript ...
|
||||
Finished TypeScript in 5.6s ...
|
||||
Collecting page data using 4 workers ...
|
||||
Generating static pages using 4 workers (0/3) ...
|
||||
✓ Generating static pages using 4 workers (3/3) in 814ms
|
||||
Finalizing page optimization ...
|
||||
|
||||
Route (app)
|
||||
┌ ○ /
|
||||
└ ○ /_not-found
|
||||
|
||||
|
||||
○ (Static) prerendered as static content
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"journeys": [
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
}
|
||||
],
|
||||
"captures": [
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
}
|
||||
],
|
||||
"writes": [
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"unavailableReads": [
|
||||
"/api/jobapplications/reminders",
|
||||
"/api/companies"
|
||||
],
|
||||
"blockedExternal": [
|
||||
"https://fonts.googleapis.com"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
Checking 390-nb-dark
|
||||
node:internal/modules/run_main:107
|
||||
triggerUncaughtException(
|
||||
^
|
||||
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ '/api/jobapplications/reminders',
|
||||
+ '/api/companies'
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at file:///C:/Users/Connor/.codex/worktrees/direct-roadmap-integration/Job%20tracker/job-tracker-ui/scripts/verify-correspondence-recovery.mjs:92:47 {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ '/api/jobapplications/reminders', '/api/companies' ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
Node.js v24.19.0
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\job-tracker-ui\src\components\Correspondence.tsx
|
||||
281:37 warning The ref value 'messageRequest.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'messageRequest.current' to a variable inside the effect, and use that variable in the cleanup function react-hooks/exhaustive-deps
|
||||
|
||||
✖ 1 problem (0 errors, 1 warning)
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"journeys": [
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"readRetryPreservesDraft": true,
|
||||
"rejectedWritePreservesDraft": true,
|
||||
"pendingWriteExcludesDuplicate": true,
|
||||
"committedReadFailureRetriesGetOnly": true,
|
||||
"reads": 4,
|
||||
"posts": 2
|
||||
}
|
||||
],
|
||||
"captures": [
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "write-pending",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "committed-read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "recovered",
|
||||
"violations": []
|
||||
}
|
||||
],
|
||||
"writes": [
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"unavailableReads": [],
|
||||
"blockedExternal": [
|
||||
"https://fonts.googleapis.com"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"journeys": [],
|
||||
"captures": [
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "read-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "write-error",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"state": "write-pending",
|
||||
"violations": [
|
||||
{
|
||||
"id": "color-contrast",
|
||||
"impact": "serious",
|
||||
"tags": [
|
||||
"cat.color",
|
||||
"wcag2aa",
|
||||
"wcag143",
|
||||
"TTv5",
|
||||
"TT13.c",
|
||||
"EN-301-549",
|
||||
"EN-9.1.4.3",
|
||||
"ACT",
|
||||
"RGAAv4",
|
||||
"RGAA-3.2.1"
|
||||
],
|
||||
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
|
||||
"help": "Elements must meet minimum color contrast ratio thresholds",
|
||||
"helpUrl": "https://dequeuniversity.com/rules/axe/4.13/color-contrast?application=playwright",
|
||||
"nodes": [
|
||||
{
|
||||
"any": [
|
||||
{
|
||||
"id": "color-contrast",
|
||||
"data": {
|
||||
"fgColor": "#8b8a95",
|
||||
"bgColor": "#282334",
|
||||
"contrastRatio": 4.46,
|
||||
"fontSize": "9.0pt (12px)",
|
||||
"fontWeight": "normal",
|
||||
"messageKey": null,
|
||||
"expectedContrastRatio": "4.5:1"
|
||||
},
|
||||
"relatedNodes": [
|
||||
{
|
||||
"html": "<main class=\"MuiBox-root css-jk08jh\" id=\"app-main-content\" tabindex=\"-1\">",
|
||||
"target": [
|
||||
"#app-main-content"
|
||||
]
|
||||
}
|
||||
],
|
||||
"impact": "serious",
|
||||
"message": "Element has insufficient color contrast of 4.46 (foreground color: #8b8a95, background color: #282334, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
|
||||
}
|
||||
],
|
||||
"all": [],
|
||||
"none": [],
|
||||
"impact": "serious",
|
||||
"html": "<p class=\"MuiFormHelperText-root Mui-disabled MuiFormHelperText-sizeSmall MuiFormHelperText-contained MuiFormHelperText-filled css-5w5z23\" id=\"_r_18_-helper-text\">25 tegn</p>",
|
||||
"target": [
|
||||
"#_r_18_-helper-text"
|
||||
],
|
||||
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.46 (foreground color: #8b8a95, background color: #282334, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"writes": [
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"attempt": 1,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixture500"
|
||||
},
|
||||
{
|
||||
"name": "390-nb-dark",
|
||||
"attempt": 2,
|
||||
"body": {
|
||||
"jobApplicationId": 42,
|
||||
"from": "Me",
|
||||
"content": "Retain the synthetic note"
|
||||
},
|
||||
"result": "fixtureCommitted"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"unavailableReads": [
|
||||
"/api/jobapplications/reminders",
|
||||
"/api/companies"
|
||||
],
|
||||
"blockedExternal": [
|
||||
"https://fonts.googleapis.com"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
Checking 390-nb-dark
|
||||
node:internal/modules/run_main:107
|
||||
triggerUncaughtException(
|
||||
^
|
||||
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ description: 'Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds',
|
||||
+ help: 'Elements must meet minimum color contrast ratio thresholds',
|
||||
+ helpUrl: 'https://dequeuniversity.com/rules/axe/4.13/color-contrast?application=playwright',
|
||||
+ id: 'color-contrast',
|
||||
+ impact: 'serious',
|
||||
+ nodes: [
|
||||
+ {
|
||||
+ all: [],
|
||||
+ any: [
|
||||
+ {
|
||||
+ data: {
|
||||
+ bgColor: '#282334',
|
||||
+ contrastRatio: 4.46,
|
||||
+ expectedContrastRatio: '4.5:1',
|
||||
+ fgColor: '#8b8a95',
|
||||
+ fontSize: '9.0pt (12px)',
|
||||
+ fontWeight: 'normal',
|
||||
+ messageKey: null
|
||||
+ },
|
||||
+ id: 'color-contrast',
|
||||
+ impact: 'serious',
|
||||
+ message: 'Element has insufficient color contrast of 4.46 (foreground color: #8b8a95, background color: #282334, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1',
|
||||
+ relatedNodes: [
|
||||
+ {
|
||||
+ html: '<main class="MuiBox-root css-jk08jh" id="app-main-content" tabindex="-1">',
|
||||
+ target: [
|
||||
+ '#app-main-content'
|
||||
+ ]
|
||||
+ }
|
||||
+ ]
|
||||
+ }
|
||||
+ ],
|
||||
+ failureSummary: 'Fix any of the following:\n' +
|
||||
+ ' Element has insufficient color contrast of 4.46 (foreground color: #8b8a95, background color: #282334, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1',
|
||||
+ html: '<p class="MuiFormHelperText-root Mui-disabled MuiFormHelperText-sizeSmall MuiFormHelperText-contained MuiFormHelperText-filled css-5w5z23" id="_r_18_-helper-text">25 tegn</p>',
|
||||
+ impact: 'serious',
|
||||
+ none: [],
|
||||
+ target: [
|
||||
+ '#_r_18_-helper-text'
|
||||
+ ]
|
||||
+ }
|
||||
+ ],
|
||||
+ tags: [
|
||||
+ 'cat.color',
|
||||
+ 'wcag2aa',
|
||||
+ 'wcag143',
|
||||
+ 'TTv5',
|
||||
+ 'TT13.c',
|
||||
+ 'EN-301-549',
|
||||
+ 'EN-9.1.4.3',
|
||||
+ 'ACT',
|
||||
+ 'RGAAv4',
|
||||
+ 'RGAA-3.2.1'
|
||||
+ ]
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at capture (file:///C:/Users/Connor/.codex/worktrees/direct-roadmap-integration/Job%20tracker/job-tracker-ui/scripts/verify-correspondence-recovery.mjs:60:14)
|
||||
at async file:///C:/Users/Connor/.codex/worktrees/direct-roadmap-integration/Job%20tracker/job-tracker-ui/scripts/verify-correspondence-recovery.mjs:80:29 {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [
|
||||
{
|
||||
id: 'color-contrast',
|
||||
impact: 'serious',
|
||||
tags: [
|
||||
'cat.color', 'wcag2aa',
|
||||
'wcag143', 'TTv5',
|
||||
'TT13.c', 'EN-301-549',
|
||||
'EN-9.1.4.3', 'ACT',
|
||||
'RGAAv4', 'RGAA-3.2.1'
|
||||
],
|
||||
description: 'Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds',
|
||||
help: 'Elements must meet minimum color contrast ratio thresholds',
|
||||
helpUrl: 'https://dequeuniversity.com/rules/axe/4.13/color-contrast?application=playwright',
|
||||
nodes: [
|
||||
{
|
||||
any: [ [Object] ],
|
||||
all: [],
|
||||
none: [],
|
||||
impact: 'serious',
|
||||
html: '<p class="MuiFormHelperText-root Mui-disabled MuiFormHelperText-sizeSmall MuiFormHelperText-contained MuiFormHelperText-filled css-5w5z23" id="_r_18_-helper-text">25 tegn</p>',
|
||||
target: [ '#_r_18_-helper-text' ],
|
||||
failureSummary: 'Fix any of the following:\n' +
|
||||
' Element has insufficient color contrast of 4.46 (foreground color: #8b8a95, background color: #282334, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1'
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
Node.js v24.19.0
|
||||
@@ -0,0 +1,37 @@
|
||||
|
||||
> job-tracker-ui@0.1.0 test
|
||||
> jest --runInBand correspondence-recovery.test.tsx
|
||||
|
||||
FAIL src/correspondence-recovery.test.tsx
|
||||
● a displayed read error follows UI language without another request or lost draft
|
||||
|
||||
expect(received).toEqual(expected) // deep equality
|
||||
|
||||
- Expected - 0
|
||||
+ Received + 3
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
"/correspondence/42",
|
||||
],
|
||||
Array [
|
||||
"/gmail/status",
|
||||
],
|
||||
+ Array [
|
||||
+ "/correspondence/42",
|
||||
+ ],
|
||||
]
|
||||
|
||||
187 | expect(screen.getAllByText(translations.nb.correspondenceLoadFailed)[0]).toBeVisible();
|
||||
188 | expect(screen.getByLabelText(translations.nb.correspondenceLogNoteOrMessage)).toHaveValue("Retain while translating error");
|
||||
> 189 | expect(client.get.mock.calls).toEqual(reads); expect(client.post).not.toHaveBeenCalled();
|
||||
| ^
|
||||
190 | });
|
||||
191 |
|
||||
|
||||
at Object.toEqual (src/correspondence-recovery.test.tsx:189:33)
|
||||
|
||||
Test Suites: 1 failed, 1 total
|
||||
Tests: 1 failed, 13 passed, 14 total
|
||||
Snapshots: 0 total
|
||||
Time: 4.558 s
|
||||
Ran all test suites matching correspondence-recovery.test.tsx.
|
||||
@@ -0,0 +1,201 @@
|
||||
|
||||
> job-tracker-ui@0.1.0 test
|
||||
> jest --runInBand correspondence-recovery.test.tsx
|
||||
|
||||
console.error
|
||||
An update to Correspondence 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
|
||||
|
||||
177 | const res = await api.get<CorrespondenceMessage[]>(`/correspondence/${jobId}`);
|
||||
178 | if (request !== messageRequest.current) return;
|
||||
> 179 | setMessages(res.data);
|
||||
| ^
|
||||
180 | setMessagesError(null);
|
||||
181 | } catch (error) {
|
||||
182 | if (request !== messageRequest.current) return;
|
||||
|
||||
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 setMessages (src/components/Correspondence.tsx:179:7)
|
||||
|
||||
console.error
|
||||
An update to Correspondence 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
|
||||
|
||||
178 | if (request !== messageRequest.current) return;
|
||||
179 | setMessages(res.data);
|
||||
> 180 | setMessagesError(null);
|
||||
| ^
|
||||
181 | } catch (error) {
|
||||
182 | if (request !== messageRequest.current) return;
|
||||
183 | setMessagesError(getApiErrorMessage(error, t("correspondenceLoadFailed")));
|
||||
|
||||
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 setMessagesError (src/components/Correspondence.tsx:180:7)
|
||||
|
||||
console.error
|
||||
An update to Correspondence 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
|
||||
|
||||
184 | throw error; // Existing mutation callers still handle their own operation failure.
|
||||
185 | } finally {
|
||||
> 186 | if (request === messageRequest.current) setMessagesLoading(false);
|
||||
| ^
|
||||
187 | }
|
||||
188 | }, [jobId, t]);
|
||||
189 |
|
||||
|
||||
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 setMessagesLoading (src/components/Correspondence.tsx:186:47)
|
||||
|
||||
console.error
|
||||
An update to Correspondence 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
|
||||
|
||||
192 | setGmailLoading(true);
|
||||
193 | const res = await api.get<GmailStatus>("/gmail/status");
|
||||
> 194 | setGmailStatus(res.data);
|
||||
| ^
|
||||
195 | } catch {
|
||||
196 | setGmailStatus({ connected: false });
|
||||
197 | } finally {
|
||||
|
||||
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 setGmailStatus (src/components/Correspondence.tsx:194:7)
|
||||
|
||||
console.error
|
||||
An update to Correspondence 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
|
||||
|
||||
196 | setGmailStatus({ connected: false });
|
||||
197 | } finally {
|
||||
> 198 | setGmailLoading(false);
|
||||
| ^
|
||||
199 | }
|
||||
200 | }, []);
|
||||
201 |
|
||||
|
||||
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 setGmailLoading (src/components/Correspondence.tsx:198:7)
|
||||
|
||||
FAIL src/correspondence-recovery.test.tsx
|
||||
● one pending note submission excludes duplicate writes and draft edits
|
||||
|
||||
expect(jest.fn()).toHaveBeenCalledTimes(expected)
|
||||
|
||||
Expected number of calls: 1
|
||||
Received number of calls: 2
|
||||
|
||||
81 | const log = screen.getByRole("button", { name: translations.en.correspondenceAdd, exact: true });
|
||||
82 | fireEvent.click(log); fireEvent.click(log);
|
||||
> 83 | expect(client.post).toHaveBeenCalledTimes(1);
|
||||
| ^
|
||||
84 | expect(input).toBeDisabled(); expect(log).toBeDisabled();
|
||||
85 | await act(async () => pending.resolve({ data: {} }));
|
||||
86 | expect(input).toHaveValue(""); expect(input).toBeEnabled();
|
||||
|
||||
at Object.toHaveBeenCalledTimes (src/correspondence-recovery.test.tsx:83:23)
|
||||
|
||||
● a committed note followed by a failed refresh is retried as a read, not reported as a failed write
|
||||
|
||||
expect(element).not.toBeInTheDocument()
|
||||
|
||||
expected document not to contain element, found <div class="MuiAlert-message css-zioonp-MuiAlert-message">Failed to add message.</div> instead
|
||||
|
||||
114 | fireEvent.click(screen.getByRole("button", { name: translations.en.correspondenceAdd, exact: true }));
|
||||
115 | const retry = await screen.findByRole("button", { name: translations.en.retry, exact: true });
|
||||
> 116 | expect(screen.queryByText(translations.en.correspondenceAddFailed)).not.toBeInTheDocument();
|
||||
| ^
|
||||
117 | expect(input).toHaveValue("");
|
||||
118 | fireEvent.click(retry); await screen.findByText("Committed note");
|
||||
119 | expect(client.post).toHaveBeenCalledTimes(1);
|
||||
|
||||
at Object.toBeInTheDocument (src/correspondence-recovery.test.tsx:116:75)
|
||||
|
||||
● an old job's pending note cannot clear the next draft or reload the previous application
|
||||
|
||||
expect(element).toHaveValue(Next draft)
|
||||
|
||||
Expected the element to have value:
|
||||
Next draft
|
||||
Received:
|
||||
|
||||
130 | const reads = [...client.get.mock.calls];
|
||||
131 | await act(async () => pending.resolve({ data: {} }));
|
||||
> 132 | expect(screen.getByLabelText(translations.en.correspondenceLogNoteOrMessage)).toHaveValue("Next draft");
|
||||
| ^
|
||||
133 | expect(client.get.mock.calls).toEqual(reads);
|
||||
134 | });
|
||||
135 |
|
||||
|
||||
at Object.toHaveValue (src/correspondence-recovery.test.tsx:132:81)
|
||||
|
||||
Test Suites: 1 failed, 1 total
|
||||
Tests: 3 failed, 6 passed, 9 total
|
||||
Snapshots: 0 total
|
||||
Time: 4.066 s
|
||||
Ran all test suites matching correspondence-recovery.test.tsx.
|
||||
@@ -0,0 +1,254 @@
|
||||
|
||||
> job-tracker-ui@0.1.0 test
|
||||
> jest --runInBand correspondence-recovery.test.tsx
|
||||
|
||||
FAIL src/correspondence-recovery.test.tsx
|
||||
● a late previous-job success cannot overwrite current messages or error state
|
||||
|
||||
TestingLibraryElementError: Unable to find an element with the text: Current application message. 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
|
||||
<body>
|
||||
<div>
|
||||
<div
|
||||
class="MuiBox-root css-0"
|
||||
>
|
||||
<span
|
||||
aria-atomic="true"
|
||||
aria-live="polite"
|
||||
class="MuiBox-root css-ty8jgw"
|
||||
role="status"
|
||||
>
|
||||
Content loaded.
|
||||
</span>
|
||||
<div
|
||||
class="MuiPaper-root MuiPaper-outlined MuiPaper-rounded css-1h1w43f-MuiPaper-root"
|
||||
>
|
||||
<div
|
||||
class="MuiBox-root css-1821gv5"
|
||||
>
|
||||
<div
|
||||
class="MuiBox-root css-1w1vbxm"
|
||||
>
|
||||
<div
|
||||
class="MuiBox-root css-1o0cahp"
|
||||
>
|
||||
<p
|
||||
class="MuiTypography-root MuiTypography-body1 css-u35b64-MuiTypography-root"
|
||||
>
|
||||
Stale previous application
|
||||
</p>
|
||||
<div
|
||||
class="MuiBox-root css-ipmqpd"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiTypography-caption css-2qd4a1-MuiTypography-root"
|
||||
>
|
||||
Company
|
||||
- Note
|
||||
- 11/11/2026, 1:00:00 PM
|
||||
</span>
|
||||
<button
|
||||
aria-label="Delete message"
|
||||
class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall css-1374xo4-MuiButtonBase-root-MuiIconButton-root"
|
||||
tabindex="0"
|
||||
type="button"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall css-120dh41-MuiSvgIcon-root"
|
||||
data-testid="DeleteOutlineIcon"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM8 9h8v10H8zm7.5-5-1-1h-5l-1 1H5v2h14V4z"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="MuiBox-root css-2a1bwi"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiTypography-overline css-12l99mj-MuiTypography-root"
|
||||
>
|
||||
Linked Gmail thread continuity
|
||||
</span>
|
||||
<p
|
||||
class="MuiTypography-root MuiTypography-body2 css-sn1rsr-MuiTypography-root"
|
||||
>
|
||||
Linked Gmail refresh only checks threads already tied to this job, so new correspondence can appear here without re-importing the whole thread.
|
||||
</p>
|
||||
<div
|
||||
class="MuiBox-root css-1mcghfl"
|
||||
>
|
||||
<div
|
||||
class="MuiChip-root MuiChip-outlined MuiChip-sizeSmall MuiChip-colorDefault MuiChip-outlinedDefault css-1w2bku1-MuiChip-root"
|
||||
>
|
||||
<span
|
||||
class="MuiChip-label MuiChip-labelSmall css-19m61dl-MuiChip-label"
|
||||
>
|
||||
Gmail not connected
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
class="MuiChip-root MuiChip-outlined MuiChip-sizeSmall MuiChip-colorDefault MuiChip-outlinedDefault css-1w2bku1-MuiChip-root"
|
||||
>
|
||||
<span
|
||||
class="MuiChip-label MuiChip-labelSmall css-19m61dl-MuiChip-label"
|
||||
>
|
||||
No linked threads yet
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="MuiBox-root css-280wdd"
|
||||
>
|
||||
<div
|
||||
class="MuiToggleButtonGroup-root MuiToggleButtonGroup-horizontal css-1qb8o-MuiToggleButtonGroup-root"
|
||||
role="group"
|
||||
>
|
||||
<button
|
||||
aria-pressed="true"
|
||||
class="MuiButtonBase-root MuiToggleButtonGroup-grouped MuiToggleButtonGroup-groupedHorizontal MuiToggleButton-root Mui-selected MuiToggleButton-sizeSmall MuiToggleButton-standard MuiToggleButtonGroup-grouped MuiToggleButtonGroup-groupedHorizontal MuiToggleButtonGroup-firstButton css-uuq42u-MuiButtonBase-root-MuiToggleButton-root"
|
||||
tabindex="0"
|
||||
type="button"
|
||||
value="Me"
|
||||
>
|
||||
Me
|
||||
</button>
|
||||
<button
|
||||
aria-pressed="false"
|
||||
class="MuiButtonBase-root MuiToggleButtonGroup-grouped MuiToggleButtonGroup-groupedHorizontal MuiToggleButton-root MuiToggleButton-sizeSmall MuiToggleButton-standard MuiToggleButtonGroup-grouped MuiToggleButtonGroup-groupedHorizontal MuiToggleButtonGroup-lastButton css-uuq42u-MuiButtonBase-root-MuiToggleButton-root"
|
||||
tabindex="0"
|
||||
type="button"
|
||||
value="Company"
|
||||
>
|
||||
Company
|
||||
</button>
|
||||
</div>
|
||||
<button
|
||||
class="MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary css-74b9is-MuiButtonBase-root-MuiButton-root"
|
||||
tabindex="0"
|
||||
type="button"
|
||||
>
|
||||
Import email
|
||||
</button>
|
||||
<div
|
||||
class="MuiFormControl-root MuiTextField-root css-9f1m7e-MuiFormControl-root-MuiTextField-root"
|
||||
>
|
||||
<label
|
||||
class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined css-10i8ezf-MuiFormLabel-root-MuiInputLabel-root"
|
||||
data-shrink="false"
|
||||
for="_r_4_"
|
||||
id="_r_4_-label"
|
||||
>
|
||||
Log note or message
|
||||
</label>
|
||||
<div
|
||||
class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl MuiInputBase-multiline css-hk3xm4-MuiInputBase-root-MuiOutlinedInput-root"
|
||||
>
|
||||
<textarea
|
||||
aria-describedby="_r_4_-helper-text"
|
||||
aria-invalid="false"
|
||||
class="MuiInputBase-input MuiOutlinedInput-input MuiInputBase-inputMultiline css-1cuox7w-MuiInputBase-input-MuiOutlinedInput-input"
|
||||
id="_r_4_"
|
||||
style="height: 0px; overflow: hidden;"
|
||||
/>
|
||||
<textarea
|
||||
aria-hidden="true"
|
||||
class="MuiInputBase-input MuiOutlinedInput-input MuiInputBase-inputMultiline css-1cuox7w-MuiInputBase-input-MuiOutlinedInput-input"
|
||||
readonly=""
|
||||
style="visibility: hidden; position: absolute; overflow: hidden; height: 0px; top: 0px; left: 0px; transform: translateZ(0); padding-top: 0px; padding-bottom: 0px; width: 100%;"
|
||||
tabindex="-1"
|
||||
/>
|
||||
<fieldset
|
||||
aria-hidden="true"
|
||||
class="MuiOutlinedInput-notchedOutline css-18p5xg2-MuiNotchedOutlined-root-MuiOutlinedInput-notchedOutline"
|
||||
>
|
||||
<legend
|
||||
class="css-1n64csd-MuiNotchedOutlined-root"
|
||||
>
|
||||
<span>
|
||||
Log note or message
|
||||
</span>
|
||||
</legend>
|
||||
</fieldset>
|
||||
</div>
|
||||
<p
|
||||
class="MuiFormHelperText-root MuiFormHelperText-sizeMedium MuiFormHelperText-contained css-1h0qynx-MuiFormHelperText-root"
|
||||
id="_r_4_-helper-text"
|
||||
>
|
||||
0 characters
|
||||
</p>
|
||||
</div>
|
||||
<button
|
||||
class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary Mui-disabled MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-colorPrimary css-83fk99-MuiButtonBase-root-MuiButton-root"
|
||||
disabled=""
|
||||
tabindex="-1"
|
||||
type="button"
|
||||
>
|
||||
Add
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
40 | else old.reject(new Error("previous job unavailable"));
|
||||
41 | });
|
||||
> 42 | expect(screen.getByText("Current application message")).toBeVisible();
|
||||
| ^
|
||||
43 | expect(screen.queryByText("Stale previous application")).not.toBeInTheDocument();
|
||||
44 | expect(screen.queryByText(translations.en.correspondenceLoadFailed)).not.toBeInTheDocument();
|
||||
45 | expect(client.post).not.toHaveBeenCalled();
|
||||
|
||||
at Object.getElementError (node_modules/@testing-library/dom/dist/config.js:37:19)
|
||||
at node_modules/@testing-library/dom/dist/query-helpers.js:76:38
|
||||
at node_modules/@testing-library/dom/dist/query-helpers.js:52:17
|
||||
at node_modules/@testing-library/dom/dist/query-helpers.js:95:19
|
||||
at getByText (src/correspondence-recovery.test.tsx:42:17)
|
||||
|
||||
● a late previous-job failure cannot overwrite current messages or error state
|
||||
|
||||
expect(element).not.toBeInTheDocument()
|
||||
|
||||
expected document not to contain element, found <p class="MuiTypography-root MuiTypography-body1 css-bergga-MuiTypography-root">Could not load this application's correspondence.</p> instead
|
||||
|
||||
42 | expect(screen.getByText("Current application message")).toBeVisible();
|
||||
43 | expect(screen.queryByText("Stale previous application")).not.toBeInTheDocument();
|
||||
> 44 | expect(screen.queryByText(translations.en.correspondenceLoadFailed)).not.toBeInTheDocument();
|
||||
| ^
|
||||
45 | expect(client.post).not.toHaveBeenCalled();
|
||||
46 | });
|
||||
47 |
|
||||
|
||||
at toBeInTheDocument (src/correspondence-recovery.test.tsx:44:76)
|
||||
|
||||
● changing application clears displayed messages while the next read is pending
|
||||
|
||||
expect(element).not.toBeInTheDocument()
|
||||
|
||||
expected document not to contain element, found <p class="MuiTypography-root MuiTypography-body1 css-u35b64-MuiTypography-root">Previous application only</p> instead
|
||||
|
||||
52 | rendered.rerender(view(43));
|
||||
53 | await waitFor(() => expect(client.get).toHaveBeenCalledWith("/correspondence/43"));
|
||||
> 54 | expect(screen.queryByText("Previous application only")).not.toBeInTheDocument();
|
||||
| ^
|
||||
55 | await act(async () => next.resolve({ data: [message(43, "Next application only")] }));
|
||||
56 | expect(await screen.findByText("Next application only")).toBeVisible();
|
||||
57 | });
|
||||
|
||||
at Object.toBeInTheDocument (src/correspondence-recovery.test.tsx:54:63)
|
||||
|
||||
Test Suites: 1 failed, 1 total
|
||||
Tests: 3 failed, 2 passed, 5 total
|
||||
Snapshots: 0 total
|
||||
Time: 4.095 s
|
||||
Ran all test suites matching correspondence-recovery.test.tsx.
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
> job-tracker-ui@0.1.0 test
|
||||
> jest --runInBand correspondence-recovery.test.tsx correspondence-gmail-import.test.tsx
|
||||
|
||||
|
||||
Test Suites: 2 passed, 2 total
|
||||
Tests: 27 passed, 27 total
|
||||
Snapshots: 0 total
|
||||
Time: 9.147 s
|
||||
Ran all test suites matching correspondence-recovery.test.tsx|correspondence-gmail-import.test.tsx.
|
||||