diff --git a/docs/ui-modernisation/ACCOUNT_ADMIN_VALIDATION.md b/docs/ui-modernisation/ACCOUNT_ADMIN_VALIDATION.md new file mode 100644 index 00000000..d75021ee --- /dev/null +++ b/docs/ui-modernisation/ACCOUNT_ADMIN_VALIDATION.md @@ -0,0 +1,31 @@ +# A3-IM09 Account and administration validation + +3 November 2026. Owner explicitly approved **"Approve IM08 and A3-IM09"**. Isolated `codex/a3-ui-09` starts at published/remotely verified IM08 acceptance receipt `f0c8c6d321a70b4d477e99c7b9557246b6361cdf`. This is a presentation increment, not final authentication/security/release acceptance. + +## Changes and preservation + +- Account overview adds named navigation to identity, sign-in/connections and password/security groups. Keyboard actions focus and scroll existing groups. Forms remain mounted: changing sections does not reset an unsaved identity draft. Existing account avatar, local/external restrictions, password, 2FA, trusted-device, provider and session controls remain with their existing owners. Career Profile is still canonical and separate. +- The account data link enters existing Settings Backup controls through `/settings?section=data`. Only this exact initial query selects section3; unsupported queries retain General. Existing sections, lifecycle availability, recent-sign-in export requirement, deletion phrase and confirmation writers remain unchanged. +- Processing monitor has named filter/result targets and keyboard jump/return actions. No filter submission, reads, polling or mutations occur merely from moving focus. Visual inspection then found native-select labels overlapping the selected All value and a long failure chip squeezing Duration. Four labels now shrink above the value; failure chips wrap and the duration column retains readable width. An affected browser rerun exposed intermittent detail focus loss: the animation-frame callback could execute before React committed the heading ref. A failing scheduling regression reproduced it. Requested focus now runs after commit with the existing owner/session guards. Existing identity cancellation, permission failures, bounded events, pause/resume and owner-permitted job links remain. Existing admin users/audit/system components are retained and qualified alongside these changes. + +No API, schema, migration, dependency, worker/provider/model configuration or physical renderer change. Rollback reverts this UI increment; no database rollback required. The IM08 granular Ghosted pause and mounted AI-entitlement refresh gaps remain OPEN. + +## Verification + +| Check | Result and scope | +|---|---| +| Frontend | **143 distinct cases PASSED** across11 suites. Initial stable application-source run142 passed, zero failed/skipped. Final processing successor19 passed, replacing the18 processing cases in142 and adding one scheduling regression:142−18+19=143. Profile/account security/presentation/providers/data export, admin users/audit/system/processing, Settings and translation catalogue. Native reports under `evidence/account-admin/frontend`. Intermediate18-case visual rerun overlaps these totals. | +| Red contracts | Four expected failures before implementation, one supported-default case passed;65 filtered cases NOT RUN. Focused successor five passed; these overlap142. | +| Initial broad attempt | `EARLY-MIXED.json`:135 passed/two new-contract failures across137 cases. Regression tests were added while the command ran, so this is **not a clean baseline** and provides no acceptance count. Superseded by the stable application-source142-case run. | +| Backend | **69 PASSED**, zero failed/skipped. Users/last-admin, 2FA, session revocation/controller, processing, account export and API authorization posture. Native TRX under `evidence/account-admin/backend`. Local mock/InMemory/temp SQLite fixtures; no production accounts or providers. | +| Static checks | Typecheck, full ESLint, static-export build, scoped verifier ESLint/syntax and diff check PASSED. Initial build/typecheck rejected unsupported test-query `exact` options; removed without changing product behavior. System `dotnet` could not resolve the SDK; existing user SDK/DOTNET_ROOT succeeded without config changes. | +| Browser | Full16 controlled journeys/128 scans passed across EN/NB, light/dark,320/390/768/1440; `evidence/account-admin/browser/BROWSER.json`, with16 intercepted export denials and no mutations. Processing visual/focus corrections passed the affected16-configuration successor under `PROCESSING.json`. Final distinct coverage remains128 (112 unchanged states plus16 processing), not an additional full pass. Geometric checks verify native labels above selected text and Duration width. Pilot overlaps, not extra cases. Representative phone account and final desktop NB/dark processing captures were visually inspected. | +| Review/graph | Independent source/verifier review, including the visual and postcommit focus fixes, found no actionable issues. No extra test reruns counted. Final AST-only update passed:18,858 nodes/46,544 edges/1,109 communities. Optional SQL parser absent and144 files yielded no symbols; generated graph remains local. | + +Browser journeys exercise unsaved identity drafts across keyboard section jumps, cancelled session-revocation and account-deletion confirmations, an explicit export request rejected by a fixture403, disconnected-provider presentation, disabled last-admin deletion/demotion, empty audit, unavailable system reads and paused processing drill-down with a non-openable linked job. The verifier blocks external origins and unexpected writes; all API responses are synthetic. No credential change, reset, account deletion, provider connect/disconnect, model or production operation is executed. System normal-state actions and detailed audit action scenarios are covered by selected unit tests, not the browser's unavailable/empty captures. The first geometry-check selector matched both Task and the search label; the failed followup is retained and the selector now uses the control's actual label association. The saved diagnostic image shows the visual defect that axe did not detect; it is not an accepted final capture. + +NOT RUN: real authentication/OAuth/email/2FA delivery, MariaDB/hosted CI, native device/screen-reader, live security attack simulation, complete European native-language review, integrated recovery/restore or release qualification. Reused physical-PDF acceptance is unaffected; no PDF rerun was justified. + +## Next gate + +After final browser evidence, source/evidence reconciliation, publication and independent remote readback, request Gate F for IM09 and progression to IM10: cross-application consistency, secondary-route preservation, responsive/localisation/accessibility and combined affected regression. The approved proposal requires owner milestone review before the next increment. Do not infer IM10 approval from the earlier IM09 answer. Full Phase10, Global Jobs dependencies and final integrated security/release gates remain separate. diff --git a/docs/ui-modernisation/UI-09.md b/docs/ui-modernisation/UI-09.md new file mode 100644 index 00000000..6da64bd5 --- /dev/null +++ b/docs/ui-modernisation/UI-09.md @@ -0,0 +1,14 @@ +# A3-IM09 Account and administration + +3 November 2026. Owner explicitly approved **"Approve IM08 and A3-IM09"**. Isolated `codex/a3-ui-09` starts at published/remotely verified acceptance receipt `f0c8c6d321a70b4d477e99c7b9557246b6361cdf`, from implementation `e2327c1fa2ceaf785d4058c802bafe0d3428c235`. No repeat approval required for this scope. + +- [x] Reconcile actual Git state; retain generated graph locally and all prior milestone refs. +- [x] Inspect ProfilePage identity/password/providers, existing 2FA/sessions, ConnectedAccountsPage, BackupCard, admin users/audit/system and processing owners. +- [x] Account presentation: named section navigation/focus targets, mounted forms and retained drafts, direct data-settings entry without new writers. Identity/Career Profile separation and existing local/external/security/provider actions preserved. +- [x] Processing presentation: named filters/results and keyboard jump/return; existing polling/identity/events/permissions retained. Corrected native-label overlap, constrained duration column and a reproduced precommit detail-focus race. Existing admin presentation retained. +- [x]143 distinct frontend cases/11 suites,69 local backend cases,128 distinct scoped browser states across16 configurations.112 unchanged states reused plus16 refreshed processing scans;18/19-case reruns overlap, not added. Types/full lint plus affected successor lint/build and independent review passed. See ACCOUNT_ADMIN_VALIDATION.md. +- [ ] Commit/publish validated checkpoints, verify remote refs, update durable handoff; Gate F before IM10. + +No API/schema/dependency/migration/model/provider change planned. No real account deletion, security-credential reset, production operation or provider activation for visual verification. Existing confirmations and backend permission checks remain authoritative; fixture tests do not establish live security acceptance. IM08 granular Ghosted pause and mounted AI entitlement-refresh gaps remain OPEN, not silently addressed by this presentation increment. + +Affected callers: /profile, /settings data entry, /admin/processing and existing tests. All existing routes and handlers remain. Rollback reverts the isolated UI increment; no database rollback. Full Phase10, European/local/native/provider, final integrated security/recovery/release gates remain separate. diff --git a/docs/ui-modernisation/evidence/account-admin/CHECKS.json b/docs/ui-modernisation/evidence/account-admin/CHECKS.json new file mode 100644 index 00000000..92479ea7 --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/CHECKS.json @@ -0,0 +1,14 @@ +{ + "date": "2026-11-03", + "branch": "codex/a3-ui-09", + "base": "f0c8c6d321a70b4d477e99c7b9557246b6361cdf", + "ownerApproval": "Approve IM08 and A3-IM09", + "frontend": { "status": "PASSED", "distinctCases": 143, "suites": 11, "union": "Initial stable application-source142 minus18 earlier processing plus19 final processing cases", "focusedReruns": "Five contract cases and intermediate18 processing cases overlap; do not add.", "earlyAttempt": "EARLY-MIXED137 cases135passed2failed is not a clean baseline because regressions were added during execution. No acceptance claim." }, + "red": { "contracts": "Four expected failures, one default case passed,65 filtered NOT RUN", "focusRace": "One expected failure,18 filtered NOT RUN before moving requested focus after React commit" }, + "backend": { "status": "PASSED", "cases": 69, "failed": 0, "skipped": 0, "classes": ["UsersControllerTests", "TwoFactorControllerTests", "AuthSessionRevocationTests", "SessionsControllerTests", "AdminProcessingControllerTests", "AccountDataExportTests", "ApiAuthorizationPostureTests"], "environment": "Local mocks/InMemory/temp SQLite; no real account or provider operations. Existing user SDK/DOTNET_ROOT used after system dotnet lacked the pinned SDK; no config changed." }, + "static": { "typecheck": "PASSED", "fullLint": "PASSED", "finalAffectedLint": "PASSED", "buildIncludingTypecheck": "PASSED", "verifierSyntax": "PASSED", "diffCheck": "PASSED", "initialFailure": "Unsupported exact option in testing-library queries removed; no product behavior change." }, + "browser": { "status": "PASSED", "distinctConfigurations": 16, "distinctStates": 128, "aggregate": "112 unchanged account/admin states retained from BROWSER plus16 final processing states in PROCESSING", "configuration": "320/390/768/1440 x EN/NB x light/dark", "mutations": 0, "exportRequests": "16 explicit requests intercepted with fixture403", "limitations": "System capture is unavailable state; audit empty. No credential, revoke/delete, reset, provider, model or production operation.", "followups": "Visual defect escaped axe; label/column fixes then actual intermittent focus race reproduced and corrected. Failed selector/focus reports and diagnostic image retained, not accepted final states." }, + "review": "Independent source, verifier, visual correction and postcommit focus-fix reviews found no remaining actionable findings; no independent rerun totals added.", + "notRun": ["Real authentication/OAuth/email/2FA delivery", "MariaDB/hosted CI", "Native devices/screen readers", "Integrated security attack simulation", "Recovery/restore/release/production qualification", "Physical PDF rerun, unaffected renderer"], + "remaining": ["Gate F before IM10", "IM08 granular Ghosted pause and mounted AI entitlement refresh gaps", "Full Phase10/European localisation/Global Jobs/launch/security/release qualifications"] +} diff --git a/docs/ui-modernisation/evidence/account-admin/SOURCE_MANIFEST.json b/docs/ui-modernisation/evidence/account-admin/SOURCE_MANIFEST.json new file mode 100644 index 00000000..c98704c3 --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/SOURCE_MANIFEST.json @@ -0,0 +1,278 @@ +{ + "base": "f0c8c6d321a70b4d477e99c7b9557246b6361cdf", + "policy": "LF-normalised text, raw PNG SHA256", + "sources": { + "job-tracker-ui/src/views/ProfilePage.tsx": "ef05e15a7d841fb75ebef0e2843b710c38e0c73d317b976e2b1da76a25723439", + "job-tracker-ui/src/views/ConnectedAccountsPage.tsx": "09cbe497948cecacacc9e6e1b6c216bb0feb24977afcfe6c3a1ed0c10bd2708e", + "job-tracker-ui/src/views/AdminProcessingPage.tsx": "e58d9a86dc937eac291c2d7114b514576b9d38bb6232e8a6a15bfac9b3137304", + "job-tracker-ui/src/views/AdminUsersPage.tsx": "ed2377d7e004c78c3274c43d534c0a3db7b3468b2de2fa11210841e2cf31b53a", + "job-tracker-ui/src/views/AdminAuditPage.tsx": "a9415d7c759e67079b5db64c05c9cecfe9d062cc5b0532c909261fc064c91343", + "job-tracker-ui/src/views/AdminSystemPage.tsx": "64e85d9b13088b5229b6635674e9e6ff9ee6c4a62db7f66accb1dcddcedd16c0", + "job-tracker-ui/src/components/SettingsView.tsx": "441e8e6b2aea95233a85fb425f07c7549d4bda3ccea4680fab7e7805a5ff24f8", + "job-tracker-ui/src/components/SessionsSettingsCard.tsx": "057397bed9c98131f2913ec597f636af359e6d70984f37216816b0b7b78f5442", + "job-tracker-ui/src/components/TwoFactorSettingsCard.tsx": "2945f262db833978a12653e0a155f5e979a8bd39b240ece3991649fc0cde888f", + "job-tracker-ui/src/components/BackupCard.tsx": "94178fe3485b6812f1767628b4deb47357a9fa1cc6912d861acf75ebb6a85d89", + "job-tracker-ui/src/components/EmailProviderConnections.tsx": "5c5211c49012f6dc77d049e7164dd1f5807c9254e3278c2f47158d7f6209d73d", + "job-tracker-ui/src/components/GoogleAuthCard.tsx": "747afc361183bff1c558110eae9e2108d1e0ddb793dc789719623a7f3f38f4df", + "job-tracker-ui/src/components/MicrosoftAuthCard.tsx": "36558ba83de1bca2a5b60d55c891c18a0d87ca9795404027e332ea1c67545ca5", + "job-tracker-ui/src/App.tsx": "a176e52d81c4b6ded63c5f38cb27e853aa09312f2cc45fc7e5b5e44573e0fef3", + "job-tracker-ui/src/auth.ts": "1cbdd59f73c5a961613b2569679f96630cded407974876a4ca8abccf28780b0e", + "job-tracker-ui/src/sessionBoundary.ts": "09edca77c98294818d2ad0c409ce595f1b6ca0c1f60419fc1078b70f96f5b7b9", + "job-tracker-ui/src/i18n/translations.ts": "d3167487ec82e302bb26c9269b4a79b03a269b85ed8414b11cf38a9bb8f3d0a7", + "job-tracker-ui/src/profile-page.test.tsx": "37233ca196062ae91a6dcc9ce7146cc4e242c28ac2836c27c894bdbaec13d86e", + "job-tracker-ui/src/account-security-flows.test.tsx": "8ff99509f50342fbb8ada67ec5f646404ac60773f2d72c84b772aca063c7cc8b", + "job-tracker-ui/src/account-security-presentation.test.tsx": "12f8fc05eea372c6b1b7d60907f14845a23dcf79b7f44848ad04eb80ae5a0d35", + "job-tracker-ui/src/account-providers.test.tsx": "fbb7748829fe01fa33e977a0c77bd8bc5b850a33fb43866a37c81962c090c664", + "job-tracker-ui/src/account-data-export.test.tsx": "05e55a62459d7c2c4d04d110e411b25a53786460b13d375bf50b482699e154e5", + "job-tracker-ui/src/admin-users-page.test.tsx": "af86966ae40f05115b38bd592ba6f43f6f78c7cdfda14eaa7189c2fded893eeb", + "job-tracker-ui/src/admin-audit-page.test.tsx": "45f2a6274f465aa0c2b805d1ef163cee920b806827b2f3199ef7f89d76b1de3f", + "job-tracker-ui/src/admin-system-page.test.tsx": "794fc020315dad975453102001b8d2e405dc289f020d5b817c4dc4d7c970a60c", + "job-tracker-ui/src/admin-processing-page.test.tsx": "e6cb36eaa4d1a245f4f3ec1cad59395aed458cf5d655bf326e48d93aa0637391", + "job-tracker-ui/src/settings-view.test.tsx": "819ff890e95bd3ee4ca5d696adccecce6b423c768df98f98c62644d546a48576", + "job-tracker-ui/src/translation-catalogue.test.ts": "f20e8099f2c4dda76574ea3ed1e95b743eef5da82507d7cbc3f9925d52356b98", + "job-tracker-ui/scripts/verify-a3-account-admin.mjs": "2332269be94223a56056a0134067b8fb49de305312c32d0a3d543cb1e0f8ffd3", + "job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626", + "job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab", + "docs/ui-modernisation/UI-09.md": "633b384ecccf56e423d3e3fd36876f7ff20fc285bd68378c29216a7289d963df", + "docs/ui-modernisation/ACCOUNT_ADMIN_VALIDATION.md": "a0979fe4a707094d2f948d182f883669725a8733233a106eaa0b7235b945c5a4", + "global.json": "fd22f0dd0b4266472917812222b4ab513b0986fc303507a2dff7ffbb65e3c461", + "JobTrackerApi.Tests/UsersControllerTests.cs": "6af9651f681db19ff8b7e9177b1c45e54d2ae7eec73cd052da493a80c9829ca7", + "JobTrackerApi.Tests/TwoFactorControllerTests.cs": "dcd66852eda22f5ad5d9c8c9e59343941801ffa58432a9c2a42bac6050340232", + "JobTrackerApi.Tests/AuthSessionRevocationTests.cs": "beb647dbadaa3f006d59737dd974788c28ad88701e0ffd1bfd47a9034e3f2835", + "JobTrackerApi.Tests/SessionsControllerTests.cs": "e8c26af41f6194644e75d9c7f981c8f6528bcce1ef51df2c585e05fb22767d98", + "JobTrackerApi.Tests/AdminProcessingControllerTests.cs": "61706c6d54cb05a444c969ac757837339b4039b5626f0c1ace2a86aa357af66d", + "JobTrackerApi.Tests/AccountDataExportTests.cs": "df70bac7b1c2b43a0cc93082994db05436cb218acae77bbf68e8d91e067c58a0", + "JobTrackerApi.Tests/ApiAuthorizationPostureTests.cs": "dc90d52e78e9810a296b4cfddc548f90db93378f4ef97b062bead9e83563b038", + "JobTrackerApi/Controllers/UsersController.cs": "038198e3fda32688e7986998bbc3ddbe6777f892b05654c888cf70fd80429c3d", + "JobTrackerApi/Controllers/TwoFactorController.cs": "413b95b217bff645bf7240539abee90a22650c54d6b84439ba5f6f58b048b233", + "JobTrackerApi/Controllers/SessionsController.cs": "555be479e9be8261ccdfe67a460d006794e23bb00540071f39da9b03621db403", + "JobTrackerApi/Controllers/AdminProcessingController.cs": "00d5ffdf2c7e88d5ab73e129ed8cd600d8d2f84bcf5dcb41e348e48f8deb6632" + }, + "evidence": { + "backend/a3-account-admin.trx": "b2231a264bab7f46da866f6c0012345843bab8549fa05dac31147eb754ec2d5e", + "browser/account-en-dark-1440.png": "312a19684870357e94ae13f363ffd9b6f2f8ff09f6d5da5cc2ca356011257d8d", + "browser/account-en-dark-320.png": "e11892c1350738a65f05a24b9ab30a99656df37afadc8cd1bfa5713063b9b6d6", + "browser/account-en-dark-390.png": "0f09087ea340bbfd6e6c14626b2a1f817f4a1fa484b490c1f0f4a898c8239d3c", + "browser/account-en-dark-768.png": "4ad5b191470a9aebcd21a82d30482f5b3f5f04c9881996c66093517d08013cf9", + "browser/account-en-light-1440.png": "f097c8336d09c23a6308a682873bf7a4c150aa261068aaf2ad8e6df62f27ef6d", + "browser/account-en-light-320.png": "deb9a9f1396636b2e773d999fea917930f29f85ea93cf827e77acc0774f6fac3", + "browser/account-en-light-390.png": "854a103914531126a298378f1f5f2d6f3f15e7516164fc33461a2f305cd9b24f", + "browser/account-en-light-768.png": "15a84024a902e58821c9facaca0996fb44dfa5222d6e9b8ea4f798fee3cbfe1f", + "browser/account-nb-dark-1440.png": "b2ec47cceb3c7608dfac01f111d3d465a2b9f7a8840b3e899550f1bf64e97e34", + "browser/account-nb-dark-320.png": "a97bd892a24356a080a28f283fd208e58337b525df27af0304a90129986bf842", + "browser/account-nb-dark-390.png": "27361e6ac1cb2fa508cc455e82faaf586c011667f3007feff5359d04811934dc", + "browser/account-nb-dark-768.png": "8dcfbe33f265bbffcbb52002d06c3589c23045550b2687ff4f3df9daf7b82332", + "browser/account-nb-light-1440.png": "95b6378311b64650178b3b3c66119c8f045a67e84426c74bb52a0c931ab0a1d9", + "browser/account-nb-light-320.png": "0e991de716e1fad299d7a70582f75e32a7f4cc6116086492289d8486a889922f", + "browser/account-nb-light-390.png": "1c568a88328087d907472ff3531b3c5b0591a61c33355aeb9786382d5735718d", + "browser/account-nb-light-768.png": "37f1cfd7c928e2b7e995878d144e95a1283135500e406afbe92ea4c7a8b03954", + "browser/audit-empty-en-dark-1440.png": "f5a064b6748af23c30e346122b897d6bf923f4dda09d609e379116f9c96b3245", + "browser/audit-empty-en-dark-320.png": "59deb082162fd39056298cb9328709e4699979b81ff8efae2bf9519a9f59a926", + "browser/audit-empty-en-dark-390.png": "bbdfe4f3dccc877ca59433c2bf14cf83b3d32dc1bd15785c2c1cf2cd89bd5cf3", + "browser/audit-empty-en-dark-768.png": "3374647e8248d1d9f49c6692adfed87d704d92f0cc1c422ec2a3e82ff262c91f", + "browser/audit-empty-en-light-1440.png": "89d374d89c8dcf0957951b07869cb8b668649814f3b9c9100ca254b70edbcdc7", + "browser/audit-empty-en-light-320.png": "ab4de07cdcb2535ad8e511e4b53e5e4065bfdb868f978828a098fcee245efbc3", + "browser/audit-empty-en-light-390.png": "003c37665e1d1b8ac5835b51f25e077421b17695ed2892c7701aaa996e1bb1f3", + "browser/audit-empty-en-light-768.png": "8343544a9ec13bfcfb64c4b153f4c7cddba343ab728940f84b5e1beaf4e6574e", + "browser/audit-empty-nb-dark-1440.png": "4f487b80e9a7285acae2304d2aae9a28979418981d5bc39bd291e278a5106282", + "browser/audit-empty-nb-dark-320.png": "e5f2fe733209a42ae12949769945446b608b25cf06908858f57ebfdd386ae0ba", + "browser/audit-empty-nb-dark-390.png": "ab27ed4a92076caa9368d39926f74a8ad5cf340738afa21d8df33db048acf712", + "browser/audit-empty-nb-dark-768.png": "dbb096c95a598e43eb1390ec24ea2310a70454673039da01dac3765b1274d484", + "browser/audit-empty-nb-light-1440.png": "66d5bde26ec949c70528a495c4d95ccd2cb2ec149f3c58d2afcce9e353d963ec", + "browser/audit-empty-nb-light-320.png": "e6f12ff4e64b7c944296b35488e2ebaa209bfc2bf6d1df7b973035bc836885ce", + "browser/audit-empty-nb-light-390.png": "625573ab66f4d5d9d82df43ded61fcc7a46b78a5abdefc36a4395c896f675149", + "browser/audit-empty-nb-light-768.png": "c5cb57e8501d68b4003f4a8444b8c2829ff67d52e0db2b37ebdfd45e1c895061", + "browser/BROWSER.json": "a429dcc54a7191618d3cd45d82111e7f5bccdfa81a36830197972b067d1e60cc", + "browser/connections-en-dark-1440.png": "5833a6e84522fc882fe5d2f68fc37e71d9530b079903917902fc3dbc8de2d1c1", + "browser/connections-en-dark-320.png": "73e087e19d82cba08c581d7835207aa19cf8b1f786eb41f6626ca35f4376ead5", + "browser/connections-en-dark-390.png": "bb8bbaea133aa56b3317331aefd9d0428af2cf33cdb3da82923f9db3f43e4e4f", + "browser/connections-en-dark-768.png": "b6191b87cce449a1219b68cef6fc670aec51f1e240ecaa41ec1779fb81c3e66b", + "browser/connections-en-light-1440.png": "ce08652198241065bcf521d2e3a8afa203f81d5b0462619abbe598e7112b0bbb", + "browser/connections-en-light-320.png": "1385ebcd14623950c344293ce1b00707637f9ab9d7dc2b03e8dca06ab9c2ca4c", + "browser/connections-en-light-390.png": "dc39bc33ac4ab22f147a826f5edd651e619de4fdc88d48967518fed690adcb43", + "browser/connections-en-light-768.png": "f33764a3938a503092e357047e5e536a345686a9acd065a4edd33fb297b577c3", + "browser/connections-nb-dark-1440.png": "ef40e26345be1548f36cd02625a8ea3e12698514a7dcd766a2e641b275546cd0", + "browser/connections-nb-dark-320.png": "3e0aa3dd9ffcaec4d73eda99fb5f55dd4be4530d1e5e66ba479beac0e11d8082", + "browser/connections-nb-dark-390.png": "d2bf47d3e2242ab9b77e25ae407b95d027f620003e32c56f5f9f5b895d60aae0", + "browser/connections-nb-dark-768.png": "b35ee6e7587a1e81419236825b792dd52dc6d0c2d2713d0222325f8691d52d9d", + "browser/connections-nb-light-1440.png": "ed3b23aa9b7351e1f4b78a1802959ab4eb96c0978974ea052d2c97b7b7f28c91", + "browser/connections-nb-light-320.png": "71b3cd827b4397fe077c2f5c592d3eb91eb93f5ca6eae91b6537c4c3761162f7", + "browser/connections-nb-light-390.png": "a9455e0aa234bd531983c5a2475c9c763ec1750ddfc8dad3b4172fd06a5c60d9", + "browser/connections-nb-light-768.png": "c676f6fee7e0d13fa660a842fd518a6539b67987644d3c3609e449f08db224fe", + "browser/data-confirmation-en-dark-1440.png": "00593f6a7df481dfe1780a354fd279712b03c656532a442d23ba58567176abb0", + "browser/data-confirmation-en-dark-320.png": "ce7ccd2e85b7415a41fb8b46e84c079ce0f18a358f32766807a2e0b7efb8d864", + "browser/data-confirmation-en-dark-390.png": "3f228e625a94d64301a2792ba3d510af6ca83860a0895d4445bd4e325e041858", + "browser/data-confirmation-en-dark-768.png": "020cb5a6015ee60057d3115da9d18f2ba3f709801dccf052895f57ab4199a5fd", + "browser/data-confirmation-en-light-1440.png": "ffb996ae39c64dfde4bef6cedc51b8ab3bac93f1db6fd6075f6764b65892340d", + "browser/data-confirmation-en-light-320.png": "9d396778a016291d7bd1cd6c109dd5ed07d17094ca14e06badc7326b4a54e97b", + "browser/data-confirmation-en-light-390.png": "7eede982c752be4a72e60656cba17752f09344dc6b19addb4431f0b09835865e", + "browser/data-confirmation-en-light-768.png": "57aa98764e7344f54bac2a9b76b94a203e649048429fd0b21ec947c61051af61", + "browser/data-confirmation-nb-dark-1440.png": "f539f8e0bf57c97e757262e4ae77a04625d82b13b7d83e6a588326b2f66e9b44", + "browser/data-confirmation-nb-dark-320.png": "e01d53f5a416a3396c9e3a08f8eda510492465fb3419070654e01304cecd3266", + "browser/data-confirmation-nb-dark-390.png": "0ce246cf1499bddad3cae89b57c86ac259b4ea5881199a3d9abf558c50798299", + "browser/data-confirmation-nb-dark-768.png": "097452eb9d99e08a471240cb522ed0cfe432fc080395550efa0a02778d15ef0d", + "browser/data-confirmation-nb-light-1440.png": "4624974d46ecbb1a6e49b3ae455ed1dc452a44a45a6bc75f92a96cbac6448839", + "browser/data-confirmation-nb-light-320.png": "dcecfc1167e9d2835440a8b51ce6f9d75949b649f1580f5c01286037be3794f3", + "browser/data-confirmation-nb-light-390.png": "12a0511b6316002a1b067e931eb6c1710e0e2c25c3d07fa80a870bff331517bc", + "browser/data-confirmation-nb-light-768.png": "3ecea84e17f96389c48965f8f535650505d145f341938be46a475e98d2b1f8e6", + "browser/DIAGNOSTIC-processing-en-dark-1440.png": "dc097dc658e24b2cc52e98e381c4de9a5dc722fbd47a3ef3cd6a1a3844cb4d33", + "browser/last-admin-en-dark-1440.png": "69e18f7ee4ac23b5db2048ac2caa1cd03d884cc5ca348f2fca59384ca9d6ae2b", + "browser/last-admin-en-dark-320.png": "9758fdf20bf94cf8c06e60c08a84f89bd1ae3e3e3c93cfeb96bb5138482fce1f", + "browser/last-admin-en-dark-390.png": "c4009a35125a3cd3c147589c442505e72556e022b4c8dffb5f47d47fbbac93b8", + "browser/last-admin-en-dark-768.png": "f924e1d2ecb55495c4809e925ded6cff917b250953ecb1c60ea3381d16f8b12b", + "browser/last-admin-en-light-1440.png": "fcd84ea36ce7f6ecbc4b3a833bfd2fb2042cf3c1950e544075b288fa5b44f0d6", + "browser/last-admin-en-light-320.png": "8563406cd5049091242bfcef3de8706fb840b41a25fbb034248cdbee27c0f0d5", + "browser/last-admin-en-light-390.png": "2a38b94b67c8a88a49cf7092d7f49e1f483038551c23588401d15e3e534c9917", + "browser/last-admin-en-light-768.png": "9a747128a4697e48f0653080e8d92102cc476df0e19ff9d3ea96890e6900391e", + "browser/last-admin-nb-dark-1440.png": "0d5b20937b36d106b6b266f1f9fca722b13760723b305faa868632d6eaecd3cb", + "browser/last-admin-nb-dark-320.png": "4b5f340ca7498c1f073a6d208c941042a355d2a71606c20fc043e197e2a12c2f", + "browser/last-admin-nb-dark-390.png": "16862b263e2d38774e7236285c5d057dc745194315ed38d1fb64c99c12670044", + "browser/last-admin-nb-dark-768.png": "71d4151ed9d471487c0e82bf5a9e00e9cc59516e706c86e3dcffbc8a306024ae", + "browser/last-admin-nb-light-1440.png": "0db0b99f4afefef2195728534a7859ffb2231cad9aea2f290ea6a4a240656a03", + "browser/last-admin-nb-light-320.png": "79fb6979de2663d6e6db124d17011f0b4ba348b3fbbdaa0b0834ed7966a88cba", + "browser/last-admin-nb-light-390.png": "b6f26151f802e7fdd75fabe906c1d9b05841cd0c773f2534ed0d2260315c09a4", + "browser/last-admin-nb-light-768.png": "622aa1ea4897dc223232bea50fd72a028a1cbdb5d9222ade3336eb83c48b8b1e", + "browser/PILOT.json": "f12253c8d625e0d01970af6e2e88e04ac110084a8cf7d3b8f5fb1cee37fac0ab", + "browser/processing-detail-en-dark-1440.png": "df8e6b45f22652fba8e9284048eac87862e9b0c194a49f0252968c4966c45d1a", + "browser/processing-detail-en-dark-320.png": "409ab47edaaf8616dc38f54d3df414aa7a5b39526cd8e54d35a999f7317656b8", + "browser/processing-detail-en-dark-390.png": "5025d103291f6a6e8c3d65687ef26252499bda4312668220ff392570308ba656", + "browser/processing-detail-en-dark-768.png": "2a963c520af031ec67062c5350a20657afccd8d46185518f99f3f2a757cbf27b", + "browser/processing-detail-en-light-1440.png": "e107f573f14d1193ac8d7539027e9ae4466cead93b114bd363fe3c8dca23373b", + "browser/processing-detail-en-light-320.png": "39b2a7d4f571f5f7ddceedb7433c80be8146a6691c2f0c5f8e0385d93328653d", + "browser/processing-detail-en-light-390.png": "01a412d2021e03197dbbe0fd1b3e961a365f705c821edd4f91f9200774a6803e", + "browser/processing-detail-en-light-768.png": "c998727f22c2a9c9bfe337d144e0a89df7e0588cb9a4bffd5a12e67c3112c9fb", + "browser/processing-detail-nb-dark-1440.png": "04fe773bcb0debe4477895a52800ea5649312cf5f9f6b5d69b32764046088ad8", + "browser/processing-detail-nb-dark-320.png": "792e92b333611ee02b9dfea5c54f33449b5ed2618d13f77dff91ef36fd518e25", + "browser/processing-detail-nb-dark-390.png": "648e2ba2f1dfb6a458131a0a891e09e8147494421c8e58e5c86708b1ea160d8b", + "browser/processing-detail-nb-dark-768.png": "1c369b9193a8e22e5e91dd3ffd8688f359be3c5fca414e2bcf91bf0a3fc978af", + "browser/processing-detail-nb-light-1440.png": "060eef411e9e726b01240764b9cb6eb013ba8d74420b16a611d49c0c04dcfbe9", + "browser/processing-detail-nb-light-320.png": "08cfc058f7084e9ce6987f56d89c2a0e6de613059fdaec91228b0022dfd802de", + "browser/processing-detail-nb-light-390.png": "217525914575c5dd83e43ed4f04c7d1e81038255559dd3a91a29b2412e416668", + "browser/processing-detail-nb-light-768.png": "e7dcf4c7167a66826103c023ed65882c70e9cd58799075caef4d66b5461e23db", + "browser/PROCESSING-FOCUS-FAILURE.json": "a4a4299ca46be25c86e4bd6845ae7a8d54b2c933e580baa1d1d75cbf4f4852e8", + "browser/PROCESSING-SELECTOR-FAILURE.json": "222b4ded745c97097372841633c24c33f2f2ae7288a53da51e482de9e74c6b18", + "browser/PROCESSING.json": "1f94e9f879e775b0550bf6ab79219fd4068c728e0bd0383b0b6e81cacf76d722", + "browser/session-confirmation-en-dark-1440.png": "d4f076ac65e892871de3b77f66e1136a956a13e7ddd6b76271bf3652b551bde5", + "browser/session-confirmation-en-dark-320.png": "7cfa5ab5b4b3073ef98502bb6eeef8a87b1e7ab7611f65647f995ea71bc6b6b0", + "browser/session-confirmation-en-dark-390.png": "47844007c4a47454fb662c2526abeb630cb23a20b21ce78ed14dbc8033eb56e0", + "browser/session-confirmation-en-dark-768.png": "da5681552922f8406548a790e360b5cfe7e7edcff511133c26ad0f1bca3e0877", + "browser/session-confirmation-en-light-1440.png": "a28533fd8d56c5351115b6cd1528b61f10d8673e8150ad1cba695394d329b5f7", + "browser/session-confirmation-en-light-320.png": "b974599c525fbf15c560cb7de6d63abef494e7d8dd88f146c5dac8bda5aa0222", + "browser/session-confirmation-en-light-390.png": "86c35e888d6a5cbdcf965ca62bf22ab7183b790215b56ee867a045b18cc4484c", + "browser/session-confirmation-en-light-768.png": "11a662b899b187feb16d1f21b2b25d5d777e894dfbc1be92e9c8b211be734dcf", + "browser/session-confirmation-nb-dark-1440.png": "907c377c06520569714a933bf8df4390d59a05382eceae1f81ce6242fe1cbd48", + "browser/session-confirmation-nb-dark-320.png": "2ff35e814f11dc13a5d0a3639fa822a9b447b6bf36f3b7b63d76afef6a6b16fd", + "browser/session-confirmation-nb-dark-390.png": "2a2a5cc16fcbb5b33b3144ea17592649bf388c6f30f5c2597a2b9eaf46eeccf7", + "browser/session-confirmation-nb-dark-768.png": "0d31988dfb055c57781c4494ab8327c1228a7041fcb24132062b07c6153bb433", + "browser/session-confirmation-nb-light-1440.png": "26e947c72034b871926c5b36fea9e94bd28564faa3089720bacac17a6a805eba", + "browser/session-confirmation-nb-light-320.png": "2f7182dac97e25d3e66f899d9bbec6d541193475be5cba3c3fef6e64d02c6b22", + "browser/session-confirmation-nb-light-390.png": "c444040f296e56e39ef3a0ba8764b28e6962c017848d8c1fc2554fbacb3f1050", + "browser/session-confirmation-nb-light-768.png": "4d34151694e777658ebc3db248ee8bd89502ecb26259cc3ed0eb883b3fb918a0", + "browser/system-unavailable-en-dark-1440.png": "f150be599ab2553150f94031ec37fa78e405cef033948c2f6a4aee7cfe1c01fd", + "browser/system-unavailable-en-dark-320.png": "38ad2690ba2b9238df74f4789ceaa6da3cb5f6b202efc747b937552ea4eca89e", + "browser/system-unavailable-en-dark-390.png": "7b7f8d83166384382d1463747528d8848ef9732062c3c984c43ac711a162c680", + "browser/system-unavailable-en-dark-768.png": "48d061f268576ee0a166c148a34444b462ce46acec3f510211ac0436388a4cf3", + "browser/system-unavailable-en-light-1440.png": "db9983b2930ebb1cf6a7f538415fb051a5be126801f572ec75e00626d6c3d4e9", + "browser/system-unavailable-en-light-320.png": "e49cf63329d2300e3969d1277acaa9d430fc089cab5e9f65867b34cbd35a56dc", + "browser/system-unavailable-en-light-390.png": "5596c9a06b7df55b42aa37cdce4c30029ce2114ab19a2805e6616b82ee6c9270", + "browser/system-unavailable-en-light-768.png": "f3190a85526feaedace3e4ad5173f378c5bb0f9f67a41b3dedc737d752da0683", + "browser/system-unavailable-nb-dark-1440.png": "aee6c72e72487e8263675e7b058bc381d27d72433c5e686d7363c6b2b39540ca", + "browser/system-unavailable-nb-dark-320.png": "b5453f3c4e90879a5ba601fbe7f38baa0769add396db014ec66b28eca0f67291", + "browser/system-unavailable-nb-dark-390.png": "45cd536abf4c8bd59c277da58c5c0babf0b40309dd0f92d05340caf8906eb7ad", + "browser/system-unavailable-nb-dark-768.png": "83808b28e03773061b840f6e8deb6a781e1ab674aa2012f45d2b4a28fe20b99b", + "browser/system-unavailable-nb-light-1440.png": "17d151f3b306d20aa572e171c4c0464426099b6a2341494e8c0f1abf3c68dc72", + "browser/system-unavailable-nb-light-320.png": "73de2d08f2be161a1660c1f6b06d20f341ead9aa6d733d693d63c095cfb8b7d1", + "browser/system-unavailable-nb-light-390.png": "93787446e12eaef9af49360f787fe42c8eca33b80713338af9a0ddee24a09959", + "browser/system-unavailable-nb-light-768.png": "1a03e3f2fd41467b5127cbd6bd168d7ad5ac59435f158acb1bdfbf7b4c9dbd07", + "CHECKS.json": "bbbcb6e8f6f06c90647c27a564faceaceb3fb1a7c09b9155ea40348fb214a194", + "frontend/a3-account-admin-focused.json": "655c2e2e4324e327ffd06ad3747c0534203ab1042c50230299714bacd501a2ac", + "frontend/a3-account-admin-red.json": "20de17c1d8b4453e892488e812fc70dd62767244c78e5480bb5b17d37e7bb8b5", + "frontend/a3-account-admin-tests.json": "c8388116b5ad8ddc47076622a4853c40916bff46308438a6d338850f6581bf37", + "frontend/a3-processing-focus-red.json": "49682f344bbebb037d814837bf6cf65faa57b343a398a9eabda891d317024561", + "frontend/a3-processing-focus-tests.json": "8bbfb741f03305423ae97f0b1b64586b6e94e1da94763c546ad93a8fa68f36d7", + "frontend/a3-processing-visual-followup.json": "f5435a0d1cc63548af5870b7ebd234c0f1bf60a3b115089bfa086f43c29d4ed0", + "frontend/EARLY-MIXED.json": "a5ebe1f73555605b16deaeed363c3dea906d24652b737a3e931f4311ccace25e" + }, + "export": { + "404.html": "954109e56c1cd08c8bf77822b01d4106a1ca1f47c859b27b56d4601750a0ee07", + "__next.__PAGE__.txt": "e14c09bd8d4d294073a560d7684b64ef26286466166e42f85704c74d59898fd8", + "__next._full.txt": "7da037b1ca24971bc461e03de6e9391e21dd6d554db4c4cf8cdf21297b3ea988", + "__next._tree.txt": "47a1866d6447fc675e909b4374ac830a3760f0695a1123e39cf468fd2077e792", + "_next/static/chunks/0-_aq6ipzcshj.js": "39f90c215bf52aef6274ed3dcc0f8af32e21a37fe8845b3bca0d6ea60da6a8c2", + "_next/static/chunks/0ah1fzqmie05a.js": "5c65505a7dcbac63ac71d254e619a4c800943bfb4fa16cd40c10cdbe7e9b6e31", + "_next/static/chunks/0bdt7ln111t48.js": "6184b1a61f22e2a640c17941634fdc75678ce93d142848d9f07f163e0d1fd201", + "_next/static/chunks/0bwvt3mysnclc.js": "7705667a1b75812b7833d9c9dff47fe023015e58e382c40f4507d9948c973af4", + "_next/static/chunks/0c-j9v44ea4gk.js": "d7e04926724f76dc50b5202522fab3bb553370d040396394e84c342de466512b", + "_next/static/chunks/0cz1d0mv5g_q7.js": "0973c1d64c88adc8e3c950410cb58b288f72118d5965b78049438deb8f2f9683", + "_next/static/chunks/0gamdsp7ql8cu.js": "f641cd9e2957f5c01234df02211a085f8e8fe2009cf84817e4143f3c477e1dc2", + "_next/static/chunks/0h_-smu-bk788.js": "970ef0fa47ce6dfff261c624e08054841b6969b4afc5b0ebfad89126d7543bbc", + "_next/static/chunks/0jcvc3qm6-lyk.js": "7c27e1fe373b822adc68c63096a5bf38444ad605b9743f0920271652989c56f1", + "_next/static/chunks/0q1wd_b10phzr.js": "307f4a4ed0f1ef2d87b9de51dbcac2382a39aa8bab359994ee7aa41529215b4e", + "_next/static/chunks/0q20g9o8x-k8z.js": "3d4d9086985419aa8866b032158196c774acb8bf318f3c8245508c8daa9c5148", + "_next/static/chunks/0q_pwu9jxv4-d.js": "42a43b3d7245a413c7c29b4cbe87823037a6dbc637e2e282c92405470e0f575d", + "_next/static/chunks/0yg1x7i96lj87.js": "2aad3c0f9e8b7b5a5123a2a439970c49db0be353236e22f9b6eafaaf01328c15", + "_next/static/chunks/14-lfugawba2w.js": "6a5780ca3c84d7f130f3c0a14431c85c7a1e799e2645b8c171161dab40a64360", + "_next/static/chunks/1435in_k_-dhc.js": "4757476512d5c4dd25f9264a18b304ed4824b23aff1c09e134fcbff21d9c36b6", + "_next/static/chunks/145oicobmjvm7.js": "d6bbbdeed1381652dc7412e5ce673a077579ecd5cee8934cb6b533c814098764", + "_next/static/chunks/14e7ovj0s3elm.js": "070567dd4d23fb9fa0b9ba132185a697af6578045d43b2b1c7bbb2a1594d935d", + "_next/static/chunks/16lfece6cnlln.js": "716363ba044f30b0e70440756b4e5eafa2d25f2e1628e855e3bc4ab9eabee3d3", + "_next/static/chunks/19zh-dmyml5oj.js": "2ab304f9b4155cdbac4d22e1b0b56b1c1f775c4bbb3ee93c425e297182bf522e", + "_next/static/chunks/1_vy97gdckb4k.js": "93355d018547a26be1b678f43086179f2ad6de3d590b92eda5d7f8f9aaa9ec7f", + "_next/static/chunks/1d0xrdyyzw7qc.js": "c11668ff1e152008e0d7b4454af12eb36c97df46a5860938e2eb5d8429b374a8", + "_next/static/chunks/1ke8pzecwofrg.css": "32e9ab963ebadebcbe2c68dffb24cfbfc8cc24255ad91b48b7941fc777bf7439", + "_next/static/chunks/1m4qrvmbq_fq9.js": "4d36c8ec83dc817f273178dc22f329ab026578075f58de68b6f133bcf911a8a1", + "_next/static/chunks/1req80b9jj38r.js": "eee4d2e3789e1215195dba99ad0f09d34f8c83da848322b76054722233e9dae3", + "_next/static/chunks/1xn023_28rgzj.js": "4f7f2108d030a48d039930736c92a55710975dddf419fe673f84d92899b1f575", + "_next/static/chunks/1xwc-b795syag.css": "f73c002233f931ca14d0ae58815c47ca9f2659f25b1547a6d1fdca12a2a00b3f", + "_next/static/chunks/1zi8i6dnxiac_.js": "8aea28bbe6a138e5d4b619429ca71570883a7aee974b86d5a4a746d90f704dbc", + "_next/static/chunks/22wx8--1b9tnq.js": "3f7d8e762371262c6a740b4dac21725b424847319afac46055e97074a99ff5f5", + "_next/static/chunks/2b2nivoqiaper.js": "f20a0bfbfc4fd335a0e8fa6abf552d24c94a81a2b01690fad1ea088c22fd2086", + "_next/static/chunks/2b49wlharl6fd.js": "40619f8a5a03fc7479b0679717b1e5ec0dea0a1944ce77f4ce9d29d2486fdb5c", + "_next/static/chunks/2br3ad_-bc7k9.js": "80fa55f7a32db4d743fda36747c36994fde00a0f53f2eb25b2a6d07c6fb97cd7", + "_next/static/chunks/2dmc6iqxm14fz.js": "3b20898e0cde315c48d6fd46abd562269bbf73c850528a4be2cfc2b9aa0c8f5e", + "_next/static/chunks/2ftgr1rx3r0dw.js": "8866e9ef62ab057bf9923604724edbb463bbdd6dd3fcbf614585f76005874811", + "_next/static/chunks/2ghgf2s9b2iou.js": "23d8ff31e2128d0541c1887785fb75885323fea7c5d4f35826513b75c12c2ae3", + "_next/static/chunks/2itnratrnd9c5.js": "8be0b191c2d54f7233ebf2f1e169b3bfef680fa93da21c08d8c43b05c3ec174f", + "_next/static/chunks/2kpcazmi6n6mk.js": "bea0de681fceff50056bfeccc5d035aff54d20918288051cb64bb259edd250c7", + "_next/static/chunks/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10", + "_next/static/chunks/2u5qve004opku.js": "be388d9a6aa423082bafb4584c3facc65ddfed71bcfa5c1d06b097b408c5ff97", + "_next/static/chunks/2xkey6z2nw7xp.js": "0f25bf09513b31298148cd262507b20b5a9ca5533317168c16481c544c6ffd6f", + "_next/static/chunks/2z42el0b2mp8_.js": "86ff990ef32c90c4839583e4f1d1bcbddb165dad3141b9fcd2ecec67f4ff24b8", + "_next/static/chunks/2z9e_b61gtc22.js": "b9d717dad26828438d4ff56cabca41a8055f5eaa54420fd0aeb6b4ba7d5baa0d", + "_next/static/chunks/31n24zcvyae0y.js": "110921bad10425af1d689cb939d97be75c7c0af9c35f8b16c5ff237db6fce893", + "_next/static/chunks/324qfub45abd6.js": "77ef8e17b89234fb19a80796d5d04d3e297c459e5cb41b35b5bc78c0b10b4984", + "_next/static/chunks/32_ah983ce851.js": "0c3cd0d2a5ad789e31226a9ea0506c50016804311a58548c7784b7b45aaecd14", + "_next/static/chunks/3329nxgnx3721.js": "ceedc7c69bf0617733b65bbf9f6a682a5d53177d4e8fdb86b8982cda2175f232", + "_next/static/chunks/357yqeklh7414.js": "0192ab7198ebbe299d34a934c504dd4b562d1cccebb6e9d4c5163930c881b14c", + "_next/static/chunks/3721l8sfm8icl.js": "06b67611b3a93515a375b803b54fe7063c049824f1ebf5c7f7db8701b5091e7c", + "_next/static/chunks/3bqn9b34na0b9.js": "f1b8ebcc1b22251c33c9f3a5d11c1f893cad2da2e8744a441e790f7347aa9e73", + "_next/static/chunks/3ckk_j5ril9ag.js": "87f631dae7b648d32171e9e05a3e000753ecb54f8d3b86a4401c0e4ab4d73553", + "_next/static/chunks/3gkylew_qn7cw.js": "7e6c74c81be0c41ab433e36d65b914f62c48f332922e27f7cc953476f4dd78cb", + "_next/static/chunks/3la4obitihzpv.js": "9a5a57b46db389b98f1fd5baa86eba1a360300dae9d1ff3ffeae7bc3378135b9", + "_next/static/chunks/3q4v10rrqy40n.js": "d87ff7b7a0f07d0d92eab3876481eb686a12d9c43d8b92cbe406aefa227a11c1", + "_next/static/chunks/3u61o8t7m_jza.js": "86231c12e0f8cacc8638bed0bc4b34f645fc35e60de342dc154d3cce0c9a5afa", + "_next/static/chunks/3vu8rhjp4sv29.js": "a89673de9ad162f1a7dbb98af4027e67f84502c346abe94fb0341eff22385432", + "_next/static/chunks/40y_aqqilokr2.js": "1f5a5260316134d6bffe949400752ee6b42addf908ae714ef4ae4ebde916dddd", + "_next/static/chunks/43b5x8qjjh3ax.js": "6ee7261cf9a63e0e6ea181bbb09125e09948588b6e10b5c02727c686a6062a3a", + "_next/static/chunks/turbopack-25fzg9ay_1ss-.js": "c40f39e993a30c96d6247bb3a7b581538bb046efe8ef8ec07bea3ba32291750f", + "_next/static/k5Uv9-xecPcDM03XeUb81/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea", + "_next/static/k5Uv9-xecPcDM03XeUb81/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a", + "_next/static/k5Uv9-xecPcDM03XeUb81/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00", + "_not-found/__next._full.txt": "381b6b4c6b9fb38cf51eb052390a12a2b25b45e793032d67beee54c88c92881a", + "_not-found/__next._not-found/__PAGE__.txt": "76e9f4864f8bd355500a8bae9b077d4f9264678c9fcd6ec88f0809fffa7836e0", + "_not-found/__next._tree.txt": "176fea8c3bfee7c85f5f9ee1dece5d2ff6c92cebaa844b73cab1e2267ff1b9f3", + "_not-found.html": "954109e56c1cd08c8bf77822b01d4106a1ca1f47c859b27b56d4601750a0ee07", + "_not-found.txt": "381b6b4c6b9fb38cf51eb052390a12a2b25b45e793032d67beee54c88c92881a", + "favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a", + "favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3", + "index.html": "29ad9d608dd66506dbf8dc02d24d69afe92ff852644ef68d207cd0da19f52d68", + "index.txt": "7da037b1ca24971bc461e03de6e9391e21dd6d554db4c4cf8cdf21297b3ea988", + "logo192.png": "bc652031597fabd19b9f14e22a71f809490d218037521b3b64d013418c1390b4", + "logo512.png": "5129e9bc1ba812b711fd9a646d3a38a906d365a26ee685df183b8752458944d4", + "manifest.json": "2667ce63c2e0835b7007239816a5597639321d333da396a78638dfa9e8a7c935", + "mockups/dashboard.svg": "318be3adb1324c26eb30f05572a29528a3e38331c6a604652eef75b54f8c29dc", + "mockups/pipeline.svg": "db2ef41faabeb90e7ce85413e168581686c54535d970fc7d8deda3888a479de4", + "mockups/workspace.svg": "9bbab22349147c7b01d6e18c93c622a6f8aed6dedaf23715189ab54d60e1ddbd", + "robots.txt": "e5ab0d231eeb01b4a982d1c79a6729cac9797ad15a69247e4f28ba6afc149b4c" + } +} diff --git a/docs/ui-modernisation/evidence/account-admin/backend/a3-account-admin.trx b/docs/ui-modernisation/evidence/account-admin/backend/a3-account-admin.trx new file mode 100644 index 00000000..671ef1f0 --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/backend/a3-account-admin.trx @@ -0,0 +1,442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 9.0.19) +[xUnit.net 00:00:00.98] Discovering: JobTrackerApi.Tests +[xUnit.net 00:00:01.29] Discovered: JobTrackerApi.Tests +[xUnit.net 00:00:01.30] Starting: JobTrackerApi.Tests +[xUnit.net 00:00:15.00] Finished: JobTrackerApi.Tests + + + + \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/account-admin/browser/BROWSER.json b/docs/ui-modernisation/evidence/account-admin/browser/BROWSER.json new file mode 100644 index 00000000..ef3a2e41 --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/browser/BROWSER.json @@ -0,0 +1,1443 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "state": "account", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "connections", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "last-admin", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "audit-empty", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "account", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "connections", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "last-admin", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "audit-empty", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "account", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "connections", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "last-admin", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "audit-empty", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "account", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "connections", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "last-admin", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "audit-empty", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "account", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "connections", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "last-admin", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "audit-empty", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "account", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "connections", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "last-admin", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "audit-empty", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "account", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "connections", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "last-admin", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "audit-empty", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "account", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "connections", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "last-admin", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "audit-empty", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "account", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "connections", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "last-admin", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "audit-empty", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "account", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "connections", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "last-admin", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "audit-empty", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "account", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "connections", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "last-admin", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "audit-empty", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "account", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "connections", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "last-admin", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "audit-empty", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "account", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "connections", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "last-admin", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "audit-empty", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "account", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "connections", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "last-admin", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "audit-empty", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "account", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "connections", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "last-admin", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "audit-empty", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "account", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "connections", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "last-admin", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "audit-empty", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + } + ], + "errors": [], + "unexpectedWrites": [], + "exportDenials": [ + { + "width": 320, + "language": "en", + "mode": "light" + }, + { + "width": 320, + "language": "en", + "mode": "dark" + }, + { + "width": 320, + "language": "nb", + "mode": "light" + }, + { + "width": 320, + "language": "nb", + "mode": "dark" + }, + { + "width": 390, + "language": "en", + "mode": "light" + }, + { + "width": 390, + "language": "en", + "mode": "dark" + }, + { + "width": 390, + "language": "nb", + "mode": "light" + }, + { + "width": 390, + "language": "nb", + "mode": "dark" + }, + { + "width": 768, + "language": "en", + "mode": "light" + }, + { + "width": 768, + "language": "en", + "mode": "dark" + }, + { + "width": 768, + "language": "nb", + "mode": "light" + }, + { + "width": 768, + "language": "nb", + "mode": "dark" + }, + { + "width": 1440, + "language": "en", + "mode": "light" + }, + { + "width": 1440, + "language": "en", + "mode": "dark" + }, + { + "width": 1440, + "language": "nb", + "mode": "light" + }, + { + "width": 1440, + "language": "nb", + "mode": "dark" + } + ], + "unavailableReads": [ + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies" + ], + "blockedExternal": [ + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com" + ], + "limits": [ + "Every API response is synthetic. Account export is a controlled 403; revocation/deletion confirmations are cancelled, not executed.", + "System monitor capture is the controlled unavailable state, audit is empty; detailed success/action scenarios are unit tests, not live qualification.", + "No real credentials, provider activation, model, native device, integrated security, production or release acceptance." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/account-admin/browser/DIAGNOSTIC-processing-en-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/DIAGNOSTIC-processing-en-dark-1440.png new file mode 100644 index 00000000..f217a387 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/DIAGNOSTIC-processing-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/PILOT.json b/docs/ui-modernisation/evidence/account-admin/browser/PILOT.json new file mode 100644 index 00000000..fcef1210 --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/browser/PILOT.json @@ -0,0 +1,108 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "state": "account", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "session-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "data-confirmation", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "connections", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "last-admin", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "audit-empty", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "system-unavailable", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "PASS", + "revocationAndDeletionCancelled": "PASS", + "recentExportDenial": "PASS", + "lastAdminActionsDisabled": "PASS", + "processingKeyboardAndOwnerLink": "PASS" + } + ], + "errors": [], + "unexpectedWrites": [], + "exportDenials": [ + { + "width": 320, + "language": "en", + "mode": "light" + } + ], + "unavailableReads": [ + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/admin/system", + "/api/admin/system/email-settings", + "/api/admin/system/cv-benchmark", + "/api/admin/system/maintenance-jobs", + "/api/companies", + "/api/companies" + ], + "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" + ], + "limits": [ + "Every API response is synthetic. Account export is a controlled 403; revocation/deletion confirmations are cancelled, not executed.", + "System monitor capture is the controlled unavailable state, audit is empty; detailed success/action scenarios are unit tests, not live qualification.", + "No real credentials, provider activation, model, native device, integrated security, production or release acceptance." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/account-admin/browser/PROCESSING-FOCUS-FAILURE.json b/docs/ui-modernisation/evidence/account-admin/browser/PROCESSING-FOCUS-FAILURE.json new file mode 100644 index 00000000..74a78b19 --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/browser/PROCESSING-FOCUS-FAILURE.json @@ -0,0 +1,260 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + } + ], + "errors": [], + "unexpectedWrites": [], + "exportDenials": [], + "unavailableReads": [ + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies" + ], + "blockedExternal": [ + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com" + ], + "limits": [ + "Every API response is synthetic. Account export is a controlled 403; revocation/deletion confirmations are cancelled, not executed.", + "System monitor capture is the controlled unavailable state, audit is empty; detailed success/action scenarios are unit tests, not live qualification.", + "No real credentials, provider activation, model, native device, integrated security, production or release acceptance." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/account-admin/browser/PROCESSING-SELECTOR-FAILURE.json b/docs/ui-modernisation/evidence/account-admin/browser/PROCESSING-SELECTOR-FAILURE.json new file mode 100644 index 00000000..a27a4321 --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/browser/PROCESSING-SELECTOR-FAILURE.json @@ -0,0 +1,18 @@ +{ + "screens": [], + "journeys": [], + "errors": [], + "unexpectedWrites": [], + "exportDenials": [], + "unavailableReads": [ + "/api/companies" + ], + "blockedExternal": [ + "https://fonts.googleapis.com" + ], + "limits": [ + "Every API response is synthetic. Account export is a controlled 403; revocation/deletion confirmations are cancelled, not executed.", + "System monitor capture is the controlled unavailable state, audit is empty; detailed success/action scenarios are unit tests, not live qualification.", + "No real credentials, provider activation, model, native device, integrated security, production or release acceptance." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/account-admin/browser/PROCESSING.json b/docs/ui-modernisation/evidence/account-admin/browser/PROCESSING.json new file mode 100644 index 00000000..d9f60e0e --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/browser/PROCESSING.json @@ -0,0 +1,338 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "processing-detail", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "processing-detail", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "processing-detail", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "draftPreservedAcrossKeyboardSections": "NOT RUN", + "revocationAndDeletionCancelled": "NOT RUN", + "recentExportDenial": "NOT RUN", + "lastAdminActionsDisabled": "NOT RUN", + "processingKeyboardAndOwnerLink": "PASS", + "processingFilterLabelsAndDurationGeometry": "PASS" + } + ], + "errors": [], + "unexpectedWrites": [], + "exportDenials": [], + "unavailableReads": [ + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies", + "/api/companies" + ], + "blockedExternal": [ + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com", + "https://fonts.googleapis.com" + ], + "limits": [ + "Every API response is synthetic. Account export is a controlled 403; revocation/deletion confirmations are cancelled, not executed.", + "System monitor capture is the controlled unavailable state, audit is empty; detailed success/action scenarios are unit tests, not live qualification.", + "No real credentials, provider activation, model, native device, integrated security, production or release acceptance." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-1440.png new file mode 100644 index 00000000..df8913cb Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-320.png new file mode 100644 index 00000000..098d1ac2 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-390.png new file mode 100644 index 00000000..62335f1e Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-768.png new file mode 100644 index 00000000..3b001885 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-1440.png new file mode 100644 index 00000000..ff2be544 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-320.png new file mode 100644 index 00000000..b3fd65ea Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-390.png new file mode 100644 index 00000000..d98b5b73 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-768.png new file mode 100644 index 00000000..f9d246d4 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-1440.png new file mode 100644 index 00000000..ce0da4b1 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-320.png new file mode 100644 index 00000000..2d5895c3 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-390.png new file mode 100644 index 00000000..c97bb273 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-768.png new file mode 100644 index 00000000..9f7a286a Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-1440.png new file mode 100644 index 00000000..8170607e Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-320.png new file mode 100644 index 00000000..ccdad903 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-390.png new file mode 100644 index 00000000..098dec77 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-768.png new file mode 100644 index 00000000..78795ab4 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/account-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-1440.png new file mode 100644 index 00000000..d6f14b70 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-320.png new file mode 100644 index 00000000..969f6003 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-390.png new file mode 100644 index 00000000..c020d164 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-768.png new file mode 100644 index 00000000..c7b0836d Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-1440.png new file mode 100644 index 00000000..ef502821 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-320.png new file mode 100644 index 00000000..e5c6c523 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-390.png new file mode 100644 index 00000000..d8a2d073 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-768.png new file mode 100644 index 00000000..91a1b62c Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-1440.png new file mode 100644 index 00000000..b0d00b0e Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-320.png new file mode 100644 index 00000000..717d8306 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-390.png new file mode 100644 index 00000000..c1343d5e Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-768.png new file mode 100644 index 00000000..4a518231 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-1440.png new file mode 100644 index 00000000..c107d35a Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-320.png new file mode 100644 index 00000000..33f4c1c4 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-390.png new file mode 100644 index 00000000..8fe2efb2 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-768.png new file mode 100644 index 00000000..d3a3ec6b Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/audit-empty-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-1440.png new file mode 100644 index 00000000..7389b410 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-320.png new file mode 100644 index 00000000..45cb1b21 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-390.png new file mode 100644 index 00000000..b19afac5 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-768.png new file mode 100644 index 00000000..5e3c8fcf Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-1440.png new file mode 100644 index 00000000..988da746 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-320.png new file mode 100644 index 00000000..bac84289 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-390.png new file mode 100644 index 00000000..ec0c9bc5 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-768.png new file mode 100644 index 00000000..bfd0ddb7 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-1440.png new file mode 100644 index 00000000..8e8e1edb Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-320.png new file mode 100644 index 00000000..c8c4573f Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-390.png new file mode 100644 index 00000000..008befd4 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-768.png new file mode 100644 index 00000000..0d3827e2 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-1440.png new file mode 100644 index 00000000..6ac65a44 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-320.png new file mode 100644 index 00000000..0f9877ab Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-390.png new file mode 100644 index 00000000..fd008e22 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-768.png new file mode 100644 index 00000000..87267eec Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/connections-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-1440.png new file mode 100644 index 00000000..f8ed80d7 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-320.png new file mode 100644 index 00000000..bb21debd Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-390.png new file mode 100644 index 00000000..c9ad1a8b Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-768.png new file mode 100644 index 00000000..240fc830 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-1440.png new file mode 100644 index 00000000..b7f2ce38 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-320.png new file mode 100644 index 00000000..ea9b05ef Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-390.png new file mode 100644 index 00000000..9328fbd0 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-768.png new file mode 100644 index 00000000..f1a8c790 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-1440.png new file mode 100644 index 00000000..86a4ef2d Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-320.png new file mode 100644 index 00000000..c0d58819 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-390.png new file mode 100644 index 00000000..5bd62517 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-768.png new file mode 100644 index 00000000..5d44f116 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-1440.png new file mode 100644 index 00000000..fa66f23e Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-320.png new file mode 100644 index 00000000..e6337d75 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-390.png new file mode 100644 index 00000000..1d439ff8 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-768.png new file mode 100644 index 00000000..032febae Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/data-confirmation-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-1440.png new file mode 100644 index 00000000..1fd29cc5 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-320.png new file mode 100644 index 00000000..040fd06a Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-390.png new file mode 100644 index 00000000..d59b7724 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-768.png new file mode 100644 index 00000000..85b82b96 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-1440.png new file mode 100644 index 00000000..1f884d18 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-320.png new file mode 100644 index 00000000..41013b7d Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-390.png new file mode 100644 index 00000000..0e9fe928 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-768.png new file mode 100644 index 00000000..5174455a Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-1440.png new file mode 100644 index 00000000..fb3a5b31 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-320.png new file mode 100644 index 00000000..23b01159 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-390.png new file mode 100644 index 00000000..73565672 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-768.png new file mode 100644 index 00000000..c08c9fee Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-1440.png new file mode 100644 index 00000000..36844af5 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-320.png new file mode 100644 index 00000000..6b212a50 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-390.png new file mode 100644 index 00000000..58652ffd Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-768.png new file mode 100644 index 00000000..97a5d0f4 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/last-admin-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-1440.png new file mode 100644 index 00000000..c8d52c0b Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-320.png new file mode 100644 index 00000000..d20aa2fe Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-390.png new file mode 100644 index 00000000..9958aea5 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-768.png new file mode 100644 index 00000000..690d88a4 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-1440.png new file mode 100644 index 00000000..80c20276 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-320.png new file mode 100644 index 00000000..fa07d6cc Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-390.png new file mode 100644 index 00000000..54fcebbf Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-768.png new file mode 100644 index 00000000..0f1b0680 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-1440.png new file mode 100644 index 00000000..b10da967 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-320.png new file mode 100644 index 00000000..d81839ce Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-390.png new file mode 100644 index 00000000..cc9668d6 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-768.png new file mode 100644 index 00000000..f2807811 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-1440.png new file mode 100644 index 00000000..867a43d7 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-320.png new file mode 100644 index 00000000..e2a0d298 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-390.png new file mode 100644 index 00000000..e96d03b0 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-768.png new file mode 100644 index 00000000..1592e50f Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/processing-detail-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-1440.png new file mode 100644 index 00000000..1239c142 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-320.png new file mode 100644 index 00000000..8a6b05b5 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-390.png new file mode 100644 index 00000000..06b58b78 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-768.png new file mode 100644 index 00000000..b2a570e2 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-1440.png new file mode 100644 index 00000000..30837c02 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-320.png new file mode 100644 index 00000000..52dc3afe Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-390.png new file mode 100644 index 00000000..b222a371 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-768.png new file mode 100644 index 00000000..ed2a96b4 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-1440.png new file mode 100644 index 00000000..d04a2cb5 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-320.png new file mode 100644 index 00000000..43aa6f87 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-390.png new file mode 100644 index 00000000..525a27ae Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-768.png new file mode 100644 index 00000000..b1287730 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-1440.png new file mode 100644 index 00000000..14231665 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-320.png new file mode 100644 index 00000000..d27ba824 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-390.png new file mode 100644 index 00000000..202c5918 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-768.png new file mode 100644 index 00000000..262b34b9 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/session-confirmation-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-1440.png new file mode 100644 index 00000000..204e0608 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-320.png new file mode 100644 index 00000000..8f4e1464 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-390.png new file mode 100644 index 00000000..2754b6f9 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-768.png new file mode 100644 index 00000000..d6a0603d Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-1440.png new file mode 100644 index 00000000..cdca72a3 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-320.png new file mode 100644 index 00000000..d28598d3 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-390.png new file mode 100644 index 00000000..1ca2138f Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-768.png new file mode 100644 index 00000000..10c4c6f3 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-1440.png new file mode 100644 index 00000000..b53412c4 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-320.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-320.png new file mode 100644 index 00000000..1b7f5b7c Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-390.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-390.png new file mode 100644 index 00000000..9cfc8931 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-768.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-768.png new file mode 100644 index 00000000..36dd72ee Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-1440.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-1440.png new file mode 100644 index 00000000..9cfa2515 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-320.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-320.png new file mode 100644 index 00000000..cb7f0ba8 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-390.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-390.png new file mode 100644 index 00000000..b0fe77df Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-768.png b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-768.png new file mode 100644 index 00000000..b91ac185 Binary files /dev/null and b/docs/ui-modernisation/evidence/account-admin/browser/system-unavailable-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/account-admin/frontend/EARLY-MIXED.json b/docs/ui-modernisation/evidence/account-admin/frontend/EARLY-MIXED.json new file mode 100644 index 00000000..6d0ec067 --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/frontend/EARLY-MIXED.json @@ -0,0 +1 @@ +{"numFailedTestSuites":2,"numFailedTests":2,"numPassedTestSuites":8,"numPassedTests":135,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":10,"numTotalTests":137,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793730743188,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":1358,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730749612,"status":"passed","title":"meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]"},{"ancestorTitles":[],"duration":220,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730750971,"status":"passed","title":"meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]"},{"ancestorTitles":[],"duration":1140,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Career Profile section headings describe the visible hierarchy without changing editing fields","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793730751191,"status":"passed","title":"Career Profile section headings describe the visible hierarchy without changing editing fields"},{"ancestorTitles":[],"duration":238,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account headings separate identity from security sections","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730752331,"status":"passed","title":"account headings separate identity from security sections"},{"ancestorTitles":[],"duration":207,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account CV text status in en does not claim the CV library is empty","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730752569,"status":"passed","title":"account CV text status in en does not claim the CV library is empty"},{"ancestorTitles":[],"duration":184,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account CV text status in nb does not claim the CV library is empty","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730752776,"status":"passed","title":"account CV text status in nb does not claim the CV library is empty"},{"ancestorTitles":[],"duration":701,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730752960,"status":"passed","title":"[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate"},{"ancestorTitles":[],"duration":521,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793730753661,"status":"passed","title":"[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry"},{"ancestorTitles":[],"duration":726,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793730754183,"status":"passed","title":"[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds"},{"ancestorTitles":[],"duration":2540,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page loads persisted structured cv and can re-parse it","invocations":1,"location":null,"numPassingAsserts":18,"retryReasons":[],"startAt":1793730754910,"status":"passed","title":"profile page loads persisted structured cv and can re-parse it"},{"ancestorTitles":[],"duration":1979,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730757451,"status":"passed","title":"saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)"},{"ancestorTitles":[],"duration":1739,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730759430,"status":"passed","title":"editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)"},{"ancestorTitles":[],"duration":1284,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page can reprocess from stored artifact history","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730761169,"status":"passed","title":"profile page can reprocess from stored artifact history"},{"ancestorTitles":[],"duration":1952,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"active extraction polling refreshes run status without resetting unsaved career fields","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730762454,"status":"passed","title":"active extraction polling refreshes run status without resetting unsaved career fields"},{"ancestorTitles":[],"duration":1383,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page shows durable CV operation state and retries a failed run","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730764406,"status":"passed","title":"profile page shows durable CV operation state and retries a failed run"},{"ancestorTitles":[],"duration":1073,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page keeps raw extraction collapsed until expanded","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730765789,"status":"passed","title":"profile page keeps raw extraction collapsed until expanded"},{"ancestorTitles":[],"duration":1974,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saving the master profile (career) persists the structured profile via /career/profile","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730766863,"status":"passed","title":"saving the master profile (career) persists the structured profile via /career/profile"},{"ancestorTitles":[],"duration":160,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career shows the profile completeness overview","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730768837,"status":"passed","title":"/career shows the profile completeness overview"},{"ancestorTitles":[],"duration":910,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career profile exposes extraction progress","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730768997,"status":"passed","title":"/career profile exposes extraction progress"},{"ancestorTitles":[],"duration":1322,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career profile can queue a legacy text CV upload without visiting import review first","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730769907,"status":"passed","title":"/career profile can queue a legacy text CV upload without visiting import review first"},{"ancestorTitles":[],"duration":535,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career localizes completeness and review confidence without changing CV data","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730771229,"status":"passed","title":"/career localizes completeness and review confidence without changing CV data"},{"ancestorTitles":[],"duration":1999,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career separates overview, profile and import while preserving unsaved profile edits","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730771764,"status":"passed","title":"/career separates overview, profile and import while preserving unsaved profile edits"},{"ancestorTitles":[],"duration":2800,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pending CV extraction can be reviewed and applied","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730773763,"status":"passed","title":"pending CV extraction can be reviewed and applied"},{"ancestorTitles":[],"duration":480,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account email changes require a password and use the confirmation flow","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730776563,"status":"passed","title":"account email changes require a password and use the confirmation flow"}],"endTime":1793730777045,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\profile-page.test.tsx","startTime":1793730744534,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["AdminSystemPage"],"duration":379,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage uses contextual system headings and keeps metric values out of heading navigation","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793730778536,"status":"passed","title":"uses contextual system headings and keeps metric values out of heading navigation"},{"ancestorTitles":["AdminSystemPage"],"duration":371,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage associates each tab with its named panel","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730778915,"status":"passed","title":"associates each tab with its named panel"},{"ancestorTitles":["AdminSystemPage"],"duration":327,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage never fabricates offline metrics after an initial status failure and retries only the failed read","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730779286,"status":"passed","title":"never fabricates offline metrics after an initial status failure and retries only the failed read"},{"ancestorTitles":["AdminSystemPage"],"duration":895,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage keeps SMTP edits and write-only password through explicit refresh","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730779614,"status":"passed","title":"keeps SMTP edits and write-only password through explicit refresh"},{"ancestorTitles":["AdminSystemPage"],"duration":1148,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage submits one SMTP snapshot, retains newer edits and prevents competing operational actions","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793730780509,"status":"passed","title":"submits one SMTP snapshot, retains newer edits and prevents competing operational actions"},{"ancestorTitles":["AdminSystemPage"],"duration":400,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage reports an optional /admin/system/cv-benchmark failure and retries that GET without operational writes","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730781657,"status":"passed","title":"reports an optional /admin/system/cv-benchmark failure and retries that GET without operational writes"},{"ancestorTitles":["AdminSystemPage"],"duration":408,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage reports an optional /admin/system/maintenance-jobs failure and retries that GET without operational writes","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730782057,"status":"passed","title":"reports an optional /admin/system/maintenance-jobs failure and retries that GET without operational writes"},{"ancestorTitles":["AdminSystemPage"],"duration":943,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage keeps explicit password clearing through refresh and acknowledges only the submitted secret","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730782465,"status":"passed","title":"keeps explicit password clearing through refresh and acknowledges only the submitted secret"},{"ancestorTitles":["AdminSystemPage"],"duration":1021,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage retains failed SMTP edits and only writes again after an explicit save","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730783408,"status":"passed","title":"retains failed SMTP edits and only writes again after an explicit save"},{"ancestorTitles":["AdminSystemPage"],"duration":499,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage waits for one probe before allowing another action and never runs on entry or tab changes","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730784430,"status":"passed","title":"waits for one probe before allowing another action and never runs on entry or tab changes"},{"ancestorTitles":["AdminSystemPage"],"duration":668,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage refreshes probe metrics after success and a failed follow-up read retries GET without replaying the probe","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730784929,"status":"passed","title":"refreshes probe metrics after success and a failed follow-up read retries GET without replaying the probe"},{"ancestorTitles":["AdminSystemPage"],"duration":550,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage does not acknowledge an SMTP write into a changed session","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730785597,"status":"passed","title":"does not acknowledge an SMTP write into a changed session"},{"ancestorTitles":["AdminSystemPage"],"duration":329,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage does not refresh or announce a completed probe after unmount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730786147,"status":"passed","title":"does not refresh or announce a completed probe after unmount"},{"ancestorTitles":["AdminSystemPage"],"duration":281,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage clears sensitive diagnostics after a denied refresh and offers no retry or operational action","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730786476,"status":"passed","title":"clears sensitive diagnostics after a denied refresh and offers no retry or operational action"},{"ancestorTitles":["AdminSystemPage"],"duration":459,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage keeps the last diagnostic values under a qualified refresh error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730786757,"status":"passed","title":"keeps the last diagnostic values under a qualified refresh error"},{"ancestorTitles":["AdminSystemPage"],"duration":441,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage does not present unavailable SMTP settings as a blank editable configuration","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730787216,"status":"passed","title":"does not present unavailable SMTP settings as a blank editable configuration"},{"ancestorTitles":["AdminSystemPage"],"duration":151,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage renders AI service health, latency, and OCR readiness","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793730787657,"status":"passed","title":"renders AI service health, latency, and OCR readiness"},{"ancestorTitles":["AdminSystemPage"],"duration":872,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage loads and saves smtp settings from the settings tab","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730787808,"status":"passed","title":"loads and saves smtp settings from the settings tab"},{"ancestorTitles":["AdminSystemPage"],"duration":366,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage dispatches the allowlisted CV benchmark from the system panel","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730788681,"status":"passed","title":"dispatches the allowlisted CV benchmark from the system panel"},{"ancestorTitles":["AdminSystemPage"],"duration":374,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage localizes benchmark diagnostics without changing runtime values","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730789047,"status":"passed","title":"localizes benchmark diagnostics without changing runtime values"}],"endTime":1793730789422,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-system-page.test.tsx","startTime":1793730777061,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Profile account provider cards"],"duration":56,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E09] disabled Google has a named account section without starting OAuth","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793730790680,"status":"passed","title":"[PRES-E02/E09] disabled Google has a named account section without starting OAuth"},{"ancestorTitles":["Profile account provider cards"],"duration":23,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E09] disabled Microsoft has a named account section without starting OAuth","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793730790736,"status":"passed","title":"[PRES-E02/E09] disabled Microsoft has a named account section without starting OAuth"},{"ancestorTitles":["Profile account provider cards"],"duration":47,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E09] Google linked metadata follows Bokmål while retaining the stored timestamp","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730790759,"status":"passed","title":"[PRES-E02/E09] Google linked metadata follows Bokmål while retaining the stored timestamp"},{"ancestorTitles":["Profile account provider cards"],"duration":54,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E09] Microsoft linked metadata follows Bokmål while retaining the stored timestamp","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730790806,"status":"passed","title":"[PRES-E03/E09] Microsoft linked metadata follows Bokmål while retaining the stored timestamp"},{"ancestorTitles":["Profile account provider cards"],"duration":110,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E08] Microsoft local linking requires the current password and cancellation keeps it without exchanging credentials","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793730790860,"status":"passed","title":"[PRES-E03/E08] Microsoft local linking requires the current password and cancellation keeps it without exchanging credentials"},{"ancestorTitles":["Profile account provider cards"],"duration":107,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E08] rejected Microsoft linking retains the password and local account for an explicit retry","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730790970,"status":"passed","title":"[PRES-E03/E08] rejected Microsoft linking retains the password and local account for an explicit retry"},{"ancestorTitles":["Profile account provider cards"],"duration":100,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E05] successful Microsoft local linking retains the established forced sign-in contract","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730791078,"status":"passed","title":"[PRES-E03/E05] successful Microsoft local linking retains the established forced sign-in contract"},{"ancestorTitles":["Profile account provider cards"],"duration":134,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E05/E08] Microsoft unlink is password-guarded and a failed attempt retains input until a deliberate retry succeeds","invocations":1,"location":null,"numPassingAsserts":13,"retryReasons":[],"startAt":1793730791178,"status":"passed","title":"[PRES-E03/E05/E08] Microsoft unlink is password-guarded and a failed attempt retains input until a deliberate retry succeeds"},{"ancestorTitles":["Profile account provider cards"],"duration":32,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E03] a google-owned account cannot unlink its only authentication provider","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730791312,"status":"passed","title":"[PRES-E02/E03] a google-owned account cannot unlink its only authentication provider"},{"ancestorTitles":["Profile account provider cards"],"duration":34,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E03] a microsoft-owned account cannot unlink its only authentication provider","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730791344,"status":"passed","title":"[PRES-E02/E03] a microsoft-owned account cannot unlink its only authentication provider"},{"ancestorTitles":["Profile account provider cards"],"duration":118,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E08] Google local linking reports failure and retries the link endpoint without an exchange","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793730791378,"status":"passed","title":"[PRES-E02/E08] Google local linking reports failure and retries the link endpoint without an exchange"},{"ancestorTitles":["Profile account provider cards"],"duration":79,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E08] failed Google unlink preserves the local account and linked state until explicit retry","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793730791496,"status":"passed","title":"[PRES-E02/E08] failed Google unlink preserves the local account and linked state until explicit retry"}],"endTime":1793730791577,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-providers.test.tsx","startTime":1793730789432,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":433,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cancelling setup sends no security write and clears the password before reopening","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793730792682,"status":"passed","title":"cancelling setup sends no security write and clears the password before reopening"},{"ancestorTitles":[],"duration":563,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"regenerated recovery codes require acknowledgement, survive Escape, export correctly, and clear after Done","invocations":1,"location":null,"numPassingAsserts":23,"retryReasons":[],"startAt":1793730793116,"status":"passed","title":"regenerated recovery codes require acknowledgement, survive Escape, export correctly, and clear after Done"},{"ancestorTitles":[],"duration":144,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål enabled status and trusted-device dates survive a read-only retry, then revoke the selected device with readback","invocations":1,"location":null,"numPassingAsserts":21,"retryReasons":[],"startAt":1793730793680,"status":"passed","title":"Bokmål enabled status and trusted-device dates survive a read-only retry, then revoke the selected device with readback"},{"ancestorTitles":[],"duration":83,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed sessions read offers a read-only retry without inventing an empty session list","invocations":1,"location":null,"numPassingAsserts":15,"retryReasons":[],"startAt":1793730793825,"status":"passed","title":"a failed sessions read offers a read-only retry without inventing an empty session list"},{"ancestorTitles":[],"duration":382,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pending revoke-others disables confirmation and cancellation, blocks duplicate writes, and reads back the surviving session","invocations":1,"location":null,"numPassingAsserts":14,"retryReasons":[],"startAt":1793730793908,"status":"passed","title":"pending revoke-others disables confirmation and cancellation, blocks duplicate writes, and reads back the surviving session"}],"endTime":1793730794292,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-security-flows.test.tsx","startTime":1793730791586,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":345,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"desktop user-grid pagination follows en UI language","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730798739,"status":"passed","title":"desktop user-grid pagination follows en UI language"},{"ancestorTitles":[],"duration":324,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"desktop user-grid pagination follows nb UI language","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730799084,"status":"passed","title":"desktop user-grid pagination follows nb UI language"},{"ancestorTitles":[],"duration":241,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed users read stays unavailable and Retry only reads","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730799409,"status":"passed","title":"failed users read stays unavailable and Retry only reads"},{"ancestorTitles":[],"duration":245,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"create failure presents structured feedback and retains the entered fields","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730799650,"status":"passed","title":"create failure presents structured feedback and retains the entered fields"},{"ancestorTitles":[],"duration":247,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"create admission serializes competing clicks and acknowledgement retains newer form values","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730799895,"status":"passed","title":"create admission serializes competing clicks and acknowledgement retains newer form values"},{"ancestorTitles":[],"duration":340,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"successful create followed by failed list refresh keeps read recovery without replaying create","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730800142,"status":"passed","title":"successful create followed by failed list refresh keeps read recovery without replaying create"},{"ancestorTitles":[],"duration":170,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"disposed create acknowledgement cannot start a new private list read","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730800483,"status":"passed","title":"disposed create acknowledgement cannot start a new private list read"},{"ancestorTitles":[],"duration":735,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"requires explicit confirmation before removing your own admin role","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730800653,"status":"passed","title":"requires explicit confirmation before removing your own admin role"},{"ancestorTitles":[],"duration":264,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"warns before demoting another administrator","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730801388,"status":"passed","title":"warns before demoting another administrator"},{"ancestorTitles":[],"duration":387,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"disables demotion and deletion for the final administrator","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730801652,"status":"passed","title":"disables demotion and deletion for the final administrator"},{"ancestorTitles":[],"duration":265,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"sends the exact account email after confirming deletion","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730802039,"status":"passed","title":"sends the exact account email after confirming deletion"},{"ancestorTitles":[],"duration":294,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"accepted deletion is reported as queued rather than completed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730802304,"status":"passed","title":"accepted deletion is reported as queued rather than completed"}],"endTime":1793730802598,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-users-page.test.tsx","startTime":1793730794310,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":130,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] retains shared heading hierarchy and a named keyboard scroll region","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730804414,"status":"passed","title":"[P7-10 audit] retains shared heading hierarchy and a named keyboard scroll region"},{"ancestorTitles":[],"duration":180,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] exact Undo allowlist and deleted-only Restore retain endpoint contracts","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730804544,"status":"passed","title":"[P7-10 audit] exact Undo allowlist and deleted-only Restore retain endpoint contracts"},{"ancestorTitles":[],"duration":215,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] Undo and Restore serialize across rows, retaining focus on pending table","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730804724,"status":"passed","title":"[P7-10 audit] Undo and Restore serialize across rows, retaining focus on pending table"},{"ancestorTitles":[],"duration":159,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] a committed Restore with failed refresh recovers through GET only","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730804940,"status":"passed","title":"[P7-10 audit] a committed Restore with failed refresh recovers through GET only"},{"ancestorTitles":[],"duration":73,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] late Undo after unmount cannot notify or refresh","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730805099,"status":"passed","title":"[P7-10 audit] late Undo after unmount cannot notify or refresh"},{"ancestorTitles":[],"duration":74,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] late Undo after session cannot notify or refresh","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730805172,"status":"passed","title":"[P7-10 audit] late Undo after session cannot notify or refresh"},{"ancestorTitles":[],"duration":141,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] pending failure uses safe current-language feedback without a locale GET","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730805246,"status":"passed","title":"[P7-10 audit] pending failure uses safe current-language feedback without a locale GET"},{"ancestorTitles":[],"duration":94,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"distinguishes an unavailable audit log from an empty audit log and retries","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730805387,"status":"passed","title":"distinguishes an unavailable audit log from an empty audit log and retries"},{"ancestorTitles":[],"duration":62,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"localizes audit actions in Bokmål without translating stored event data","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730805481,"status":"passed","title":"localizes audit actions in Bokmål without translating stored event data"}],"endTime":1793730805544,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-audit-page.test.tsx","startTime":1793730802611,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":53,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E09] Bokmål signed-in status and section semantics use the UI language","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730806802,"status":"passed","title":"[PRES-E02/E09] Bokmål signed-in status and section semantics use the UI language"},{"ancestorTitles":[],"duration":67,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08] a failed identity read is unknown and retries without a logout or login write","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730806855,"status":"passed","title":"[PRES-E02/E08] a failed identity read is unknown and retries without a logout or login write"},{"ancestorTitles":[],"duration":31,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02] an authoritative unauthenticated identity read retains signed-out presentation","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730806922,"status":"passed","title":"[PRES-E02] an authoritative unauthenticated identity read retains signed-out presentation"},{"ancestorTitles":[],"duration":30,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E04] unknown 2FA status announces loading and cannot suggest setup","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730806954,"status":"passed","title":"[PRES-E04] unknown 2FA status announces loading and cannot suggest setup"},{"ancestorTitles":[],"duration":61,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E04/E08] failed 2FA status offers read-only retry before security actions","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730806984,"status":"passed","title":"[PRES-E04/E08] failed 2FA status offers read-only retry before security actions"},{"ancestorTitles":[],"duration":438,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E05/E08] session-revocation failure stays inside its named confirmation for retry","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730807045,"status":"passed","title":"[PRES-E05/E08] session-revocation failure stays inside its named confirmation for retry"},{"ancestorTitles":[],"duration":29,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E05/E09] sessions keep stored timestamps and render dates in Bokmål","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730807484,"status":"passed","title":"[PRES-E05/E09] sessions keep stored timestamps and render dates in Bokmål"}],"endTime":1793730807514,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-security-presentation.test.tsx","startTime":1793730805561,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":107,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"downloads the readable account ZIP from the protected endpoint","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730808768,"status":"passed","title":"downloads the readable account ZIP from the protected endpoint"},{"ancestorTitles":[],"duration":91,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"explains the recent-sign-in requirement without weakening it","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730808875,"status":"passed","title":"explains the recent-sign-in requirement without weakening it"},{"ancestorTitles":[],"duration":53,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps account deletion hidden behind the server flag","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730808966,"status":"passed","title":"keeps account deletion hidden behind the server flag"},{"ancestorTitles":[],"duration":506,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"requires the exact server-provided deletion phrase","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730809019,"status":"passed","title":"requires the exact server-provided deletion phrase"}],"endTime":1793730809526,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-data-export.test.tsx","startTime":1793730807525,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":4216,"failing":false,"failureDetails":[{"name":"TestingLibraryElementError"}],"failureMessages":["Error: Unable to find role=\"tabpanel\" and name \"Backup\"\n\nIgnored nodes: comments, script, style\n\u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mSettings section\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGeneral\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mSettings section\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGeneral\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomation\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFollow-ups\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mNotifications\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBackup\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-each\\build\\index.js:80:140)\n at Promise.finally.completed (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1561:28)\n at new Promise ()\n at callAsyncCircusFn (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1501:10)\n at _callCircusTest (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1011:40)\n at _runTest (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:951:3)\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:853:7\n at _runTestsForDescribeBlock (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:866:11)\n at run (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:765:3)\n at runAndTransformResultsToJestFormat (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1993:21)\n at jestAdapter (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\runner.js:111:19)\n at runTestInternal (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-runner\\build\\index.js:276:16)\n at runTest (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-runner\\build\\index.js:344:7)"],"fullName":"account data entry selects a supported initial section (data)","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730811315,"status":"failed","title":"account data entry selects a supported initial section (data)"},{"ancestorTitles":[],"duration":135,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (unknown)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730815532,"status":"passed","title":"account data entry selects a supported initial section (unknown)"},{"ancestorTitles":[],"duration":1041,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"each selected Settings section has a named panel linked to its tab and remains selectable on phones","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793730815667,"status":"passed","title":"each selected Settings section has a named panel linked to its tab and remains selectable on phones"},{"ancestorTitles":[],"duration":602,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings view has no accent picker and uses one follow-up section, one notification section","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793730816709,"status":"passed","title":"settings view has no accent picker and uses one follow-up section, one notification section"},{"ancestorTitles":[],"duration":189,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI privacy settings are server-backed and external processing is local-only by default","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730817311,"status":"passed","title":"AI privacy settings are server-backed and external processing is local-only by default"},{"ancestorTitles":[],"duration":4465,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed notification save preserves the draft for an explicit retry","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730817500,"status":"passed","title":"[PRES-S03] failed notification save preserves the draft for an explicit retry"},{"ancestorTitles":[],"duration":577,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730821966,"status":"passed","title":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios"},{"ancestorTitles":[],"duration":330,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730822544,"status":"passed","title":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks"},{"ancestorTitles":[],"duration":775,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730822874,"status":"passed","title":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts"},{"ancestorTitles":[],"duration":992,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730823649,"status":"passed","title":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state"},{"ancestorTitles":[],"duration":1104,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730824641,"status":"passed","title":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation"},{"ancestorTitles":[],"duration":773,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730825745,"status":"passed","title":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing"},{"ancestorTitles":[],"duration":1079,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730826518,"status":"passed","title":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch"},{"ancestorTitles":[],"duration":735,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730827597,"status":"passed","title":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses"},{"ancestorTitles":[],"duration":520,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730828332,"status":"passed","title":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft"},{"ancestorTitles":[],"duration":514,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730828853,"status":"passed","title":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference"},{"ancestorTitles":[],"duration":429,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730829367,"status":"passed","title":"en Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":536,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730829796,"status":"passed","title":"nb Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":353,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Automation AI entry moves focus into existing settings without an AI request","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730830332,"status":"passed","title":"Automation AI entry moves focus into existing settings without an AI request"},{"ancestorTitles":[],"duration":228,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730830685,"status":"passed","title":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action"},{"ancestorTitles":[],"duration":821,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730830913,"status":"passed","title":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save"},{"ancestorTitles":[],"duration":843,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730831734,"status":"passed","title":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections"},{"ancestorTitles":[],"duration":533,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730832577,"status":"passed","title":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save"},{"ancestorTitles":[],"duration":717,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730833111,"status":"passed","title":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched"},{"ancestorTitles":[],"duration":743,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730833828,"status":"passed","title":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session"},{"ancestorTitles":[],"duration":457,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793730834571,"status":"passed","title":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract"}],"endTime":1793730835043,"message":" ● account data entry selects a supported initial section (data)\n\n Unable to find role=\"tabpanel\" and name \"Backup\"\n\n Ignored nodes: comments, script, style\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mSettings section\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGeneral\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mSettings section\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGeneral\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomation\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFollow-ups\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mNotifications\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBackup\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m {\n 107 | renderView({}, `/settings?section=${section}`);\n > 108 | expect(await screen.findByRole('tabpanel', { name: label, exact: true })).toBeVisible();\n | ^\n 109 | expect(mockedApi.post).not.toHaveBeenCalled(); expect(mockedApi.put).not.toHaveBeenCalled();\n 110 | });\n 111 |\n\n at waitForWrapper (node_modules/@testing-library/dom/dist/wait-for.js:163:27)\n at node_modules/@testing-library/dom/dist/query-helpers.js:86:33\n at findByRole (src/settings-view.test.tsx:108:23)\n","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\settings-view.test.tsx","startTime":1793730809540,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":507,"failing":false,"failureDetails":[{"name":"TestingLibraryElementError"}],"failureMessages":["TestingLibraryElementError: Unable to find an accessible element with the role \"form\" and name \"Processing filters\"\n\nHere are the accessible roles:\n\n banner:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n heading:\n\n Name \"Processing monitor\":\n \u001b[36m\u001b[39m\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n paragraph:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n button:\n\n Name \"Pause updates\":\n \u001b[36m\u001b[39m\n\n Name \"Refresh\":\n \u001b[36m\u001b[39m\n\n Name \"Apply filters\":\n \u001b[36m\u001b[39m\n\n Name \"View processing details 11111111-1111-4111-8111-111111111111\":\n \u001b[36m\u001b[39m\n\n Name \"Synthetic owner\":\n \u001b[36m\u001b[39m\n\n Name \"Previous page\":\n \u001b[36m\u001b[39m\n\n Name \"Next page\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n status:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n combobox:\n\n Name \"Status\":\n \u001b[36m\u001b[39m\n\n Name \"Task\":\n \u001b[36m\u001b[39m\n\n Name \"Worker filter\":\n \u001b[36m\u001b[39m\n\n Name \"Failure code\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n option:\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"Queued\":\n \u001b[36m\u001b[39m\n\n Name \"Running\":\n \u001b[36m\u001b[39m\n\n Name \"Waiting to retry\":\n \u001b[36m\u001b[39m\n\n Name \"Waiting for approved fallback\":\n \u001b[36m\u001b[39m\n\n Name \"Completed\":\n \u001b[36m\u001b[39m\n\n Name \"Failed\":\n \u001b[36m\u001b[39m\n\n Name \"Cancelled\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"CV processing\":\n \u001b[36m\u001b[39m\n\n Name \"Strategy snapshot\":\n \u001b[36m\u001b[39m\n\n Name \"Other operation\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"Document processing\":\n \u001b[36m\u001b[39m\n\n Name \"AI operations\":\n \u001b[36m\u001b[39m\n\n Name \"Unregistered worker\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"timeout\":\n \u001b[36m\u001b[39m\n\n Name \"lease_expired\":\n \u001b[36m\u001b[39m\n\n Name \"deadline_exceeded\":\n \u001b[36m\u001b[39m\n\n Name \"entitlement_changed\":\n \u001b[36m\u001b[39m\n\n Name \"document_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"sidecar_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"upstream_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"invalid_response\":\n \u001b[36m\u001b[39m\n\n Name \"circuit_open\":\n \u001b[36m\u001b[39m\n\n Name \"rate_limited\":\n \u001b[36m\u001b[39m\n\n Name \"permission_denied\":\n \u001b[36m\u001b[39m\n\n Name \"cancelled\":\n \u001b[36m\u001b[39m\n\n Name \"upload_rejected\":\n \u001b[36m\u001b[39m\n\n Name \"parser_failed\":\n \u001b[36m\u001b[39m\n\n Name \"malformed_output\":\n \u001b[36m\u001b[39m\n\n Name \"provider_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"processing_failed\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n textbox:\n\n Name \"Owner ID\":\n \u001b[36m\u001b[39m\n\n Name \"Search users, jobs or task ID\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n spinbutton:\n\n Name \"Application ID\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n region:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n group:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n table:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n rowgroup:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n row:\n\n Name \"Task Owner Status Worker Created Duration\":\n \u001b[36m\u001b[39m\n\n Name \"CV processing CV.pdf Synthetic owner owner@example.test Running Reading document structure Document processing Enabled 28/10/2026, 13:00:00 8 seconds\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n columnheader:\n\n Name \"Task\":\n \u001b[36m\u001b[39m\n\n Name \"Owner\":\n \u001b[36m\u001b[39m\n\n Name \"Status\":\n \u001b[36m\u001b[39m\n\n Name \"Worker\":\n \u001b[36m\u001b[39m\n\n Name \"Created\":\n \u001b[36m\u001b[39m\n\n Name \"Duration\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n rowheader:\n\n Name \"CV processing CV.pdf\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n cell:\n\n Name \"Synthetic owner owner@example.test\":\n \u001b[36m\u001b[39m\n\n Name \"Running Reading document structure\":\n \u001b[36m\u001b[39m\n\n Name \"Document processing Enabled\":\n \u001b[36m\u001b[39m\n\n Name \"28/10/2026, 13:00:00\":\n \u001b[36m\u001b[39m\n\n Name \"8 seconds\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n time:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n\nIgnored nodes: comments, script, style\n\u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProcessing monitor\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDocument and AI operations, their owners and safe processing history.\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mPause updates\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRefresh\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomatic updates enabled\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mUpdated 03/11/2026, 19:33:56\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAll\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mQueued\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRunning\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting to retry\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting for approved fallback\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCompleted\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFailed\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCancelled\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[...\n at Object.getElementError (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\config.js:37:19)\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\query-helpers.js:76:38\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\query-helpers.js:52:17\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\query-helpers.js:95:19\n at Object.getByRole (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-processing-page.test.tsx:25:25)"],"fullName":"processing workspace keyboard targets move between filters and jobs without changing filters","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730836242,"status":"failed","title":"processing workspace keyboard targets move between filters and jobs without changing filters"},{"ancestorTitles":[],"duration":346,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730836762,"status":"passed","title":"uses safe en fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":340,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730837108,"status":"passed","title":"uses safe en fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":335,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730837448,"status":"passed","title":"uses safe en fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":327,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730837783,"status":"passed","title":"uses safe nb fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":187,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730838110,"status":"passed","title":"uses safe nb fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":332,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730838297,"status":"passed","title":"uses safe nb fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":385,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows safe job metadata and real events with a copyable correlation ID","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730838629,"status":"passed","title":"shows safe job metadata and real events with a copyable correlation ID"},{"ancestorTitles":[],"duration":598,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730839014,"status":"passed","title":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata"},{"ancestorTitles":[],"duration":464,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows stable failure evidence and links an application only when the server permits it","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730839613,"status":"passed","title":"shows stable failure evidence and links an application only when the server permits it"},{"ancestorTitles":[],"duration":156,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a successful retry keeps prior failure evidence separate from its success timestamp","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730840077,"status":"passed","title":"a successful retry keeps prior failure evidence separate from its success timestamp"},{"ancestorTitles":[],"duration":524,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pause stops polling and resume uses an exact string event cursor","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730840233,"status":"passed","title":"pause stops polling and resume uses an exact string event cursor"},{"ancestorTitles":[],"duration":94,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"forbidden responses clear metadata and do not retry automatically","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730840758,"status":"passed","title":"forbidden responses clear metadata and do not retry automatically"},{"ancestorTitles":[],"duration":136,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"malformed successful responses produce a recoverable error instead of rendering raw data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730840852,"status":"passed","title":"malformed successful responses produce a recoverable error instead of rendering raw data"},{"ancestorTitles":[],"duration":53,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid filters explain the rejected request and stop automatic retries","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730840988,"status":"passed","title":"invalid filters explain the rejected request and stop automatic retries"},{"ancestorTitles":[],"duration":51,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"identity changes abort pending reads and clear the previous administrator view","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730841042,"status":"passed","title":"identity changes abort pending reads and clear the previous administrator view"},{"ancestorTitles":[],"duration":81,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed cycle aborts sibling reads and reconnects with bounded backoff","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730841093,"status":"passed","title":"a failed cycle aborts sibling reads and reconnects with bounded backoff"},{"ancestorTitles":[],"duration":583,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"older event pages pause updates and retain exact cursors until returning to latest","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730841174,"status":"passed","title":"older event pages pause updates and retain exact cursors until returning to latest"}],"endTime":1793730841763,"message":" ● processing workspace keyboard targets move between filters and jobs without changing filters\n\n TestingLibraryElementError: Unable to find an accessible element with the role \"form\" and name \"Processing filters\"\n\n Here are the accessible roles:\n\n banner:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n heading:\n\n Name \"Processing monitor\":\n \u001b[36m\u001b[39m\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n paragraph:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n button:\n\n Name \"Pause updates\":\n \u001b[36m\u001b[39m\n\n Name \"Refresh\":\n \u001b[36m\u001b[39m\n\n Name \"Apply filters\":\n \u001b[36m\u001b[39m\n\n Name \"View processing details 11111111-1111-4111-8111-111111111111\":\n \u001b[36m\u001b[39m\n\n Name \"Synthetic owner\":\n \u001b[36m\u001b[39m\n\n Name \"Previous page\":\n \u001b[36m\u001b[39m\n\n Name \"Next page\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n status:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n combobox:\n\n Name \"Status\":\n \u001b[36m\u001b[39m\n\n Name \"Task\":\n \u001b[36m\u001b[39m\n\n Name \"Worker filter\":\n \u001b[36m\u001b[39m\n\n Name \"Failure code\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n option:\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"Queued\":\n \u001b[36m\u001b[39m\n\n Name \"Running\":\n \u001b[36m\u001b[39m\n\n Name \"Waiting to retry\":\n \u001b[36m\u001b[39m\n\n Name \"Waiting for approved fallback\":\n \u001b[36m\u001b[39m\n\n Name \"Completed\":\n \u001b[36m\u001b[39m\n\n Name \"Failed\":\n \u001b[36m\u001b[39m\n\n Name \"Cancelled\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"CV processing\":\n \u001b[36m\u001b[39m\n\n Name \"Strategy snapshot\":\n \u001b[36m\u001b[39m\n\n Name \"Other operation\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"Document processing\":\n \u001b[36m\u001b[39m\n\n Name \"AI operations\":\n \u001b[36m\u001b[39m\n\n Name \"Unregistered worker\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"timeout\":\n \u001b[36m\u001b[39m\n\n Name \"lease_expired\":\n \u001b[36m\u001b[39m\n\n Name \"deadline_exceeded\":\n \u001b[36m\u001b[39m\n\n Name \"entitlement_changed\":\n \u001b[36m\u001b[39m\n\n Name \"document_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"sidecar_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"upstream_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"invalid_response\":\n \u001b[36m\u001b[39m\n\n Name \"circuit_open\":\n \u001b[36m\u001b[39m\n\n Name \"rate_limited\":\n \u001b[36m\u001b[39m\n\n Name \"permission_denied\":\n \u001b[36m\u001b[39m\n\n Name \"cancelled\":\n \u001b[36m\u001b[39m\n\n Name \"upload_rejected\":\n \u001b[36m\u001b[39m\n\n Name \"parser_failed\":\n \u001b[36m\u001b[39m\n\n Name \"malformed_output\":\n \u001b[36m\u001b[39m\n\n Name \"provider_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"processing_failed\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n textbox:\n\n Name \"Owner ID\":\n \u001b[36m\u001b[39m\n\n Name \"Search users, jobs or task ID\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n spinbutton:\n\n Name \"Application ID\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n region:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n group:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n table:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n rowgroup:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n row:\n\n Name \"Task Owner Status Worker Created Duration\":\n \u001b[36m\u001b[39m\n\n Name \"CV processing CV.pdf Synthetic owner owner@example.test Running Reading document structure Document processing Enabled 28/10/2026, 13:00:00 8 seconds\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n columnheader:\n\n Name \"Task\":\n \u001b[36m\u001b[39m\n\n Name \"Owner\":\n \u001b[36m\u001b[39m\n\n Name \"Status\":\n \u001b[36m\u001b[39m\n\n Name \"Worker\":\n \u001b[36m\u001b[39m\n\n Name \"Created\":\n \u001b[36m\u001b[39m\n\n Name \"Duration\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n rowheader:\n\n Name \"CV processing CV.pdf\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n cell:\n\n Name \"Synthetic owner owner@example.test\":\n \u001b[36m\u001b[39m\n\n Name \"Running Reading document structure\":\n \u001b[36m\u001b[39m\n\n Name \"Document processing Enabled\":\n \u001b[36m\u001b[39m\n\n Name \"28/10/2026, 13:00:00\":\n \u001b[36m\u001b[39m\n\n Name \"8 seconds\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n time:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n\n Ignored nodes: comments, script, style\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProcessing monitor\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDocument and AI operations, their owners and safe processing history.\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mPause updates\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRefresh\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomatic updates enabled\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mUpdated 03/11/2026, 19:33:56\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAll\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mQueued\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRunning\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting to retry\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting for approved fallback\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCompleted\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFailed\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCancelled\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[...\n\n 23 | test('processing workspace keyboard targets move between filters and jobs without changing filters', async () => {\n 24 | open(); await screen.findByText('Synthetic owner');\n > 25 | const filter = screen.getByRole('form', { name: 'Processing filters' });\n | ^\n 26 | const search = screen.getByLabelText('Search users, jobs or task ID');\n 27 | fireEvent.change(search, { target: { value: 'Unsubmitted search' } });\n 28 | const jobs = screen.getByRole('group', { name: 'Processing results' });\n\n at Object.getElementError (node_modules/@testing-library/dom/dist/config.js:37:19)\n at node_modules/@testing-library/dom/dist/query-helpers.js:76:38\n at node_modules/@testing-library/dom/dist/query-helpers.js:52:17\n at node_modules/@testing-library/dom/dist/query-helpers.js:95:19\n at Object.getByRole (src/admin-processing-page.test.tsx:25:25)\n","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-processing-page.test.tsx","startTime":1793730835084,"status":"failed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/evidence/account-admin/frontend/a3-account-admin-focused.json b/docs/ui-modernisation/evidence/account-admin/frontend/a3-account-admin-focused.json new file mode 100644 index 00000000..3712860b --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/frontend/a3-account-admin-focused.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":3,"numPassedTests":5,"numPendingTestSuites":0,"numPendingTests":65,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":3,"numTotalTests":70,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793730858215,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":166,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (data)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730863734,"status":"passed","title":"account data entry selects a supported initial section (data)"},{"ancestorTitles":[],"duration":253,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (unknown)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730863901,"status":"passed","title":"account data entry selects a supported initial section (unknown)"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"each selected Settings section has a named panel linked to its tab and remains selectable on phones","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"each selected Settings section has a named panel linked to its tab and remains selectable on phones"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings view has no accent picker and uses one follow-up section, one notification section","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"settings view has no accent picker and uses one follow-up section, one notification section"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI privacy settings are server-backed and external processing is local-only by default","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"AI privacy settings are server-backed and external processing is local-only by default"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed notification save preserves the draft for an explicit retry","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03] failed notification save preserves the draft for an explicit retry"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864154,"status":"pending","title":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"en Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"nb Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Automation AI entry moves focus into existing settings without an AI request","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"Automation AI entry moves focus into existing settings without an AI request"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730864155,"status":"pending","title":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract"}],"endTime":1793730864156,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\settings-view.test.tsx","startTime":1793730859644,"status":"focused","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":337,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"processing workspace keyboard targets move between filters and jobs without changing filters","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730865697,"status":"passed","title":"processing workspace keyboard targets move between filters and jobs without changing filters"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"uses safe en fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"uses safe en fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"uses safe en fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"uses safe nb fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"uses safe nb fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"uses safe nb fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows safe job metadata and real events with a copyable correlation ID","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"shows safe job metadata and real events with a copyable correlation ID"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows stable failure evidence and links an application only when the server permits it","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"shows stable failure evidence and links an application only when the server permits it"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a successful retry keeps prior failure evidence separate from its success timestamp","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"a successful retry keeps prior failure evidence separate from its success timestamp"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pause stops polling and resume uses an exact string event cursor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"pause stops polling and resume uses an exact string event cursor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"forbidden responses clear metadata and do not retry automatically","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"forbidden responses clear metadata and do not retry automatically"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"malformed successful responses produce a recoverable error instead of rendering raw data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"malformed successful responses produce a recoverable error instead of rendering raw data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid filters explain the rejected request and stop automatic retries","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"invalid filters explain the rejected request and stop automatic retries"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"identity changes abort pending reads and clear the previous administrator view","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"identity changes abort pending reads and clear the previous administrator view"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed cycle aborts sibling reads and reconnects with bounded backoff","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"a failed cycle aborts sibling reads and reconnects with bounded backoff"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"older event pages pause updates and retain exact cursors until returning to latest","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730866035,"status":"pending","title":"older event pages pause updates and retain exact cursors until returning to latest"}],"endTime":1793730866036,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-processing-page.test.tsx","startTime":1793730864174,"status":"focused","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":454,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account workspace navigation preserves identity drafts and focuses existing groups (en)","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793730867545,"status":"passed","title":"account workspace navigation preserves identity drafts and focuses existing groups (en)"},{"ancestorTitles":[],"duration":332,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account workspace navigation preserves identity drafts and focuses existing groups (nb)","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793730867999,"status":"passed","title":"account workspace navigation preserves identity drafts and focuses existing groups (nb)"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Career Profile section headings describe the visible hierarchy without changing editing fields","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"Career Profile section headings describe the visible hierarchy without changing editing fields"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account headings separate identity from security sections","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"account headings separate identity from security sections"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account CV text status in en does not claim the CV library is empty","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"account CV text status in en does not claim the CV library is empty"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account CV text status in nb does not claim the CV library is empty","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"account CV text status in nb does not claim the CV library is empty"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page loads persisted structured cv and can re-parse it","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"profile page loads persisted structured cv and can re-parse it"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page can reprocess from stored artifact history","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"profile page can reprocess from stored artifact history"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"active extraction polling refreshes run status without resetting unsaved career fields","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"active extraction polling refreshes run status without resetting unsaved career fields"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page shows durable CV operation state and retries a failed run","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"profile page shows durable CV operation state and retries a failed run"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page keeps raw extraction collapsed until expanded","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"profile page keeps raw extraction collapsed until expanded"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saving the master profile (career) persists the structured profile via /career/profile","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"saving the master profile (career) persists the structured profile via /career/profile"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career shows the profile completeness overview","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"/career shows the profile completeness overview"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career profile exposes extraction progress","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"/career profile exposes extraction progress"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career profile can queue a legacy text CV upload without visiting import review first","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"/career profile can queue a legacy text CV upload without visiting import review first"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career localizes completeness and review confidence without changing CV data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"/career localizes completeness and review confidence without changing CV data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career separates overview, profile and import while preserving unsaved profile edits","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"/career separates overview, profile and import while preserving unsaved profile edits"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pending CV extraction can be reviewed and applied","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"pending CV extraction can be reviewed and applied"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account email changes require a password and use the confirmation flow","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730868331,"status":"pending","title":"account email changes require a password and use the confirmation flow"}],"endTime":1793730868333,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\profile-page.test.tsx","startTime":1793730866057,"status":"focused","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/evidence/account-admin/frontend/a3-account-admin-red.json b/docs/ui-modernisation/evidence/account-admin/frontend/a3-account-admin-red.json new file mode 100644 index 00000000..68881cd9 --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/frontend/a3-account-admin-red.json @@ -0,0 +1 @@ +{"numFailedTestSuites":3,"numFailedTests":4,"numPassedTestSuites":0,"numPassedTests":1,"numPendingTestSuites":0,"numPendingTests":65,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":3,"numTotalTests":70,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793730797362,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":1169,"failing":false,"failureDetails":[{"name":"TestingLibraryElementError"}],"failureMessages":["TestingLibraryElementError: Unable to find an accessible element with the role \"navigation\"\n\nHere are the accessible roles:\n\n region:\n\n Name \"Profile\":\n \u001b[36m\u001b[39m\n\n Name \"Authentication\":\n \u001b[36m\u001b[39m\n\n Name \"Account\":\n \u001b[36m\u001b[39m\n\n Name \"Change password\":\n \u001b[36m\u001b[39m\n\n Name \"Two-factor authentication\":\n \u001b[36m\u001b[39m\n\n Name \"Sessions\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n banner:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n heading:\n\n Name \"Profile\":\n \u001b[36m\u001b[39m\n\n Name \"Authentication\":\n \u001b[36m\u001b[39m\n\n Name \"Account\":\n \u001b[36m\u001b[39m\n\n Name \"Change password\":\n \u001b[36m\u001b[39m\n\n Name \"Two-factor authentication\":\n \u001b[36m\u001b[39m\n\n Name \"Sessions\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n button:\n\n Name \"Change image\":\n \u001b[36m\u001b[39m\n\n Name \"Sign out\":\n \u001b[36m\u001b[39m\n\n Name \"Send confirmation\":\n \u001b[36m\u001b[39m\n\n Name \"Cancel\":\n \u001b[36m\u001b[39m\n\n Name \"Save changes\":\n \u001b[36m\u001b[39m\n\n Name \"Update password\":\n \u001b[36m\u001b[39m\n\n Name \"Enable 2FA\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n paragraph:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n textbox:\n\n Name \"Display name\":\n \u001b[36m\u001b[39m\n\n Name \"Username\":\n \u001b[36m\u001b[39m\n\n Name \"First name\":\n \u001b[36m\u001b[39m\n\n Name \"Last name\":\n \u001b[36m\u001b[39m\n\n Name \"New email\":\n \u001b[36m\u001b[39m\n\n Name \"Profile headline\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n\nIgnored nodes: comments, script, style\n\u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProfile\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDD\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mChange image\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mdemo\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBackend Developer\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mLocal account\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGoogle not linked\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStored CV text · 5 words\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAuthentication\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n\n Name \"Autentisering\":\n \u001b[36m\u001b[39m\n\n Name \"Konto\":\n \u001b[36m\u001b[39m\n\n Name \"Bytt passord\":\n \u001b[36m\u001b[39m\n\n Name \"Tofaktorautentisering\":\n \u001b[36m\u001b[39m\n\n Name \"Økter\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n banner:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n heading:\n\n Name \"Profil\":\n \u001b[36m\u001b[39m\n\n Name \"Autentisering\":\n \u001b[36m\u001b[39m\n\n Name \"Konto\":\n \u001b[36m\u001b[39m\n\n Name \"Bytt passord\":\n \u001b[36m\u001b[39m\n\n Name \"Tofaktorautentisering\":\n \u001b[36m\u001b[39m\n\n Name \"Økter\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n button:\n\n Name \"Bytt bilde\":\n \u001b[36m\u001b[39m\n\n Name \"Logg ut\":\n \u001b[36m\u001b[39m\n\n Name \"Send bekreftelse\":\n \u001b[36m\u001b[39m\n\n Name \"Avbryt\":\n \u001b[36m\u001b[39m\n\n Name \"Lagre endringer\":\n \u001b[36m\u001b[39m\n\n Name \"Oppdater passord\":\n \u001b[36m\u001b[39m\n\n Name \"Aktiver 2FA\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n paragraph:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n textbox:\n\n Name \"Visningsnavn\":\n \u001b[36m\u001b[39m\n\n Name \"Brukernavn\":\n \u001b[36m\u001b[39m\n\n Name \"Fornavn\":\n \u001b[36m\u001b[39m\n\n Name \"Etternavn\":\n \u001b[36m\u001b[39m\n\n Name \"Ny e-post\":\n \u001b[36m\u001b[39m\n\n Name \"Profiloverskrift\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n\nIgnored nodes: comments, script, style\n\u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProfil\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDD\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBytt bilde\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mdemo\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBackend Developer\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mLokal konto\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGoogle ikke koblet\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mLagret CV-tekst · 5 ord\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutentisering\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m...\n at Object.getElementError (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\config.js:37:19)\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\query-helpers.js:76:38\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\query-helpers.js:52:17\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\query-helpers.js:95:19\n at getByRole (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\profile-page.test.tsx:97:29)\n at runNextTicks (node:internal/process/task_queues:65:5)\n at listOnTimeout (node:internal/timers:597:9)\n at processTimers (node:internal/timers:571:7)"],"fullName":"account workspace navigation preserves identity drafts and focuses existing groups (nb)","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730804152,"status":"failed","title":"account workspace navigation preserves identity drafts and focuses existing groups (nb)"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Career Profile section headings describe the visible hierarchy without changing editing fields","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"Career Profile section headings describe the visible hierarchy without changing editing fields"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account headings separate identity from security sections","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"account headings separate identity from security sections"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account CV text status in en does not claim the CV library is empty","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"account CV text status in en does not claim the CV library is empty"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account CV text status in nb does not claim the CV library is empty","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"account CV text status in nb does not claim the CV library is empty"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page loads persisted structured cv and can re-parse it","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"profile page loads persisted structured cv and can re-parse it"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page can reprocess from stored artifact history","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"profile page can reprocess from stored artifact history"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"active extraction polling refreshes run status without resetting unsaved career fields","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"active extraction polling refreshes run status without resetting unsaved career fields"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page shows durable CV operation state and retries a failed run","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"profile page shows durable CV operation state and retries a failed run"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page keeps raw extraction collapsed until expanded","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"profile page keeps raw extraction collapsed until expanded"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saving the master profile (career) persists the structured profile via /career/profile","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"saving the master profile (career) persists the structured profile via /career/profile"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career shows the profile completeness overview","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"/career shows the profile completeness overview"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career profile exposes extraction progress","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"/career profile exposes extraction progress"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career profile can queue a legacy text CV upload without visiting import review first","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"/career profile can queue a legacy text CV upload without visiting import review first"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career localizes completeness and review confidence without changing CV data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"/career localizes completeness and review confidence without changing CV data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career separates overview, profile and import while preserving unsaved profile edits","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"/career separates overview, profile and import while preserving unsaved profile edits"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pending CV extraction can be reviewed and applied","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"pending CV extraction can be reviewed and applied"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account email changes require a password and use the confirmation flow","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730804809,"status":"pending","title":"account email changes require a password and use the confirmation flow"}],"endTime":1793730804836,"message":" ● account workspace navigation preserves identity drafts and focuses existing groups (en)\n\n TestingLibraryElementError: Unable to find an accessible element with the role \"navigation\"\n\n Here are the accessible roles:\n\n region:\n\n Name \"Profile\":\n \u001b[36m\u001b[39m\n\n Name \"Authentication\":\n \u001b[36m\u001b[39m\n\n Name \"Account\":\n \u001b[36m\u001b[39m\n\n Name \"Change password\":\n \u001b[36m\u001b[39m\n\n Name \"Two-factor authentication\":\n \u001b[36m\u001b[39m\n\n Name \"Sessions\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n banner:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n heading:\n\n Name \"Profile\":\n \u001b[36m\u001b[39m\n\n Name \"Authentication\":\n \u001b[36m\u001b[39m\n\n Name \"Account\":\n \u001b[36m\u001b[39m\n\n Name \"Change password\":\n \u001b[36m\u001b[39m\n\n Name \"Two-factor authentication\":\n \u001b[36m\u001b[39m\n\n Name \"Sessions\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n button:\n\n Name \"Change image\":\n \u001b[36m\u001b[39m\n\n Name \"Sign out\":\n \u001b[36m\u001b[39m\n\n Name \"Send confirmation\":\n \u001b[36m\u001b[39m\n\n Name \"Cancel\":\n \u001b[36m\u001b[39m\n\n Name \"Save changes\":\n \u001b[36m\u001b[39m\n\n Name \"Update password\":\n \u001b[36m\u001b[39m\n\n Name \"Enable 2FA\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n paragraph:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n textbox:\n\n Name \"Display name\":\n \u001b[36m\u001b[39m\n\n Name \"Username\":\n \u001b[36m\u001b[39m\n\n Name \"First name\":\n \u001b[36m\u001b[39m\n\n Name \"Last name\":\n \u001b[36m\u001b[39m\n\n Name \"New email\":\n \u001b[36m\u001b[39m\n\n Name \"Profile headline\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n\n Ignored nodes: comments, script, style\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProfile\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDD\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mChange image\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mdemo\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBackend Developer\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mLocal account\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGoogle not linked\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStored CV text · 5 words\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAuthentication\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m expect(name).toHaveValue('Demo User'));\n 96 | fireEvent.change(name, { target: { value: 'Unsaved account name' } });\n > 97 | const navigation = screen.getByRole('navigation', { name: t.accountWorkspaceNavigation });\n | ^\n 98 | for (const [id, label] of [['account-details', t.profileAccountSection], ['account-connections', t.accountWorkspaceConnections], ['account-security', t.accountWorkspaceSecurity]]) {\n 99 | const target = document.getElementById(id)!;\n 100 | target.scrollIntoView = jest.fn();\n\n at Object.getElementError (node_modules/@testing-library/dom/dist/config.js:37:19)\n at node_modules/@testing-library/dom/dist/query-helpers.js:76:38\n at node_modules/@testing-library/dom/dist/query-helpers.js:52:17\n at node_modules/@testing-library/dom/dist/query-helpers.js:95:19\n at getByRole (src/profile-page.test.tsx:97:29)\n\n ● account workspace navigation preserves identity drafts and focuses existing groups (nb)\n\n TestingLibraryElementError: Unable to find an accessible element with the role \"navigation\"\n\n Here are the accessible roles:\n\n region:\n\n Name \"Profil\":\n \u001b[36m\u001b[39m\n\n Name \"Autentisering\":\n \u001b[36m\u001b[39m\n\n Name \"Konto\":\n \u001b[36m\u001b[39m\n\n Name \"Bytt passord\":\n \u001b[36m\u001b[39m\n\n Name \"Tofaktorautentisering\":\n \u001b[36m\u001b[39m\n\n Name \"Økter\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n banner:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n heading:\n\n Name \"Profil\":\n \u001b[36m\u001b[39m\n\n Name \"Autentisering\":\n \u001b[36m\u001b[39m\n\n Name \"Konto\":\n \u001b[36m\u001b[39m\n\n Name \"Bytt passord\":\n \u001b[36m\u001b[39m\n\n Name \"Tofaktorautentisering\":\n \u001b[36m\u001b[39m\n\n Name \"Økter\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n button:\n\n Name \"Bytt bilde\":\n \u001b[36m\u001b[39m\n\n Name \"Logg ut\":\n \u001b[36m\u001b[39m\n\n Name \"Send bekreftelse\":\n \u001b[36m\u001b[39m\n\n Name \"Avbryt\":\n \u001b[36m\u001b[39m\n\n Name \"Lagre endringer\":\n \u001b[36m\u001b[39m\n\n Name \"Oppdater passord\":\n \u001b[36m\u001b[39m\n\n Name \"Aktiver 2FA\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n paragraph:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n textbox:\n\n Name \"Visningsnavn\":\n \u001b[36m\u001b[39m\n\n Name \"Brukernavn\":\n \u001b[36m\u001b[39m\n\n Name \"Fornavn\":\n \u001b[36m\u001b[39m\n\n Name \"Etternavn\":\n \u001b[36m\u001b[39m\n\n Name \"Ny e-post\":\n \u001b[36m\u001b[39m\n\n Name \"Profiloverskrift\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n\n Ignored nodes: comments, script, style\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProfil\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDD\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBytt bilde\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mdemo\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBackend Developer\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mLokal konto\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGoogle ikke koblet\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mLagret CV-tekst · 5 ord\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutentisering\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m...\n\n 95 | await waitFor(() => expect(name).toHaveValue('Demo User'));\n 96 | fireEvent.change(name, { target: { value: 'Unsaved account name' } });\n > 97 | const navigation = screen.getByRole('navigation', { name: t.accountWorkspaceNavigation });\n | ^\n 98 | for (const [id, label] of [['account-details', t.profileAccountSection], ['account-connections', t.accountWorkspaceConnections], ['account-security', t.accountWorkspaceSecurity]]) {\n 99 | const target = document.getElementById(id)!;\n 100 | target.scrollIntoView = jest.fn();\n\n at Object.getElementError (node_modules/@testing-library/dom/dist/config.js:37:19)\n at node_modules/@testing-library/dom/dist/query-helpers.js:76:38\n at node_modules/@testing-library/dom/dist/query-helpers.js:52:17\n at node_modules/@testing-library/dom/dist/query-helpers.js:95:19\n at getByRole (src/profile-page.test.tsx:97:29)\n","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\profile-page.test.tsx","startTime":1793730798724,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":4232,"failing":false,"failureDetails":[{"name":"TestingLibraryElementError"}],"failureMessages":["Error: Unable to find role=\"tabpanel\" and name \"Backup\"\n\nIgnored nodes: comments, script, style\n\u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mSettings section\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGeneral\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mSettings section\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGeneral\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomation\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFollow-ups\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mNotifications\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBackup\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-each\\build\\index.js:80:140)\n at Promise.finally.completed (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1561:28)\n at new Promise ()\n at callAsyncCircusFn (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1501:10)\n at _callCircusTest (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1011:40)\n at _runTest (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:951:3)\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:853:7\n at _runTestsForDescribeBlock (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:866:11)\n at run (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:765:3)\n at runAndTransformResultsToJestFormat (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\jestAdapterInit.js:1993:21)\n at jestAdapter (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-circus\\build\\runner.js:111:19)\n at runTestInternal (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-runner\\build\\index.js:276:16)\n at runTest (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\jest-runner\\build\\index.js:344:7)"],"fullName":"account data entry selects a supported initial section (data)","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730806312,"status":"failed","title":"account data entry selects a supported initial section (data)"},{"ancestorTitles":[],"duration":210,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (unknown)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730810545,"status":"passed","title":"account data entry selects a supported initial section (unknown)"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"each selected Settings section has a named panel linked to its tab and remains selectable on phones","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810755,"status":"pending","title":"each selected Settings section has a named panel linked to its tab and remains selectable on phones"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings view has no accent picker and uses one follow-up section, one notification section","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"settings view has no accent picker and uses one follow-up section, one notification section"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI privacy settings are server-backed and external processing is local-only by default","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"AI privacy settings are server-backed and external processing is local-only by default"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed notification save preserves the draft for an explicit retry","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03] failed notification save preserves the draft for an explicit retry"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"en Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"nb Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Automation AI entry moves focus into existing settings without an AI request","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"Automation AI entry moves focus into existing settings without an AI request"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730810756,"status":"pending","title":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract"}],"endTime":1793730810765,"message":" ● account data entry selects a supported initial section (data)\n\n Unable to find role=\"tabpanel\" and name \"Backup\"\n\n Ignored nodes: comments, script, style\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mSettings section\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGeneral\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mSettings section\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mGeneral\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomation\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFollow-ups\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mNotifications\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mBackup\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m {\n 107 | renderView({}, `/settings?section=${section}`);\n > 108 | expect(await screen.findByRole('tabpanel', { name: label, exact: true })).toBeVisible();\n | ^\n 109 | expect(mockedApi.post).not.toHaveBeenCalled(); expect(mockedApi.put).not.toHaveBeenCalled();\n 110 | });\n 111 |\n\n at waitForWrapper (node_modules/@testing-library/dom/dist/wait-for.js:163:27)\n at node_modules/@testing-library/dom/dist/query-helpers.js:86:33\n at findByRole (src/settings-view.test.tsx:108:23)\n","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\settings-view.test.tsx","startTime":1793730804869,"status":"failed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":516,"failing":false,"failureDetails":[{"name":"TestingLibraryElementError"}],"failureMessages":["TestingLibraryElementError: Unable to find an accessible element with the role \"form\" and name \"Processing filters\"\n\nHere are the accessible roles:\n\n banner:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n heading:\n\n Name \"Processing monitor\":\n \u001b[36m\u001b[39m\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n paragraph:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n button:\n\n Name \"Pause updates\":\n \u001b[36m\u001b[39m\n\n Name \"Refresh\":\n \u001b[36m\u001b[39m\n\n Name \"Apply filters\":\n \u001b[36m\u001b[39m\n\n Name \"View processing details 11111111-1111-4111-8111-111111111111\":\n \u001b[36m\u001b[39m\n\n Name \"Synthetic owner\":\n \u001b[36m\u001b[39m\n\n Name \"Previous page\":\n \u001b[36m\u001b[39m\n\n Name \"Next page\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n status:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n combobox:\n\n Name \"Status\":\n \u001b[36m\u001b[39m\n\n Name \"Task\":\n \u001b[36m\u001b[39m\n\n Name \"Worker filter\":\n \u001b[36m\u001b[39m\n\n Name \"Failure code\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n option:\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"Queued\":\n \u001b[36m\u001b[39m\n\n Name \"Running\":\n \u001b[36m\u001b[39m\n\n Name \"Waiting to retry\":\n \u001b[36m\u001b[39m\n\n Name \"Waiting for approved fallback\":\n \u001b[36m\u001b[39m\n\n Name \"Completed\":\n \u001b[36m\u001b[39m\n\n Name \"Failed\":\n \u001b[36m\u001b[39m\n\n Name \"Cancelled\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"CV processing\":\n \u001b[36m\u001b[39m\n\n Name \"Strategy snapshot\":\n \u001b[36m\u001b[39m\n\n Name \"Other operation\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"Document processing\":\n \u001b[36m\u001b[39m\n\n Name \"AI operations\":\n \u001b[36m\u001b[39m\n\n Name \"Unregistered worker\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"timeout\":\n \u001b[36m\u001b[39m\n\n Name \"lease_expired\":\n \u001b[36m\u001b[39m\n\n Name \"deadline_exceeded\":\n \u001b[36m\u001b[39m\n\n Name \"entitlement_changed\":\n \u001b[36m\u001b[39m\n\n Name \"document_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"sidecar_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"upstream_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"invalid_response\":\n \u001b[36m\u001b[39m\n\n Name \"circuit_open\":\n \u001b[36m\u001b[39m\n\n Name \"rate_limited\":\n \u001b[36m\u001b[39m\n\n Name \"permission_denied\":\n \u001b[36m\u001b[39m\n\n Name \"cancelled\":\n \u001b[36m\u001b[39m\n\n Name \"upload_rejected\":\n \u001b[36m\u001b[39m\n\n Name \"parser_failed\":\n \u001b[36m\u001b[39m\n\n Name \"malformed_output\":\n \u001b[36m\u001b[39m\n\n Name \"provider_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"processing_failed\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n textbox:\n\n Name \"Owner ID\":\n \u001b[36m\u001b[39m\n\n Name \"Search users, jobs or task ID\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n spinbutton:\n\n Name \"Application ID\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n region:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n group:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n table:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n rowgroup:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n row:\n\n Name \"Task Owner Status Worker Created Duration\":\n \u001b[36m\u001b[39m\n\n Name \"CV processing CV.pdf Synthetic owner owner@example.test Running Reading document structure Document processing Enabled 28/10/2026, 13:00:00 8 seconds\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n columnheader:\n\n Name \"Task\":\n \u001b[36m\u001b[39m\n\n Name \"Owner\":\n \u001b[36m\u001b[39m\n\n Name \"Status\":\n \u001b[36m\u001b[39m\n\n Name \"Worker\":\n \u001b[36m\u001b[39m\n\n Name \"Created\":\n \u001b[36m\u001b[39m\n\n Name \"Duration\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n rowheader:\n\n Name \"CV processing CV.pdf\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n cell:\n\n Name \"Synthetic owner owner@example.test\":\n \u001b[36m\u001b[39m\n\n Name \"Running Reading document structure\":\n \u001b[36m\u001b[39m\n\n Name \"Document processing Enabled\":\n \u001b[36m\u001b[39m\n\n Name \"28/10/2026, 13:00:00\":\n \u001b[36m\u001b[39m\n\n Name \"8 seconds\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n time:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n\nIgnored nodes: comments, script, style\n\u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProcessing monitor\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDocument and AI operations, their owners and safe processing history.\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mPause updates\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRefresh\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomatic updates enabled\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mUpdated 03/11/2026, 19:33:32\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAll\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mQueued\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRunning\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting to retry\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting for approved fallback\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCompleted\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFailed\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCancelled\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[...\n at Object.getElementError (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\config.js:37:19)\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\query-helpers.js:76:38\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\query-helpers.js:52:17\n at C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\node_modules\\@testing-library\\dom\\dist\\query-helpers.js:95:19\n at Object.getByRole (C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-processing-page.test.tsx:25:25)"],"fullName":"processing workspace keyboard targets move between filters and jobs without changing filters","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812187,"status":"failed","title":"processing workspace keyboard targets move between filters and jobs without changing filters"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"uses safe en fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"uses safe en fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"uses safe en fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"uses safe nb fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"uses safe nb fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"uses safe nb fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows safe job metadata and real events with a copyable correlation ID","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"shows safe job metadata and real events with a copyable correlation ID"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows stable failure evidence and links an application only when the server permits it","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"shows stable failure evidence and links an application only when the server permits it"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a successful retry keeps prior failure evidence separate from its success timestamp","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"a successful retry keeps prior failure evidence separate from its success timestamp"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pause stops polling and resume uses an exact string event cursor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"pause stops polling and resume uses an exact string event cursor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"forbidden responses clear metadata and do not retry automatically","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"forbidden responses clear metadata and do not retry automatically"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"malformed successful responses produce a recoverable error instead of rendering raw data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"malformed successful responses produce a recoverable error instead of rendering raw data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid filters explain the rejected request and stop automatic retries","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"invalid filters explain the rejected request and stop automatic retries"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"identity changes abort pending reads and clear the previous administrator view","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"identity changes abort pending reads and clear the previous administrator view"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed cycle aborts sibling reads and reconnects with bounded backoff","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"a failed cycle aborts sibling reads and reconnects with bounded backoff"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"older event pages pause updates and retain exact cursors until returning to latest","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793730812713,"status":"pending","title":"older event pages pause updates and retain exact cursors until returning to latest"}],"endTime":1793730812717,"message":" ● processing workspace keyboard targets move between filters and jobs without changing filters\n\n TestingLibraryElementError: Unable to find an accessible element with the role \"form\" and name \"Processing filters\"\n\n Here are the accessible roles:\n\n banner:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n heading:\n\n Name \"Processing monitor\":\n \u001b[36m\u001b[39m\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n paragraph:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n button:\n\n Name \"Pause updates\":\n \u001b[36m\u001b[39m\n\n Name \"Refresh\":\n \u001b[36m\u001b[39m\n\n Name \"Apply filters\":\n \u001b[36m\u001b[39m\n\n Name \"View processing details 11111111-1111-4111-8111-111111111111\":\n \u001b[36m\u001b[39m\n\n Name \"Synthetic owner\":\n \u001b[36m\u001b[39m\n\n Name \"Previous page\":\n \u001b[36m\u001b[39m\n\n Name \"Next page\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n status:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n combobox:\n\n Name \"Status\":\n \u001b[36m\u001b[39m\n\n Name \"Task\":\n \u001b[36m\u001b[39m\n\n Name \"Worker filter\":\n \u001b[36m\u001b[39m\n\n Name \"Failure code\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n option:\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"Queued\":\n \u001b[36m\u001b[39m\n\n Name \"Running\":\n \u001b[36m\u001b[39m\n\n Name \"Waiting to retry\":\n \u001b[36m\u001b[39m\n\n Name \"Waiting for approved fallback\":\n \u001b[36m\u001b[39m\n\n Name \"Completed\":\n \u001b[36m\u001b[39m\n\n Name \"Failed\":\n \u001b[36m\u001b[39m\n\n Name \"Cancelled\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"CV processing\":\n \u001b[36m\u001b[39m\n\n Name \"Strategy snapshot\":\n \u001b[36m\u001b[39m\n\n Name \"Other operation\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"Document processing\":\n \u001b[36m\u001b[39m\n\n Name \"AI operations\":\n \u001b[36m\u001b[39m\n\n Name \"Unregistered worker\":\n \u001b[36m\u001b[39m\n\n Name \"All\":\n \u001b[36m\u001b[39m\n\n Name \"timeout\":\n \u001b[36m\u001b[39m\n\n Name \"lease_expired\":\n \u001b[36m\u001b[39m\n\n Name \"deadline_exceeded\":\n \u001b[36m\u001b[39m\n\n Name \"entitlement_changed\":\n \u001b[36m\u001b[39m\n\n Name \"document_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"sidecar_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"upstream_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"invalid_response\":\n \u001b[36m\u001b[39m\n\n Name \"circuit_open\":\n \u001b[36m\u001b[39m\n\n Name \"rate_limited\":\n \u001b[36m\u001b[39m\n\n Name \"permission_denied\":\n \u001b[36m\u001b[39m\n\n Name \"cancelled\":\n \u001b[36m\u001b[39m\n\n Name \"upload_rejected\":\n \u001b[36m\u001b[39m\n\n Name \"parser_failed\":\n \u001b[36m\u001b[39m\n\n Name \"malformed_output\":\n \u001b[36m\u001b[39m\n\n Name \"provider_unavailable\":\n \u001b[36m\u001b[39m\n\n Name \"processing_failed\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n textbox:\n\n Name \"Owner ID\":\n \u001b[36m\u001b[39m\n\n Name \"Search users, jobs or task ID\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n spinbutton:\n\n Name \"Application ID\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n region:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n group:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n table:\n\n Name \"Processing jobs\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n rowgroup:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n row:\n\n Name \"Task Owner Status Worker Created Duration\":\n \u001b[36m\u001b[39m\n\n Name \"CV processing CV.pdf Synthetic owner owner@example.test Running Reading document structure Document processing Enabled 28/10/2026, 13:00:00 8 seconds\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n columnheader:\n\n Name \"Task\":\n \u001b[36m\u001b[39m\n\n Name \"Owner\":\n \u001b[36m\u001b[39m\n\n Name \"Status\":\n \u001b[36m\u001b[39m\n\n Name \"Worker\":\n \u001b[36m\u001b[39m\n\n Name \"Created\":\n \u001b[36m\u001b[39m\n\n Name \"Duration\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n rowheader:\n\n Name \"CV processing CV.pdf\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n cell:\n\n Name \"Synthetic owner owner@example.test\":\n \u001b[36m\u001b[39m\n\n Name \"Running Reading document structure\":\n \u001b[36m\u001b[39m\n\n Name \"Document processing Enabled\":\n \u001b[36m\u001b[39m\n\n Name \"28/10/2026, 13:00:00\":\n \u001b[36m\u001b[39m\n\n Name \"8 seconds\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n time:\n\n Name \"\":\n \u001b[36m\u001b[39m\n\n --------------------------------------------------\n\n Ignored nodes: comments, script, style\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProcessing monitor\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDocument and AI operations, their owners and safe processing history.\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mPause updates\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRefresh\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomatic updates enabled\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mUpdated 03/11/2026, 19:33:32\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAll\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mQueued\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRunning\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting to retry\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting for approved fallback\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCompleted\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFailed\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCancelled\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[...\n\n 23 | test('processing workspace keyboard targets move between filters and jobs without changing filters', async () => {\n 24 | open(); await screen.findByText('Synthetic owner');\n > 25 | const filter = screen.getByRole('form', { name: 'Processing filters' });\n | ^\n 26 | const search = screen.getByLabelText('Search users, jobs or task ID');\n 27 | fireEvent.change(search, { target: { value: 'Unsubmitted search' } });\n 28 | const jobs = screen.getByRole('group', { name: 'Processing results' });\n\n at Object.getElementError (node_modules/@testing-library/dom/dist/config.js:37:19)\n at node_modules/@testing-library/dom/dist/query-helpers.js:76:38\n at node_modules/@testing-library/dom/dist/query-helpers.js:52:17\n at node_modules/@testing-library/dom/dist/query-helpers.js:95:19\n at Object.getByRole (src/admin-processing-page.test.tsx:25:25)\n","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-processing-page.test.tsx","startTime":1793730810783,"status":"failed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/evidence/account-admin/frontend/a3-account-admin-tests.json b/docs/ui-modernisation/evidence/account-admin/frontend/a3-account-admin-tests.json new file mode 100644 index 00000000..6232a00b --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/frontend/a3-account-admin-tests.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":11,"numPassedTests":142,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":11,"numTotalTests":142,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793730906742,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":["AdminSystemPage"],"duration":689,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage uses contextual system headings and keeps metric values out of heading navigation","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793730912478,"status":"passed","title":"uses contextual system headings and keeps metric values out of heading navigation"},{"ancestorTitles":["AdminSystemPage"],"duration":459,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage associates each tab with its named panel","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730913168,"status":"passed","title":"associates each tab with its named panel"},{"ancestorTitles":["AdminSystemPage"],"duration":466,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage never fabricates offline metrics after an initial status failure and retries only the failed read","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730913628,"status":"passed","title":"never fabricates offline metrics after an initial status failure and retries only the failed read"},{"ancestorTitles":["AdminSystemPage"],"duration":1450,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage keeps SMTP edits and write-only password through explicit refresh","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730914094,"status":"passed","title":"keeps SMTP edits and write-only password through explicit refresh"},{"ancestorTitles":["AdminSystemPage"],"duration":1863,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage submits one SMTP snapshot, retains newer edits and prevents competing operational actions","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793730915544,"status":"passed","title":"submits one SMTP snapshot, retains newer edits and prevents competing operational actions"},{"ancestorTitles":["AdminSystemPage"],"duration":674,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage reports an optional /admin/system/cv-benchmark failure and retries that GET without operational writes","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730917408,"status":"passed","title":"reports an optional /admin/system/cv-benchmark failure and retries that GET without operational writes"},{"ancestorTitles":["AdminSystemPage"],"duration":632,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage reports an optional /admin/system/maintenance-jobs failure and retries that GET without operational writes","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730918083,"status":"passed","title":"reports an optional /admin/system/maintenance-jobs failure and retries that GET without operational writes"},{"ancestorTitles":["AdminSystemPage"],"duration":1485,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage keeps explicit password clearing through refresh and acknowledges only the submitted secret","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730918715,"status":"passed","title":"keeps explicit password clearing through refresh and acknowledges only the submitted secret"},{"ancestorTitles":["AdminSystemPage"],"duration":1674,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage retains failed SMTP edits and only writes again after an explicit save","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730920200,"status":"passed","title":"retains failed SMTP edits and only writes again after an explicit save"},{"ancestorTitles":["AdminSystemPage"],"duration":927,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage waits for one probe before allowing another action and never runs on entry or tab changes","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730921875,"status":"passed","title":"waits for one probe before allowing another action and never runs on entry or tab changes"},{"ancestorTitles":["AdminSystemPage"],"duration":950,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage refreshes probe metrics after success and a failed follow-up read retries GET without replaying the probe","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730922802,"status":"passed","title":"refreshes probe metrics after success and a failed follow-up read retries GET without replaying the probe"},{"ancestorTitles":["AdminSystemPage"],"duration":829,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage does not acknowledge an SMTP write into a changed session","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730923752,"status":"passed","title":"does not acknowledge an SMTP write into a changed session"},{"ancestorTitles":["AdminSystemPage"],"duration":421,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage does not refresh or announce a completed probe after unmount","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730924582,"status":"passed","title":"does not refresh or announce a completed probe after unmount"},{"ancestorTitles":["AdminSystemPage"],"duration":564,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage clears sensitive diagnostics after a denied refresh and offers no retry or operational action","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730925003,"status":"passed","title":"clears sensitive diagnostics after a denied refresh and offers no retry or operational action"},{"ancestorTitles":["AdminSystemPage"],"duration":639,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage keeps the last diagnostic values under a qualified refresh error","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730925567,"status":"passed","title":"keeps the last diagnostic values under a qualified refresh error"},{"ancestorTitles":["AdminSystemPage"],"duration":790,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage does not present unavailable SMTP settings as a blank editable configuration","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730926206,"status":"passed","title":"does not present unavailable SMTP settings as a blank editable configuration"},{"ancestorTitles":["AdminSystemPage"],"duration":329,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage renders AI service health, latency, and OCR readiness","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793730926996,"status":"passed","title":"renders AI service health, latency, and OCR readiness"},{"ancestorTitles":["AdminSystemPage"],"duration":1274,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage loads and saves smtp settings from the settings tab","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730927325,"status":"passed","title":"loads and saves smtp settings from the settings tab"},{"ancestorTitles":["AdminSystemPage"],"duration":662,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage dispatches the allowlisted CV benchmark from the system panel","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730928599,"status":"passed","title":"dispatches the allowlisted CV benchmark from the system panel"},{"ancestorTitles":["AdminSystemPage"],"duration":448,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AdminSystemPage localizes benchmark diagnostics without changing runtime values","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730929262,"status":"passed","title":"localizes benchmark diagnostics without changing runtime values"}],"endTime":1793730929712,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-system-page.test.tsx","startTime":1793730908529,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":421,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"desktop user-grid pagination follows en UI language","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730933023,"status":"passed","title":"desktop user-grid pagination follows en UI language"},{"ancestorTitles":[],"duration":410,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"desktop user-grid pagination follows nb UI language","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730933444,"status":"passed","title":"desktop user-grid pagination follows nb UI language"},{"ancestorTitles":[],"duration":303,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed users read stays unavailable and Retry only reads","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730933854,"status":"passed","title":"failed users read stays unavailable and Retry only reads"},{"ancestorTitles":[],"duration":318,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"create failure presents structured feedback and retains the entered fields","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730934158,"status":"passed","title":"create failure presents structured feedback and retains the entered fields"},{"ancestorTitles":[],"duration":319,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"create admission serializes competing clicks and acknowledgement retains newer form values","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730934476,"status":"passed","title":"create admission serializes competing clicks and acknowledgement retains newer form values"},{"ancestorTitles":[],"duration":401,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"successful create followed by failed list refresh keeps read recovery without replaying create","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730934795,"status":"passed","title":"successful create followed by failed list refresh keeps read recovery without replaying create"},{"ancestorTitles":[],"duration":209,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"disposed create acknowledgement cannot start a new private list read","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730935196,"status":"passed","title":"disposed create acknowledgement cannot start a new private list read"},{"ancestorTitles":[],"duration":788,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"requires explicit confirmation before removing your own admin role","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730935406,"status":"passed","title":"requires explicit confirmation before removing your own admin role"},{"ancestorTitles":[],"duration":313,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"warns before demoting another administrator","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730936194,"status":"passed","title":"warns before demoting another administrator"},{"ancestorTitles":[],"duration":454,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"disables demotion and deletion for the final administrator","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730936508,"status":"passed","title":"disables demotion and deletion for the final administrator"},{"ancestorTitles":[],"duration":390,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"sends the exact account email after confirming deletion","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730936962,"status":"passed","title":"sends the exact account email after confirming deletion"},{"ancestorTitles":[],"duration":335,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"accepted deletion is reported as queued rather than completed","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730937352,"status":"passed","title":"accepted deletion is reported as queued rather than completed"}],"endTime":1793730937688,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-users-page.test.tsx","startTime":1793730929733,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":101,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (data)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730939335,"status":"passed","title":"account data entry selects a supported initial section (data)"},{"ancestorTitles":[],"duration":277,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account data entry selects a supported initial section (unknown)","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730939436,"status":"passed","title":"account data entry selects a supported initial section (unknown)"},{"ancestorTitles":[],"duration":996,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"each selected Settings section has a named panel linked to its tab and remains selectable on phones","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793730939714,"status":"passed","title":"each selected Settings section has a named panel linked to its tab and remains selectable on phones"},{"ancestorTitles":[],"duration":688,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings view has no accent picker and uses one follow-up section, one notification section","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793730940710,"status":"passed","title":"settings view has no accent picker and uses one follow-up section, one notification section"},{"ancestorTitles":[],"duration":300,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI privacy settings are server-backed and external processing is local-only by default","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730941398,"status":"passed","title":"AI privacy settings are server-backed and external processing is local-only by default"},{"ancestorTitles":[],"duration":4805,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed notification save preserves the draft for an explicit retry","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730941698,"status":"passed","title":"[PRES-S03] failed notification save preserves the draft for an explicit retry"},{"ancestorTitles":[],"duration":775,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730946503,"status":"passed","title":"[PRES-S03 PRES-W11] saving one follow-up rule preserves the other scenarios"},{"ancestorTitles":[],"duration":429,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730947278,"status":"passed","title":"[PRES-S03 PRES-J05] table and theme preferences keep their independent callbacks"},{"ancestorTitles":[],"duration":922,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730947708,"status":"passed","title":"[PRES-S03 W11] the Settings session retains independent pending Rules fields across tab unmounts"},{"ancestorTitles":[],"duration":1283,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730948630,"status":"passed","title":"[PRES-S03] failed Rules save remains actionable after tab return and explicit retry clears dirty state"},{"ancestorTitles":[],"duration":1183,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730949913,"status":"passed","title":"[PRES-S03] invalid and empty Rules input and associated validation survive internal navigation"},{"ancestorTitles":[],"duration":315,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730951096,"status":"passed","title":"[PRES-S03] explicit discard resets only the Rules draft to its saved baseline without writing"},{"ancestorTitles":[],"duration":1153,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730951411,"status":"passed","title":"[PRES-S03] later edits stay dirty when an earlier Rules save completes after a tab switch"},{"ancestorTitles":[],"duration":810,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730952564,"status":"passed","title":"[PRES-S03 E09] leaving the Settings session disposes its draft and pending responses"},{"ancestorTitles":[],"duration":654,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730953374,"status":"passed","title":"[PRES-S03] switching locale while Rules is hidden does not reload or overwrite its pending draft"},{"ancestorTitles":[],"duration":353,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730954028,"status":"passed","title":"[PRES-S03] Rules draft updates do not refetch an unrelated notification preference"},{"ancestorTitles":[],"duration":443,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"en Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730954381,"status":"passed","title":"en Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":496,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"nb Automation reuses the saved notification preference and explicit save","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730954824,"status":"passed","title":"nb Automation reuses the saved notification preference and explicit save"},{"ancestorTitles":[],"duration":242,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Automation AI entry moves focus into existing settings without an AI request","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730955320,"status":"passed","title":"Automation AI entry moves focus into existing settings without an AI request"},{"ancestorTitles":[],"duration":444,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730955563,"status":"passed","title":"[P7-09 preferences] initial notification failure offers a single GET Retry and recovers its vanished focused action"},{"ancestorTitles":[],"duration":806,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730956007,"status":"passed","title":"[P7-09 preferences] notification drafts survive internal sections and locale changes without a GET or save"},{"ancestorTitles":[],"duration":843,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730956814,"status":"passed","title":"[P7-09 preferences] one held notification save acknowledges its snapshot and preserves later edits across sections"},{"ancestorTitles":[],"duration":759,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730957657,"status":"passed","title":"[P7-09 preferences] failed notification save keeps its current-locale draft and retries only the original Save"},{"ancestorTitles":[],"duration":587,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730958416,"status":"passed","title":"[P7-09 preferences] discarding a notification draft leaves the independent Rules draft untouched"},{"ancestorTitles":[],"duration":573,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730959003,"status":"passed","title":"[P7-09 preferences] a disposed notification save cannot publish into surviving providers or a new Settings session"},{"ancestorTitles":[],"duration":659,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793730959577,"status":"passed","title":"[P7-09 preferences] Rules load failure follows locale without reloading and Retry retains the six-field contract"}],"endTime":1793730960237,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\settings-view.test.tsx","startTime":1793730937705,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":124,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] retains shared heading hierarchy and a named keyboard scroll region","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730961652,"status":"passed","title":"[P7-10 audit] retains shared heading hierarchy and a named keyboard scroll region"},{"ancestorTitles":[],"duration":119,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] exact Undo allowlist and deleted-only Restore retain endpoint contracts","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730961776,"status":"passed","title":"[P7-10 audit] exact Undo allowlist and deleted-only Restore retain endpoint contracts"},{"ancestorTitles":[],"duration":153,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] Undo and Restore serialize across rows, retaining focus on pending table","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793730961895,"status":"passed","title":"[P7-10 audit] Undo and Restore serialize across rows, retaining focus on pending table"},{"ancestorTitles":[],"duration":139,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] a committed Restore with failed refresh recovers through GET only","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730962048,"status":"passed","title":"[P7-10 audit] a committed Restore with failed refresh recovers through GET only"},{"ancestorTitles":[],"duration":70,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] late Undo after unmount cannot notify or refresh","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730962187,"status":"passed","title":"[P7-10 audit] late Undo after unmount cannot notify or refresh"},{"ancestorTitles":[],"duration":60,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] late Undo after session cannot notify or refresh","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730962257,"status":"passed","title":"[P7-10 audit] late Undo after session cannot notify or refresh"},{"ancestorTitles":[],"duration":97,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-10 audit] pending failure uses safe current-language feedback without a locale GET","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793730962317,"status":"passed","title":"[P7-10 audit] pending failure uses safe current-language feedback without a locale GET"},{"ancestorTitles":[],"duration":76,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"distinguishes an unavailable audit log from an empty audit log and retries","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730962415,"status":"passed","title":"distinguishes an unavailable audit log from an empty audit log and retries"},{"ancestorTitles":[],"duration":51,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"localizes audit actions in Bokmål without translating stored event data","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730962491,"status":"passed","title":"localizes audit actions in Bokmål without translating stored event data"}],"endTime":1793730962543,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-audit-page.test.tsx","startTime":1793730960255,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":399,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cancelling setup sends no security write and clears the password before reopening","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793730963598,"status":"passed","title":"cancelling setup sends no security write and clears the password before reopening"},{"ancestorTitles":[],"duration":548,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"regenerated recovery codes require acknowledgement, survive Escape, export correctly, and clear after Done","invocations":1,"location":null,"numPassingAsserts":23,"retryReasons":[],"startAt":1793730963997,"status":"passed","title":"regenerated recovery codes require acknowledgement, survive Escape, export correctly, and clear after Done"},{"ancestorTitles":[],"duration":134,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål enabled status and trusted-device dates survive a read-only retry, then revoke the selected device with readback","invocations":1,"location":null,"numPassingAsserts":21,"retryReasons":[],"startAt":1793730964545,"status":"passed","title":"Bokmål enabled status and trusted-device dates survive a read-only retry, then revoke the selected device with readback"},{"ancestorTitles":[],"duration":80,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed sessions read offers a read-only retry without inventing an empty session list","invocations":1,"location":null,"numPassingAsserts":15,"retryReasons":[],"startAt":1793730964679,"status":"passed","title":"a failed sessions read offers a read-only retry without inventing an empty session list"},{"ancestorTitles":[],"duration":362,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pending revoke-others disables confirmation and cancellation, blocks duplicate writes, and reads back the surviving session","invocations":1,"location":null,"numPassingAsserts":14,"retryReasons":[],"startAt":1793730964759,"status":"passed","title":"pending revoke-others disables confirmation and cancellation, blocks duplicate writes, and reads back the surviving session"}],"endTime":1793730965121,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-security-flows.test.tsx","startTime":1793730962554,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":438,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account workspace navigation preserves identity drafts and focuses existing groups (en)","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793730966603,"status":"passed","title":"account workspace navigation preserves identity drafts and focuses existing groups (en)"},{"ancestorTitles":[],"duration":347,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account workspace navigation preserves identity drafts and focuses existing groups (nb)","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793730967041,"status":"passed","title":"account workspace navigation preserves identity drafts and focuses existing groups (nb)"},{"ancestorTitles":[],"duration":898,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730967388,"status":"passed","title":"meaningful identity initials use a readable foreground/background pair in [Function CareerProfilePage]"},{"ancestorTitles":[],"duration":231,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793730968286,"status":"passed","title":"meaningful identity initials use a readable foreground/background pair in [Function ProfilePage]"},{"ancestorTitles":[],"duration":1023,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Career Profile section headings describe the visible hierarchy without changing editing fields","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793730968517,"status":"passed","title":"Career Profile section headings describe the visible hierarchy without changing editing fields"},{"ancestorTitles":[],"duration":273,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account headings separate identity from security sections","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730969541,"status":"passed","title":"account headings separate identity from security sections"},{"ancestorTitles":[],"duration":230,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account CV text status in en does not claim the CV library is empty","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730969814,"status":"passed","title":"account CV text status in en does not claim the CV library is empty"},{"ancestorTitles":[],"duration":221,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account CV text status in nb does not claim the CV library is empty","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730970045,"status":"passed","title":"account CV text status in nb does not claim the CV library is empty"},{"ancestorTitles":[],"duration":629,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793730970266,"status":"passed","title":"[PRES-E02/E09/C01] account save carries four identity fields and keeps career, email and CV writes separate"},{"ancestorTitles":[],"duration":785,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793730970895,"status":"passed","title":"[PRES-E02/E08/E09] failed account save keeps a scoped error and the identity draft for explicit retry"},{"ancestorTitles":[],"duration":667,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793730971680,"status":"passed","title":"[PRES-E02/E08] failed password update keeps a scoped error and secret draft until explicit retry succeeds"},{"ancestorTitles":[],"duration":2354,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page loads persisted structured cv and can re-parse it","invocations":1,"location":null,"numPassingAsserts":18,"retryReasons":[],"startAt":1793730972347,"status":"passed","title":"profile page loads persisted structured cv and can re-parse it"},{"ancestorTitles":[],"duration":2760,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730974701,"status":"passed","title":"saving the career profile PUTs the structured profile and cv text unchanged (Phase 1 refactor invariant)"},{"ancestorTitles":[],"duration":3332,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730977461,"status":"passed","title":"editing a field in an extracted section updates parent state and flows into save (Phase 1 increment 2)"},{"ancestorTitles":[],"duration":2314,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page can reprocess from stored artifact history","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730980793,"status":"passed","title":"profile page can reprocess from stored artifact history"},{"ancestorTitles":[],"duration":3637,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"active extraction polling refreshes run status without resetting unsaved career fields","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730983107,"status":"passed","title":"active extraction polling refreshes run status without resetting unsaved career fields"},{"ancestorTitles":[],"duration":4205,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page shows durable CV operation state and retries a failed run","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730986744,"status":"passed","title":"profile page shows durable CV operation state and retries a failed run"},{"ancestorTitles":[],"duration":3233,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile page keeps raw extraction collapsed until expanded","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793730990949,"status":"passed","title":"profile page keeps raw extraction collapsed until expanded"},{"ancestorTitles":[],"duration":3224,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"saving the master profile (career) persists the structured profile via /career/profile","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793730994182,"status":"passed","title":"saving the master profile (career) persists the structured profile via /career/profile"},{"ancestorTitles":[],"duration":270,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career shows the profile completeness overview","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730997406,"status":"passed","title":"/career shows the profile completeness overview"},{"ancestorTitles":[],"duration":1935,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career profile exposes extraction progress","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793730997677,"status":"passed","title":"/career profile exposes extraction progress"},{"ancestorTitles":[],"duration":4392,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career profile can queue a legacy text CV upload without visiting import review first","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793730999612,"status":"passed","title":"/career profile can queue a legacy text CV upload without visiting import review first"},{"ancestorTitles":[],"duration":1363,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career localizes completeness and review confidence without changing CV data","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731004005,"status":"passed","title":"/career localizes completeness and review confidence without changing CV data"},{"ancestorTitles":[],"duration":3051,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"/career separates overview, profile and import while preserving unsaved profile edits","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793731005368,"status":"passed","title":"/career separates overview, profile and import while preserving unsaved profile edits"},{"ancestorTitles":[],"duration":4548,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pending CV extraction can be reviewed and applied","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731008419,"status":"passed","title":"pending CV extraction can be reviewed and applied"},{"ancestorTitles":[],"duration":756,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"account email changes require a password and use the confirmation flow","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793731012968,"status":"passed","title":"account email changes require a password and use the confirmation flow"}],"endTime":1793731013725,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\profile-page.test.tsx","startTime":1793730965130,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":["Profile account provider cards"],"duration":50,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E09] disabled Google has a named account section without starting OAuth","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793731015455,"status":"passed","title":"[PRES-E02/E09] disabled Google has a named account section without starting OAuth"},{"ancestorTitles":["Profile account provider cards"],"duration":41,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E09] disabled Microsoft has a named account section without starting OAuth","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793731015506,"status":"passed","title":"[PRES-E02/E09] disabled Microsoft has a named account section without starting OAuth"},{"ancestorTitles":["Profile account provider cards"],"duration":64,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E09] Google linked metadata follows Bokmål while retaining the stored timestamp","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731015547,"status":"passed","title":"[PRES-E02/E09] Google linked metadata follows Bokmål while retaining the stored timestamp"},{"ancestorTitles":["Profile account provider cards"],"duration":60,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E09] Microsoft linked metadata follows Bokmål while retaining the stored timestamp","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731015611,"status":"passed","title":"[PRES-E03/E09] Microsoft linked metadata follows Bokmål while retaining the stored timestamp"},{"ancestorTitles":["Profile account provider cards"],"duration":132,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E08] Microsoft local linking requires the current password and cancellation keeps it without exchanging credentials","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793731015672,"status":"passed","title":"[PRES-E03/E08] Microsoft local linking requires the current password and cancellation keeps it without exchanging credentials"},{"ancestorTitles":["Profile account provider cards"],"duration":139,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E08] rejected Microsoft linking retains the password and local account for an explicit retry","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793731015805,"status":"passed","title":"[PRES-E03/E08] rejected Microsoft linking retains the password and local account for an explicit retry"},{"ancestorTitles":["Profile account provider cards"],"duration":116,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E05] successful Microsoft local linking retains the established forced sign-in contract","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793731015944,"status":"passed","title":"[PRES-E03/E05] successful Microsoft local linking retains the established forced sign-in contract"},{"ancestorTitles":["Profile account provider cards"],"duration":135,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E03/E05/E08] Microsoft unlink is password-guarded and a failed attempt retains input until a deliberate retry succeeds","invocations":1,"location":null,"numPassingAsserts":13,"retryReasons":[],"startAt":1793731016060,"status":"passed","title":"[PRES-E03/E05/E08] Microsoft unlink is password-guarded and a failed attempt retains input until a deliberate retry succeeds"},{"ancestorTitles":["Profile account provider cards"],"duration":35,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E03] a google-owned account cannot unlink its only authentication provider","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731016195,"status":"passed","title":"[PRES-E02/E03] a google-owned account cannot unlink its only authentication provider"},{"ancestorTitles":["Profile account provider cards"],"duration":49,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E03] a microsoft-owned account cannot unlink its only authentication provider","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731016230,"status":"passed","title":"[PRES-E02/E03] a microsoft-owned account cannot unlink its only authentication provider"},{"ancestorTitles":["Profile account provider cards"],"duration":148,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E08] Google local linking reports failure and retries the link endpoint without an exchange","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793731016279,"status":"passed","title":"[PRES-E02/E08] Google local linking reports failure and retries the link endpoint without an exchange"},{"ancestorTitles":["Profile account provider cards"],"duration":108,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Profile account provider cards [PRES-E02/E08] failed Google unlink preserves the local account and linked state until explicit retry","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793731016427,"status":"passed","title":"[PRES-E02/E08] failed Google unlink preserves the local account and linked state until explicit retry"}],"endTime":1793731016536,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-providers.test.tsx","startTime":1793731013737,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":121,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"downloads the readable account ZIP from the protected endpoint","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731018043,"status":"passed","title":"downloads the readable account ZIP from the protected endpoint"},{"ancestorTitles":[],"duration":83,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"explains the recent-sign-in requirement without weakening it","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793731018164,"status":"passed","title":"explains the recent-sign-in requirement without weakening it"},{"ancestorTitles":[],"duration":38,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keeps account deletion hidden behind the server flag","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793731018247,"status":"passed","title":"keeps account deletion hidden behind the server flag"},{"ancestorTitles":[],"duration":554,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"requires the exact server-provided deletion phrase","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731018285,"status":"passed","title":"requires the exact server-provided deletion phrase"}],"endTime":1793731018840,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-data-export.test.tsx","startTime":1793731016550,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":46,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E09] Bokmål signed-in status and section semantics use the UI language","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731020316,"status":"passed","title":"[PRES-E02/E09] Bokmål signed-in status and section semantics use the UI language"},{"ancestorTitles":[],"duration":58,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02/E08] a failed identity read is unknown and retries without a logout or login write","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731020362,"status":"passed","title":"[PRES-E02/E08] a failed identity read is unknown and retries without a logout or login write"},{"ancestorTitles":[],"duration":32,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E02] an authoritative unauthenticated identity read retains signed-out presentation","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731020420,"status":"passed","title":"[PRES-E02] an authoritative unauthenticated identity read retains signed-out presentation"},{"ancestorTitles":[],"duration":45,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E04] unknown 2FA status announces loading and cannot suggest setup","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731020453,"status":"passed","title":"[PRES-E04] unknown 2FA status announces loading and cannot suggest setup"},{"ancestorTitles":[],"duration":78,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E04/E08] failed 2FA status offers read-only retry before security actions","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793731020498,"status":"passed","title":"[PRES-E04/E08] failed 2FA status offers read-only retry before security actions"},{"ancestorTitles":[],"duration":460,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E05/E08] session-revocation failure stays inside its named confirmation for retry","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731020577,"status":"passed","title":"[PRES-E05/E08] session-revocation failure stays inside its named confirmation for retry"},{"ancestorTitles":[],"duration":38,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-E05/E09] sessions keep stored timestamps and render dates in Bokmål","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731021037,"status":"passed","title":"[PRES-E05/E09] sessions keep stored timestamps and render dates in Bokmål"}],"endTime":1793731021076,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\account-security-presentation.test.tsx","startTime":1793731018854,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":376,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"processing workspace keyboard targets move between filters and jobs without changing filters","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731022449,"status":"passed","title":"processing workspace keyboard targets move between filters and jobs without changing filters"},{"ancestorTitles":[],"duration":432,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731022825,"status":"passed","title":"uses safe en fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":591,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731023257,"status":"passed","title":"uses safe en fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":463,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731023848,"status":"passed","title":"uses safe en fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":483,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731024311,"status":"passed","title":"uses safe nb fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":439,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731024794,"status":"passed","title":"uses safe nb fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":459,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731025233,"status":"passed","title":"uses safe nb fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":638,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows safe job metadata and real events with a copyable correlation ID","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793731025692,"status":"passed","title":"shows safe job metadata and real events with a copyable correlation ID"},{"ancestorTitles":[],"duration":985,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731026330,"status":"passed","title":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata"},{"ancestorTitles":[],"duration":414,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows stable failure evidence and links an application only when the server permits it","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731027315,"status":"passed","title":"shows stable failure evidence and links an application only when the server permits it"},{"ancestorTitles":[],"duration":417,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a successful retry keeps prior failure evidence separate from its success timestamp","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731027729,"status":"passed","title":"a successful retry keeps prior failure evidence separate from its success timestamp"},{"ancestorTitles":[],"duration":566,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pause stops polling and resume uses an exact string event cursor","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731028146,"status":"passed","title":"pause stops polling and resume uses an exact string event cursor"},{"ancestorTitles":[],"duration":106,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"forbidden responses clear metadata and do not retry automatically","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731028712,"status":"passed","title":"forbidden responses clear metadata and do not retry automatically"},{"ancestorTitles":[],"duration":119,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"malformed successful responses produce a recoverable error instead of rendering raw data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793731028818,"status":"passed","title":"malformed successful responses produce a recoverable error instead of rendering raw data"},{"ancestorTitles":[],"duration":78,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid filters explain the rejected request and stop automatic retries","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793731028937,"status":"passed","title":"invalid filters explain the rejected request and stop automatic retries"},{"ancestorTitles":[],"duration":125,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"identity changes abort pending reads and clear the previous administrator view","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731029015,"status":"passed","title":"identity changes abort pending reads and clear the previous administrator view"},{"ancestorTitles":[],"duration":155,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed cycle aborts sibling reads and reconnects with bounded backoff","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793731029140,"status":"passed","title":"a failed cycle aborts sibling reads and reconnects with bounded backoff"},{"ancestorTitles":[],"duration":751,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"older event pages pause updates and retain exact cursors until returning to latest","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731029296,"status":"passed","title":"older event pages pause updates and retain exact cursors until returning to latest"}],"endTime":1793731030048,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-processing-page.test.tsx","startTime":1793731021091,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":12,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"English and Bokmål expose the same UI message keys","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793731030520,"status":"passed","title":"English and Bokmål expose the same UI message keys"},{"ancestorTitles":[],"duration":9,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål preserves every English substitution variable","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793731030533,"status":"passed","title":"Bokmål preserves every English substitution variable"},{"ancestorTitles":[],"duration":4,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"supported UI catalogues contain no blank messages","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793731030542,"status":"passed","title":"supported UI catalogues contain no blank messages"}],"endTime":1793731030547,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\translation-catalogue.test.ts","startTime":1793731030064,"status":"passed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/evidence/account-admin/frontend/a3-processing-focus-red.json b/docs/ui-modernisation/evidence/account-admin/frontend/a3-processing-focus-red.json new file mode 100644 index 00000000..1dd44acb --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/frontend/a3-processing-focus-red.json @@ -0,0 +1 @@ +{"numFailedTestSuites":1,"numFailedTests":1,"numPassedTestSuites":0,"numPassedTests":0,"numPendingTestSuites":0,"numPendingTests":18,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":1,"numTotalTests":19,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793731763562,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"processing workspace keyboard targets move between filters and jobs without changing filters","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793731768810,"status":"pending","title":"processing workspace keyboard targets move between filters and jobs without changing filters"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793731768810,"status":"pending","title":"uses safe en fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793731768810,"status":"pending","title":"uses safe en fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793731768810,"status":"pending","title":"uses safe en fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793731768810,"status":"pending","title":"uses safe nb fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793731768810,"status":"pending","title":"uses safe nb fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793731768810,"status":"pending","title":"uses safe nb fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows safe job metadata and real events with a copyable correlation ID","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793731768810,"status":"pending","title":"shows safe job metadata and real events with a copyable correlation ID"},{"ancestorTitles":[],"duration":4570,"failing":false,"failureDetails":[{"matcherResult":{"pass":false,"message":"expect(element).toHaveFocus()\n\nExpected element with focus:\n

