feat(settings): complete privacy usage and data recovery presentation

This commit is contained in:
cesnimda
2026-10-20 09:58:46 +02:00
parent 36fc5d54e7
commit 8af9168014
18 changed files with 1757 additions and 74 deletions
+2
View File
@@ -2,6 +2,8 @@
## Continuation — 20 October 2026
Import prerequisite **3028d8172c78d3d86b16d621cbdc418b9b318dc2** was normally pushed and directly verified **07:30:08 UTC**; development remote matched HEAD. Release repairs were merged normally and pushed as **36fc5d54e781dcad077c2064edc5c5adef1d4e24**, directly verified **07:50:40 UTC**, preserving all working-file hashes. Main is separately owner-authorized `cc7977131a4f991578f29d83eec17a242a858fca`, with corrected CI queued and deployment unverified. Remaining [data presentation](p7-09/DATA_PRIVACY_BACKUP.md) has47/6 affected frontend,22backendcontracts, final native9+4+1+ordinaryP2-D01 and types/lint/build PASS; final consumer/hygiene/publication receipt follows. Qualifications remain unchanged.
Company compatibility repair **5addcde1e22e9625d1b39df037a05b24c69c9cde** is pushed, directly verified 07:16:14 UTC. It preserves owner-scoped exact Norwegian names and ASCII case reuse; targeted backend 3, full backend 1057 and native Companies six pass. Separate [import completion](p7-09/IMPORT_COMPATIBILITY.md) has full frontend 837/97, native 25, types/lint/build and final hygiene PASS; its publication receipt follows this commit. Original candidate/RED evidence remains retained.
Latest published presentation: [P7-09 Preferences/Connections](p7-09/PREFERENCES.md), final91/6 frontend, unchanged-backend52, native5+OAuth3+Rules/Settings8+ordinaryP2-D01=17 and type/lint/build PASS onInBPthl1fsnID3NNdgwbI. All18 new PNGs reviewed;54 scans0/284 remain qualified. Source34/earlier31/32 scopes and every RED/failed fixture attempt are [recorded](p7-09/evidence/preferences-results.json). Final staged hygiene PASS; e7dba9a normal push directly verified clean08:50:42UTC; +17/0 derives824/95 and+5 browser331, backend1054 unchanged. Data/privacy/plan/backup and its separate import prerequisite remain pending; main unchanged/productionNO-GO.
+2
View File
@@ -2,6 +2,8 @@
## Import continuation — 20 October 2026
The remaining [privacy/usage/backup presentation](p7-09/DATA_PRIVACY_BACKUP.md) adds S03/S04/S05/J10/E09/W11 evidence without changing any full-group disposition: two-boolean privacy persistence and newer-draft acknowledgement, GET-only independent recovery, disabled billing/deletion capability truth, actual protected ZIP response/download byte identity, session disposal and existing exact confirmation/recent-auth guards. Quick Capture's manual code selection and all eight finite width samples pass. No native deletion/restore/provider/model/billing action is executed. 37 scans have zero violations with 141 incomplete nodes retained. Human/device/output and production requirements remain open.
All 57 groups retain **56 PARTIAL / C11 DEFERRED** and 33 routes. [Import compatibility](p7-09/IMPORT_COMPATIBILITY.md) adds bounded PRES-J10/E09/S03/S04/W11 proof: real export/create round trip, create-field allowlist, whole-file validation, owned graph exclusion, actual account disposal, acknowledged counts and uncertain-write stop, internal-tab retention and preserved Rules saving. Fresh full frontend 837/97, backend 1057 and 25 affected browser cases pass. This does not close S05 backup/restore, full integrated browser acceptance, manual accessibility, production or the remaining P7-09 presentation owners. No route, ownership or document rendering contract changes.
P7-09's [separate sender repair](p7-09/evidence/oauth-results.json) preserves M01/M02/M06/E09 and all57 statuses:39 affected caller cases,3 new local-sender journeys,5 existing Application journeys and ordinary P2-D01 pass. No real provider grant, new permission, route, data or document-output acceptance is claimed. Preferences and data lifecycle remain pending.
+3 -3
View File
@@ -2,9 +2,9 @@
## Current continuation — 20 October 2026
P7-00–08 and P7-09 Preferences/Connections remain implemented CONDITIONAL GO. The [P7-09 import prerequisite](p7-09/IMPORT_COMPATIBILITY.md) now passes full frontend 837/97, full backend 1057, affected native 25 and type/lint/build gates. Its backend prerequisite `5addcde` is pushed and remotely verified; import UI publication follows final hygiene. Browser inventory is 335, with full integrated acceptance still due at P7-12. Privacy/usage/Quick Capture/backup, P7-10 Administration, P7-11 residual UI and P7-12 acceptance remain. The historical sections below retain their as-observed baselines.
P7-00–08 and P7-09 presentation are implemented CONDITIONAL GO. The [P7-09 import prerequisite](p7-09/IMPORT_COMPATIBILITY.md) passes full frontend 837/97, full backend 1057, affected native 25 and type/lint/build gates, published as `3028d81`. [Remaining data presentation](p7-09/DATA_PRIVACY_BACKUP.md) has affected47/6 plus22backendcontracts and final native/type/lint/build evidence, with final consumer/hygiene/publication pending. Derived inventory is855/99frontend,339browser,1057backend; this is not a fresh full integrated suite. P7-10 Administration, P7-11 residual UI and P7-12 acceptance remain. The historical sections below retain their as-observed baselines.
The owner subsequently authorized main promotion despite existing release NO-GOs. Main currently contains `f9bf31c`, while the diagnostic Linux run exposed additional test portability, login-fixture and dialog accessibility failures. Release success is not claimed. P5-13 remains withheld, all 57 preservation qualifications remain binding, and Phase 8 implementation has not started.
The owner subsequently authorized main promotion despite existing release NO-GOs. Main currently contains `cc79771`, including bounded repairs for all five causes found in diagnostic run828. Corrected run831 is queued behind older runs; release success is not claimed. Release repairs are merged and pushed on development as `36fc5d5`, with all unfinished source preserved. P5-13 remains withheld, all 57 preservation qualifications remain binding, and Phase 8 implementation has not started.
**Authorised development execution; production remains NO-GO.** The owner resolved the main/deployment conflict by directing Phase 7 to continue on development while keeping main unchanged. Follow the [original Phase 7 scope](../IMPLEMENTATION_PLAN.md#phase-7--full-migration) and the exact [Phase 6 handoff](../phase-6/p6-05/PHASE7_HANDOFF.md); this record does not replace the approved architecture or introduce another phase plan.
@@ -24,7 +24,7 @@ The entry commit is `b5319981ad3d1bd635daff861453d23c0de5320b` on `codex/ui-rede
| P7-06F | Deferred `followMode` reviewed composer | Optional separately reviewed mail slice; **DEFERRED** until mode→draft/review action and fallback are explicitly decided |
| [P7-07](p7-07/README.md) | Documents owner-scoped index | Implemented CONDITIONAL GO; contract/UI published and directly verified through9dfea12 at21:01:11UTC. Final affected86/8, native8+CV4+ordinaryP2-D01/types/lint/build PASS;18 reviewed PNGs,15axe0/101 qualified. Original32+Documents=33routes; actual MariaDB/human/device/production qualifications remain |
| [P7-08](p7-08/README.md) | Existing notifications and operations | Implemented CONDITIONAL GO and published: UTC9dfea/recent40cfe04/Operationsc5176e3, clean direct refs verified02:03:53UTC. Ops77/7+native12/types/lint/build/14Ops+1P2image reviews PASS;12Opsaxe0/3+14notifaxe0/102 qualified.57groups33routes/F20 preserved |
| [P7-09](p7-09/README.md) | Remaining Settings, Connections and data lifecycle | Sender repair dac2927 published. Preferences/Connections91/6+backend52+native17+gates PASS; all18 new PNGs reviewed; final hygiene PASS, e7dba9a normal push directly verified clean08:50:42UTC. Data/privacy/plan/backup follows with separate import compatibility prerequisite. Rules/save owners and all qualifications retained |
| [P7-09](p7-09/README.md) | Remaining Settings, Connections and data lifecycle | Sender/Preferences published dac2927/e7dba9a; company/import prerequisites published5addcde/3028d81; release repairs merged/pushed36fc5d5 with all WIP preserved. Remaining data presentation implemented CONDITIONAL GO:47/6 affected frontend,22backendcontracts, nativeSettings9/import4/CSV1/P2-D01 +types/lint/build PASS;37axe0violations/141incomplete nodes qualified,six final PNGs inspected. Final consumer/hygiene/publication receipt follows. Inventory855/99frontend,339browser,1057backend; full integrated acceptance remainsP7-12 |
| P7-10 | Admin operational presentation | Existing distinct Users/Audit/System routes and server authorization; planned |
| P7-11 | Remaining Analytics/error/empty/dialog integration | Inventory-confirmed residual presentation only; existing reports remain; planned |
| P7-12 | Integrated full-migration acceptance | Every executed slice pushed with finite evidence; fresh applicable full regression and all debt dispositions; planned |
@@ -0,0 +1,39 @@
# P7-09 — Privacy, usage and backup presentation
**Implemented CONDITIONAL GO; final hygiene and publication pending.** Preferences/Connections and the separate [import prerequisite](IMPORT_COMPATIBILITY.md) are already published. This closes the remaining approved second boundary without enabling billing, deletion, restore, provider grants or P5-13.
## Contracts and confirmed findings
Privacy retains the authenticated `/ai/settings` GET/PUT owner and its exact two-boolean write payload. Availability, effective policy and provider remain server-owned. The previous card had no read recovery, could overwrite newer edits on save acknowledgement, and could report success after unmount or in the previous language. Its new six-case regression recorded five ordinary failures and one pass before repair. An earlier mock-setup failure is retained but is not product RED evidence.
Usage retains independent `/ai/usage` and `/billing/status` GET owners, server values/limits and existing capability-gated checkout/portal endpoints. The previous card lost its heading after a read failure, silently hid billing read errors and formatted numbers in the browser host's locale. Focused RED recorded five failures and two passes. No statistics or entitlements are invented; zero limits remain server values rather than inferred eligibility.
Backup retains readable account ZIP and encrypted backup formats, filenames/content-disposition, recent-auth enforcement and exact server-provided deletion confirmation. An unavailable lifecycle read previously looked disabled. Synchronous competing downloads and late disposal also failed the new four-case regression. No backend/schema, deletion flag or restore behavior changes.
Quick Capture already uses the shared section and an accessible read-only/manual-code alternative to dragging. Preserve its origin, encoded source URL, bookmarklet and click hint. Verify it rather than rebuilding it.
## Changes and finite evidence
Privacy has GET-only Retry, truthful read versus save errors, draft/discard state, submitted-snapshot acknowledgement, synchronous save admission and session/unmount disposal. Current-locale completion feedback uses the existing notification owner. Historical external consent can still be revoked even when new external processing is unavailable. Retry focus has a named landing target; later edits are not discarded or silently saved.
Usage preserves its heading/loading/error shell and independently retries failed reads without replaying writes or resetting the other resource. Numbers and byte units follow the selected English/Bokmål locale; zero storage limits produce finite progress. Checkout/portal admission and late-response guards preserve the existing server redirect contract. They do not activate billing or qualify real billing navigation.
Backup distinguishes loading, unknown/error, explicitly disabled, available and pending states. Downloads and deletion confirmation share synchronous admission; callbacks check the immutable session/lifetime before downloading, notifying or acting on a prompt result. Existing server error/recent-auth feedback remains. Readable export is the primary action; encrypted backup remains a secondary action. The card remains lazy and disposable on its existing Settings tab boundary. A review-found Retry focus loss failed an ordinary additional regression before correction.
Affected frontend **47 cases / six suites PASS** on 20 October 2026: six privacy, ten usage, four backup lifetime, four existing account-data export, two Settings lifetime and 21 existing Settings cases. Backend **22 existing cases PASS** across privacy policy, account export/deletion and billing contracts, using the unchanged Release test binary. These are focused results, not a fresh whole-suite claim. New cases derive frontend inventory **855/99** from the last full **837/97** baseline; four added browser cases derive **339** from 335. Final gate timestamps/export/source identities and exact native results must be appended below before acceptance.
## Preservation and qualifications
The final native Settings suite passes **9/9**, zero skips/retries/flaky outcomes, **07:52:55–07:54:24 UTC**. Four cases are new: actual privacy persistence/isolation/recovery, eight-width privacy/backup/Quick Capture, independent actual Free usage/billing read recovery, and actual protected ZIP byte identity/lifecycle/disposal. It retains all five existing Preferences/Connections cases. Import four, actual CSV consumer one and ordinary P2-D01 one also pass on the final export. Fresh Rules/Settings eight-case consumer completion is recorded in the final results before publication.
There are **37 PNGs and 37 all-enabled axe scans**, zero violations, **141 incomplete nodes**: 37 invisible zero-count badge text checks, 99 overlapping-background contrast checks, and five closing MUI menu portal focus checks. Raw rule/node contexts are retained without exclusions. The latter portals are marked `aria-hidden` while the closing option remains mounted; native section selection restores focus, but settled tabbing and human AT acceptance remain qualified. Fixed chrome/snackbar and scrolled control overlap prevents automated background determination; contextual contrast/manual obligations remain. No incomplete is relabelled a passing contrast or reader check.
Six final PNGs were actually inspected: 320px Bokmål dark Backup and dirty Privacy, 768px Bokmål light Privacy, 390px English light usage recovery and real export, and 1440px English light Privacy. Other images are retained automated evidence. The added geometry checks initially identified MUI Switch's intentionally transparent 300%-wide input; only unpainted opacity-zero input proxies are excluded from painted-control bounds. Their visible labels/controls, root overflow and all-enabled axe checks remain tested. This is fixture triage, not a product overflow fix or accessibility exclusion.
The [portable final results](evidence/data-privacy-backup-results.json) record exact commands, result hashes, final export identity, during-run source observation and matching post-run identities. The observation is explicitly not represented as preceding command start. Earlier candidates, ordinary REDs, setup failures and their builds remain historical evidence.
Final export **`TUs6Z9wfC6aEYGOeW_UZ-`** passes app/browser TypeScript, lint and build plus **23/23 native cases**, zero skips/retries/flaky outcomes: Settings nine, import four, CSV one, ordinary P2-D01 one and fresh Rules/Settings consumers eight. The consumer lane completed **07:57:22 UTC**. This supersedes the pending-consumer observations above. All nine observed source identities still match after the runs. Final hygiene and publication are recorded in the ledger; no whole-suite, deployed or human acceptance is inferred from these gates.
All 57 preservation groups remain **56 PARTIAL / C11 DEFERRED**, with 33 routes. S03/S04/S05/J10/E09/W11 receive bounded presentation, lifecycle and persistence evidence. Existing Rules ownership, language/local preferences, notification delivery and provider controls remain separate. Backend ownership, actual deletion availability and recent-auth checks are not replaced by UI state.
Account deletion is not executed in native tests. Unit tests exercise its existing exact-phrase and disposal guards with mocks. A downloaded ZIP is not backup/restore proof. Real billing/provider/SMTP/model/deletion/restore operations, human screen-reader, physical touch/software keyboard, actual browser zoom, production fonts/photos/print and all retained reliability/production debts remain unverified. P5-13 stays withheld, followMode stays deferred, Phase 8 implementation has not started. Production readiness remains NO-GO despite the owner's separate authorization to deploy the existing release.
@@ -0,0 +1,42 @@
# Owner-authorized main promotion — 2026-10-17
**The owner authorized one main promotion despite the recorded NO-GO qualifications. Deployment has been triggered; live deployment is not yet verified.** This authorization does not convert technical release readiness into GO.
The owner first requested a push to main, then explicitly accepted the outstanding NO-GOs/pending items and asked for the completed work to go live. This later decision supersedes the earlier instruction to keep main unchanged for this one promotion. The authorization and exact command are retained in the [portable receipt](evidence/owner-authorized-release.json), with hashed original observations.
## Promoted revision and boundaries
The root agent pushed only the latest completed, already published development commit, **`e7dba9a2f776c55e3c4f4df7ef59076f93fa92df`** (`feat(settings): preserve drafts and connection recovery`), to `refs/heads/main`. The normal push ran **2026-10-17 13:54:33.243078–13:54:35.214338 UTC** and exited 0.
Direct verification at **13:54:35.567674 UTC** recorded local/origin/live main and development HEAD/live development at that revision. Main previously referenced `27657f31131cd95d42f0e1290853ec9c9b3959a4`. Historical statements that main remained at that earlier revision are valid for their recorded observation times; the standing main revision after this promotion is e7dba9a.
The pending import compatibility repair, General lifetime foundation, backend company-create prerequisite, associated tests and unfinished documentation were **excluded**. The recorded working-tree path lists match before and after the push; remote revision equality does not mean the worktree was clean. No unfinished change was committed or included merely to deploy it.
## Deployment observation
Read-only Gitea API observations identify [run 820, number 401](https://git.cesnimda.uk/cesnimda/jobtrackingapp/actions/runs/820), triggered by a main push for the exact e7dba9a revision.
| Observation UTC | Recorded state |
|---|---|
| `13:55:16.507277` | Run 820 `in_progress`, conclusion absent. |
| `13:56:07.968311` | Run still `in_progress`; test job 1699 `in_progress`; deploy job 1700 `waiting`; neither has a conclusion. |
These observations prove the trigger and workflow identity. They do not prove successful deployment, deployed runtime identity, authenticated smoke behavior or production health. The root agent will append the eventual CI/deployment outcome when supported by evidence. This report performs no additional push or deployment action.
## Qualifications remain
The [debt register](../DEBT.md) and [preservation matrix](../PRESERVATION.md) remain authoritative. Production ingress/topology, complete backup/restore, effective schema/configuration, tested rollback, deployed revision/smoke/monitoring and applicable human/device/provider/output qualifications remain open. P5-13 stays withheld; Phase 8 has not started. P7-09's remaining data/privacy/plan/backup work is still pending.
**Technical production readiness: NO-GO qualifications retained. Owner-authorized promotion: pushed. Deployment/live verification: pending.** This was a one-time override for e7dba9a, not authorization to promote later development commits automatically or to mark outstanding requirements complete. Further main promotion needs separate owner authorization and an explicit evidence-based release decision.
## Authorized repair continuation — 20 October 2026
The owner subsequently reported the failed deployment, supplied runner SSH access and explicitly instructed continued investigation and pushes to main. This authorizes coherent release repairs; it does not automatically promote unfinished Phase 7 work or close release qualifications. The specific dev-only braces advisory exception through 31 October 2026 was separately owner-approved. It does not cover other advisories or production dependencies.
Main now references **`cc7977131a4f991578f29d83eec17a242a858fca`**, directly verified against the remote. The chronological repair chain is dependency/audit policy `2278473`, visible browser diagnostics `32bc65c`, approved-route census `f9bf31c`, portable Python fixtures `e5aba4c`, confirmation keyboard scroll `985c719`, shared login-fixture capacity `9234d0a`, and exact notification-caption locator `cc79771`. Each repair has its own infrastructure record, focused verification and normal push. No force push or production database operation was used.
Diagnostic [run 828](https://git.cesnimda.uk/cesnimda/jobtrackingapp/actions/runs/828) passed backend 1054, frontend 824/95 and sidecar 49, then failed its browser lane with **274 passed / 57 failed**. All 57 cases are accounted for: 35 shared-fixture login 429, 15 missing local wrapper in Linux seed fixtures, four nonexact caption queries matching a live announcement, two stale route assertions and one actual scrollable confirmation keyboard barrier. The corresponding targeted fixes preserve assertions, ownership, rate-limit contracts and accessibility checks. Its complete 2,143-entry browser artifact was downloaded and ZIP CRC-checked, SHA256 `e9059617eb3a784de94695b0497227fd1f5f5f1ad10c1e40c9b6019c288c0847`.
The corrected [run 831](https://git.cesnimda.uk/cesnimda/jobtrackingapp/actions/runs/831) is queued behind older runs as of 07:47 UTC. Existing Git-token authentication cannot cancel web-only queued runs through a supported API; no sessions or server records were forged or altered. Deployment, deployed source identity and live smoke remain **unverified**. The last verified healthy live source remains the older `7d641ed` revision. The separately downloaded Qwen 3.5 candidate has not been activated; P5-13 remains withheld.
Development independently published company repair `5addcde` and import prerequisite `3028d81`; neither was silently included in the release. The normal development merge **`36fc5d54e781dcad077c2064edc5c5adef1d4e24`**, pushed and directly verified **07:50:40 UTC**, incorporates the release repairs while preserving every intervening working-file hash. Privacy/usage/backup changes remain a separate unfinished boundary at this observation. Technical production readiness remains NO-GO under the existing operator/manual gates despite explicit owner authorization to deploy the release.
+7 -1
View File
@@ -35,4 +35,10 @@ The [separate sender repair](OAUTH_SENDER.md) is published asdac2927, directly v
The [import compatibility boundary](IMPORT_COMPATIBILITY.md) is implemented **CONDITIONAL GO**: fresh full frontend 837/97, full backend 1057, native 25 and type/lint/build gates pass; 11 all-enabled scans have zero violations with contextual incompletes retained. The independent company contract repair is published as `5addcde1e22e9625d1b39df037a05b24c69c9cde`, remote verified 07:16:14 UTC. Import's 13 new frontend cases/two suites and four browser cases derive inventory 837/97 and 335 respectively. These do not claim a complete 335-case browser acceptance.
**P7-09 acceptance: PENDING.** Privacy, usage/plan presentation, Quick Capture and backup/data lifecycle remain next within the approved second boundary. Each needs meaningful regression, applicable native/visual evidence, preservation reconciliation, hygiene, commit and normal push/direct verification. Main was separately owner-authorized for deployment despite retained NO-GO qualifications; current release CI is being repaired, with no deployment success claimed.
## Remaining data presentation completion — 20 October 2026
[Privacy, usage and backup](DATA_PRIVACY_BACKUP.md) now have 47 affected frontend cases/six suites, 22 existing backend contracts, final native Settings nine, import four, CSV one and ordinary P2-D01 one PASS. Types/lint/build pass; fresh Rules/Settings eight-case consumer completion and final hygiene/publication are recorded before exit. Quick Capture's manual code remains accessible and is verified rather than rebuilt. The 37 final axe scans report zero violations and 141 contextually triaged incomplete nodes; six actual final PNGs were inspected. Inventory becomes frontend **855/99**, browser **339**, backend **1057**; fresh whole integrated acceptance remains P7-12.
Final Rules/Settings consumer eight PASS at **07:57:22 UTC**, bringing the final export's focused native total to **23/23**, zero skipped/flaky/retries. Export `TUs6Z9wfC6aEYGOeW_UZ-` and all observed source identities match the [final portable evidence](evidence/data-privacy-backup-results.json).
**P7-09 implemented acceptance: CONDITIONAL GO, publication pending.** The two approved presentation boundaries and independent sender/import/company repairs are complete within their bounded scope. All 57-group/manual/provider/output/reliability/production qualifications remain. P5-13 is withheld and followMode deferred. [Owner-authorized release continuation](OWNER_AUTHORIZED_RELEASE.md) is separate; current main `cc79771` has a queued corrected release run, with no deployment success claimed. P7-10 Users, Audit and System follows in three separate commits after publication.
@@ -0,0 +1,851 @@
{
"observedUtc": "2026-10-20T07:57:41.951973+00:00",
"sourceObservation": {
"observedUtc": "2026-10-20T07:51:59.477231+00:00",
"scope": "Captured during validation command, before browser lane; not before command start",
"sources": {
"src/components/AiPrivacySettingsCard.tsx": "7534422effa4b8720e27ee34e3ff1c9fb5c74e6d5d6db3fe3810028aff7d1e7e",
"src/components/AiUsageCard.tsx": "0592eea7ea9c43f72a9685e03a2e9911f96dc760e8d60ba17ac754956f9d700e",
"src/components/BackupCard.tsx": "b356961a48d35a4631f145f3b34cf7997bba20f4a1d2bb25508b2305e7e7b111",
"src/components/QuickCaptureCard.tsx": "0b0da2d773a7323a3341f082a803e6cd3cef8079d7c2101100b706b64c305bbb",
"src/i18n/translations.ts": "62094ca66c7da22670d2a886430d838059e8c9f8a8f45fdf0236566dbbc3116a",
"src/ai-privacy-settings.test.tsx": "a53eda1c305cc9e3ab16a4f52603a8cb6d881aa58e88a22e112eb33103c5a404",
"src/ai-usage-card.test.tsx": "922d3c18cce51df0ed0ba89bf1dd383bc8611f2323fbcb51677c3562808a87a9",
"src/backup-lifetime.test.tsx": "e67d22d13a5edaedc29d57e3afc36614cdf4844d510d1ecd661d5254d39e2ca3",
"e2e/phase7-settings-preferences.spec.ts": "6269a229d0caecc5b248490bfd7e1c820220494c278f204cca3085db2096f9cc"
}
},
"allObservedSourcesStillMatch": true,
"buildId": "TUs6Z9wfC6aEYGOeW_UZ-",
"gates": {
"typecheck": {
"commandReport": ".artifacts/phase7/current/ui/typecheck-command.json",
"commandReportSha256": "cba98f83767f45cf39eedafd58267565a61b694316880b020d813e0cd82ab3f6",
"name": "typecheck",
"command": [
"rtk",
"proxy",
"npm.cmd",
"run",
"typecheck"
],
"startedUtc": "2026-10-20T07:51:49.264976+00:00",
"finishedUtc": "2026-10-20T07:52:03.819879+00:00",
"exitCode": 0
},
"browser-typecheck": {
"commandReport": ".artifacts/phase7/current/ui/browser-typecheck-command.json",
"commandReportSha256": "63f0ed813c9aa30f3b5a70fe8d39c463e5cdd8a39231807b021be16f3bd6e2d6",
"name": "browser-typecheck",
"command": [
"rtk",
"proxy",
"npm.cmd",
"exec",
"tsc",
"--",
"--project",
"../.artifacts/phase7/e2e-tsconfig.json",
"--noEmit"
],
"startedUtc": "2026-10-20T07:52:03.822905+00:00",
"finishedUtc": "2026-10-20T07:52:11.243170+00:00",
"exitCode": 0
},
"lint": {
"commandReport": ".artifacts/phase7/current/ui/lint-command.json",
"commandReportSha256": "d8355db8535887672d6a9c9ac1bf03dd7e7500ba92f0ea20f8f1a358816f9558",
"name": "lint",
"command": [
"rtk",
"proxy",
"npm.cmd",
"run",
"lint"
],
"startedUtc": "2026-10-20T07:52:11.245684+00:00",
"finishedUtc": "2026-10-20T07:52:39.638127+00:00",
"exitCode": 0
},
"build": {
"commandReport": ".artifacts/phase7/current/ui/build-command.json",
"commandReportSha256": "82e051d76a20c7b0703dae5a4ae9d131d373eb6dd24e3e3cd5c5bb193216717e",
"name": "build",
"command": [
"rtk",
"proxy",
"npm.cmd",
"run",
"build"
],
"startedUtc": "2026-10-20T07:52:39.641167+00:00",
"finishedUtc": "2026-10-20T07:52:54.735129+00:00",
"exitCode": 0
},
"settings-preferences": {
"commandReport": ".artifacts/phase7/current/ui/settings-preferences-command.json",
"commandReportSha256": "4903b52856e3b86b0e53660d9b54de0b8d90280a304f497084be93e29853950d",
"name": "settings-preferences",
"command": [
"rtk",
"proxy",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"e2e/phase7-settings-preferences.spec.ts",
"--retries=0",
"--reporter=list,json",
"--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\settings-preferences-results"
],
"startedUtc": "2026-10-20T07:52:54.742749+00:00",
"finishedUtc": "2026-10-20T07:54:24.305964+00:00",
"exitCode": 0,
"stats": {
"startTime": "2026-10-20T07:52:55.385Z",
"duration": 88851.89600000001,
"expected": 9,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"resultSha256": "a0e30d00df58f5465b95cfefca3cd8e82802beec9bc895f1217c0760ab72d614"
},
"job-import": {
"commandReport": ".artifacts/phase7/current/ui/job-import-command.json",
"commandReportSha256": "f706aee3a938f2e3fc8aaba38be945e6f7c78d64453b850b4966bd3c9bd5f68d",
"name": "job-import",
"command": [
"rtk",
"proxy",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"e2e/phase7-job-import.spec.ts",
"--retries=0",
"--reporter=list,json",
"--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\job-import-results"
],
"startedUtc": "2026-10-20T07:54:24.313711+00:00",
"finishedUtc": "2026-10-20T07:54:59.006743+00:00",
"exitCode": 0,
"stats": {
"startTime": "2026-10-20T07:54:24.872Z",
"duration": 34086.384000000005,
"expected": 4,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"resultSha256": "732de69d2276c76608f535fd86d31f21e229d0be0ba27cc061d9c1cfbabbafe6"
},
"job-import-consumers": {
"commandReport": ".artifacts/phase7/current/ui/job-import-consumers-command.json",
"commandReportSha256": "a169eafb28425afccd9c9861ec52417f608ee3a27e7fd2b7bc06f663df7ed7d0",
"name": "job-import-consumers",
"command": [
"rtk",
"proxy",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"e2e/csv-export.spec.ts",
"--retries=0",
"--reporter=list,json",
"--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\job-import-consumers-results"
],
"startedUtc": "2026-10-20T07:54:59.013133+00:00",
"finishedUtc": "2026-10-20T07:55:12.280125+00:00",
"exitCode": 0,
"stats": {
"startTime": "2026-10-20T07:54:59.656Z",
"duration": 12588.025,
"expected": 1,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"resultSha256": "f16ea2fc807bcdd05e755c7dedf9f633865017c4eca62eda40361c54fd90c093"
},
"application-p2d01": {
"commandReport": ".artifacts/phase7/current/ui/application-p2d01-command.json",
"commandReportSha256": "dfaa2bf42db6504a403ac1ec06746f22674401a0cf8ea39343a5d2e6615c8b98",
"name": "application-p2d01",
"command": [
"rtk",
"proxy",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"e2e/redesign-preservation.spec.ts",
"--grep",
"legacy workspace preserves frozen documents",
"--retries=0",
"--reporter=list,json",
"--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\application-p2d01-results"
],
"startedUtc": "2026-10-20T07:55:12.288185+00:00",
"finishedUtc": "2026-10-20T07:55:26.008529+00:00",
"exitCode": 0,
"stats": {
"startTime": "2026-10-20T07:55:12.844Z",
"duration": 13127.508999999998,
"expected": 1,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"resultSha256": "f738c9c39dd238b42bb96bfd977e85a628414198b54ecd2fe255992a650420e5"
},
"settings-consumers": {
"commandReport": ".artifacts/phase7/current/ui/settings-consumers-command.json",
"commandReportSha256": "fa49a9c14bdf1d709e1066b951857c608cadcf63ecc7d4db6b340395fe238a3d",
"name": "settings-consumers",
"command": [
"rtk",
"proxy",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"e2e/rules-draft-repair.spec.ts",
"e2e/settings-page-layout.spec.ts",
"--retries=0",
"--reporter=list,json",
"--output=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\ui\\settings-consumers-results"
],
"startedUtc": "2026-10-20T07:55:36.638831+00:00",
"finishedUtc": "2026-10-20T07:57:22.106599+00:00",
"exitCode": 0,
"stats": {
"startTime": "2026-10-20T07:55:37.208Z",
"duration": 104857.419,
"expected": 8,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"resultSha256": "59c6302f99df8046ac42e95a4aac0bc7ce6a438386704e589b63dada6f9faa43"
}
},
"nativeImages": [
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-controlled-save-failure-en-light-390.png",
"sha256": "139925c538543e15efb2d15cb859627b1ad64bfeb6f7b8c42c96d3dce18a8e55"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-320-nb-dark.png",
"sha256": "c2a3519ddd1b30223286483fc79121343089f1bc95fe5aca480811ca8f6c21c0"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-320-nb-dark.png",
"sha256": "f4bc27cdb9ba16d772c52e63d30377428d5c619acbfad8a83d63191f6903b1c5"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-360-en-light.png",
"sha256": "2e69bc285dcfcb78d36f55f598697fc2f8c817525800b2fd0a6e1e609d90c21a"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-360-en-light.png",
"sha256": "9e38c3f9507e9485400c760d7fb57d80d17743c3a017b8c8657133f3de71e327"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-390-en-dark.png",
"sha256": "7771f2ed991d1fd17d16995a34b0deb61567210e24f1a69696676c95d2689a99"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-390-en-dark.png",
"sha256": "da4a80368f93fe89d054d2e6583ba61c3f27ace5d53e4348935d25cdacd71c1a"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-768-nb-light.png",
"sha256": "d444084d22e91a57fd3a08405965f4186110c79701842f79627715b4436a88c9"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-768-nb-light.png",
"sha256": "8f35df7e2aa318499f5ed6d201e06168ad54e06cb5bde400541229a1290070d8"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-1024-en-dark.png",
"sha256": "15b54068e58a44638891e0573fcf9caa49010ae98e9667660fab4ce6a4b92cb0"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-1024-en-dark.png",
"sha256": "ba068b0fc45d7dbd2240589f669f79a1714beef59d3cdf5117ed61678172b42d"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-1280-nb-light.png",
"sha256": "b401fab54e29ba0f2298acd4cd24cd5b3a8b5c2d6164e64bb2348ed7a4d35dfd"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-1280-nb-light.png",
"sha256": "c3631f902190ddea4601eab491ceb612b9fce08783cdf6901397cad0a2708b6a"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-1440-en-light.png",
"sha256": "aefa978879a29b9f30b6481c996d31caa919ecc8a117f7a1f3195a23eff087f8"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-1440-en-light.png",
"sha256": "14862f226bd8b9a36ac116e050e7675798ea928ee3e852eff729f7643f636a60"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-1920-nb-dark.png",
"sha256": "025b0ab5cdd183e2e4406afdb54b45fa5096dd24a14f23f8c942ac99f1fa9a36"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-1920-nb-dark.png",
"sha256": "81297950588804aa22e62c2d41d14b95a577e6953896fb2329504a9e5769c42b"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/usage-actual-free-independent-read-recovery-en-light-390.png",
"sha256": "451348584b261a771b4cec4af500a47cb6b0d16caed992f12c34e8a51ca2a662"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-actual-readonly-lifecycle-and-protected-export-en-light-390.png",
"sha256": "c93faa707992d628f863115fc7ebc02156966c2905ff305813ad3e9995fd2a44"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/held-notification-newer-draft-nb-390.png",
"sha256": "d46c2208b584a8c32cf739066446ebdf66789c24061cc9d01a434483802774ec"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-notification-initial-get503-en-320.png",
"sha256": "d9731d0cf9c9a370469632304c78c64bff1e294a77cdc5178ffeadc6bd3d3123"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-notification-save503-draft-en-320.png",
"sha256": "abd2216196c750e807835e8e396b82aa2e0a20f6ce13fc64601458f43990a8f8"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-gmail-status503-independent-providers-en-390.png",
"sha256": "55b5e520ff8f1020490a4e517a71ed8950f6bd1bb3482703d8a250a1db36e9a4"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-320-nb-dark.png",
"sha256": "cf8dd8bb1c6da172ca10f8899eab003475296f7f83bc3940c0122d234ecebef8"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-320-nb-dark.png",
"sha256": "b4af4840485e32dbb879b156aa21f15c58a3ee38e2adb6707ee40c39d7ab95d0"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-390-en-light.png",
"sha256": "735c650b55c81d319527ed51f45b2186df6072647f6d2192ccf6d130fa3e3b89"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-390-en-light.png",
"sha256": "d6e41504799bbc96ce7079be82d0499dd7034c2e580dbe75c4b778f445b710d8"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-768-nb-light.png",
"sha256": "a4f30556036141f50df8c96cdbb70d58663c1f12b9fa77af1de49e8363a83e64"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-768-nb-light.png",
"sha256": "331f3464838c1b4dd3a77aef2991d15b84d7a2f667ad687e75b0ca4ba62419ea"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-1024-en-dark.png",
"sha256": "f97b5e2591c50d8cc908f8130c8f7cb44c3f0864155c2e3d6b066592e5c5b451"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-1024-en-dark.png",
"sha256": "64b5b82c7b8e75aa253b07e265c3d8aa8e78cf007919028cf05feaf791d56a03"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-1280-nb-dark.png",
"sha256": "2749d3a3f21d775db59fd7f26386b4dcbfaed7c541a2a22cfa708720fd469d16"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-1280-nb-dark.png",
"sha256": "c6c8a179fc69ab19f2ec657e3a651cd31c2b8e5c5dfd3a09f6c696f26db78880"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-1440-en-light.png",
"sha256": "9c2b65ee148d251760689646712c27ab8c7612c08662cd155b70f63b7545d2c0"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-1440-en-light.png",
"sha256": "72847c1d419003c96401a1361add8cd732ff448d4809f7668e4f9c7b8eeda76e"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-1920-en-dark.png",
"sha256": "ac64333c28ee74ac4cf97a367145aef9c1d041aa34691a1e0b979194f1714381"
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-1920-en-dark.png",
"sha256": "335ae0e61ece476bc2cbbef4e9d1e6df00528a1a430b60921f3557e3d4a6f737"
}
],
"axe": [
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-controlled-save-failure-en-light-390-axe.json",
"sha256": "93d46aeaeefb653bc7a669f3d3793a16967e6a0e78afd309acfb0a851de55b8c",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 7,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-320-nb-dark-axe.json",
"sha256": "625c49c7d6f3abb2ee1c84ce2d4b78c4fcd5782de3e1351c4d588be3dc2c8349",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 6,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-320-nb-dark-axe.json",
"sha256": "70df2d0d0ba9cb54b28830a68d99b99c3315ae863218f213216f1305d8aee9c1",
"violations": 0,
"incompleteGroups": 2,
"incompleteNodes": 3,
"incompleteRules": [
"aria-hidden-focus",
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-360-en-light-axe.json",
"sha256": "c73d5f410960ba78703f2b5dd59747902a4597635460a771a6c2e47b31818c96",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 6,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-360-en-light-axe.json",
"sha256": "e7e783564764d8970eee7ef06d13261d39116b60a9d0504cb2a4124850d9ec2b",
"violations": 0,
"incompleteGroups": 2,
"incompleteNodes": 3,
"incompleteRules": [
"aria-hidden-focus",
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-390-en-dark-axe.json",
"sha256": "dfba0e2d83eb0521f8137866054a35e93a21c689ae274750dd001f59c547b425",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 6,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-390-en-dark-axe.json",
"sha256": "e7e783564764d8970eee7ef06d13261d39116b60a9d0504cb2a4124850d9ec2b",
"violations": 0,
"incompleteGroups": 2,
"incompleteNodes": 3,
"incompleteRules": [
"aria-hidden-focus",
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-768-nb-light-axe.json",
"sha256": "eb1ad502af6635bfde32e2a26811645a694715f2ee0f96ed2b208f0fbb05420b",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-768-nb-light-axe.json",
"sha256": "8cedfafb85b72ea79df3954030df769da226aeecb8d7e91f92905246eec951a7",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-1024-en-dark-axe.json",
"sha256": "04bb23b453e6a78f8f0d85aa07d2244f3cb46c57a08fc7f1a9c9f598dc153b54",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-1024-en-dark-axe.json",
"sha256": "8cedfafb85b72ea79df3954030df769da226aeecb8d7e91f92905246eec951a7",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-1280-nb-light-axe.json",
"sha256": "0feabcf543b5433507ca4578033d691a038692f67e9b7fc567e9ed37f84da46f",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-1280-nb-light-axe.json",
"sha256": "8cedfafb85b72ea79df3954030df769da226aeecb8d7e91f92905246eec951a7",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-1440-en-light-axe.json",
"sha256": "ed63686ec7dc957368edbe79329445eb400f0fcd2a9e8f2e6cb5785895b22b2d",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-1440-en-light-axe.json",
"sha256": "8cedfafb85b72ea79df3954030df769da226aeecb8d7e91f92905246eec951a7",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/privacy-dirty-1920-nb-dark-axe.json",
"sha256": "0736d0e4d8bc11c10181cae84f871d159a676a57cb9254904a79b44a87128a4f",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-disabled-1920-nb-dark-axe.json",
"sha256": "8cedfafb85b72ea79df3954030df769da226aeecb8d7e91f92905246eec951a7",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/usage-actual-free-independent-read-recovery-en-light-390-axe.json",
"sha256": "c73d5f410960ba78703f2b5dd59747902a4597635460a771a6c2e47b31818c96",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 6,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/backup-actual-readonly-lifecycle-and-protected-export-en-light-390-axe.json",
"sha256": "0ff42db4e9e427373beca84fca5f2acef60e7bd120760b505f985dd30d8cefe4",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 3,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/held-notification-newer-draft-nb-390-axe.json",
"sha256": "883e8ec56809f9252c959d0b629c6cf1a79107f6ac8a394fbc581c25a9f619b9",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 3,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-notification-initial-get503-en-320-axe.json",
"sha256": "7fca66307879c302a9789fd8b18e50e7446aaaa93c6494ca2939d157eb484d8b",
"violations": 0,
"incompleteGroups": 2,
"incompleteNodes": 3,
"incompleteRules": [
"aria-hidden-focus",
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-notification-save503-draft-en-320-axe.json",
"sha256": "7fca66307879c302a9789fd8b18e50e7446aaaa93c6494ca2939d157eb484d8b",
"violations": 0,
"incompleteGroups": 2,
"incompleteNodes": 3,
"incompleteRules": [
"aria-hidden-focus",
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-gmail-status503-independent-providers-en-390-axe.json",
"sha256": "505b7cad594f5ea8d48edd2974020f9d17626b2b1cd3a3e8ee9caa9b4ff3c389",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-320-nb-dark-axe.json",
"sha256": "4ebfa00c4389905c8ec6580fa86299c605388a2a80599c306361bb6f080c831b",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-320-nb-dark-axe.json",
"sha256": "8a2c88c22638ec87e930799a201d6f92998dbd908570dfbd7f951f91dcdd764b",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-390-en-light-axe.json",
"sha256": "df10ac73cf443967575a4dfedc3536d418b69298c8b17bbbac660cc220a261ca",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-390-en-light-axe.json",
"sha256": "8a2c88c22638ec87e930799a201d6f92998dbd908570dfbd7f951f91dcdd764b",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-768-nb-light-axe.json",
"sha256": "e0d372ebdd5ba5ac1c9586f97f497f17ad8ebbb8b368e4b877c81e080985d91d",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-768-nb-light-axe.json",
"sha256": "8a2c88c22638ec87e930799a201d6f92998dbd908570dfbd7f951f91dcdd764b",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-1024-en-dark-axe.json",
"sha256": "e0d372ebdd5ba5ac1c9586f97f497f17ad8ebbb8b368e4b877c81e080985d91d",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-1024-en-dark-axe.json",
"sha256": "56f9f9728201d4e792e0783a88950dbc0f4263c05a3fb131d9b094c5e801306a",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-1280-nb-dark-axe.json",
"sha256": "e0d372ebdd5ba5ac1c9586f97f497f17ad8ebbb8b368e4b877c81e080985d91d",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-1280-nb-dark-axe.json",
"sha256": "56f9f9728201d4e792e0783a88950dbc0f4263c05a3fb131d9b094c5e801306a",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-1440-en-light-axe.json",
"sha256": "e0d372ebdd5ba5ac1c9586f97f497f17ad8ebbb8b368e4b877c81e080985d91d",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-1440-en-light-axe.json",
"sha256": "56f9f9728201d4e792e0783a88950dbc0f4263c05a3fb131d9b094c5e801306a",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/notifications-1920-en-dark-axe.json",
"sha256": "e0d372ebdd5ba5ac1c9586f97f497f17ad8ebbb8b368e4b877c81e080985d91d",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 2,
"incompleteRules": [
"color-contrast"
]
},
{
"path": ".artifacts/phase7/p7-09/data-final-20261020/controlled-long-address-connections-1920-en-dark-axe.json",
"sha256": "56f9f9728201d4e792e0783a88950dbc0f4263c05a3fb131d9b094c5e801306a",
"violations": 0,
"incompleteGroups": 1,
"incompleteNodes": 5,
"incompleteRules": [
"color-contrast"
]
}
],
"focusedFrontend": {
"report": ".artifacts/phase7/current/unit/data-final-focused-20261020T074922Z-command.json",
"sha256": "4c7204b5e4e8f293a6ddd32c81484aeb518706f46dcb07af4c9d189faf885ff8",
"command": [
"rtk",
"proxy",
"npm.cmd",
"test",
"--",
"--runInBand",
"--watchAll=false",
"--json",
"--outputFile=E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\unit\\data-final-focused-20261020T074922Z.json",
"src/ai-privacy-settings.test.tsx",
"src/ai-usage-card.test.tsx",
"src/backup-lifetime.test.tsx",
"src/account-data-export.test.tsx",
"src/settings-import-lifetime.test.tsx",
"src/settings-view.test.tsx"
],
"startedUtc": "2026-10-20T07:49:22.892045+00:00",
"finishedUtc": "2026-10-20T07:49:52.920162+00:00",
"exitCode": 0,
"counts": {
"numPassedTests": 47,
"numFailedTests": 0,
"numPendingTests": 0,
"numTodoTests": 0,
"numPassedTestSuites": 6,
"numFailedTestSuites": 0
}
},
"existingBackendContracts": {
"report": ".artifacts/phase7/current/backend-career/p709-data-contracts-20261020T074451Z/command.json",
"sha256": "622fe0542faa7a43f047a7bae2c1f03741f21e43a2aa20a7f55f223713e64366",
"command": [
"rtk",
"proxy",
"C:/Users/Connor/.dotnet/dotnet.exe",
"test",
"JobTrackerApi.Tests/JobTrackerApi.Tests.csproj",
"--configuration",
"Release",
"--no-build",
"--filter",
"FullyQualifiedName~AiPrivacyPolicyTests|FullyQualifiedName~AccountDataExportTests|FullyQualifiedName~AccountDeletionTests|FullyQualifiedName~BillingControllerTests",
"--logger",
"trx;LogFileName=career.trx",
"--results-directory",
"E:\\Storage\\Projects\\Active\\Job tracker\\.artifacts\\phase7\\current\\backend-career\\p709-data-contracts-20261020T074451Z"
],
"startedUtc": "2026-10-20T07:44:51.950856+00:00",
"finishedUtc": "2026-10-20T07:44:55.839722+00:00",
"exitCode": 0,
"logSha256": "8d53bf5c33de39b9d7c3b7d29a12b50351428dbabbcc68271565dbe81acc9088",
"counts": {
"total": 22,
"passed": 22,
"failed": 0,
"notExecuted": 0
},
"resultSha256": "47b7f946d574a3bff6328e201700d62e4602d85957c6c8751e7cf4d15449fd08"
},
"inventory": {
"frontendTests": 855,
"frontendSuites": 99,
"browserTests": 339,
"backendTests": 1057,
"fullSuiteClaim": false
},
"visualInspection": {
"newImagesReviewed": [
"backup-disabled-320-nb-dark",
"privacy-dirty-768-nb-light",
"usage-actual-free-independent-read-recovery-en-light-390",
"privacy-dirty-320-nb-dark",
"backup-actual-readonly-lifecycle-and-protected-export-en-light-390",
"privacy-dirty-1440-en-light"
],
"scope": "Six actual PNGs inspected. Other retained PNGs are automated evidence. Human/device/zoom/output acceptance remains pending."
},
"incompleteTriage": {
"color-contrast:shortTextContent": {
"nodes": 37,
"context": "Invisible aria-hidden zero-count badges; not a passing contrast claim."
},
"color-contrast:bgOverlap": {
"nodes": 99,
"context": "Fixed chrome, focused/scrolled controls and snackbar overlap prevents background determination; contextual contrast/manual requirements retained."
},
"aria-hidden-focus:focusable-modal-open": {
"nodes": 5,
"context": "Closing MUI section-selector menu portals marked aria-hidden, with option still mounted during transition. Keyboard selector focus recovery passes; settled tabbing and human AT acceptance remain qualified. No axe exclusion."
}
}
}
@@ -0,0 +1,104 @@
{
"schemaVersion": 1,
"checkpoint": "p7-09",
"status": "PASS",
"checkedUtc": "2026-10-20T07:58:14.045820+00:00",
"commands": [
{
"name": "secret-scan",
"command": [
"rtk",
"proxy",
"C:\\Users\\Connor\\AppData\\Local\\Programs\\Python\\Python312\\python.exe",
"-X",
"utf8",
"scripts/supply-chain.py",
"scan-secrets"
],
"startedUtc": "2026-10-20T07:58:09.739974+00:00",
"finishedUtc": "2026-10-20T07:58:12.899975+00:00",
"exitCode": 0,
"log": ".artifacts/phase7/current/static/20261020T075809Z/secret-scan.log",
"logSha256Raw": "be5119e6057287d397e87759f855c91e634e3bfac61c8be7584d05592ba2dfcd"
},
{
"name": "working-whitespace",
"command": [
"rtk",
"proxy",
"git",
"diff",
"--check"
],
"startedUtc": "2026-10-20T07:58:12.899975+00:00",
"finishedUtc": "2026-10-20T07:58:13.025608+00:00",
"exitCode": 0,
"log": ".artifacts/phase7/current/static/20261020T075809Z/working-whitespace.log",
"logSha256Raw": "398baedb3d20830c4a35d0dba3a14da19716bd138bdd645c8f4fcca9c6ef2737"
},
{
"name": "staged-whitespace",
"command": [
"rtk",
"proxy",
"git",
"diff",
"--cached",
"--check"
],
"startedUtc": "2026-10-20T07:58:13.026116+00:00",
"finishedUtc": "2026-10-20T07:58:13.120188+00:00",
"exitCode": 0,
"log": ".artifacts/phase7/current/static/20261020T075809Z/staged-whitespace.log",
"logSha256Raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"name": "phase7-whitespace",
"command": [
"rtk",
"proxy",
"git",
"diff",
"--check",
"b5319981ad3d1bd635daff861453d23c0de5320b"
],
"startedUtc": "2026-10-20T07:58:13.120188+00:00",
"finishedUtc": "2026-10-20T07:58:13.345018+00:00",
"exitCode": 0,
"log": ".artifacts/phase7/current/static/20261020T075809Z/phase7-whitespace.log",
"logSha256Raw": "afcd01be43a972cd44330f1452b03e04f3c1f09e189ecb95b85e6cce9b8b1989"
}
],
"untrackedSecretScan": {
"files": 6,
"findings": 0
},
"documentation": {
"files": 30,
"relativeLinks": 621,
"errors": []
},
"preservation": {
"groups": 57,
"statuses": {
"PARTIAL": 56,
"PASS": 0,
"FAIL": 0,
"DEFERRED": 1
},
"originalRoutesPreserved": true,
"currentConcreteRoutes": 33
},
"production": {
"main": "cc7977131a4f991578f29d83eec17a242a858fca",
"originMain": "cc7977131a4f991578f29d83eec17a242a858fca",
"status": "NO-GO",
"qualification": "Local fetched refs; direct push observation recorded separately."
},
"hashPolicy": "Portable JSON UTF8 LF; raw log hashes measure exact saved bytes.",
"limits": [
"Pattern scanner skips binary and files over2MiB; not historical Git/production secrets.",
"Local links check target existence, not URL/heading anchors.",
"Static evidence is not runtime/manual/device/provider/production acceptance."
]
}
@@ -0,0 +1,201 @@
{
"schemaVersion": 1,
"scope": "One owner-authorized promotion of completed published e7dba9a; this receipt does not certify deployment or technical readiness.",
"authorization": {
"source": "Direct owner instruction in parent conversation, recorded in original push receipt",
"chronology": [
"Owner requested main promotion.",
"Owner explicitly accepted recorded NO-GOs and pending items and requested live now.",
"Root promoted only the latest completed published revision; unfinished work was excluded."
],
"recordedText": "Owner explicitly requested main push and accepted recorded NO-GOs/pending items on 2026-10-17. One promotion of latest completed published development commit only; unfinished import/backend work excluded; no future automatic deployment authorization.",
"futureAutomaticMainPromotionAuthorized": false
},
"promotion": {
"command": [
"rtk",
"proxy",
"git",
"push",
"origin",
"e7dba9a2f776c55e3c4f4df7ef59076f93fa92df:refs/heads/main"
],
"startedUtc": "2026-10-17T13:54:33.243078+00:00",
"finishedUtc": "2026-10-17T13:54:35.214338+00:00",
"exitCode": 0,
"previousMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"candidate": "e7dba9a2f776c55e3c4f4df7ef59076f93fa92df"
},
"directRefs": {
"observedUtc": "2026-10-17T13:54:35.567674+00:00",
"localMain": "e7dba9a2f776c55e3c4f4df7ef59076f93fa92df",
"originMain": "e7dba9a2f776c55e3c4f4df7ef59076f93fa92df",
"liveRemoteMain": "e7dba9a2f776c55e3c4f4df7ef59076f93fa92df",
"developmentHead": "e7dba9a2f776c55e3c4f4df7ef59076f93fa92df",
"liveRemoteDevelopment": "e7dba9a2f776c55e3c4f4df7ef59076f93fa92df",
"qualification": "Remote-ref equality is not deployed runtime identity and does not imply a clean worktree."
},
"excludedWork": {
"description": "Unfinished import compatibility, Settings lifetime, backend company-create prerequisite, associated tests and documentation were not included.",
"pendingPathsBefore": [
"M JobTrackerApi/Controllers/CompaniesController.cs",
" M docs/redesign/phase-7/COMMITS.md",
" M docs/redesign/phase-7/PRESERVATION.md",
" M docs/redesign/phase-7/README.md",
" M docs/redesign/phase-7/p7-09/PREFERENCES.md",
" M docs/redesign/phase-7/p7-09/README.md",
" M docs/redesign/phase-7/p7-09/evidence/preferences-results.json",
" M job-tracker-ui/e2e/csv-export.spec.ts",
" M job-tracker-ui/src/components/ImportExportJobs.tsx",
" M job-tracker-ui/src/components/SettingsView.tsx",
" M job-tracker-ui/src/i18n/translations.ts",
"?? JobTrackerApi.Tests/CompanyCreateCompatibilityTests.cs",
"?? docs/redesign/phase-7/p7-09/IMPORT_COMPATIBILITY.md",
"?? job-tracker-ui/e2e/phase7-job-import.spec.ts",
"?? job-tracker-ui/src/job-import.test.tsx",
"?? job-tracker-ui/src/settings-import-lifetime.test.tsx"
],
"pendingPathsAfter": [
"M JobTrackerApi/Controllers/CompaniesController.cs",
" M docs/redesign/phase-7/COMMITS.md",
" M docs/redesign/phase-7/PRESERVATION.md",
" M docs/redesign/phase-7/README.md",
" M docs/redesign/phase-7/p7-09/PREFERENCES.md",
" M docs/redesign/phase-7/p7-09/README.md",
" M docs/redesign/phase-7/p7-09/evidence/preferences-results.json",
" M job-tracker-ui/e2e/csv-export.spec.ts",
" M job-tracker-ui/src/components/ImportExportJobs.tsx",
" M job-tracker-ui/src/components/SettingsView.tsx",
" M job-tracker-ui/src/i18n/translations.ts",
"?? JobTrackerApi.Tests/CompanyCreateCompatibilityTests.cs",
"?? docs/redesign/phase-7/p7-09/IMPORT_COMPATIBILITY.md",
"?? job-tracker-ui/e2e/phase7-job-import.spec.ts",
"?? job-tracker-ui/src/job-import.test.tsx",
"?? job-tracker-ui/src/settings-import-lifetime.test.tsx"
],
"pathListsUnchanged": true
},
"ciObservations": [
{
"observedUtc": "2026-10-17T13:55:16.507277+00:00",
"method": "GET",
"httpStatus": 200,
"matchingRuns": [
{
"id": 820,
"name": null,
"head_branch": "main",
"head_sha": "e7dba9a2f776c55e3c4f4df7ef59076f93fa92df",
"event": "push",
"status": "in_progress",
"conclusion": null,
"html_url": "https://git.cesnimda.uk/cesnimda/jobtrackingapp/actions/runs/820",
"created_at": null,
"updated_at": null,
"run_number": 401
}
]
},
{
"observedUtc": "2026-10-17T13:56:07.968311+00:00",
"method": "GET",
"httpStatus": 200,
"matchingRuns": [
{
"id": 820,
"name": null,
"head_branch": "main",
"head_sha": "e7dba9a2f776c55e3c4f4df7ef59076f93fa92df",
"event": "push",
"status": "in_progress",
"conclusion": null,
"html_url": "https://git.cesnimda.uk/cesnimda/jobtrackingapp/actions/runs/820",
"created_at": null,
"updated_at": null,
"run_number": 401,
"jobs": [
{
"id": 1699,
"name": "test",
"status": "in_progress",
"conclusion": null,
"started_at": "2026-10-17T13:55:05Z",
"completed_at": "1970-01-01T00:00:00Z"
},
{
"id": 1700,
"name": "deploy",
"status": "waiting",
"conclusion": null,
"started_at": "1970-01-01T00:00:00Z",
"completed_at": "1970-01-01T00:00:00Z"
}
]
}
]
}
],
"decisions": {
"technicalProductionReadiness": "NO-GO qualifications retained",
"ownerAuthorizedPromotion": "PUSHED",
"deploymentVerification": "PENDING",
"verifiedLiveRuntime": false,
"unfinishedP709DataBoundary": "PENDING",
"phase8": "NOT STARTED"
},
"remainingRequirements": [
"Production ingress/topology and trusted peer evidence",
"Complete backup/restore recovery set",
"Effective schema/configuration/secrets verification",
"Tested rollback",
"Deployed runtime revision, authenticated smoke and monitoring",
"Applicable human screen-reader, physical device, provider and output qualifications",
"P5-13 remains withheld"
],
"report": {
"path": "docs/redesign/phase-7/p7-09/OWNER_AUTHORIZED_RELEASE.md",
"sha256": "4a21780015104ea82fa57cb9e5b0c024b8f707672c48029167c3e30d8f6203f4",
"wordCount": 758,
"historicalWorkerReportSha256": "4601cd09e090183f2c2b403ece631324ad44e40c757d4927d44b6f4dce308f21",
"historicalWorkerWordCount": 412,
"continuationScope": "Root appended the separately authorized 20 October release repair observations; original promotion and CI observations below remain historical."
},
"rawReferences": [
{
"path": ".artifacts/phase7/p7-09/owner-authorized-main-push.json",
"sha256": "8374142c7bac98e2861d74404167a8a4ec6e7f68b8178f972a4c41f9e6f813b8",
"bytes": 3180
},
{
"path": ".artifacts/phase7/p7-09/owner-authorized-main-push.log",
"sha256": "2095817c619ba1fb6bfdda68809aec2d428dcf77b221fe1a38a1922ff2fd4c9d",
"bytes": 293
},
{
"path": ".artifacts/phase7/p7-09/main-ci/20261017T135515Z/observation.json",
"sha256": "65fa31fcf38a9e494263210f19fed2ba81a732b3f4fa1d28cdb6c395c97091d0",
"bytes": 711
},
{
"path": ".artifacts/phase7/p7-09/main-ci/20261017T135515Z/response.json",
"sha256": "ce9f25974b94a28ef5a585c2842532104efc693af523a6f6e3a4df86c8f4e006",
"bytes": 58756
},
{
"path": ".artifacts/phase7/p7-09/main-ci/20261017T135607Z/jobs-820.json",
"sha256": "75e9d80bbac0c4b33c2867228f64b65dc39ae387fddf990537688528c2eaba24",
"bytes": 6818
},
{
"path": ".artifacts/phase7/p7-09/main-ci/20261017T135607Z/observation.json",
"sha256": "1b81e386d4e099d75d8063b10326568d44d341a556756f9ddea88542fe44a656",
"bytes": 1213
},
{
"path": ".artifacts/phase7/p7-09/main-ci/20261017T135607Z/response.json",
"sha256": "ce9f25974b94a28ef5a585c2842532104efc693af523a6f6e3a4df86c8f4e006",
"bytes": 58756
}
],
"provenance": "Derived from existing root-agent push and read-only CI artifacts; this worker issued no Git push, API/network request, build, test or deployment. Later CI/deployment outcomes must be appended with their own observations."
}
+1 -1
View File
@@ -92,7 +92,7 @@ Follow the approved [Phase 7 handoff](../redesign/phase-6/p6-05/PHASE7_HANDOFF.m
- [ ] P7-06F optional reviewed followMode composer: retain deferral unless its required action/fallback decision is established.
- [x] P7-07 [owner-scoped Documents index](../redesign/phase-7/p7-07/README.md): implemented CONDITIONAL GO, final hygiene PASS; UI5a67ec3 and evidence84350b7 published through9dfea12, directly verified21:01:11UTC. Finite86/8+native13/types/lint/build/18images/15axe0/101qualified;33routes/57statuses retained. MariaDB/human/device/production qualifications remain.
- [x] P7-08 [existing notifications and operations](../redesign/phase-7/p7-08/README.md): bothpresentationboundariesimplementedCONDITIONALGO. UTC9dfea/recent40cfe04 published; Operations77/7+native12+types/lint/build/14Ops+1P2actualimages PASS;12Opsaxe0/3+14notifaxe0/102qualified. FinalOpshygiene/normalpushpending.791/95frontend323browser1054backend derivedonly;57groups33routes/mainunchanged/productionNO-GO. P7-09next.
- [ ] P7-09 [Settings, Connections and data lifecycle](../redesign/phase-7/p7-09/README.md): sender repairdac2927 published; Preferences/Connections91/6+backend52+native17+gates PASS, final hygiene/publication pending. Data/privacy/plan/backup follows separate import compatibility prerequisite. Derived824/95 frontend,331 browser,1054 backend; no full-suite claim.
- [x] P7-09 [Settings, Connections and data lifecycle](../redesign/phase-7/p7-09/README.md): implemented CONDITIONAL GO. Sender/Preferences/import/company published; remaining data presentation47/6 affected frontend,22backendcontracts, final native23/types/lint/build PASS. 37axe0violations/141incomplete nodes qualified; six final PNGs inspected. Final hygiene/publication recorded in checkpoint ledger. Inventory855/99frontend,339browser,1057backend; no fresh whole-suite claim. P5-13 withheld, manual/provider/output/release qualifications retained.
- [ ] P7-10 Users, Audit and System administration presentation.
- [ ] P7-11 residual Analytics/error/empty/dialog integration.
- [ ] P7-12 integrated migration acceptance and Phase 8 handoff.