diff --git a/docs/ui-modernisation/CROSS_APP_LOCALISATION.md b/docs/ui-modernisation/CROSS_APP_LOCALISATION.md new file mode 100644 index 00000000..ac434c66 --- /dev/null +++ b/docs/ui-modernisation/CROSS_APP_LOCALISATION.md @@ -0,0 +1,15 @@ +# IM10 initial localisation and preservation checkpoint + +3 November 2026. Owner approved **"Approve IM09 and A3-IM10"**. Base `7a9de940dfdc41023f87a1ef38a5fd86a0b8e477` is published/remotely verified. This bounded checkpoint advances IM10; it does not complete cross-application or roadmap acceptance. + +The reviewed attachment-size patch `1ce93ca0e3a906673e636e56f1b910756ca78bb2` was narrowly cherry-picked as `31ce70271663a5d57c7b2eb8f80cd69be5cc95ef`. Git reconciled the newer ApplicationAssets/test changes without conflict; the older branch tree was not merged. Fresh affected tests on this baseline: **63 PASSED**, zero failed/skipped, two suites. Original `docs/i18n/ATTACHMENT_SIZE_*` records bind the old isolated source and61-case run; they remain historical, not fresh integration evidence. Current source/evidence binding is the cross-app manifest. + +Whole-document AI review displayed the internal `headline` ID when no title was supplied. It now falls back to the existing translated headline-override label. Supplied/original titles and unknown IDs keep existing behavior. A new regression failed before the fix and passes afterward: switching UI language changes only chrome, retaining the reviewed English proposal without another generation or apply. Full studio successor: **61 PASSED**, zero failed/skipped; existing direct-focus React act warnings remain. Total fresh unit coverage for this checkpoint is124 distinct cases/three suites, not the old61+new63+61 combined. + +The existing AI/settings browser verifier was reused in an affected-review mode, with a separate output directory. **16 controlled journeys/16 axe scans** passed at320/390/768/1440, EN/NB and light/dark. Caption asserted, English output language retained under Norwegian UI, explicit review shown with zero mutations and16 synthetic proposal responses. No live model, semantic translation-quality, backend end-to-end, provider or physical-PDF claim. Original IM08 captures/manifests are not overwritten by this run. Native artifacts: `evidence/cross-app/browser-ai-review/REVIEW.json` and16 captures. + +The TypeScript AST census confirms all34 inherited route patterns are registered. The complete57-group preservation register has the same LF-normalised hash as integration `d3d338376444b8abdcaf7200f682faa3daf1ad10`. Source statuses/required closures remain unchanged:56 PARTIAL/one DEFERRED. This is source membership and criteria preservation, not browser/auth/deployed or whole-capability acceptance. The approved design's frozen237c79b8 coverage pack was read for the full route/group map; no new design exploration or production-UI approval was inferred. + +Typecheck, full lint, scoped verifier lint and static-export build PASSED. AST-only graph refreshed locally; optional SQL/symbol-less limits remain. Independent source/verifier/integration review found no actionable issues. Backend and physical-renderer sources are unchanged; no repeat backend/PDF run was justified for these display changes. Rollback reverts the caption patch and narrow attachment localisation integration; no database rollback. + +Remaining authorised work: secondary-route connected/responsive/accessibility checks and an evidence-by-group reconciliation across the accepted A3 increments; combined affected regression and final A3 proposal. Native/human/provider, full European localisation, Phase10, Global Jobs dependencies, public homepage, final integrated security/recovery/hosted CI/release gates remain separate. Mounted AI entitlement refresh and granular Ghosted pause remain OPEN. Do not dispatch the general auth-changed event as a shortcut: it resets authResolved and can unmount drafts. No main merge, deployment, orchestrator or pre-P10 changes. diff --git a/docs/ui-modernisation/UI-10.md b/docs/ui-modernisation/UI-10.md new file mode 100644 index 00000000..c88e4d54 --- /dev/null +++ b/docs/ui-modernisation/UI-10.md @@ -0,0 +1,14 @@ +# A3-IM10 Cross-application qualification + +3 November 2026. Owner explicitly approved **"Approve IM09 and A3-IM10"**. Isolated `codex/a3-ui-10` starts at published/remotely verified receipt `7a9de940dfdc41023f87a1ef38a5fd86a0b8e477`, from implementation `773c943165669bfc97bee46c53f73f124f398c0c`. Earlier A3 milestones are accepted; do not rerun their unaffected evidence or ask again. + +- [x] Reconcile baseline and narrowly inspect attachment-size localisation1ce93ca0; cherry-picked only its reviewed delta as31ce70271663a5d57c7b2eb8f80cd69be5cc95ef. No wholesale merge of its older application tree. Fresh63 affected tests passed on this newer baseline; original61-case evidence remains historical. +- [ ] Correct remaining bounded presentation/localisation issues, including technical headline ID in whole-document AI review. Preserve UI vs output language and unchanged proposals during UI-language changes. +- [ ] Reconcile all57 preservation groups and34 inherited routes against current source and accepted evidence; keep PARTIAL/DEFERRED/native/provider qualification honest. +- [ ] Connected EN/NB, themes, phone/tablet/desktop, secondary-route/keyboard/accessibility coverage and combined affected regression. Reuse unchanged accepted evidence, qualify concrete affected changes. +- [ ] Types/lint/build, source/evidence identities, independent review, local commits, phase-branch publication and remote readback. +- [ ] Consolidated A3 acceptance proposal and remaining owner/technical gates. Final integrated security/recovery/release remain separate. + +OPEN: granular per-user Ghosted pause lacks a persisted rules contract. Mounted AI entitlement refresh requires investigation that preserves current server authority and form lifetimes; blindly dispatching auth-changed resets authResolved and can unmount drafts. No inferred client-side entitlement grant or weakened auth guard is authorised as a shortcut. Native-language/human/device, real provider/model and hosted/production checks remain separate. The autonomous backlog orchestrator stays paused and untouched. + +Initial bounded qualification: headline review caption fixed using the existing EN/NB label; fresh61 studio cases passed, including language-switch preservation. Combined with63 assets/attachments cases,124 distinct cases/three suites.16 controlled AI-review configurations/scans passed with zero writes and synthetic proposals only. Source census passed:57 unchanged preservation groups/34 registered route patterns; historical statuses not promoted. Independent review found no actionable issues. See CROSS_APP_LOCALISATION.md. Broader secondary-route/browser/combined qualification remains OPEN; this is not complete IM10 or a new acceptance request. diff --git a/docs/ui-modernisation/evidence/cross-app/CHECKS.json b/docs/ui-modernisation/evidence/cross-app/CHECKS.json new file mode 100644 index 00000000..7f5c5595 --- /dev/null +++ b/docs/ui-modernisation/evidence/cross-app/CHECKS.json @@ -0,0 +1,14 @@ +{ + "date": "2026-11-03", + "branch": "codex/a3-ui-10", + "ownerApproval": "Approve IM09 and A3-IM10", + "base": "7a9de940dfdc41023f87a1ef38a5fd86a0b8e477", + "localisationDelta": { "original": "1ce93ca0e3a906673e636e56f1b910756ca78bb2", "integrated": "31ce70271663a5d57c7b2eb8f80cd69be5cc95ef", "scope": "Narrow cherry-pick, no wholesale older application merge", "freshCases": 63, "original61": "Historical isolated evidence, not fresh integration proof" }, + "frontend": { "status": "PASSED", "distinctCases": 124, "suites": 3, "union": "63 application-assets/attachments +61 CV studio", "focused": "One new caption case overlaps61; red had one expected failure/60filtered NOT RUN", "warnings": "Existing studio direct-focus React act warnings; not warning-free" }, + "browser": { "status": "PASSED", "configurations": 16, "scans": 16, "configuration": "320/390/768/1440 x EN/NB x light/dark", "mutations": 0, "proposals": "16 intercepted synthetic responses", "qualification": "Actual exported app; no backend/live model/semantic translation quality or physical PDF qualification" }, + "sourceCensus": { "status": "PASSED", "groups": 57, "routePatterns": 34, "historicalStatuses": "56 PARTIAL/1 DEFERRED retained", "meaning": "Literal AST source membership and complete original register hash unchanged from d3d33837; not runtime/auth/whole-capability acceptance" }, + "static": { "typecheck": "PASSED", "fullLint": "PASSED", "scopedVerifierLint": "PASSED", "build": "PASSED", "graph": "AST-only update completed locally; optional SQL parser absent and144 files yielded no symbols" }, + "independentReview": "No actionable source/integration/verifier findings; no independent reruns added.", + "notRun": ["New backend or physical PDF run: sources unaffected", "Secondary-route connected browser qualification: still pending", "Native/human/European language qualification", "Real providers/models/hosted CI", "Integrated security/recovery/release/production"], + "remaining": ["Complete IM10 cross-application/secondary-route qualification", "Consolidated acceptance proposal", "AI mounted entitlement refresh and granular Ghosted pause remain open", "Full roadmap workstream gates remain separate"] +} diff --git a/docs/ui-modernisation/evidence/cross-app/PRESERVATION_CENSUS.json b/docs/ui-modernisation/evidence/cross-app/PRESERVATION_CENSUS.json new file mode 100644 index 00000000..2bc82b7e --- /dev/null +++ b/docs/ui-modernisation/evidence/cross-app/PRESERVATION_CENSUS.json @@ -0,0 +1,915 @@ +{ + "base": "d3d338376444b8abdcaf7200f682faa3daf1ad10", + "policy": "Source membership and unchanged criteria only; no acceptance promotion.", + "sourceSha256": "a176e52d81c4b6ded63c5f38cb27e853aa09312f2cc45fc7e5b5e44573e0fef3", + "registerSha256": "a4c2a5a0244ea89381008218de32daee1f615a250eb3808b60e0ee103c674d4d", + "groups": [ + { + "id": "PRES-E01", + "currentStatus": "PARTIAL", + "requiredClosure": "Public-page complete mobile/keyboard review and actual billing availability; no invented prices", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 0, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-E02", + "currentStatus": "PARTIAL", + "requiredClosure": "Real mail/reset submit/Turnstile and token expiry/used-token cases; query loss is repaired for its tested scope", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 1, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-E03", + "currentStatus": "PARTIAL", + "requiredClosure": "Actual consent/popups/revoked grants/relink; mailbox grants remain separate from sign-in", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 2, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-E04", + "currentStatus": "PARTIAL", + "requiredClosure": "Real authenticator/recovery and reader/trusted-device traversal; sensitive confirmations retained", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 3, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-E05", + "currentStatus": "PARTIAL", + "requiredClosure": "Native session-card refresh after remote revocation and complete device/AT acceptance", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 4, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-E06", + "currentStatus": "PARTIAL", + "requiredClosure": "Complete avatar/remove/password/email-change native flow; account identity remains distinct from career facts", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 5, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-E07", + "currentStatus": "PARTIAL", + "requiredClosure": "Spoken names/live state, settled drawer AX-name triage and historical command/dialog timing; no route silently hidden", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 6, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-E08", + "currentStatus": "PARTIAL", + "requiredClosure": "Full OS/locale/state cross-product, contrast/incomplete axe, reader/reflow; save feedback is distinct from server500 root-cause repair", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 7, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-E09", + "currentStatus": "PARTIAL", + "requiredClosure": "Broader BFCache/offline/old-bundle/deployed cases; presentation never becomes authorization", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 8, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J01", + "currentStatus": "PARTIAL", + "requiredClosure": "Live NAV availability/freshness and long-result keyboard/narrow traversal", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 9, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J02", + "currentStatus": "PARTIAL", + "requiredClosure": "Actual scheduler-to-owned-notification delivery, human/mobile delete acceptance and intended-provider qualification; deterministic runner is not live NAV", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 10, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J03", + "currentStatus": "PARTIAL", + "requiredClosure": "Duplicate/company/date/interrupted creation and distinct creation-intent idempotency debt; preview/open is no-write", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 11, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J04", + "currentStatus": "PARTIAL", + "requiredClosure": "Installed extension/share/no-replay and attachment failure recovery; keep payload and safe-return contracts", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 12, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J05", + "currentStatus": "PARTIAL", + "requiredClosure": "Full saved-view CRUD/dirty page-size/history combinations and supported capacity; server query semantics unchanged", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 13, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J06", + "currentStatus": "PARTIAL", + "requiredClosure": "Complete selected-scope/partial-failure/dirty/manual combinations; no hard-delete substitution", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 14, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J07", + "currentStatus": "PARTIAL", + "requiredClosure": "Physical drag/touch/browser variants and O(N) full-array capacity; no capped hidden results or pipeline redefinition", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 15, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J08", + "currentStatus": "PARTIAL", + "requiredClosure": "Scoped in-modal failure proof follows P6 manifest; complete contact/date/source-link and human acceptance remain", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 16, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J09", + "currentStatus": "PARTIAL", + "requiredClosure": "Many-offer mobile/currency/date acceptance; no invented salary normalization", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 17, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-J10", + "currentStatus": "PARTIAL", + "requiredClosure": "Complete native roundtrip and target spreadsheet compatibility; job import is not account restore", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 18, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W01", + "currentStatus": "PARTIAL", + "requiredClosure": "`followMode` metadata retained; compose consumer deferred. P5-05 optional preview lacks production host; full page remains", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 19, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W02", + "currentStatus": "PARTIAL", + "requiredClosure": "Stored-event localisation/timezones/status-reload combinations ; job stale-replacement contract repaired within qualified MariaDB 12.2.2 scope", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 20, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W03", + "currentStatus": "PARTIAL", + "requiredClosure": "Real-model truthfulness/freshness/cancel quality; route entry never auto-generates; unrelated AI survives C11 withholding", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 21, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W04", + "currentStatus": "PARTIAL", + "requiredClosure": "Mobile interruption/edit/delete/reader; item identity and keyboard alternatives retained; no invented due-date schema", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 22, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W05", + "currentStatus": "PARTIAL", + "requiredClosure": "**P2-D01 remains ordinary passing**; broader attach-render/model/deployed combinations remain; owner/job association unchanged", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 23, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W06", + "currentStatus": "PARTIAL", + "requiredClosure": "Complete native history/reject/reader/model combinations; no canonical mutation or auto-send", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 24, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W07", + "currentStatus": "PARTIAL", + "requiredClosure": "Actual production restore/rollback/all-storage combinations; current edits/delete cannot mutate frozen bytes; capture is not delivery", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 25, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W08", + "currentStatus": "PARTIAL", + "requiredClosure": "Physical drop, full rename/download/reader and deployed storage; AI inclusion remains explicit", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 26, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W09", + "currentStatus": "PARTIAL", + "requiredClosure": "Real-model and physical software-keyboard/reload/reader; preparation is not a scheduled interview", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 27, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W10", + "currentStatus": "PARTIAL", + "requiredClosure": "Timezones/provider delivery; `followMode` reviewed compose UI remains deferred, no automatic send", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 28, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W11", + "currentStatus": "PARTIAL", + "requiredClosure": "F21 DST/date-only/offsets, real provider events/scheduler delivery and historical unconfirmed Rules500 cause", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 29, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-W12", + "currentStatus": "PARTIAL", + "requiredClosure": "Disconnect/reconnect and F20 enabled-worker fault recovery; stable operation IDs/no duplicate starts", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 30, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C01", + "currentStatus": "PARTIAL", + "requiredClosure": "Full long-tail mobile/human acceptance; canonical concurrency has bounded SQLite/MariaDB repair proof; singleton source distinct from identified variants", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 31, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C02", + "currentStatus": "PARTIAL", + "requiredClosure": "Complete native historical restore/clipboard/avatar/reader; live inherited CVs may reflect later source changes", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 32, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C03", + "currentStatus": "PARTIAL", + "requiredClosure": "Scanned/OCR corpus and complete low-confidence/discard/native-reader flow; extracted proposal is not canonical truth", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 33, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C04", + "currentStatus": "PARTIAL", + "requiredClosure": "Many-item/delete/keyboard/human acceptance; SQLite compatibility repaired with owner SQL preserved, full frontend/production acceptance remains qualified", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 34, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C05", + "currentStatus": "PARTIAL", + "requiredClosure": "Library migration not complete; publish/unpublish/old-slug revocation and every template combination required", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 35, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C06", + "currentStatus": "PARTIAL", + "requiredClosure": "Physical keyboard/touch/AT and broader short-height/wrapped/deployed cases; one editor/save/preview owner", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 36, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C07", + "currentStatus": "PARTIAL", + "requiredClosure": "Physical selection/drop/all-browser and exhaustive reset/inheritance combinations; sibling/canonical/frozen separation retained", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 37, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C08", + "currentStatus": "PARTIAL", + "requiredClosure": "Production fonts/portraits/wrapped lines/custom color/reader; schematic gallery is not final-photo qualification", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 38, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C09", + "currentStatus": "PARTIAL", + "requiredClosure": "Advanced cross-product/manual print/deployed fonts; UI locale distinct from document locale; no print geometry styling change", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 39, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C10", + "currentStatus": "PARTIAL", + "requiredClosure": "Long offline/history and IF-CV-UNSAVED-01 trace; settings history is not immutable historical profile/PDF; profile/job saves remain separate", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 40, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C11", + "currentStatus": "DEFERRED", + "requiredClosure": "**0/366 configured-target calls;0 human semantic reviews;review UI absent.** Production503 `cv_ai_unavailable`/no provider/no write remains; safe withholding is not generation acceptance", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 41, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-C12", + "currentStatus": "PARTIAL", + "requiredClosure": "Deployed Linux/font/photo/browser/manual-print qualification and complete revoke/busy-recovery cases; white print pages retained", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 42, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-M01", + "currentStatus": "PARTIAL", + "requiredClosure": "Full edit/delete/paste/reader native combinations; logging is not sending", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 43, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-M02", + "currentStatus": "PARTIAL", + "requiredClosure": "Actual provider threads/multi-account revoke/reconnect/sync failures; cross-job changes owner-bound", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 44, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-M03", + "currentStatus": "PARTIAL", + "requiredClosure": "Large mailbox/native attachments/complete reader acceptance; global inbox remains Phase7 migration", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 45, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-M04", + "currentStatus": "PARTIAL", + "requiredClosure": "Sandbox delivery/reconnect/dirty interruption; no automatic uncertain resend; reviewed `followMode` UI deferred", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 46, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-M05", + "currentStatus": "PARTIAL", + "requiredClosure": "Real provider and complete proposed-job create flow; route opening is no-write", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 47, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-M06", + "currentStatus": "PARTIAL", + "requiredClosure": "Real grants/revoke/token expiry/reconnect/IMAP safety; keep sign-in identity separate", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 48, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-S01", + "currentStatus": "PARTIAL", + "requiredClosure": "Exact cohort/timezone/sample/unsupported metrics and whole reader acceptance; no fabricated statistics or Analytics rebuild", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 49, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-S02", + "currentStatus": "PARTIAL", + "requiredClosure": "Historical500 causes unproved; full human/notification acceptance; order/resize/reset/cross-device design remains Phase8", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 50, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-S03", + "currentStatus": "PARTIAL", + "requiredClosure": "Language failure visibility is separate from RD11 server cause; RD12 notification locking/RD13 Rules500 and human/provider acceptance retained", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 51, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-S04", + "currentStatus": "PARTIAL", + "requiredClosure": "Checkout/webhook/portal and provider delivery; temporary C11 withholding cannot disable unrelated AI or imply successful review", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 52, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-S05", + "currentStatus": "PARTIAL", + "requiredClosure": "Current complete backup/restore/keys/tombstones/rollback and deletion/provider policy; downloading backup is not restore proof", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 53, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-A01", + "currentStatus": "PARTIAL", + "requiredClosure": "Mounted-role revoke/full persisted mutations/reset delivery; hiding navigation never authorizes API calls", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 54, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-A02", + "currentStatus": "PARTIAL", + "requiredClosure": "Native successful persisted undo/restore and unsupported-action denial; no generic undo semantics", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 55, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + }, + { + "id": "PRES-A03", + "currentStatus": "PARTIAL", + "requiredClosure": "Actual guarded diagnostic/SMTP/model/maintenance and sensitive-output qualification; no production jobs launched", + "sourceCriterion": { + "path": "docs/redesign/phase-9/preservation.json", + "index": 56, + "originalCriteria": "docs/redesign/phase-2/PRESERVATION_MATRIX.md", + "laterResidual": "docs/redesign/phase-7/PRESERVATION.md" + } + } + ], + "routes": [ + { + "route": "/", + "owners": [ + "Navigate", + "LandingPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/dashboard", + "owners": [ + "DashboardView" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/analytics", + "owners": [ + "AnalyticsPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/discover", + "owners": [ + "JobDiscoveryPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/jobs", + "owners": [ + "JobTable" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/jobs/:id", + "owners": [ + "ApplicationWorkspacePage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/reminders", + "owners": [ + "RemindersView" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/operations", + "owners": [ + "OperationsPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/kanban", + "owners": [ + "LegacyBoardRedirect" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/companies", + "owners": [ + "CompaniesTable" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/offers", + "owners": [ + "OfferComparisonPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/correspondence", + "owners": [ + "CorrespondenceInboxPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/correspondence/review", + "owners": [ + "LegacyCorrespondenceReviewRedirect" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/profile", + "owners": [ + "ProfilePage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/applications/:id", + "owners": [ + "LegacyApplicationRedirect" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/career", + "owners": [ + "CareerWorkspacePage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/career/builder", + "owners": [ + "CvBuilderPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/career/builder/:id", + "owners": [ + "CvBuilderEditor" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/documents", + "owners": [ + "DocumentsPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/admin/audit", + "owners": [ + "AdminAuditPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/admin/users", + "owners": [ + "AdminUsersPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/admin/system", + "owners": [ + "AdminSystemPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/trash", + "owners": [ + "JobTable" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/settings", + "owners": [ + "SettingsView" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/settings/connected-accounts", + "owners": [ + "ConnectedAccountsPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/login", + "owners": [ + "LoginPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/register", + "owners": [ + "LoginPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/forgot-password", + "owners": [ + "ForgotPasswordPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/reset-password", + "owners": [ + "ResetPasswordPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/verify-email", + "owners": [ + "VerifyEmailPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/confirm-email-change", + "owners": [ + "VerifyEmailPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/microsoft-legacy-relink", + "owners": [ + "MicrosoftLegacyRelinkPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/cv/:slug", + "owners": [ + "PublicCvPage" + ], + "requiredClosure": "fresh route membership reconciliation plus affected connected workflow evidence; human checks remain distinct", + "sourceMembership": "PRESENT" + }, + { + "route": "/admin/processing", + "owners": [ + "AdminProcessingPage", + "AdminProcessingController" + ], + "requiredClosure": "Human accessibility/device/native language and integrated acceptance remain separate.", + "sourceMembership": "PRESENT" + } + ], + "limits": [ + "57 historical group statuses and original criteria retained, not promoted.", + "Not browser/auth/provider/native/deployed or whole-capability acceptance. CalendarPage retains the original reminder route and owner internally." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/cross-app/SOURCE_MANIFEST.json b/docs/ui-modernisation/evidence/cross-app/SOURCE_MANIFEST.json new file mode 100644 index 00000000..634fdc89 --- /dev/null +++ b/docs/ui-modernisation/evidence/cross-app/SOURCE_MANIFEST.json @@ -0,0 +1,131 @@ +{ + "base": "7a9de940dfdc41023f87a1ef38a5fd86a0b8e477", + "policy": "LF-normalised text, raw PNG SHA256", + "scope": "Initial bounded IM10 checkpoint only, not final acceptance", + "sources": { + "job-tracker-ui/src/components/Attachments.tsx": "02081be8282cb3d1a525b336bededb8aabe561cc3b73e1b98e924f9ef945add1", + "job-tracker-ui/src/components/ApplicationAssets.tsx": "95465d9a881af97e55ad6f74ff283f81c452c645cc37ff28e7212ea7a32e9d57", + "job-tracker-ui/src/attachments.test.tsx": "89bb3e277ae7be652073eec6d3b6188bcbeaea8b29b07478ff5b21654be8e7c1", + "job-tracker-ui/src/application-assets.test.tsx": "d07f22661d8efbd65dbf4e92aa9722d6159438e6b354ed0c3c4a41c6d55b43ac", + "job-tracker-ui/src/views/CvBuilderEditor.tsx": "34672dabca47ac62d873e8d00842e71e82e668392b27a218b6d5641433200ca0", + "job-tracker-ui/src/cv-builder-deep-link.test.tsx": "75f1e8656be6e57e8ec38438009d59c5b179617b375fcdd01f75638a461ca14f", + "job-tracker-ui/src/cvBuilder.ts": "c021bafeabbc8ad3526d1b10b90ad8f7f0958ded8ed26eac8c1d28b53098b64d", + "job-tracker-ui/src/i18n/I18nProvider.tsx": "d22b5d033d0e405ffb5d581c752d61a24056d1e496f5f6a2f1baecef500f2113", + "job-tracker-ui/src/i18n/translations.ts": "d3167487ec82e302bb26c9269b4a79b03a269b85ed8414b11cf38a9bb8f3d0a7", + "job-tracker-ui/src/App.tsx": "a176e52d81c4b6ded63c5f38cb27e853aa09312f2cc45fc7e5b5e44573e0fef3", + "job-tracker-ui/scripts/verify-a3-ai-settings.mjs": "373a77fd91b8982be497039acc27ae9aa2fd3b21232c1255228d7bfe451cd47b", + "job-tracker-ui/scripts/verify-a3-preservation.mjs": "b0fd604c5ca42185b6985df27f0157ddd07caf1e578d55532b79d3d5eacf84c7", + "job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626", + "job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab", + "docs/pre-phase10-ux/preservation.json": "a4c2a5a0244ea89381008218de32daee1f615a250eb3808b60e0ee103c674d4d", + "docs/ui-modernisation/UI-10.md": "356a6fda1411d7bd98ac06629c65f7aa4d4f81de6a97f8971cc4b0b23302e04a", + "docs/ui-modernisation/CROSS_APP_LOCALISATION.md": "aaa4c0e515629e7836929b22f0401df9de43158f1d1a27db4d8d25be600fa659" + }, + "evidence": { + "browser-ai-review/ai-review-en-dark-1440.png": "7049cc12f57b4796ed2b963f7739e44d684c03587e18c71543a45f8eaa5f7147", + "browser-ai-review/ai-review-en-dark-320.png": "a507bc60317ea10a3efb65656a6cdeae3c6e9a27add74d60eb1c0c8953b3c3c1", + "browser-ai-review/ai-review-en-dark-390.png": "74f232cb0fd7ab17fcc067d0b0c839bfb2b4ded0f8042ee2e2d626ed3fadd1b8", + "browser-ai-review/ai-review-en-dark-768.png": "36d9ca233d913fccfc98032c28b338d53195f1bd26a7ce9a39979252cd18abea", + "browser-ai-review/ai-review-en-light-1440.png": "200eba8c65fe2b82ea77c77ff77494b13b53103c58aa74f0dbc4d2198e190bdf", + "browser-ai-review/ai-review-en-light-320.png": "bdb9a967a5f4fd77c30e6c8a8a869b4f0d914c1a0fa00bb62f5f9abd49b49bb3", + "browser-ai-review/ai-review-en-light-390.png": "a23682d8d49b8f0e921abdc00b33ae885da40294b3fe87b2e93905e8c31fe8d6", + "browser-ai-review/ai-review-en-light-768.png": "26bfd9f664375bdb14d69f7304fc58955fe3ad4f66304c77b80de1b5631f56aa", + "browser-ai-review/ai-review-nb-dark-1440.png": "da58bfdca3a744cabad648f3443280f3fa4e4630598a0771a02b087ad7364902", + "browser-ai-review/ai-review-nb-dark-320.png": "e2daecb27a684092553b6adad3329875c2ba3b4fd6053fb27034423a9c9d89f3", + "browser-ai-review/ai-review-nb-dark-390.png": "32f88f046f6ff78b36448670038cb09f5f8c4bf42aefa85a329f9e9905b5095d", + "browser-ai-review/ai-review-nb-dark-768.png": "8db2b94c961f19c81d578faa820b18abbf5113a755715692d0430dc8e4dfdd7e", + "browser-ai-review/ai-review-nb-light-1440.png": "a37237174378812aaeef368010543287dc3317285f4008108637a6f05fc87637", + "browser-ai-review/ai-review-nb-light-320.png": "f489b8ee922f623665bf4613e1950eed84ea63371b1ab91c357f8f954c5f7c5a", + "browser-ai-review/ai-review-nb-light-390.png": "87b800ec333f11b9c4d259852c73ca9f4ab3715a0c2845a0d42d72e7ba7c35fb", + "browser-ai-review/ai-review-nb-light-768.png": "7deeadc4621ef7f03f71ec79927dae7fb02156cb21fa233298b278fb51b2e5b8", + "browser-ai-review/REVIEW.json": "6337675839aa1d46120b6304f17c222970a85e3895f9a8eb2fa46fee88677696", + "CHECKS.json": "2113dc38ab21551293b4502fe50e939c793c705a63626a4fa35e28d9b47247bb", + "frontend/a3-cross-app-cv-tests.json": "7c0a31af27cfbb78c2455581de338c00c325b67a62684724cc21b28d9fbde970", + "frontend/a3-cross-app-localisation-tests.json": "ff74557cf54632cd535b65de0661ae602fa329e15350625dcaf745e83724e332", + "frontend/a3-cross-app-review-focused.json": "19d8e8e7bc1b9a8ddf6911dea362f182b00dae7afb4fb5f27850bef72cefe1a1", + "frontend/a3-cross-app-review-red.json": "fb4ac8d49c691998d42aba7f57c3b83f98dc23f2fb2ddb18802c80e14f58fe9b", + "PRESERVATION_CENSUS.json": "759297e6578274efc0f0c6cfea67c9e08b7d425efa62d1d7a043b9eb9805808d" + }, + "export": { + "404.html": "b4c33da6d53512a33d317e329653dfa129b158aeb18d1655377a31fbbebd7b58", + "__next.__PAGE__.txt": "51f937e04cc1bc639c851e5e736bdae59ba173018eee670ec42c70ddef1253a6", + "__next._full.txt": "82bffb4dc5832441a8d1451368558e3f4ec4cda2a3bc96072e5efe87a6cac0b5", + "__next._tree.txt": "8170048bddec2d4f65b53f1cf5ab69fc454081429a0ad9325cb57468110e5efa", + "_next/static/bn2MCY_eRqJUjw-m-UfIm/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea", + "_next/static/bn2MCY_eRqJUjw-m-UfIm/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a", + "_next/static/bn2MCY_eRqJUjw-m-UfIm/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00", + "_next/static/chunks/0-_aq6ipzcshj.js": "39f90c215bf52aef6274ed3dcc0f8af32e21a37fe8845b3bca0d6ea60da6a8c2", + "_next/static/chunks/0ah1fzqmie05a.js": "5c65505a7dcbac63ac71d254e619a4c800943bfb4fa16cd40c10cdbe7e9b6e31", + "_next/static/chunks/0bdt7ln111t48.js": "6184b1a61f22e2a640c17941634fdc75678ce93d142848d9f07f163e0d1fd201", + "_next/static/chunks/0bwvt3mysnclc.js": "7705667a1b75812b7833d9c9dff47fe023015e58e382c40f4507d9948c973af4", + "_next/static/chunks/0c-j9v44ea4gk.js": "d7e04926724f76dc50b5202522fab3bb553370d040396394e84c342de466512b", + "_next/static/chunks/0cz1d0mv5g_q7.js": "0973c1d64c88adc8e3c950410cb58b288f72118d5965b78049438deb8f2f9683", + "_next/static/chunks/0gamdsp7ql8cu.js": "f641cd9e2957f5c01234df02211a085f8e8fe2009cf84817e4143f3c477e1dc2", + "_next/static/chunks/0jcvc3qm6-lyk.js": "7c27e1fe373b822adc68c63096a5bf38444ad605b9743f0920271652989c56f1", + "_next/static/chunks/0q1wd_b10phzr.js": "307f4a4ed0f1ef2d87b9de51dbcac2382a39aa8bab359994ee7aa41529215b4e", + "_next/static/chunks/0q20g9o8x-k8z.js": "3d4d9086985419aa8866b032158196c774acb8bf318f3c8245508c8daa9c5148", + "_next/static/chunks/0q_pwu9jxv4-d.js": "42a43b3d7245a413c7c29b4cbe87823037a6dbc637e2e282c92405470e0f575d", + "_next/static/chunks/0yg1x7i96lj87.js": "2aad3c0f9e8b7b5a5123a2a439970c49db0be353236e22f9b6eafaaf01328c15", + "_next/static/chunks/14-lfugawba2w.js": "6a5780ca3c84d7f130f3c0a14431c85c7a1e799e2645b8c171161dab40a64360", + "_next/static/chunks/1435in_k_-dhc.js": "4757476512d5c4dd25f9264a18b304ed4824b23aff1c09e134fcbff21d9c36b6", + "_next/static/chunks/145oicobmjvm7.js": "d6bbbdeed1381652dc7412e5ce673a077579ecd5cee8934cb6b533c814098764", + "_next/static/chunks/14e7ovj0s3elm.js": "070567dd4d23fb9fa0b9ba132185a697af6578045d43b2b1c7bbb2a1594d935d", + "_next/static/chunks/16lfece6cnlln.js": "716363ba044f30b0e70440756b4e5eafa2d25f2e1628e855e3bc4ab9eabee3d3", + "_next/static/chunks/17eiliiibinqq.js": "790c342b1378a793260f9eac0b8c581261d517ee23320bb68995c43f9eaa36c1", + "_next/static/chunks/19zh-dmyml5oj.js": "2ab304f9b4155cdbac4d22e1b0b56b1c1f775c4bbb3ee93c425e297182bf522e", + "_next/static/chunks/1d0xrdyyzw7qc.js": "c11668ff1e152008e0d7b4454af12eb36c97df46a5860938e2eb5d8429b374a8", + "_next/static/chunks/1ke8pzecwofrg.css": "32e9ab963ebadebcbe2c68dffb24cfbfc8cc24255ad91b48b7941fc777bf7439", + "_next/static/chunks/1m4qrvmbq_fq9.js": "4d36c8ec83dc817f273178dc22f329ab026578075f58de68b6f133bcf911a8a1", + "_next/static/chunks/1req80b9jj38r.js": "eee4d2e3789e1215195dba99ad0f09d34f8c83da848322b76054722233e9dae3", + "_next/static/chunks/1wpxvpfa6li_4.js": "025ec0658f9480ccf14dd9be5cb28320ed14f4921c60ac9a2bf844d07bf4171b", + "_next/static/chunks/1xn023_28rgzj.js": "4f7f2108d030a48d039930736c92a55710975dddf419fe673f84d92899b1f575", + "_next/static/chunks/1xwc-b795syag.css": "f73c002233f931ca14d0ae58815c47ca9f2659f25b1547a6d1fdca12a2a00b3f", + "_next/static/chunks/1zi8i6dnxiac_.js": "8aea28bbe6a138e5d4b619429ca71570883a7aee974b86d5a4a746d90f704dbc", + "_next/static/chunks/22wx8--1b9tnq.js": "3f7d8e762371262c6a740b4dac21725b424847319afac46055e97074a99ff5f5", + "_next/static/chunks/2b49wlharl6fd.js": "40619f8a5a03fc7479b0679717b1e5ec0dea0a1944ce77f4ce9d29d2486fdb5c", + "_next/static/chunks/2br3ad_-bc7k9.js": "80fa55f7a32db4d743fda36747c36994fde00a0f53f2eb25b2a6d07c6fb97cd7", + "_next/static/chunks/2dmc6iqxm14fz.js": "3b20898e0cde315c48d6fd46abd562269bbf73c850528a4be2cfc2b9aa0c8f5e", + "_next/static/chunks/2ftgr1rx3r0dw.js": "8866e9ef62ab057bf9923604724edbb463bbdd6dd3fcbf614585f76005874811", + "_next/static/chunks/2ghgf2s9b2iou.js": "23d8ff31e2128d0541c1887785fb75885323fea7c5d4f35826513b75c12c2ae3", + "_next/static/chunks/2itnratrnd9c5.js": "8be0b191c2d54f7233ebf2f1e169b3bfef680fa93da21c08d8c43b05c3ec174f", + "_next/static/chunks/2kpcazmi6n6mk.js": "bea0de681fceff50056bfeccc5d035aff54d20918288051cb64bb259edd250c7", + "_next/static/chunks/2r6jrtuxq0e_x.js": "ac31577d9e5663a8f82645117a15743264054e5098b707c576e4e505398cc672", + "_next/static/chunks/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10", + "_next/static/chunks/2u5qve004opku.js": "be388d9a6aa423082bafb4584c3facc65ddfed71bcfa5c1d06b097b408c5ff97", + "_next/static/chunks/2xkey6z2nw7xp.js": "0f25bf09513b31298148cd262507b20b5a9ca5533317168c16481c544c6ffd6f", + "_next/static/chunks/2z42el0b2mp8_.js": "86ff990ef32c90c4839583e4f1d1bcbddb165dad3141b9fcd2ecec67f4ff24b8", + "_next/static/chunks/2z9e_b61gtc22.js": "b9d717dad26828438d4ff56cabca41a8055f5eaa54420fd0aeb6b4ba7d5baa0d", + "_next/static/chunks/31n24zcvyae0y.js": "110921bad10425af1d689cb939d97be75c7c0af9c35f8b16c5ff237db6fce893", + "_next/static/chunks/324qfub45abd6.js": "77ef8e17b89234fb19a80796d5d04d3e297c459e5cb41b35b5bc78c0b10b4984", + "_next/static/chunks/32_ah983ce851.js": "0c3cd0d2a5ad789e31226a9ea0506c50016804311a58548c7784b7b45aaecd14", + "_next/static/chunks/3329nxgnx3721.js": "ceedc7c69bf0617733b65bbf9f6a682a5d53177d4e8fdb86b8982cda2175f232", + "_next/static/chunks/357yqeklh7414.js": "0192ab7198ebbe299d34a934c504dd4b562d1cccebb6e9d4c5163930c881b14c", + "_next/static/chunks/3721l8sfm8icl.js": "06b67611b3a93515a375b803b54fe7063c049824f1ebf5c7f7db8701b5091e7c", + "_next/static/chunks/3bqn9b34na0b9.js": "f1b8ebcc1b22251c33c9f3a5d11c1f893cad2da2e8744a441e790f7347aa9e73", + "_next/static/chunks/3ckk_j5ril9ag.js": "87f631dae7b648d32171e9e05a3e000753ecb54f8d3b86a4401c0e4ab4d73553", + "_next/static/chunks/3gkylew_qn7cw.js": "7e6c74c81be0c41ab433e36d65b914f62c48f332922e27f7cc953476f4dd78cb", + "_next/static/chunks/3la4obitihzpv.js": "9a5a57b46db389b98f1fd5baa86eba1a360300dae9d1ff3ffeae7bc3378135b9", + "_next/static/chunks/3q4v10rrqy40n.js": "d87ff7b7a0f07d0d92eab3876481eb686a12d9c43d8b92cbe406aefa227a11c1", + "_next/static/chunks/3s4-jswh8gd_0.js": "38f29a1630a295d009178de7353b0138f8664a421ddf7f6adb7d6105ff747a68", + "_next/static/chunks/3u61o8t7m_jza.js": "86231c12e0f8cacc8638bed0bc4b34f645fc35e60de342dc154d3cce0c9a5afa", + "_next/static/chunks/40y_aqqilokr2.js": "1f5a5260316134d6bffe949400752ee6b42addf908ae714ef4ae4ebde916dddd", + "_next/static/chunks/43b5x8qjjh3ax.js": "6ee7261cf9a63e0e6ea181bbb09125e09948588b6e10b5c02727c686a6062a3a", + "_next/static/chunks/turbopack-25fzg9ay_1ss-.js": "c40f39e993a30c96d6247bb3a7b581538bb046efe8ef8ec07bea3ba32291750f", + "_not-found/__next._full.txt": "f9f9ca590aca43147f8296a55055a2d74adb084b15b1aa96aeb3824e2611c7e1", + "_not-found/__next._not-found/__PAGE__.txt": "9f06d77af71b3cb0cee6ed97464b8126c0a12d49a562ea4b96454b1854ad5253", + "_not-found/__next._tree.txt": "c24fdf123693e1e12f27fde3e9918c2c41030608b4e7883e133ee0cf268e9ca8", + "_not-found.html": "b4c33da6d53512a33d317e329653dfa129b158aeb18d1655377a31fbbebd7b58", + "_not-found.txt": "f9f9ca590aca43147f8296a55055a2d74adb084b15b1aa96aeb3824e2611c7e1", + "favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a", + "favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3", + "index.html": "4e4fde1f40864f519f0552becde231b341e1e9637d66c136ba7e367cbafdfdd1", + "index.txt": "82bffb4dc5832441a8d1451368558e3f4ec4cda2a3bc96072e5efe87a6cac0b5", + "logo192.png": "bc652031597fabd19b9f14e22a71f809490d218037521b3b64d013418c1390b4", + "logo512.png": "5129e9bc1ba812b711fd9a646d3a38a906d365a26ee685df183b8752458944d4", + "manifest.json": "2667ce63c2e0835b7007239816a5597639321d333da396a78638dfa9e8a7c935", + "mockups/dashboard.svg": "318be3adb1324c26eb30f05572a29528a3e38331c6a604652eef75b54f8c29dc", + "mockups/pipeline.svg": "db2ef41faabeb90e7ce85413e168581686c54535d970fc7d8deda3888a479de4", + "mockups/workspace.svg": "9bbab22349147c7b01d6e18c93c622a6f8aed6dedaf23715189ab54d60e1ddbd", + "robots.txt": "e5ab0d231eeb01b4a982d1c79a6729cac9797ad15a69247e4f28ba6afc149b4c" + } +} diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/REVIEW.json b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/REVIEW.json new file mode 100644 index 00000000..f0114403 --- /dev/null +++ b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/REVIEW.json @@ -0,0 +1,387 @@ +{ + "screens": [ + { + "width": 320, + "language": "en", + "mode": "light", + "state": "ai-review", + "violations": [] + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "state": "ai-review", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "state": "ai-review", + "violations": [] + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "state": "ai-review", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "light", + "state": "ai-review", + "violations": [] + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "state": "ai-review", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "state": "ai-review", + "violations": [] + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "state": "ai-review", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "light", + "state": "ai-review", + "violations": [] + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "state": "ai-review", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "state": "ai-review", + "violations": [] + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "state": "ai-review", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "state": "ai-review", + "violations": [] + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "state": "ai-review", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "state": "ai-review", + "violations": [] + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "state": "ai-review", + "violations": [] + } + ], + "journeys": [ + { + "width": 320, + "language": "en", + "mode": "light", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "light", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "light", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "translatedReviewCaption": "PASS", + "explicitReviewWithoutApply": "PASS", + "uiLanguageDistinctFromOutputLanguage": "PASS" + } + ], + "errors": [], + "unexpectedWrites": [], + "writes": [], + "proposals": [ + { + "width": 320, + "language": "en", + "mode": "light", + "outputLanguage": "en" + }, + { + "width": 320, + "language": "en", + "mode": "dark", + "outputLanguage": "en" + }, + { + "width": 320, + "language": "nb", + "mode": "light", + "outputLanguage": "en" + }, + { + "width": 320, + "language": "nb", + "mode": "dark", + "outputLanguage": "en" + }, + { + "width": 390, + "language": "en", + "mode": "light", + "outputLanguage": "en" + }, + { + "width": 390, + "language": "en", + "mode": "dark", + "outputLanguage": "en" + }, + { + "width": 390, + "language": "nb", + "mode": "light", + "outputLanguage": "en" + }, + { + "width": 390, + "language": "nb", + "mode": "dark", + "outputLanguage": "en" + }, + { + "width": 768, + "language": "en", + "mode": "light", + "outputLanguage": "en" + }, + { + "width": 768, + "language": "en", + "mode": "dark", + "outputLanguage": "en" + }, + { + "width": 768, + "language": "nb", + "mode": "light", + "outputLanguage": "en" + }, + { + "width": 768, + "language": "nb", + "mode": "dark", + "outputLanguage": "en" + }, + { + "width": 1440, + "language": "en", + "mode": "light", + "outputLanguage": "en" + }, + { + "width": 1440, + "language": "en", + "mode": "dark", + "outputLanguage": "en" + }, + { + "width": 1440, + "language": "nb", + "mode": "light", + "outputLanguage": "en" + }, + { + "width": 1440, + "language": "nb", + "mode": "dark", + "outputLanguage": "en" + } + ], + "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": [ + "All API, AI and preview results are synthetic fixtures. No model activation, semantic translation quality, backend end-to-end or physical PDF qualification.", + "No native device, screen reader, provider, integrated security, deployment or release acceptance." + ] +} \ No newline at end of file diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-1440.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-1440.png new file mode 100644 index 00000000..a7462a95 Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-320.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-320.png new file mode 100644 index 00000000..b0903acd Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-390.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-390.png new file mode 100644 index 00000000..b9524912 Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-768.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-768.png new file mode 100644 index 00000000..d70f1988 Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-1440.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-1440.png new file mode 100644 index 00000000..2c46ce19 Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-320.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-320.png new file mode 100644 index 00000000..d93624fc Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-320.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-390.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-390.png new file mode 100644 index 00000000..7fb59534 Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-390.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-768.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-768.png new file mode 100644 index 00000000..07f9d2d2 Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-en-light-768.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-1440.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-1440.png new file mode 100644 index 00000000..731c6376 Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-1440.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-320.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-320.png new file mode 100644 index 00000000..2940c63d Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-320.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-390.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-390.png new file mode 100644 index 00000000..da33d018 Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-390.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-768.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-768.png new file mode 100644 index 00000000..204079fa Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-dark-768.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-1440.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-1440.png new file mode 100644 index 00000000..8325e457 Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-1440.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-320.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-320.png new file mode 100644 index 00000000..6539dc7c Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-320.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-390.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-390.png new file mode 100644 index 00000000..02f403ca Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-390.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-768.png b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-768.png new file mode 100644 index 00000000..d47ff9dd Binary files /dev/null and b/docs/ui-modernisation/evidence/cross-app/browser-ai-review/ai-review-nb-light-768.png differ diff --git a/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-cv-tests.json b/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-cv-tests.json new file mode 100644 index 00000000..7a7dc8bd --- /dev/null +++ b/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-cv-tests.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":1,"numPassedTests":61,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":1,"numTotalTests":61,"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":1793732426281,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":3972,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732431877,"status":"passed","title":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave"},{"ancestorTitles":[],"duration":3268,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a pause between typing bursts leaves a separate undo step","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732435850,"status":"passed","title":"a pause between typing bursts leaves a separate undo step"},{"ancestorTitles":[],"duration":1197,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"tablet width keeps both editing and preview available in the stacked document flow","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732439119,"status":"passed","title":"tablet width keeps both editing and preview available in the stacked document flow"},{"ancestorTitles":[],"duration":4185,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732440316,"status":"passed","title":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo"},{"ancestorTitles":[],"duration":2753,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a revision conflict disables document history without silently writing an undo","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732444501,"status":"passed","title":"a revision conflict disables document history without silently writing an undo"},{"ancestorTitles":[],"duration":3202,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"switching documents hides the previous draft while loading and starts fresh history","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732447255,"status":"passed","title":"switching documents hides the previous draft while loading and starts fresh history"},{"ancestorTitles":[],"duration":1309,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"explicit blank editing excludes master content and includes a profile section only after an Add action","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732450458,"status":"passed","title":"explicit blank editing excludes master content and includes a profile section only after an Add action"},{"ancestorTitles":[],"duration":942,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a blank CV can deliberately add an additional Career Profile section","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732451767,"status":"passed","title":"a blank CV can deliberately add an additional Career Profile section"},{"ancestorTitles":[],"duration":2905,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a historical restore response from the previous document cannot change the newly opened CV","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732452709,"status":"passed","title":"a historical restore response from the previous document cannot change the newly opened CV"},{"ancestorTitles":[],"duration":967,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"content sections follow the editing-region heading without mutating CV settings","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732455615,"status":"passed","title":"content sections follow the editing-region heading without mutating CV settings"},{"ancestorTitles":[],"duration":1652,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings history explains current Career Profile resolution without writing data","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732456582,"status":"passed","title":"settings history explains current Career Profile resolution without writing data"},{"ancestorTitles":[],"duration":4213,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732458234,"status":"passed","title":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable"},{"ancestorTitles":[],"duration":1324,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits during a held PDF response prevent an older document download","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732462448,"status":"passed","title":"edits during a held PDF response prevent an older document download"},{"ancestorTitles":[],"duration":1198,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"moving a section to the first position announces its actual order and focuses its row","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732463773,"status":"passed","title":"moving a section to the first position announces its actual order and focuses its row"},{"ancestorTitles":[],"duration":4529,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"section navigation opens and focuses omitted/custom sections without changing their data","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793732464971,"status":"passed","title":"section navigation opens and focuses omitted/custom sections without changing their data"},{"ancestorTitles":[],"duration":1572,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keyboard move controls retain focus and persist the same section order shown by navigation","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732469500,"status":"passed","title":"keyboard move controls retain focus and persist the same section order shown by navigation"},{"ancestorTitles":[],"duration":1492,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"secondary duplicate action saves the current draft before creating the copy","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732471072,"status":"passed","title":"secondary duplicate action saves the current draft before creating the copy"},{"ancestorTitles":[],"duration":1222,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pane navigation focuses the existing preview without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732472564,"status":"passed","title":"pane navigation focuses the existing preview without changing the pending draft"},{"ancestorTitles":[],"duration":575,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"deep link loads the exact variant named in the route","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732473786,"status":"passed","title":"deep link loads the exact variant named in the route"},{"ancestorTitles":[],"duration":31,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a variant that does not exist shows a safe error instead of an empty editor","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732474361,"status":"passed","title":"a variant that does not exist shows a safe error instead of an empty editor"},{"ancestorTitles":[],"duration":61,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"another user's variant is refused by the server and never rendered","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732474392,"status":"passed","title":"another user's variant is refused by the server and never rendered"},{"ancestorTitles":[],"duration":62,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a denied CV read has localized permission context without a write or retry","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732474454,"status":"passed","title":"a denied CV read has localized permission context without a write or retry"},{"ancestorTitles":[],"duration":798,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a temporary CV opening failure retries reads and restores focus to the editor without saving","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732474517,"status":"passed","title":"a temporary CV opening failure retries reads and restores focus to the editor without saving"},{"ancestorTitles":[],"duration":910,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål history localizes known sources while preserving unknown metadata and versions","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793732475315,"status":"passed","title":"Bokmål history localizes known sources while preserving unknown metadata and versions"},{"ancestorTitles":[],"duration":812,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid names are explained and are not silently autosaved","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732476225,"status":"passed","title":"invalid names are explained and are not silently autosaved"},{"ancestorTitles":[],"duration":1705,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed autosave is visible and can be retried with the latest data","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732477037,"status":"passed","title":"failed autosave is visible and can be retried with the latest data"},{"ancestorTitles":[],"duration":1918,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"session undo and redo restore content edits before autosave","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732478742,"status":"passed","title":"session undo and redo restore content edits before autosave"},{"ancestorTitles":[],"duration":2139,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"queued saves use acknowledged server versions without replacing newer local editing state","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732480660,"status":"passed","title":"queued saves use acknowledged server versions without replacing newer local editing state"},{"ancestorTitles":[],"duration":3554,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"revision conflict retains the draft and blocks later autosaves until explicit reload","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793732482800,"status":"passed","title":"revision conflict retains the draft and blocks later autosaves until explicit reload"},{"ancestorTitles":[],"duration":2659,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits made while a confirmed reload is in flight remain recoverable","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732486354,"status":"passed","title":"edits made while a confirmed reload is in flight remain recoverable"},{"ancestorTitles":[],"duration":2712,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"restoring history uses the current version and never replaces edits made during the request","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732489014,"status":"passed","title":"restoring history uses the current version and never replaces edits made during the request"},{"ancestorTitles":[],"duration":1893,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Content is the primary studio panel and all advanced tabs retain their controls","invocations":1,"location":null,"numPassingAsserts":14,"retryReasons":[],"startAt":1793732491726,"status":"passed","title":"Content is the primary studio panel and all advanced tabs retain their controls"},{"ancestorTitles":[],"duration":2795,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing a template restores its own structure instead of inheriting the previous template layout","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732493619,"status":"passed","title":"choosing a template restores its own structure instead of inheriting the previous template layout"},{"ancestorTitles":[],"duration":2471,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editor sections, design controls and document settings render in Bokmål","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793732496414,"status":"passed","title":"editor sections, design controls and document settings render in Bokmål"},{"ancestorTitles":[],"duration":2843,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"internal navigation warns and can be cancelled before discarding a pending edit","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732498885,"status":"passed","title":"internal navigation warns and can be cancelled before discarding a pending edit"},{"ancestorTitles":[],"duration":13347,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"custom entries can be added, edited, reordered and deleted with confirmation","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793732501728,"status":"passed","title":"custom entries can be added, edited, reordered and deleted with confirmation"},{"ancestorTitles":[],"duration":4632,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793732515075,"status":"passed","title":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV"},{"ancestorTitles":[],"duration":6088,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793732519707,"status":"passed","title":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo"},{"ancestorTitles":[],"duration":4057,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732525795,"status":"passed","title":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save"},{"ancestorTitles":[],"duration":4661,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732529852,"status":"passed","title":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation"},{"ancestorTitles":[],"duration":11171,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile-backed sections expand, reorder, hide and persist variant-only overrides","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732534513,"status":"passed","title":"profile-backed sections expand, reorder, hide and persist variant-only overrides"},{"ancestorTitles":[],"duration":1972,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"focusing a preview retry control keeps its pointer target stationary","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732545684,"status":"passed","title":"focusing a preview retry control keeps its pointer target stationary"},{"ancestorTitles":[],"duration":1797,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"preview failure is visible and retryable without leaving the editor","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732547656,"status":"passed","title":"preview failure is visible and retryable without leaving the editor"},{"ancestorTitles":[],"duration":500,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793732549454,"status":"passed","title":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears"},{"ancestorTitles":[],"duration":1249,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793732549954,"status":"passed","title":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled"},{"ancestorTitles":[],"duration":3640,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793732551203,"status":"passed","title":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document"},{"ancestorTitles":[],"duration":1227,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793732554843,"status":"passed","title":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft"},{"ancestorTitles":[],"duration":1652,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"changing whole-document output language discards the previous-language review without applying it","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793732556070,"status":"passed","title":"changing whole-document output language discards the previous-language review without applying it"},{"ancestorTitles":[],"duration":1694,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"whole-document review labels follow UI language without translating or discarding the proposal","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793732557722,"status":"passed","title":"whole-document review labels follow UI language without translating or discarding the proposal"},{"ancestorTitles":[],"duration":2795,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11 PRES-C07] whole-document AI Apply changes only an explicitly accepted CV override","invocations":1,"location":null,"numPassingAsserts":12,"retryReasons":[],"startAt":1793732559416,"status":"passed","title":"[PRES-C11 PRES-C07] whole-document AI Apply changes only an explicitly accepted CV override"},{"ancestorTitles":[],"duration":2048,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11 PRES-C07] whole-document AI Reject changes only an explicitly accepted CV override","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793732562211,"status":"passed","title":"[PRES-C11 PRES-C07] whole-document AI Reject changes only an explicitly accepted CV override"},{"ancestorTitles":[],"duration":2260,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (invalid JSON) cannot be applied","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793732564259,"status":"passed","title":"[PRES-C11] unsafe whole-document response (invalid JSON) cannot be applied"},{"ancestorTitles":[],"duration":2498,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (missing original ID) cannot be applied","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793732566519,"status":"passed","title":"[PRES-C11] unsafe whole-document response (missing original ID) cannot be applied"},{"ancestorTitles":[],"duration":2724,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (duplicate original ID) cannot be applied","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793732569017,"status":"passed","title":"[PRES-C11] unsafe whole-document response (duplicate original ID) cannot be applied"},{"ancestorTitles":[],"duration":7595,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound document generation saves the pending draft, reviews server Original, and accepted AI remains undoable","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793732571741,"status":"passed","title":"bound document generation saves the pending draft, reviews server Original, and accepted AI remains undoable"},{"ancestorTitles":[],"duration":3593,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a newer draft is flushed before stale proposal acceptance fails without rebasing or changing content","invocations":1,"location":null,"numPassingAsserts":13,"retryReasons":[],"startAt":1793732579336,"status":"passed","title":"a newer draft is flushed before stale proposal acceptance fails without rebasing or changing content"},{"ancestorTitles":[],"duration":4299,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"late document proposals cannot return after tab unmount or a source undo","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732582929,"status":"passed","title":"late document proposals cannot return after tab unmount or a source undo"},{"ancestorTitles":[],"duration":4172,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound section:skills assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732587228,"status":"passed","title":"bound section:skills assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":4903,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound custom:sample assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732591400,"status":"passed","title":"bound custom:sample assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":5404,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound entry:experience:job-1 assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732596303,"status":"passed","title":"bound entry:experience:job-1 assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":3411,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"user edits made during server acceptance are retained instead of overwritten by its late saved response","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793732601707,"status":"passed","title":"user edits made during server acceptance are retained instead of overwritten by its late saved response"}],"endTime":1793732605121,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\cv-builder-deep-link.test.tsx","startTime":1793732427695,"status":"passed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-localisation-tests.json b/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-localisation-tests.json new file mode 100644 index 00000000..48a3dc02 --- /dev/null +++ b/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-localisation-tests.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":2,"numPassedTests":63,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":2,"numTotalTests":63,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793732219998,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":227,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"frozen attachment size follows UI language without changing stored package data","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732226091,"status":"passed","title":"frozen attachment size follows UI language without changing stored package data"},{"ancestorTitles":[],"duration":552,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P7-11 tailoring] generated metadata and known history enums follow locale while evidence, unknown metadata and dirty prose stay verbatim","invocations":1,"location":null,"numPassingAsserts":13,"retryReasons":[],"startAt":1793732226319,"status":"passed","title":"[P7-11 tailoring] generated metadata and known history enums follow locale while evidence, unknown metadata and dirty prose stay verbatim"},{"ancestorTitles":[],"duration":159,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"document package history is read-only and separates captured notes from answers","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793732226871,"status":"passed","title":"document package history is read-only and separates captured notes from answers"},{"ancestorTitles":[],"duration":97,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cv section shows the attached variant and the ones available to attach","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732227030,"status":"passed","title":"cv section shows the attached variant and the ones available to attach"},{"ancestorTitles":[],"duration":229,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"attaching a different variant only re-points the application","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793732227127,"status":"passed","title":"attaching a different variant only re-points the application"},{"ancestorTitles":[],"duration":46,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cv section points at the builder when there are no variants","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793732227357,"status":"passed","title":"cv section points at the builder when there are no variants"},{"ancestorTitles":[],"duration":83,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"tailoring renders suggestions grouped by kind","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732227403,"status":"passed","title":"tailoring renders suggestions grouped by kind"},{"ancestorTitles":[],"duration":75,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"tailoring asks for a career profile when there is none","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793732227486,"status":"passed","title":"tailoring asks for a career profile when there is none"},{"ancestorTitles":[],"duration":124,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"submitted package capture appends an immutable history entry","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732227561,"status":"passed","title":"submitted package capture appends an immutable history entry"},{"ancestorTitles":[],"duration":194,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cover letter loads the current text and its history","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732227685,"status":"passed","title":"cover letter loads the current text and its history"},{"ancestorTitles":[],"duration":459,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editing marks the draft dirty and saving sends the new text","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732227879,"status":"passed","title":"editing marks the draft dirty and saving sends the new text"},{"ancestorTitles":[],"duration":374,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"discarding returns to the saved text","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732228338,"status":"passed","title":"discarding returns to the saved text"},{"ancestorTitles":[],"duration":320,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"restoring an old version calls the restore endpoint","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793732228712,"status":"passed","title":"restoring an old version calls the restore endpoint"},{"ancestorTitles":[],"duration":291,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"an empty cover letter offers the template and an empty history","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732229032,"status":"passed","title":"an empty cover letter offers the template and an empty history"},{"ancestorTitles":[],"duration":315,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"the empty cover-letter template and rich-text controls follow Bokmål UI language","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732229323,"status":"passed","title":"the empty cover-letter template and rich-text controls follow Bokmål UI language"},{"ancestorTitles":[],"duration":491,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI letter results are discarded when the source changes during generation","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732229638,"status":"passed","title":"AI letter results are discarded when the source changes during generation"},{"ancestorTitles":[],"duration":364,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter Improve writing uses the existing reviewed action","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732230129,"status":"passed","title":"letter Improve writing uses the existing reviewed action"},{"ancestorTitles":[],"duration":370,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter Suggest content uses the existing reviewed action","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732230493,"status":"passed","title":"letter Suggest content uses the existing reviewed action"},{"ancestorTitles":[],"duration":463,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter Grammar check uses the existing reviewed action","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732230863,"status":"passed","title":"letter Grammar check uses the existing reviewed action"},{"ancestorTitles":[],"duration":342,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter Shorter uses the existing reviewed action","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732231326,"status":"passed","title":"letter Shorter uses the existing reviewed action"},{"ancestorTitles":[],"duration":382,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cancelling letter generation ignores its late response","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732231668,"status":"passed","title":"cancelling letter generation ignores its late response"},{"ancestorTitles":[],"duration":857,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"AI cover letter suggestions use the linked CV and require explicit apply","invocations":1,"location":null,"numPassingAsserts":7,"retryReasons":[],"startAt":1793732232051,"status":"passed","title":"AI cover letter suggestions use the linked CV and require explicit apply"},{"ancestorTitles":[],"duration":590,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter AI revalidates its recorded source before applying and refuses a cross-tab source conflict","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732232908,"status":"passed","title":"letter AI revalidates its recorded source before applying and refuses a cross-tab source conflict"},{"ancestorTitles":[],"duration":901,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter AI language follows the saved document and updates the same local language draft","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732233498,"status":"passed","title":"letter AI language follows the saved document and updates the same local language draft"},{"ancestorTitles":[],"duration":902,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter AI ignores a late source validation after local edit","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732234400,"status":"passed","title":"letter AI ignores a late source validation after local edit"},{"ancestorTitles":[],"duration":605,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter AI ignores a late source validation after local cancel","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732235302,"status":"passed","title":"letter AI ignores a late source validation after local cancel"},{"ancestorTitles":[],"duration":748,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter AI ignores a late source validation after local job change","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732235907,"status":"passed","title":"letter AI ignores a late source validation after local job change"},{"ancestorTitles":[],"duration":856,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a held letter Save prevents an in-flight AI validation from replacing the submitted snapshot","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732236655,"status":"passed","title":"a held letter Save prevents an in-flight AI validation from replacing the submitted snapshot"},{"ancestorTitles":[],"duration":531,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-W06] rejecting an AI cover letter preserves the saved draft without a write","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793732237511,"status":"passed","title":"[PRES-W06] rejecting an AI cover letter preserves the saved draft without a write"},{"ancestorTitles":[],"duration":64,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a failed load surfaces an error","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793732238042,"status":"passed","title":"a failed load surfaces an error"},{"ancestorTitles":[],"duration":253,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"application answer and recruiter drafts save from the dedicated workspace","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732238106,"status":"passed","title":"application answer and recruiter drafts save from the dedicated workspace"},{"ancestorTitles":[],"duration":309,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"application package drafts can be cleared without deleting ordinary notes","invocations":1,"location":null,"numPassingAsserts":1,"retryReasons":[],"startAt":1793732238359,"status":"passed","title":"application package drafts can be cleared without deleting ordinary notes"},{"ancestorTitles":[],"duration":924,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed cover-letter saving retains editable dirty text and original Save recovery across a live locale change","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793732238668,"status":"passed","title":"failed cover-letter saving retains editable dirty text and original Save recovery across a live locale change"},{"ancestorTitles":[],"duration":412,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed application-answer saving keeps both dirty drafts editable and retries only the original save payload","invocations":1,"location":null,"numPassingAsserts":14,"retryReasons":[],"startAt":1793732239593,"status":"passed","title":"failed application-answer saving keeps both dirty drafts editable and retries only the original save payload"},{"ancestorTitles":[],"duration":333,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed CV attachment leaves the current association and selector available for the original explicit action","invocations":1,"location":null,"numPassingAsserts":10,"retryReasons":[],"startAt":1793732240005,"status":"passed","title":"failed CV attachment leaves the current association and selector available for the original explicit action"},{"ancestorTitles":[],"duration":1195,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"dirty version restore cancels without a write and confirmed held restore appends history exactly once","invocations":1,"location":null,"numPassingAsserts":16,"retryReasons":[],"startAt":1793732240338,"status":"passed","title":"dirty version restore cancels without a write and confirmed held restore appends history exactly once"},{"ancestorTitles":[],"duration":946,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"held letter Save submits one snapshot and prevents an AI Apply from replacing its pending draft","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732241533,"status":"passed","title":"held letter Save submits one snapshot and prevents an AI Apply from replacing its pending draft"},{"ancestorTitles":[],"duration":1132,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"held AI generation locks its controls and preserves captured action attribution after a later action selection","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793732242479,"status":"passed","title":"held AI generation locks its controls and preserves captured action attribution after a later action selection"},{"ancestorTitles":[],"duration":898,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"capture, detail and download failures keep owned frozen history and recover only through their original explicit actions","invocations":1,"location":null,"numPassingAsserts":23,"retryReasons":[],"startAt":1793732243611,"status":"passed","title":"capture, detail and download failures keep owned frozen history and recover only through their original explicit actions"},{"ancestorTitles":[],"duration":990,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"all five asset read owners expose GET-only recovery without false empty history or locale refetch","invocations":1,"location":null,"numPassingAsserts":34,"retryReasons":[],"startAt":1793732244509,"status":"passed","title":"all five asset read owners expose GET-only recovery without false empty history or locale refetch"},{"ancestorTitles":[],"duration":470,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keyed job changes stop a late CV copy from attaching and never reuse another job's saved-copy recovery","invocations":1,"location":null,"numPassingAsserts":19,"retryReasons":[],"startAt":1793732245499,"status":"passed","title":"keyed job changes stop a late CV copy from attaching and never reuse another job's saved-copy recovery"},{"ancestorTitles":[],"duration":546,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keyed job changes keep job B's answer drafts and callbacks independent of job A's late save","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793732245969,"status":"passed","title":"keyed job changes keep job B's answer drafts and callbacks independent of job A's late save"},{"ancestorTitles":[],"duration":351,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a parent refresh cannot attach a newer revision to dirty application drafts","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732246515,"status":"passed","title":"a parent refresh cannot attach a newer revision to dirty application drafts"},{"ancestorTitles":[],"duration":497,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cover-letter rejection (409) retains draft and source revision without a fresh read","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732246867,"status":"passed","title":"cover-letter rejection (409) retains draft and source revision without a fresh read"},{"ancestorTitles":[],"duration":489,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"cover-letter rejection (0) retains draft and source revision without a fresh read","invocations":1,"location":null,"numPassingAsserts":4,"retryReasons":[],"startAt":1793732247364,"status":"passed","title":"cover-letter rejection (0) retains draft and source revision without a fresh read"},{"ancestorTitles":[],"duration":539,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter text preview shows unsaved formatting, hides the inactive narrow pane and never saves on switching","invocations":1,"location":null,"numPassingAsserts":11,"retryReasons":[],"startAt":1793732247854,"status":"passed","title":"letter text preview shows unsaved formatting, hides the inactive narrow pane and never saves on switching"},{"ancestorTitles":[],"duration":375,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter text preview renders unsafe Markdown as inert text","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732248393,"status":"passed","title":"letter text preview renders unsafe Markdown as inert text"},{"ancestorTitles":[],"duration":1324,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter preview retains the draft after cancelled restore and failed save","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732248768,"status":"passed","title":"letter preview retains the draft after cancelled restore and failed save"},{"ancestorTitles":[],"duration":919,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keyed letter job changes discard the old preview and ignore its late save","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732250092,"status":"passed","title":"keyed letter job changes discard the old preview and ignore its late save"},{"ancestorTitles":[],"duration":298,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter workspace at 768px keeps one editor and its preview available without writing","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732251011,"status":"passed","title":"letter workspace at 768px keeps one editor and its preview available without writing"},{"ancestorTitles":[],"duration":292,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter workspace at 1000px keeps one editor and its preview available without writing","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732251309,"status":"passed","title":"letter workspace at 1000px keeps one editor and its preview available without writing"},{"ancestorTitles":[],"duration":351,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter workspace at 1440px keeps one editor and its preview available without writing","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732251601,"status":"passed","title":"letter workspace at 1440px keeps one editor and its preview available without writing"},{"ancestorTitles":[],"duration":567,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter preview controls follow Bokmål without translating or saving the local draft","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732251952,"status":"passed","title":"letter preview controls follow Bokmål without translating or saving the local draft"},{"ancestorTitles":[],"duration":1173,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"document settings are dirty local drafts until explicit Save, and Discard restores saved details","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732252519,"status":"passed","title":"document settings are dirty local drafts until explicit Save, and Discard restores saved details"},{"ancestorTitles":[],"duration":896,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter PDF awaits durable settings and blocks duplicate exports; failed save never exports","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732253692,"status":"passed","title":"letter PDF awaits durable settings and blocks duplicate exports; failed save never exports"},{"ancestorTitles":[],"duration":2828,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"letter document preview ignores stale responses, keeps last good HTML on failure and retries without saving","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793732254588,"status":"passed","title":"letter document preview ignores stale responses, keeps last good HTML on failure and retries without saving"}],"endTime":1793732257418,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\application-assets.test.tsx","startTime":1793732221526,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":157,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"attachment size follows the UI locale (en)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732258833,"status":"passed","title":"attachment size follows the UI locale (en)"},{"ancestorTitles":[],"duration":76,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"attachment size follows the UI locale (nb)","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732258991,"status":"passed","title":"attachment size follows the UI locale (nb)"},{"ancestorTitles":[],"duration":202,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"PDF preview identifies the document in en","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732259068,"status":"passed","title":"PDF preview identifies the document in en"},{"ancestorTitles":[],"duration":156,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"PDF preview identifies the document in nb","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793732259270,"status":"passed","title":"PDF preview identifies the document in nb"},{"ancestorTitles":[],"duration":46,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"attachments empty state renders drag and drop guidance","invocations":1,"location":null,"numPassingAsserts":3,"retryReasons":[],"startAt":1793732259426,"status":"passed","title":"attachments empty state renders drag and drop guidance"},{"ancestorTitles":[],"duration":327,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"attachments metadata controls update purpose and ai usage","invocations":1,"location":null,"numPassingAsserts":9,"retryReasons":[],"startAt":1793732259472,"status":"passed","title":"attachments metadata controls update purpose and ai usage"},{"ancestorTitles":[],"duration":94,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"attachment failures remain explicit and retry restores the real empty state","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793732259799,"status":"passed","title":"attachment failures remain explicit and retry restores the real empty state"}],"endTime":1793732259894,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\attachments.test.tsx","startTime":1793732257431,"status":"passed","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-review-focused.json b/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-review-focused.json new file mode 100644 index 00000000..171af54f --- /dev/null +++ b/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-review-focused.json @@ -0,0 +1 @@ +{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":1,"numPassedTests":1,"numPendingTestSuites":0,"numPendingTests":60,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":1,"numTotalTests":61,"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":1793732377397,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384322,"status":"pending","title":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a pause between typing bursts leaves a separate undo step","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384322,"status":"pending","title":"a pause between typing bursts leaves a separate undo step"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"tablet width keeps both editing and preview available in the stacked document flow","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384322,"status":"pending","title":"tablet width keeps both editing and preview available in the stacked document flow"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384322,"status":"pending","title":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a revision conflict disables document history without silently writing an undo","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"a revision conflict disables document history without silently writing an undo"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"switching documents hides the previous draft while loading and starts fresh history","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"switching documents hides the previous draft while loading and starts fresh history"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"explicit blank editing excludes master content and includes a profile section only after an Add action","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"explicit blank editing excludes master content and includes a profile section only after an Add action"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a blank CV can deliberately add an additional Career Profile section","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"a blank CV can deliberately add an additional Career Profile section"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a historical restore response from the previous document cannot change the newly opened CV","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"a historical restore response from the previous document cannot change the newly opened CV"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"content sections follow the editing-region heading without mutating CV settings","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"content sections follow the editing-region heading without mutating CV settings"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings history explains current Career Profile resolution without writing data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"settings history explains current Career Profile resolution without writing data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits during a held PDF response prevent an older document download","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"edits during a held PDF response prevent an older document download"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"moving a section to the first position announces its actual order and focuses its row","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"moving a section to the first position announces its actual order and focuses its row"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"section navigation opens and focuses omitted/custom sections without changing their data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"section navigation opens and focuses omitted/custom sections without changing their data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keyboard move controls retain focus and persist the same section order shown by navigation","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"keyboard move controls retain focus and persist the same section order shown by navigation"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"secondary duplicate action saves the current draft before creating the copy","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"secondary duplicate action saves the current draft before creating the copy"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pane navigation focuses the existing preview without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"pane navigation focuses the existing preview without changing the pending draft"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"deep link loads the exact variant named in the route","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"deep link loads the exact variant named in the route"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a variant that does not exist shows a safe error instead of an empty editor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"a variant that does not exist shows a safe error instead of an empty editor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"another user's variant is refused by the server and never rendered","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"another user's variant is refused by the server and never rendered"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a denied CV read has localized permission context without a write or retry","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"a denied CV read has localized permission context without a write or retry"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a temporary CV opening failure retries reads and restores focus to the editor without saving","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"a temporary CV opening failure retries reads and restores focus to the editor without saving"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål history localizes known sources while preserving unknown metadata and versions","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"Bokmål history localizes known sources while preserving unknown metadata and versions"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid names are explained and are not silently autosaved","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"invalid names are explained and are not silently autosaved"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed autosave is visible and can be retried with the latest data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"failed autosave is visible and can be retried with the latest data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"session undo and redo restore content edits before autosave","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"session undo and redo restore content edits before autosave"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"queued saves use acknowledged server versions without replacing newer local editing state","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"queued saves use acknowledged server versions without replacing newer local editing state"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"revision conflict retains the draft and blocks later autosaves until explicit reload","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"revision conflict retains the draft and blocks later autosaves until explicit reload"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits made while a confirmed reload is in flight remain recoverable","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"edits made while a confirmed reload is in flight remain recoverable"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"restoring history uses the current version and never replaces edits made during the request","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"restoring history uses the current version and never replaces edits made during the request"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Content is the primary studio panel and all advanced tabs retain their controls","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"Content is the primary studio panel and all advanced tabs retain their controls"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing a template restores its own structure instead of inheriting the previous template layout","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"choosing a template restores its own structure instead of inheriting the previous template layout"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editor sections, design controls and document settings render in Bokmål","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"editor sections, design controls and document settings render in Bokmål"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"internal navigation warns and can be cancelled before discarding a pending edit","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"internal navigation warns and can be cancelled before discarding a pending edit"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"custom entries can be added, edited, reordered and deleted with confirmation","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"custom entries can be added, edited, reordered and deleted with confirmation"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384323,"status":"pending","title":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile-backed sections expand, reorder, hide and persist variant-only overrides","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"profile-backed sections expand, reorder, hide and persist variant-only overrides"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"focusing a preview retry control keeps its pointer target stationary","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"focusing a preview retry control keeps its pointer target stationary"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"preview failure is visible and retryable without leaving the editor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"preview failure is visible and retryable without leaving the editor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"changing whole-document output language discards the previous-language review without applying it","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732384324,"status":"pending","title":"changing whole-document output language discards the previous-language review without applying it"},{"ancestorTitles":[],"duration":2036,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"whole-document review labels follow UI language without translating or discarding the proposal","invocations":1,"location":null,"numPassingAsserts":8,"retryReasons":[],"startAt":1793732384324,"status":"passed","title":"whole-document review labels follow UI language without translating or discarding the proposal"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11 PRES-C07] whole-document AI Apply changes only an explicitly accepted CV override","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386360,"status":"pending","title":"[PRES-C11 PRES-C07] whole-document AI Apply changes only an explicitly accepted CV override"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11 PRES-C07] whole-document AI Reject changes only an explicitly accepted CV override","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386360,"status":"pending","title":"[PRES-C11 PRES-C07] whole-document AI Reject changes only an explicitly accepted CV override"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (invalid JSON) cannot be applied","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386360,"status":"pending","title":"[PRES-C11] unsafe whole-document response (invalid JSON) cannot be applied"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (missing original ID) cannot be applied","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386360,"status":"pending","title":"[PRES-C11] unsafe whole-document response (missing original ID) cannot be applied"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[PRES-C11] unsafe whole-document response (duplicate original ID) cannot be applied","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386361,"status":"pending","title":"[PRES-C11] unsafe whole-document response (duplicate original ID) cannot be applied"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound document generation saves the pending draft, reviews server Original, and accepted AI remains undoable","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386361,"status":"pending","title":"bound document generation saves the pending draft, reviews server Original, and accepted AI remains undoable"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a newer draft is flushed before stale proposal acceptance fails without rebasing or changing content","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386361,"status":"pending","title":"a newer draft is flushed before stale proposal acceptance fails without rebasing or changing content"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"late document proposals cannot return after tab unmount or a source undo","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386361,"status":"pending","title":"late document proposals cannot return after tab unmount or a source undo"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound section:skills assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386361,"status":"pending","title":"bound section:skills assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound custom:sample assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386361,"status":"pending","title":"bound custom:sample assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"bound entry:experience:job-1 assistant sends explicit scope and edited wording to server acceptance","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386361,"status":"pending","title":"bound entry:experience:job-1 assistant sends explicit scope and edited wording to server acceptance"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"user edits made during server acceptance are retained instead of overwritten by its late saved response","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732386361,"status":"pending","title":"user edits made during server acceptance are retained instead of overwritten by its late saved response"}],"endTime":1793732386364,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\cv-builder-deep-link.test.tsx","startTime":1793732379158,"status":"focused","summary":""}],"wasInterrupted":false} diff --git a/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-review-red.json b/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-review-red.json new file mode 100644 index 00000000..b8ca3e6f --- /dev/null +++ b/docs/ui-modernisation/evidence/cross-app/frontend/a3-cross-app-review-red.json @@ -0,0 +1 @@ +{"numFailedTestSuites":1,"numFailedTests":1,"numPassedTestSuites":0,"numPassedTests":0,"numPendingTestSuites":0,"numPendingTests":60,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":1,"numTotalTests":61,"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":1793732346536,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354028,"status":"pending","title":"Strict Mode groups a typing burst into one undo step and preserves redo through autosave"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a pause between typing bursts leaves a separate undo step","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"a pause between typing bursts leaves a separate undo step"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"tablet width keeps both editing and preview available in the stacked document flow","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"tablet width keeps both editing and preview available in the stacked document flow"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"document shortcuts undo and redo renaming, preserve native input undo and discard branched redo"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a revision conflict disables document history without silently writing an undo","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"a revision conflict disables document history without silently writing an undo"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"switching documents hides the previous draft while loading and starts fresh history","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"switching documents hides the previous draft while loading and starts fresh history"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"explicit blank editing excludes master content and includes a profile section only after an Add action","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"explicit blank editing excludes master content and includes a profile section only after an Add action"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a blank CV can deliberately add an additional Career Profile section","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"a blank CV can deliberately add an additional Career Profile section"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a historical restore response from the previous document cannot change the newly opened CV","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"a historical restore response from the previous document cannot change the newly opened CV"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"content sections follow the editing-region heading without mutating CV settings","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"content sections follow the editing-region heading without mutating CV settings"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"settings history explains current Career Profile resolution without writing data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"settings history explains current Career Profile resolution without writing data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"PDF export locks immediately, rejects a newer unsaved draft, and keeps that draft recoverable"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits during a held PDF response prevent an older document download","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"edits during a held PDF response prevent an older document download"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"moving a section to the first position announces its actual order and focuses its row","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"moving a section to the first position announces its actual order and focuses its row"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"section navigation opens and focuses omitted/custom sections without changing their data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"section navigation opens and focuses omitted/custom sections without changing their data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"keyboard move controls retain focus and persist the same section order shown by navigation","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"keyboard move controls retain focus and persist the same section order shown by navigation"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"secondary duplicate action saves the current draft before creating the copy","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"secondary duplicate action saves the current draft before creating the copy"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"pane navigation focuses the existing preview without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"pane navigation focuses the existing preview without changing the pending draft"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"deep link loads the exact variant named in the route","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"deep link loads the exact variant named in the route"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a variant that does not exist shows a safe error instead of an empty editor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"a variant that does not exist shows a safe error instead of an empty editor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"another user's variant is refused by the server and never rendered","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"another user's variant is refused by the server and never rendered"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a denied CV read has localized permission context without a write or retry","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"a denied CV read has localized permission context without a write or retry"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"a temporary CV opening failure retries reads and restores focus to the editor without saving","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"a temporary CV opening failure retries reads and restores focus to the editor without saving"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Bokmål history localizes known sources while preserving unknown metadata and versions","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"Bokmål history localizes known sources while preserving unknown metadata and versions"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"invalid names are explained and are not silently autosaved","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"invalid names are explained and are not silently autosaved"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"failed autosave is visible and can be retried with the latest data","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"failed autosave is visible and can be retried with the latest data"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"session undo and redo restore content edits before autosave","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"session undo and redo restore content edits before autosave"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"queued saves use acknowledged server versions without replacing newer local editing state","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"queued saves use acknowledged server versions without replacing newer local editing state"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"revision conflict retains the draft and blocks later autosaves until explicit reload","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"revision conflict retains the draft and blocks later autosaves until explicit reload"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"edits made while a confirmed reload is in flight remain recoverable","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"edits made while a confirmed reload is in flight remain recoverable"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"restoring history uses the current version and never replaces edits made during the request","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"restoring history uses the current version and never replaces edits made during the request"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"Content is the primary studio panel and all advanced tabs retain their controls","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"Content is the primary studio panel and all advanced tabs retain their controls"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"choosing a template restores its own structure instead of inheriting the previous template layout","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"choosing a template restores its own structure instead of inheriting the previous template layout"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"editor sections, design controls and document settings render in Bokmål","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"editor sections, design controls and document settings render in Bokmål"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"internal navigation warns and can be cancelled before discarding a pending edit","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"internal navigation warns and can be cancelled before discarding a pending edit"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"custom entries can be added, edited, reordered and deleted with confirmation","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"custom entries can be added, edited, reordered and deleted with confirmation"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"[P5-10 PRES-C01 C07] source-backed entry edits identify their scope and save only this CV"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"[P5-10 PRES-C07 C10] resetting one entry field preserves omission, sibling override and order and supports undo"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"[P5-10 PRES-C07 C10 E08] omitted entries remain editable and retain their draft after a failed save"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"[P5-10 PRES-C01 C07] section content reset inherits source without changing omission or presentation"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"profile-backed sections expand, reorder, hide and persist variant-only overrides","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"profile-backed sections expand, reorder, hide and persist variant-only overrides"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"focusing a preview retry control keeps its pointer target stationary","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"focusing a preview retry control keeps its pointer target stationary"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"preview failure is visible and retryable without leaving the editor","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"preview failure is visible and retryable without leaving the editor"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"[P5-11 PRES-C06 E08] automatic fit attaches when the asynchronously loaded preview pane appears"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"[P5-11 PRES-C06 C12] page count is announced only after the renderer has settled"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"[P5-11 PRES-C06 E09] overlapping preview successes and failures cannot replace the newest document"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"[P5-11 PRES-C06 C10 E08] returning from preview focuses the existing editor without changing the pending draft"},{"ancestorTitles":[],"duration":null,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"changing whole-document output language discards the previous-language review without applying it","invocations":1,"location":null,"numPassingAsserts":0,"retryReasons":[],"startAt":1793732354029,"status":"pending","title":"changing whole-document output language discards the previous-language review without applying it"},{"ancestorTitles":[],"duration":1525,"failing":false,"failureDetails":[{"name":"TestingLibraryElementError"}],"failureMessages":["TestingLibraryElementError: Unable to find an element with the text: Headline override. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.\n\nIgnored nodes: comments, script, style\n\u001b[36m
\u001b[39m\n \u001b[0mCompare current wording on the left with the suggestion on the right before applying the complete set.\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCanonical headline\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mReviewed headline\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCompare current wording on the left with the suggestion on the right before applying the complete set.\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mCanonical headline\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m\u001b[39m\n \u001b[0mReviewed headline\u001b[0m\n \u001b[36m
\u001b[39m\n \u001b[36m