Processing details

\nReceived element with focus:\n

Automatic updates enabled

Updated 03/11/2026, 19:49:29
Configured worker switches

Additional feature settings may also be required. Only document and AI operations publish individual job history here; enabled does not confirm worker health.

CV imports use deterministic interpretation. AI worker availability is shown above; model health and extraction quality are not checked by this view.

"}}],"failureMessages":["Error: expect(element).toHaveFocus()\n\nExpected element with focus:\n

Processing details

\nReceived element with focus:\n

Automatic updates enabled

Updated 03/11/2026, 19:49:29
Configured worker switches

Additional feature settings may also be required. Only document and AI operations publish individual job history here; enabled does not confirm worker health.

CV imports use deterministic interpretation. AI worker availability is shown above; model health and extraction quality are not checked by this view.

\n\nIgnored nodes: comments, script, style\n\u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProcessing monitor\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDocument and AI operations, their owners and safe processing history.\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mPause updates\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRefresh\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomatic updates enabled\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mUpdated 03/11/2026, 19:49:29\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJump to processing jobs\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAll\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mQueued\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRunning\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting to retry\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting for approved fallback\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCompleted\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFailed\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCancelled\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36mProcessing details\n Received element with focus:\n

Automatic updates enabled

Updated 03/11/2026, 19:49:29
Configured worker switches

