feat(ui): migrate public CV entry and recovery

This commit is contained in:
cesnimda
2026-10-13 00:24:40 +02:00
parent fcacae7384
commit bfa0ab62f8
15 changed files with 10472 additions and 57 deletions
+23 -1
View File
@@ -1,6 +1,6 @@
# P7-04 — CV library and public entry
**Entry CONDITIONAL GO; implementation and acceptance PENDING.** Follow the exact [approved handoff](../../phase-6/p6-05/PHASE7_HANDOFF.md#migration-order-and-commit-boundaries): one CV library commit, then one public-entry commit. Reuse the existing gallery, editor, confirmation/prompt, theme and feedback owners.
**Implemented scope CONDITIONAL GO; library pushed, public final hygiene PASS and normal push pending.** Follow the exact [approved handoff](../../phase-6/p6-05/PHASE7_HANDOFF.md#migration-order-and-commit-boundaries): one CV library commit, then one public-entry commit. Reuse the existing gallery, editor, confirmation/prompt, theme and feedback owners.
[Entry evidence](evidence/entry.json) records the actual clean P7-03 normal push5d6e3235, direct development equality/main unchanged and eight exact committed Git-blob baselines. P7-03 affected76/6/native35/backend98/seeder24 and static checks pass with finite visual/axe/manual qualifications. Latest whole frontend573/89/backend1,033/sidecar49 remain inherited;648/93 frontend,233 ordinary browser and1,034 backend are derived expectations. P7-12 must run fresh integrated regression.
@@ -24,3 +24,25 @@ All **19 final PNGs were displayed and reviewed** across a finite EN/Bokmål/lig
New library **19 all-enabled scans0 violations/64 incomplete occurrences** retain19 invisible-badge short-text,17 modal/menu hidden-focus and28 background overlap. Existing editor **12 retained-scope scans0/122** retain24 disabled Undo/Redo wrapper aria labels,12 invisible-badge short-text,78 overlap and8 obscured iframe-heading occurrences. Full vectors remain; neither scope establishes human screen-reader/modal/contrast acceptance. M09/M11 and all M01–M12 device/zoom/output/provider gates remain. RD21 canonical concurrency/partial-write risk and historical frozen/orphan/output debt are unchanged.
Twelve new cases in the existing suite give **660/93 frontend derived only**; eight new ordinary browser cases give **241 derived only**. Latest whole frontend573/89, backend1,033 and sidecar49 are inherited; backend1,034 is derived. P7-12 must run fresh integrated regression. All57 statuses remain56 PARTIAL/C11 DEFERRED,32 routes retained; P5-13 stays withheld. No backend/schema/renderer/PDF geometry or Phase8 work. Production NO-GO/main unchanged.
### Observed library push / public-entry start
Library implemented scope **CONDITIONAL GO** is normally pushed as `fcacae7384b4a38c2675e6527a33cc1d09f4b505`. Direct verification2026-10-12 18:03:41.481787UTC proves localHEAD=origin=live development, clean worktree and unchanged local/origin/live main27657f3. Final staged hygiene passes (four commands0,11docs406links0errors/57groups32routes); affected38/4/native8/editor4/backend72/types/lint/build and actual19-image review pass with manual/axe/localisation/production qualifications retained. [Public entry](evidence/public-entry.json) records exact preceding Git-blob baselines and this observed receipt. Public migration/final acceptance is pending; completing the library does not qualify Phase7 or production.
### Public CV implemented result
**P7-04 implemented scope CONDITIONAL GO; public final hygiene/normal push pending.** [Public results](evidence/public-results.json) retain final source, raw commands/reports, failed attempts and exact **74-file** `CzJrqceuLUrp0d6604-dJ` export. Fresh affected **38/3**, eight new ordinary anonymous browser cases, app/browser types, lint and production build PASS. Existing public suite1→14 (+13/0), browser+8 gives **673/93 frontend and249 browser derived only**; whole573/89/backend1,033/sidecar49 remain inherited until P7-12. The bundler emits53 JS files versus library54; other file-type counts match. Routes remain32, separately checked; output count is not a fixed capability budget.
PageHeader and shared feedback provide localized EN/Bokmål loading, missing/revoked-link and transient error states with explicit keyboard Retry. Atomic slug-owned read state hides prior HTML/PDF/error/name/height before the next effect and ignores late requests. Slugs remain one encoded API/PDF segment. Locale changes leave source facts and request counts unchanged. Existing Next metadata keeps Jobbjakt during loading; loaded name changes the title and owned cleanup restores the prior title without overwriting a newer route. No new saving, publication or canonical-editing owner is introduced.
Real HTTP anonymous public HTML/PDF200 with `%PDF` bytes, noindex, private401/numeric404 and revoked/rotated-link404 are verified. Owner source/settings/revisions and private sibling remain unchanged. Explicit reload observes revocation; live cross-client invalidation is not claimed. Harness history exercises slug/back/forward state without adding product navigation. All **18 final public PNGs were displayed and reviewed**, including balanced320/360/390/768/1024/1280-landscape/1440/1920 EN/Bokmål/light/dark and two long-document samples. Chrome wraps without horizontal overflow; white A4 canvas, original scaling/measurement/sandbox remain.
[Fresh final fidelity](evidence/public-fidelity-results.json) passes **16 fixtures/36 pages plus8/24** after the final source/build; native corpus1/settings4 also pass. Exact membership and existing dimension0.5mm/position2mm/font0.5pt/RGB1/255 tolerances are unchanged.236 exact corpus files are frozen; four final comparison PNGs (long-nb-code first/last and dark-nb-after first/last) were actually reviewed. Not all60 pages or44 native settings PNGs were visually inspected; production font/photo/print qualification remains.
Public **18 all-enabled top-document scans0 violations/12 incomplete occurrences** are entirely `frame-tested`: axe could not fully inspect the sandboxed document. This is an open document accessibility qualification, not full CV conformance; do not enable scripts to quiet the scan. Final settings **12 WCAG-tagged scans0/223** separately retain24 disabled Undo/Redo span labels,12 badge short-text,161 overlapping and26 partially obscured contexts. All node vectors are retained. M09/M11/human screen-reader and all M01–M12 device/zoom/output/provider gates remain unverified.
Meaningful RED4/6 and title RED13/1 are frozen separately. Initial native6/2 reflects a30s second-scan timeout plus an exact initial-title fixture mismatch with the verified Next metadata owner. The fixture now asserts Jobbjakt and uses90s for that two-scan case; no assertion/rule relaxation or skip. An intermediate38/3 passed but lint failed a captured-ref cleanup warning; final captured originalTitle fixes the warning without suppression. Final eight ordinary cases pass with retries0. All57 whole-group statuses remain56 PARTIAL/C11 DEFERRED; C05/C12/E09 have finite sharing/revocation/source/export proof. RD21 concurrency/partial writes, historical output/orphan debt and release gates remain. P5-13 withheld, main unchanged/production NO-GO, Phase8 separate.
Peer review found no product defect. The native geometry test now additionally asserts rendered width equals min(A4, viewport minus32px) within1px; focused existing eight-sample journey passes after that assertion, with fresh browser types. Product source/build/fidelity remain unchanged. Seven new screenshots exactly match previously reviewed SHA bytes; the differing1920 capture was displayed/reviewed. Extra eight scans0/8 frame-tested are repeated evidence, not additional cases. The first targeted runner grep matched0 tests/exit1; raw failure retained and exact-title grep corrected, no skip or expected failure.
Final public [staged hygiene](evidence/public-static-checks.json) PASS at2026-10-12 22:24:04UTC: four commands0,11docs/412 local links0errors,57groups/32routes. Normal development push pending; actual hash and direct remote receipt follow in the next checkpoint.
@@ -3,7 +3,7 @@
"checkpoint": "P7-04",
"slice": "CV library",
"recordedUtc": "2026-10-12T18:03:01.494389+00:00",
"acceptance": "IMPLEMENTED_SCOPE_CONDITIONAL_GO_STATIC_AND_NORMAL_PUSH_PENDING",
"acceptance": "IMPLEMENTED_SCOPE_CONDITIONAL_GO_NORMAL_PUSH_VERIFIED",
"entryReceipt": {
"observedUtc": "2026-10-12T17:35:00.882169+00:00",
"branch": "codex/ui-redesign-phase4",
@@ -3273,5 +3273,106 @@
"freshIntegratedAcceptance": "P7-12 pending"
},
"preservation": "All57 remain56 PARTIAL/C11 DEFERRED;32 routes;C05/C12/E09 plus source/version/frozen/export guards supported by finite proof. No source/settings/API/schema/renderer/model/provider/save-contract/production activation.",
"remaining": "Public entry boundary pending; full P7-04 pending. Shared gallery editor consumer default disabled=false and original frame4 pass."
"remaining": "Public entry boundary pending; full P7-04 pending. Shared gallery editor consumer default disabled=false and original frame4 pass.",
"normalPushReceipt": {
"observedUtc": "2026-10-12T18:03:41.481787+00:00",
"branch": "codex/ui-redesign-phase4",
"head": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"originDevelopment": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"liveDevelopment": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"main": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"originMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"liveMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"workingTreeClean": true,
"pendingPaths": [],
"commands": [
{
"command": [
"rtk",
"proxy",
"git",
"branch",
"--show-current"
],
"exitCode": 0,
"stdout": "codex/ui-redesign-phase4\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"HEAD"
],
"exitCode": 0,
"stdout": "fcacae7384b4a38c2675e6527a33cc1d09f4b505\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"origin/codex/ui-redesign-phase4"
],
"exitCode": 0,
"stdout": "fcacae7384b4a38c2675e6527a33cc1d09f4b505\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"main"
],
"exitCode": 0,
"stdout": "27657f31131cd95d42f0e1290853ec9c9b3959a4\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"origin/main"
],
"exitCode": 0,
"stdout": "27657f31131cd95d42f0e1290853ec9c9b3959a4\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"ls-remote",
"origin",
"refs/heads/codex/ui-redesign-phase4",
"refs/heads/main"
],
"exitCode": 0,
"stdout": "fcacae7384b4a38c2675e6527a33cc1d09f4b505\trefs/heads/codex/ui-redesign-phase4\n27657f31131cd95d42f0e1290853ec9c9b3959a4\trefs/heads/main\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"status",
"--porcelain=v1"
],
"exitCode": 0,
"stdout": "",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
}
]
},
"finalStaticChecks": "docs/redesign/phase-7/p7-04/evidence/library-static-checks.json"
}
@@ -0,0 +1,149 @@
{
"checkpoint": "P7-04",
"slice": "Public entry",
"entry": "CONDITIONAL GO; migration pending",
"libraryPushReceipt": {
"observedUtc": "2026-10-12T18:03:41.481787+00:00",
"branch": "codex/ui-redesign-phase4",
"head": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"originDevelopment": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"liveDevelopment": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"main": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"originMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"liveMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"workingTreeClean": true,
"pendingPaths": [],
"commands": [
{
"command": [
"rtk",
"proxy",
"git",
"branch",
"--show-current"
],
"exitCode": 0,
"stdout": "codex/ui-redesign-phase4\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"HEAD"
],
"exitCode": 0,
"stdout": "fcacae7384b4a38c2675e6527a33cc1d09f4b505\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"origin/codex/ui-redesign-phase4"
],
"exitCode": 0,
"stdout": "fcacae7384b4a38c2675e6527a33cc1d09f4b505\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"main"
],
"exitCode": 0,
"stdout": "27657f31131cd95d42f0e1290853ec9c9b3959a4\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"rev-parse",
"origin/main"
],
"exitCode": 0,
"stdout": "27657f31131cd95d42f0e1290853ec9c9b3959a4\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"ls-remote",
"origin",
"refs/heads/codex/ui-redesign-phase4",
"refs/heads/main"
],
"exitCode": 0,
"stdout": "fcacae7384b4a38c2675e6527a33cc1d09f4b505\trefs/heads/codex/ui-redesign-phase4\n27657f31131cd95d42f0e1290853ec9c9b3959a4\trefs/heads/main\n",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
},
{
"command": [
"rtk",
"proxy",
"git",
"status",
"--porcelain=v1"
],
"exitCode": 0,
"stdout": "",
"stderr": "[rtk] /!\\ No hook installed — run `rtk init -g` for automatic token savings\n"
}
]
},
"baselines": [
{
"source": "job-tracker-ui/src/views/PublicCvPage.tsx",
"blobCommit": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"path": ".artifacts/phase7/p7-04/public/entry-source/job-tracker-ui/src/views/PublicCvPage.tsx",
"sha256": "9b32e53f92359052e69583a90526fdebce2f2df02c80369d0d9e6748ad1a6210",
"bytes": 3574,
"hashPolicy": "Exact Git blob bytes"
},
{
"source": "job-tracker-ui/src/public-cv-page.test.tsx",
"blobCommit": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"path": ".artifacts/phase7/p7-04/public/entry-source/job-tracker-ui/src/public-cv-page.test.tsx",
"sha256": "f9f96d2cea8689ce795f998553db7741f4672e32c542d9b1b920be3b893fad1c",
"bytes": 1581,
"hashPolicy": "Exact Git blob bytes"
},
{
"source": "job-tracker-ui/src/App.tsx",
"blobCommit": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"path": ".artifacts/phase7/p7-04/public/entry-source/job-tracker-ui/src/App.tsx",
"sha256": "b7032f52def046a6f6104839a0acb6e6bd8c85b9cdfb73b6912a0923a85a0b16",
"bytes": 27290,
"hashPolicy": "Exact Git blob bytes"
},
{
"source": "job-tracker-ui/src/components/ViewStateNotice.tsx",
"blobCommit": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"path": ".artifacts/phase7/p7-04/public/entry-source/job-tracker-ui/src/components/ViewStateNotice.tsx",
"sha256": "7b6c3e6c311860897eb5327936dbb129e860781929cfd9a4d4e17f81c607c70c",
"bytes": 2312,
"hashPolicy": "Exact Git blob bytes"
},
{
"source": "job-tracker-ui/src/layout/PageLayout.tsx",
"blobCommit": "fcacae7384b4a38c2675e6527a33cc1d09f4b505",
"path": ".artifacts/phase7/p7-04/public/entry-source/job-tracker-ui/src/layout/PageLayout.tsx",
"sha256": "31c7510446382039cd24b96e5709d5d8dfd00a0b84fd319a53183d1da6c2efa4",
"bytes": 2280,
"hashPolicy": "Exact Git blob bytes"
}
],
"libraryAcceptance": "Conditional with human/context/provider/output/production qualifications",
"dependencies": "Keep exact fixedA4/white iframe/sandbox/noindex/anonymous public HTML+PDF guards; prescribed16/36+8/24 when preview touched; no backend/model/save/Phase8/main work"
}
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,104 @@
{
"schemaVersion": 1,
"checkpoint": "p7-04",
"status": "PASS",
"checkedUtc": "2026-10-12T22:24:04.886934+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-12T22:24:01.388438+00:00",
"finishedUtc": "2026-10-12T22:24:04.240173+00:00",
"exitCode": 0,
"log": ".artifacts/phase7/current/static/20261012T222401Z/secret-scan.log",
"logSha256Raw": "c5a88d5ebdc042adba125c1eaacbe44f9f4a5c19898c0f195573c00d511aa28d"
},
{
"name": "working-whitespace",
"command": [
"rtk",
"proxy",
"git",
"diff",
"--check"
],
"startedUtc": "2026-10-12T22:24:04.240675+00:00",
"finishedUtc": "2026-10-12T22:24:04.325036+00:00",
"exitCode": 0,
"log": ".artifacts/phase7/current/static/20261012T222401Z/working-whitespace.log",
"logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6"
},
{
"name": "staged-whitespace",
"command": [
"rtk",
"proxy",
"git",
"diff",
"--cached",
"--check"
],
"startedUtc": "2026-10-12T22:24:04.325036+00:00",
"finishedUtc": "2026-10-12T22:24:04.415611+00:00",
"exitCode": 0,
"log": ".artifacts/phase7/current/static/20261012T222401Z/staged-whitespace.log",
"logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6"
},
{
"name": "phase7-whitespace",
"command": [
"rtk",
"proxy",
"git",
"diff",
"--check",
"b5319981ad3d1bd635daff861453d23c0de5320b"
],
"startedUtc": "2026-10-12T22:24:04.415611+00:00",
"finishedUtc": "2026-10-12T22:24:04.546953+00:00",
"exitCode": 0,
"log": ".artifacts/phase7/current/static/20261012T222401Z/phase7-whitespace.log",
"logSha256Raw": "d2993bc68ad9a63f711c8f5473155e2ba00fdcd461220cc3849185f2f9ad93e6"
}
],
"untrackedSecretScan": {
"files": 0,
"findings": 0
},
"documentation": {
"files": 11,
"relativeLinks": 412,
"errors": []
},
"preservation": {
"groups": 57,
"statuses": {
"PARTIAL": 56,
"PASS": 0,
"FAIL": 0,
"DEFERRED": 1
},
"originalRoutesPreserved": true,
"currentConcreteRoutes": 32
},
"production": {
"main": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"originMain": "27657f31131cd95d42f0e1290853ec9c9b3959a4",
"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."
]
}