Additional feature settings may also be required. Only document and AI operations publish individual job history here; enabled does not confirm worker health.

CV imports use deterministic interpretation. AI worker availability is shown above; model health and extraction quality are not checked by this view.

\n\n Ignored nodes: comments, script, style\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mProcessing monitor\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mDocument and AI operations, their owners and safe processing history.\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mPause updates\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRefresh\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAutomatic updates enabled\u001b[0m\n \u001b[36m

\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mUpdated 03/11/2026, 19:49:29\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mJump to processing jobs\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mStatus\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mAll\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mQueued\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mRunning\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting to retry\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mWaiting for approved fallback\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCompleted\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mFailed\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCancelled\u001b[0m\n \u001b[36m\u001b[39m\n \u001b[36m 77 | await waitFor(() => expect(screen.getByRole('heading', { name: 'Processing details' })).toHaveFocus());\n | ^\n 78 | } finally { frame.mockRestore(); }\n 79 | });\n 80 |\n\n at toHaveFocus (src/admin-processing-page.test.tsx:77:93)\n at runWithExpensiveErrorDiagnosticsDisabled (node_modules/@testing-library/dom/dist/config.js:47:12)\n at checkCallback (node_modules/@testing-library/dom/dist/wait-for.js:124:77)\n at checkRealTimersCallback (node_modules/@testing-library/dom/dist/wait-for.js:118:16)\n at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:579:19)\n","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-processing-page.test.tsx","startTime":1793731764979,"status":"failed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/evidence/account-admin/frontend/a3-processing-focus-tests.json b/docs/ui-modernisation/evidence/account-admin/frontend/a3-processing-focus-tests.json new file mode 100644 index 00000000..9a171f2e --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/frontend/a3-processing-focus-tests.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":1,"numPassedTests":19,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":1,"numTotalTests":19,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793731790370,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":613,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"processing workspace keyboard targets move between filters and jobs without changing filters","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731796644,"status":"passed","title":"processing workspace keyboard targets move between filters and jobs without changing filters"},{"ancestorTitles":[],"duration":462,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731797258,"status":"passed","title":"uses safe en fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":496,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731797720,"status":"passed","title":"uses safe en fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":477,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731798217,"status":"passed","title":"uses safe en fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":464,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731798694,"status":"passed","title":"uses safe nb fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":465,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731799159,"status":"passed","title":"uses safe nb fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":465,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731799625,"status":"passed","title":"uses safe nb fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":557,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows safe job metadata and real events with a copyable correlation ID","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793731800090,"status":"passed","title":"shows safe job metadata and real events with a copyable correlation ID"},{"ancestorTitles":[],"duration":559,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"processing details receive focus even when animation frames run before the response render commits","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793731800647,"status":"passed","title":"processing details receive focus even when animation frames run before the response render commits"},{"ancestorTitles":[],"duration":1284,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731801207,"status":"passed","title":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata"},{"ancestorTitles":[],"duration":762,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows stable failure evidence and links an application only when the server permits it","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731802492,"status":"passed","title":"shows stable failure evidence and links an application only when the server permits it"},{"ancestorTitles":[],"duration":425,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a successful retry keeps prior failure evidence separate from its success timestamp","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731803254,"status":"passed","title":"a successful retry keeps prior failure evidence separate from its success timestamp"},{"ancestorTitles":[],"duration":602,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pause stops polling and resume uses an exact string event cursor","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731803680,"status":"passed","title":"pause stops polling and resume uses an exact string event cursor"},{"ancestorTitles":[],"duration":101,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"forbidden responses clear metadata and do not retry automatically","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731804282,"status":"passed","title":"forbidden responses clear metadata and do not retry automatically"},{"ancestorTitles":[],"duration":113,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"malformed successful responses produce a recoverable error instead of rendering raw data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793731804383,"status":"passed","title":"malformed successful responses produce a recoverable error instead of rendering raw data"},{"ancestorTitles":[],"duration":107,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid filters explain the rejected request and stop automatic retries","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793731804496,"status":"passed","title":"invalid filters explain the rejected request and stop automatic retries"},{"ancestorTitles":[],"duration":133,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"identity changes abort pending reads and clear the previous administrator view","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731804603,"status":"passed","title":"identity changes abort pending reads and clear the previous administrator view"},{"ancestorTitles":[],"duration":144,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed cycle aborts sibling reads and reconnects with bounded backoff","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793731804736,"status":"passed","title":"a failed cycle aborts sibling reads and reconnects with bounded backoff"},{"ancestorTitles":[],"duration":647,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"older event pages pause updates and retain exact cursors until returning to latest","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731804881,"status":"passed","title":"older event pages pause updates and retain exact cursors until returning to latest"}],"endTime":1793731805529,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-processing-page.test.tsx","startTime":1793731792078,"status":"passed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/evidence/account-admin/frontend/a3-processing-visual-followup.json b/docs/ui-modernisation/evidence/account-admin/frontend/a3-processing-visual-followup.json new file mode 100644 index 00000000..14e5ddff --- /dev/null +++ b/docs/ui-modernisation/evidence/account-admin/frontend/a3-processing-visual-followup.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":1,"numPassedTests":18,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":1,"numTotalTests":18,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793731577428,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":478,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"processing workspace keyboard targets move between filters and jobs without changing filters","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731582912,"status":"passed","title":"processing workspace keyboard targets move between filters and jobs without changing filters"},{"ancestorTitles":[],"duration":374,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731583392,"status":"passed","title":"uses safe en fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":327,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731583767,"status":"passed","title":"uses safe en fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":321,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe en fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731584094,"status":"passed","title":"uses safe en fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":309,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key constructor","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731584415,"status":"passed","title":"uses safe nb fallbacks for inherited processing key constructor"},{"ancestorTitles":[],"duration":163,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key toString","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731584724,"status":"passed","title":"uses safe nb fallbacks for inherited processing key toString"},{"ancestorTitles":[],"duration":261,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"uses safe nb fallbacks for inherited processing key __proto__","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731584887,"status":"passed","title":"uses safe nb fallbacks for inherited processing key __proto__"},{"ancestorTitles":[],"duration":391,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows safe job metadata and real events with a copyable correlation ID","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793731585148,"status":"passed","title":"shows safe job metadata and real events with a copyable correlation ID"},{"ancestorTitles":[],"duration":632,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731585540,"status":"passed","title":"submits diagnostic filters and displays explicit owner, import and unrelated-job metadata"},{"ancestorTitles":[],"duration":516,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"shows stable failure evidence and links an application only when the server permits it","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731586173,"status":"passed","title":"shows stable failure evidence and links an application only when the server permits it"},{"ancestorTitles":[],"duration":230,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a successful retry keeps prior failure evidence separate from its success timestamp","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731586689,"status":"passed","title":"a successful retry keeps prior failure evidence separate from its success timestamp"},{"ancestorTitles":[],"duration":572,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pause stops polling and resume uses an exact string event cursor","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731586919,"status":"passed","title":"pause stops polling and resume uses an exact string event cursor"},{"ancestorTitles":[],"duration":101,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"forbidden responses clear metadata and do not retry automatically","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731587491,"status":"passed","title":"forbidden responses clear metadata and do not retry automatically"},{"ancestorTitles":[],"duration":82,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"malformed successful responses produce a recoverable error instead of rendering raw data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793731587592,"status":"passed","title":"malformed successful responses produce a recoverable error instead of rendering raw data"},{"ancestorTitles":[],"duration":41,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid filters explain the rejected request and stop automatic retries","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793731587674,"status":"passed","title":"invalid filters explain the rejected request and stop automatic retries"},{"ancestorTitles":[],"duration":59,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"identity changes abort pending reads and clear the previous administrator view","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793731587715,"status":"passed","title":"identity changes abort pending reads and clear the previous administrator view"},{"ancestorTitles":[],"duration":90,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed cycle aborts sibling reads and reconnects with bounded backoff","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793731587775,"status":"passed","title":"a failed cycle aborts sibling reads and reconnects with bounded backoff"},{"ancestorTitles":[],"duration":670,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"older event pages pause updates and retain exact cursors until returning to latest","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793731587865,"status":"passed","title":"older event pages pause updates and retain exact cursors until returning to latest"}],"endTime":1793731588536,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\admin-processing-page.test.tsx","startTime":1793731578850,"status":"passed","summary":""}],"wasInterrupted":false} diff --git a/job-tracker-ui/scripts/verify-a3-account-admin.mjs b/job-tracker-ui/scripts/verify-a3-account-admin.mjs new file mode 100644 index 00000000..f38ce0c8 --- /dev/null +++ b/job-tracker-ui/scripts/verify-a3-account-admin.mjs @@ -0,0 +1,95 @@ +// Actual exported React views; all API responses controlled. No credentials or real account operations. +import { chromium, expect } from '@playwright/test'; +import AxeBuilder from '@axe-core/playwright'; +import ts from 'typescript'; +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +const compiled = ts.transpileModule(fs.readFileSync(new URL('../src/i18n/translations.ts', import.meta.url), 'utf8'), { compilerOptions: { module: ts.ModuleKind.ESNext } }).outputText; +const { translations } = await import(`data:text/javascript;base64,${Buffer.from(compiled).toString('base64')}`); +const out = path.resolve(import.meta.dirname, '../../docs/ui-modernisation/evidence/account-admin/browser'); +fs.mkdirSync(out, { recursive: true }); +const report = { screens: [], journeys: [], errors: [], unexpectedWrites: [], exportDenials: [], unavailableReads: [], blockedExternal: [] }; +const browser = await chromium.launch(); +const processingOnly = Boolean(process.env.A3_PROCESSING_ONLY); +try { + const configurations = process.env.A3_PILOT ? [[320, 'en', 'light']] : [320, 390, 768, 1440].flatMap(width => ['en', 'nb'].flatMap(language => ['light', 'dark'].map(mode => [width, language, mode]))); + for (const [width, language, mode] of configurations) { + console.log(`Checking ${width}/${language}/${mode}`); + const t = key => { assert.ok(translations[language][key], key); return translations[language][key]; }; + const context = await browser.newContext({ viewport: { width, height: 1000 }, reducedMotion: 'reduce' }); + const page = await context.newPage(); page.on('pageerror', error => report.errors.push(error.message)); + await page.addInitScript(({ language, mode }) => { localStorage.setItem('uiLanguage', language); localStorage.setItem('jobtracker.themeMode', mode); }, { language, mode }); + const session = { id: 'current', deviceLabel: 'Synthetic current device', isCurrentSession: true, createdAtUtc: '2026-11-03T10:00:00Z', lastSeenAtUtc: '2026-11-03T10:00:00Z', expiresAtUtc: '2026-12-03T10:00:00Z' }; + const operation = { id: '11111111-1111-4111-8111-111111111111', owner: { id: 'a3-admin-owner', name: 'Alex Sample', email: 'alex@example.test' }, taskType: 'cv.process', status: 'failed', stage: 'cv_extracting', attemptCount: 1, maxAttempts: 3, createdAtUtc: '2026-11-03T10:00:00Z', startedAtUtc: null, completedAtUtc: null, lastHeartbeatAtUtc: null, durationSeconds: 8, worker: 'document', workerEnabled: false, failureCode: 'parser_failed', lastFailureAtUtc: '2026-11-03T10:00:08Z', lastFailureStage: 'cv_extracting', job: { id: 42, title: 'Recorded teacher application', company: 'Synthetic school', canOpen: false }, document: { importId: 7, name: 'Recorded teacher CV.pdf', type: 'application/pdf', bytes: 500, pages: 2, state: 'failed' } }; + const listing = { items: [operation], total: 1, counts: { failed: 1 }, workers: [{ name: 'CvDocumentImports', flagEnabled: false, individualOperationsRecorded: true }] }; + await page.route('**/*', route => { + const req = route.request(), url = new URL(req.url()), p = url.pathname; + if (!['localhost', '127.0.0.1'].includes(url.hostname)) { report.blockedExternal.push(url.origin); return route.abort(); } + if (!p.startsWith('/api/')) return route.continue(); + const answer = data => route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(data) }); + if (req.method() === 'POST' && p === '/api/export/account') { + report.exportDenials.push({ width, language, mode }); return route.fulfill({ status: 403, contentType: 'application/problem+json', body: JSON.stringify({ detail: 'Controlled recent-sign-in denial.' }) }); + } + if (req.method() !== 'GET') { report.unexpectedWrites.push(p); return route.abort(); } + const fixtures = { + '/api/auth/config': { requireAuth: true, allowRegistration: false }, + '/api/auth/me': { id: 'a3-admin-owner', sessionContext: 'a3-admin-session', provider: 'local', firstName: 'Alex', lastName: 'Sample', userName: 'alex', displayName: 'Alex Sample', email: 'alex@example.test', roles: ['Admin'], plan: 'pro', entitlements: { ai: false, proThemes: true }, uiLanguage: language === 'nb' ? 'nb-NO' : 'en', googleLink: { linked: false }, microsoftLink: { linked: false } }, + '/api/auth/email-change': { pendingEmail: null }, '/api/auth/2fa/status': { enabled: true, enabledAtUtc: '2026-11-03T10:00:00Z' }, '/api/auth/2fa/trusted-devices': [], + '/api/auth/sessions': [session, { ...session, id: 'other', deviceLabel: 'Synthetic other device', isCurrentSession: false }], + '/api/jobapplications/reminders': [], '/api/notifications/unread-count': { count: 0 }, '/api/notification-settings': { emailFollowUpRemindersEnabled: true }, + '/api/account-lifecycle/status': { deletionEnabled: true, deletionStatus: 'active', requiredConfirmation: 'DELETE alex@example.test', request: null }, + '/api/gmail/status': { connected: false, configured: false }, '/api/microsoft-graph/status': { connected: false, configured: false }, '/api/imap/status': { connected: false, configured: false }, + '/api/users': [{ id: 'a3-admin-owner', email: 'alex@example.test', userName: 'alex', emailConfirmed: true, roles: ['Admin'], isCurrentUser: true, canRemoveAdmin: false }], + '/api/admin/audit': [], '/api/admin/processing': listing, + [`/api/admin/processing/${operation.id}`]: operation, + [`/api/admin/processing/${operation.id}/events`]: { items: [{ id: '9007199254740993', atUtc: '2026-11-03T10:00:08Z', kind: 'Failed', status: 'failed', stage: 'cv_extracting', attempt: 1, failureCode: 'parser_failed' }], hasMore: false, retentionDays: 30 }, + }; + if (Object.hasOwn(fixtures, p)) return answer(fixtures[p]); + report.unavailableReads.push(p); return route.fulfill({ status: 503, contentType: 'application/json', body: JSON.stringify({ detail: 'Controlled offline read unavailable.' }) }); + }); + const scan = async state => { + assert.equal(await page.evaluate(() => document.documentElement.scrollWidth > innerWidth + 1), false, `overflow:${state}`); + const result = await new AxeBuilder({ page }).withTags(['wcag2a', 'wcag2aa', 'wcag21aa', 'wcag22aa']).analyze(); + report.screens.push({ width, language, mode, state, violations: result.violations }); assert.deepEqual(result.violations, [], `${state} accessibility`); + await page.evaluate(() => window.scrollTo({ top: 0, behavior: 'instant' })); await expect.poll(() => page.evaluate(() => window.scrollY)).toBe(0); + await page.screenshot({ path: path.join(out, `${state}-${language}-${mode}-${width}.png`), fullPage: width >= 768 }); + }; + if (!processingOnly) { + await page.goto('http://localhost:4338/profile'); + const name = page.getByRole('textbox', { name: t('profileDisplayName'), exact: true }); await expect(name).toHaveValue('Alex Sample'); await name.fill('Unsaved account name'); + const nav = page.getByRole('navigation', { name: t('accountWorkspaceNavigation'), exact: true }); + for (const [id, key] of [['account-details', 'profileAccountSection'], ['account-connections', 'accountWorkspaceConnections'], ['account-security', 'accountWorkspaceSecurity']]) { + await nav.getByRole('button', { name: t(key), exact: true }).press('Enter'); await expect(page.locator(`#${id}`)).toBeFocused(); await expect(name).toHaveValue('Unsaved account name'); + } + await scan('account'); + await page.getByRole('button', { name: t('sessionsRevokeOthers'), exact: true }).click(); const confirmation = page.getByRole('dialog'); + await expect(confirmation).toContainText(t('sessionsRevokeOthersConfirmTitle')); await scan('session-confirmation'); await confirmation.getByRole('button', { name: t('cancel'), exact: true }).click(); + await nav.getByRole('link', { name: t('accountWorkspaceData'), exact: true }).click(); await expect(page.getByRole('tabpanel', { name: t('settingsTabBackup'), exact: true })).toBeVisible(); + await page.getByRole('button', { name: t('accountExportDownload'), exact: true }).click(); await expect(page.getByText(t('accountExportFailed'), { exact: true })).toBeVisible(); + await page.getByRole('button', { name: t('accountDeleteButton'), exact: true }).click(); const deletion = page.getByRole('dialog'); await expect(deletion).toContainText('DELETE alex@example.test'); await scan('data-confirmation'); await deletion.getByRole('button', { name: t('cancel'), exact: true }).click(); + await page.goto('http://localhost:4338/settings/connected-accounts'); await expect(page.getByRole('heading', { name: t('connectedAccounts'), exact: true })).toBeVisible(); await scan('connections'); + await page.goto('http://localhost:4338/admin/users'); await expect(page.getByRole('button', { name: t('adminUsersRemoveAdmin'), exact: true })).toBeDisabled(); await expect(page.getByRole('button', { name: t('adminUsersDelete'), exact: true })).toBeDisabled(); await scan('last-admin'); + await page.goto('http://localhost:4338/admin/audit'); await expect(page.getByText(t('adminAuditNoEvents'), { exact: true })).toBeVisible(); await scan('audit-empty'); + await page.goto('http://localhost:4338/admin/system'); await expect(page.getByText(t('adminSystemLoadFailed'), { exact: true })).toBeVisible(); await scan('system-unavailable'); + } + await page.goto('http://localhost:4338/admin/processing'); await expect(page.getByRole('button', { name: t('processingViewDetails').replace('{id}', operation.id), exact: true })).toBeVisible(); + for (const key of ['processingStatus', 'processingTask', 'processingWorkerFilter', 'processingFailureCode']) { + const control = page.getByRole('combobox', { name: t(key), exact: true }); + const label = page.locator(`label[for=${JSON.stringify(await control.getAttribute('id'))}]`); + await expect.poll(async () => { const a = await label.boundingBox(), b = await control.boundingBox(); return a && b && a.y + a.height < b.y + b.height / 2; }, { message: `${key}: label must stay above the selected text` }).toBe(true); + } + assert.ok((await page.getByRole('columnheader', { name: t('processingElapsed'), exact: true }).boundingBox()).width >= 96, 'Duration column remains readable'); + await page.getByRole('button', { name: t('processingPause'), exact: true }).click(); await page.getByRole('button', { name: t('processingJumpResults'), exact: true }).press('Enter'); await expect(page.getByRole('group', { name: t('processingResults'), exact: true })).toBeFocused(); + await page.getByRole('button', { name: t('processingReturnFilters'), exact: true }).click(); await expect(page.getByRole('form', { name: t('processingFilters'), exact: true })).toBeFocused(); + await page.getByRole('button', { name: t('processingViewDetails').replace('{id}', operation.id), exact: true }).click(); await expect(page.getByRole('heading', { name: t('processingDetails'), exact: true })).toBeFocused(); + await expect(page.getByRole('link', { name: operation.job.title, exact: true })).toHaveCount(0); await scan('processing-detail'); + report.journeys.push({ width, language, mode, draftPreservedAcrossKeyboardSections: processingOnly ? 'NOT RUN' : 'PASS', revocationAndDeletionCancelled: processingOnly ? 'NOT RUN' : 'PASS', recentExportDenial: processingOnly ? 'NOT RUN' : 'PASS', lastAdminActionsDisabled: processingOnly ? 'NOT RUN' : 'PASS', processingKeyboardAndOwnerLink: 'PASS', processingFilterLabelsAndDurationGeometry: 'PASS' }); await context.close(); + } + assert.equal(report.screens.length, configurations.length * (processingOnly ? 1 : 8)); assert.equal(report.journeys.length, configurations.length); assert.equal(report.exportDenials.length, processingOnly ? 0 : configurations.length); + assert.deepEqual(report.errors, []); assert.deepEqual(report.unexpectedWrites, []); assert.ok(report.blockedExternal.every(origin => origin === 'https://fonts.googleapis.com')); + console.log(`PASS:${report.journeys.length} controlled journeys,${report.screens.length} axe scans/captures; no mutation requests.`); +} finally { + fs.writeFileSync(path.join(out, processingOnly ? 'PROCESSING.json' : process.env.A3_PILOT ? 'PILOT.json' : 'BROWSER.json'), JSON.stringify({ ...report, limits: ['Every API response is synthetic. Account export is a controlled 403; revocation/deletion confirmations are cancelled, not executed.', 'System monitor capture is the controlled unavailable state, audit is empty; detailed success/action scenarios are unit tests, not live qualification.', 'No real credentials, provider activation, model, native device, integrated security, production or release acceptance.'] }, null, 2)); + await browser.close(); +} diff --git a/job-tracker-ui/src/admin-processing-page.test.tsx b/job-tracker-ui/src/admin-processing-page.test.tsx index c46b949c..a1dfd84c 100644 --- a/job-tracker-ui/src/admin-processing-page.test.tsx +++ b/job-tracker-ui/src/admin-processing-page.test.tsx @@ -20,6 +20,19 @@ beforeEach(() => { }); afterEach(() => jest.useRealTimers()); +test('processing workspace keyboard targets move between filters and jobs without changing filters', async () => { + open(); await screen.findByText('Synthetic owner'); + const filter = screen.getByRole('form', { name: 'Processing filters' }); + const search = screen.getByLabelText('Search users, jobs or task ID'); + fireEvent.change(search, { target: { value: 'Unsubmitted search' } }); + const jobs = screen.getByRole('group', { name: 'Processing results' }); + jobs.scrollIntoView = jest.fn(); filter.scrollIntoView = jest.fn(); + const reads = get.mock.calls.length; + fireEvent.click(screen.getByRole('button', { name: 'Jump to processing jobs' })); expect(jobs).toHaveFocus(); + fireEvent.click(screen.getByRole('button', { name: 'Return to processing filters' })); expect(filter).toHaveFocus(); + expect(search).toHaveValue('Unsubmitted search'); expect(get.mock.calls.length).toBe(reads); +}); + test.each([ ['en', 'constructor', 'Other operation', 'Unknown', 'Unregistered worker', 'Not recorded'], ['en', 'toString', 'Other operation', 'Unknown', 'Unregistered worker', 'Not recorded'], @@ -57,6 +70,14 @@ test('shows safe job metadata and real events with a copyable correlation ID', a expect(screen.queryByText(/SECRET/)).not.toBeInTheDocument(); }); +test('processing details receive focus even when animation frames run before the response render commits', async () => { + const frame = jest.spyOn(window, 'requestAnimationFrame').mockImplementation(callback => { callback(0); return 0; }); + try { + open(); fireEvent.click(await screen.findByRole('button', { name: /View processing details/ })); + await waitFor(() => expect(screen.getByRole('heading', { name: 'Processing details' })).toHaveFocus()); + } finally { frame.mockRestore(); } +}); + test('submits diagnostic filters and displays explicit owner, import and unrelated-job metadata', async () => { open(); await screen.findByText('Synthetic owner'); diff --git a/job-tracker-ui/src/components/SettingsView.tsx b/job-tracker-ui/src/components/SettingsView.tsx index c5b9cc37..5b45855d 100644 --- a/job-tracker-ui/src/components/SettingsView.tsx +++ b/job-tracker-ui/src/components/SettingsView.tsx @@ -16,7 +16,7 @@ import { Typography, } from "@mui/material"; -import { useNavigate } from "react-router-dom"; +import { useLocation, useNavigate } from "react-router-dom"; import { JobTableColumns } from "./JobTable"; import ImportExportJobs from "./ImportExportJobs"; @@ -65,7 +65,8 @@ export default function SettingsView({ onThemeModeChange, }: Props) { const navigate = useNavigate(); - const [tab, setTab] = useState(0); + const location = useLocation(); + const [tab, setTab] = useState(() => new URLSearchParams(location.search).get("section") === "data" ? 3 : 0); const { language, setLanguage, t } = useI18n(); const { toast } = useToast(); const [notificationPrefs, setNotificationPrefs] = useState(null); diff --git a/job-tracker-ui/src/i18n/translations.ts b/job-tracker-ui/src/i18n/translations.ts index 98a5b383..89b213de 100644 --- a/job-tracker-ui/src/i18n/translations.ts +++ b/job-tracker-ui/src/i18n/translations.ts @@ -2,6 +2,16 @@ export type UiLanguage = "en" | "nb"; export const translations = { en: { + accountWorkspaceTitle: "Your account", + accountWorkspaceBody: "Manage your identity, sign-in connections and security here. Career details remain in Career Profile; exports and account deletion controls are in Settings.", + accountWorkspaceNavigation: "Account sections", + accountWorkspaceConnections: "Sign-in and connections", + accountWorkspaceSecurity: "Password and security", + accountWorkspaceData: "Exports and account data", + processingFilters: "Processing filters", + processingResults: "Processing results", + processingJumpResults: "Jump to processing jobs", + processingReturnFilters: "Return to processing filters", aiUnavailableTitle: "AI assistance is unavailable", aiUnavailableSettings: "Review AI settings", aiUnavailableBody: "You can continue editing manually. Review your AI settings and usage before trying again.", @@ -3206,6 +3216,16 @@ export const translations = { coverAiReject: "Reject", }, nb: { + accountWorkspaceTitle: "Kontoen din", + accountWorkspaceBody: "Administrer identitet, innloggingstilkoblinger og sikkerhet her. Karriereopplysninger ligger fortsatt i Karriereprofil; eksport og kontosletting finnes under Innstillinger.", + accountWorkspaceNavigation: "Kontoseksjoner", + accountWorkspaceConnections: "Innlogging og tilkoblinger", + accountWorkspaceSecurity: "Passord og sikkerhet", + accountWorkspaceData: "Eksport og kontodata", + processingFilters: "Behandlingsfiltre", + processingResults: "Behandlingsresultater", + processingJumpResults: "Gå til behandlingsoppgaver", + processingReturnFilters: "Tilbake til behandlingsfiltre", aiUnavailableTitle: "KI-hjelp er utilgjengelig", aiUnavailableSettings: "Se KI-innstillinger", aiUnavailableBody: "Du kan fortsette å redigere manuelt. Se gjennom KI-innstillingene og forbruket ditt før du prøver igjen.", diff --git a/job-tracker-ui/src/profile-page.test.tsx b/job-tracker-ui/src/profile-page.test.tsx index 1dccb85b..49c23320 100644 --- a/job-tracker-ui/src/profile-page.test.tsx +++ b/job-tracker-ui/src/profile-page.test.tsx @@ -7,6 +7,7 @@ import { I18nProvider } from './i18n/I18nProvider'; import ProfilePage from './views/ProfilePage'; import CareerProfilePage from './views/CareerProfilePage'; import { api } from './api'; +import { translations } from './i18n/translations'; jest.mock('./api', () => ({ getApiErrorMessage: jest.requireActual('./api').getApiErrorMessage, @@ -86,6 +87,24 @@ function renderPage(section: 'profile' | 'import' = 'profile') { } void ProfilePage; +test.each(['en', 'nb'] as const)('account workspace navigation preserves identity drafts and focuses existing groups (%s)', async language => { + localStorage.setItem('uiLanguage', language); + const t = translations[language]; + renderWith(ProfilePage); + const name = await screen.findByRole('textbox', { name: t.profileDisplayName }); + await waitFor(() => expect(name).toHaveValue('Demo User')); + fireEvent.change(name, { target: { value: 'Unsaved account name' } }); + const navigation = screen.getByRole('navigation', { name: t.accountWorkspaceNavigation }); + for (const [id, label] of [['account-details', t.profileAccountSection], ['account-connections', t.accountWorkspaceConnections], ['account-security', t.accountWorkspaceSecurity]]) { + const target = document.getElementById(id)!; + target.scrollIntoView = jest.fn(); + fireEvent.click(within(navigation).getByRole('button', { name: label })); + expect(target).toHaveFocus(); expect(name).toHaveValue('Unsaved account name'); + } + expect(within(navigation).getByRole('link', { name: t.accountWorkspaceData })).toHaveAttribute('href', '/settings?section=data'); + expect(mockedApi.put).not.toHaveBeenCalled(); expect(mockedApi.post).not.toHaveBeenCalled(); +}); + beforeEach(() => { extractionRunsResponse = [{ id: 12, diff --git a/job-tracker-ui/src/settings-view.test.tsx b/job-tracker-ui/src/settings-view.test.tsx index b54e8faf..f9c3ac8f 100644 --- a/job-tracker-ui/src/settings-view.test.tsx +++ b/job-tracker-ui/src/settings-view.test.tsx @@ -26,9 +26,9 @@ jest.mock('./components/BackupCard', () => () =>
Backup Stub
); const mockedApi = api as jest.Mocked; -function renderView(overrides: Partial> = {}) { +function renderView(overrides: Partial> = {}, entry = '/settings') { return render( - + { jest.clearAllMocks(); }); +test.each([['data', 'Backup'], ['unknown', 'General']])('account data entry selects a supported initial section (%s)', async (section, label) => { + renderView({}, `/settings?section=${section}`); + expect(await screen.findByRole('tabpanel', { name: label })).toBeVisible(); + expect(mockedApi.post).not.toHaveBeenCalled(); expect(mockedApi.put).not.toHaveBeenCalled(); +}); + test('each selected Settings section has a named panel linked to its tab and remains selectable on phones', async () => { renderView(); await screen.findByText(/AI privacy/i); diff --git a/job-tracker-ui/src/views/AdminProcessingPage.tsx b/job-tracker-ui/src/views/AdminProcessingPage.tsx index 111f639c..a78aaa7b 100644 --- a/job-tracker-ui/src/views/AdminProcessingPage.tsx +++ b/job-tracker-ui/src/views/AdminProcessingPage.tsx @@ -46,8 +46,16 @@ export default function AdminProcessingPage() { const [updated, setUpdated] = useState(null); const [copy, setCopy] = useState<'copied' | 'failed' | null>(null); const detailHeading = useRef(null); + const filtersBody = useRef(null); + const resultsBody = useRef(null); const focusDetail = useRef(false); + useEffect(() => { + if (!detail || !focusDetail.current || identity !== getAuthUserKey() || isSessionInvalidated()) return; + focusDetail.current = false; + detailHeading.current?.focus(); + }, [detail, identity]); + useEffect(() => { const changed = () => { setListing(null); setDetail(null); setEvents([]); select(null); setBefore(null); @@ -103,10 +111,6 @@ export default function AdminProcessingPage() { if (next.length) cursor = next[next.length - 1].id; } else setEvents([]); setUpdated(new Date().toISOString()); setError(null); - if (focusDetail.current && detailResponse) { - focusDetail.current = false; - requestAnimationFrame(() => { if (current()) detailHeading.current?.focus(); }); - } } catch (cause) { if (!current() || request.signal.aborted) return; request.abort(); @@ -144,12 +148,13 @@ export default function AdminProcessingPage() { {error ? setRefresh(value => value + 1)}>{t('retry')} : undefined}>{t(error === 'denied' ? 'processingDenied' : error === 'invalid' ? 'processingInvalidFilters' : 'processingLoadFailed')} : null} {busy && !visibleListing ? {t('loading')} : null} - { event.preventDefault(); resetSelection(); setPage(1); setFilters({ ...inputs, owner: inputs.owner.trim() }); }}> + { event.preventDefault(); resetSelection(); setPage(1); setFilters({ ...inputs, owner: inputs.owner.trim() }); }}> + - setInputs(value => ({ ...value, status: event.target.value }))} slotProps={{ select: { native: true } }}> + setInputs(value => ({ ...value, status: event.target.value }))} slotProps={{ select: { native: true }, inputLabel: { shrink: true } }}> {Object.keys(statuses).map(value => )} - setInputs(value => ({ ...value, taskType: event.target.value }))} slotProps={{ select: { native: true } }}> + setInputs(value => ({ ...value, taskType: event.target.value }))} slotProps={{ select: { native: true }, inputLabel: { shrink: true } }}> {Object.keys(tasks).map(value => )} setInputs(value => ({ ...value, owner: event.target.value }))} slotProps={{ htmlInput: { maxLength: 255 } }} sx={{ flex: '1 1 14rem', minWidth: 0 }} /> @@ -157,10 +162,10 @@ export default function AdminProcessingPage() { setInputs(value => ({ ...value, jobId: event.target.value }))} slotProps={{ htmlInput: { min: 1, max: 2147483647 } }} /> setInputs(value => ({ ...value, createdFrom: event.target.value }))} slotProps={{ inputLabel: { shrink: true } }} /> setInputs(value => ({ ...value, createdBefore: event.target.value }))} slotProps={{ inputLabel: { shrink: true } }} /> - setInputs(value => ({ ...value, worker: event.target.value }))} slotProps={{ select: { native: true } }}> + setInputs(value => ({ ...value, worker: event.target.value }))} slotProps={{ select: { native: true }, inputLabel: { shrink: true } }}> {['document', 'ai', 'untracked'].map(value => )} - setInputs(value => ({ ...value, failureCode: event.target.value }))} slotProps={{ select: { native: true } }}> + setInputs(value => ({ ...value, failureCode: event.target.value }))} slotProps={{ select: { native: true }, inputLabel: { shrink: true } }}> {failureCodes.map(value => )} @@ -169,12 +174,14 @@ export default function AdminProcessingPage() { {visibleListing ? <> {Object.entries(visibleListing.counts).map(([key, count]) => )} + + {!visibleListing.items.length ? {t('processingNoJobs')} : - {['processingTask', 'processingOwner', 'processingStatus', 'processingWorker', 'processingCreated', 'processingElapsed'].map(key => {t(key as TranslationKey)})} +
{['processingTask', 'processingOwner', 'processingStatus', 'processingWorker', 'processingCreated', 'processingElapsed'].map(key => {t(key as TranslationKey)})}{visibleListing.items.map(item => {item.job?.title ?? item.document?.name ?? item.id.slice(0, 8)} {item.owner.email} - {state(item.status)}{stage(item.stage)}{item.failureCode && ['failed', 'waiting_for_retry', 'waiting_for_external_fallback'].includes(item.status) ? : null} + {state(item.status)}{stage(item.stage)}{item.failureCode && ['failed', 'waiting_for_retry', 'waiting_for_external_fallback'].includes(item.status) ? : null} {worker(item.worker)}{t(item.workerEnabled ? 'processingEnabled' : 'processingDisabled')} {t('processingDuration', { count: Math.round(item.durationSeconds) })} @@ -185,6 +192,7 @@ export default function AdminProcessingPage() { {t('processingPage', { page, total: Math.max(1, Math.min(1000, Math.ceil(visibleListing.total / 25))) })} + {t('processingWorkerFlags')} {t('processingWorkerFlagsHelp')}{t('processingAiDescription')} diff --git a/job-tracker-ui/src/views/ProfilePage.tsx b/job-tracker-ui/src/views/ProfilePage.tsx index 8d3ba321..9294ab69 100644 --- a/job-tracker-ui/src/views/ProfilePage.tsx +++ b/job-tracker-ui/src/views/ProfilePage.tsx @@ -64,6 +64,9 @@ export default function ProfilePage() { const { toast } = useToast(); const { t } = useI18n(); const avatarInputRef = useRef(null); + const accountDetails = useRef(null); + const accountConnections = useRef(null); + const accountSecurity = useRef(null); const [me, setMe] = useState(null); const [loading, setLoading] = useState(false); const [loadError, setLoadError] = useState(null); @@ -136,6 +139,16 @@ export default function ProfilePage() { return ( + + + {([ + [accountDetails, t("profileAccountSection")], + [accountConnections, t("accountWorkspaceConnections")], + [accountSecurity, t("accountWorkspaceSecurity")], + ] as const).map(([target, label]) => )} + + + + {!careerOnly ? <> : null} + + {!careerOnly && !isLocal ? {t("profileReadOnlyInfo")} : null} @@ -337,6 +353,8 @@ export default function ProfilePage() { + + {!careerOnly ? {!careerOnly && !isLocal ? {t("profilePasswordLocalOnly")} : null} @@ -378,6 +396,7 @@ export default function ProfilePage() { {!careerOnly && isLocal ? : null} {!careerOnly && isLocal ? : null} + ); }