feat(ui): migrate Career Profile structured editor
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# P7-03 — Career structured editing and import review
|
||||
|
||||
**Status: accepted entry with mandatory dependencies; implementation/verification results PENDING.** Follow the [approved handoff](../../phase-6/p6-05/PHASE7_HANDOFF.md#migration-order-and-commit-boundaries): a structured-editor presentation commit, then a separate import/history presentation commit. The newly identified source-ID prerequisite is a separate bounded repair before those presentation changes; it does not introduce another checkpoint or schema.
|
||||
**Status: structured editor CONDITIONAL GO; final staged hygiene PASS, normal push PENDING. Import/history presentation remains PENDING.** Follow the [approved handoff](../../phase-6/p6-05/PHASE7_HANDOFF.md#migration-order-and-commit-boundaries): a structured-editor presentation commit, then a separate import/history presentation commit. The source-ID prerequisite was a separate bounded repair before those presentation changes; it does not introduce another checkpoint or schema.
|
||||
|
||||
## Accepted entry and evidence limits
|
||||
|
||||
@@ -18,7 +18,7 @@ First reproduce the loss in ordinary normalizer/payload and actual local canonic
|
||||
|
||||
The initial bounded unit RED at2026-10-12 05:54:52UTC passes25/fails5 of30 ordinary cases: six new normalizer cases plus existing24 Profile cases with the canonical payload assertion strengthened. Actual native baseline06:06:22–06:06:36UTC passes1/fails1 on unchangedqG82; a selected-DTO association timestamp fixture flaw was then corrected. Authoritative native RED06:08:57–06:09:10UTC again passes1/fails1: requested/persisted IDs fail, override title/bullet change from matching to nonmatching, and three null metadata fields become0. Selected/sibling DTOs, both histories and frozen content remain unchanged in the corrected proof. Separate first/corrected command/report/log/trace/embedded-attachment capsules are preserved under `.artifacts/phase7/p7-03/source-id-repair/baseline/` with0skip/retry/flaky; no PDF or concurrency repair follows.
|
||||
|
||||
Two metadata cases extend the bounded new normalizer suite to8; revised unit RED06:08:59UTC passes26/fails6 of32 cases, including valid0/finite/numeric-string preservation. The approved frontend compatibility repair includes eight optional-ID additions and four nullish metadata guards in profileCv.ts, retaining existing field/payload contracts and valid numeric behavior. Baseline profileCv/CareerProfilePage raw snapshots match git show8b4d5c2 canonical LF bytes. Fresh **unit46/3 GREEN passed06:10:43UTC** (normalizer8+existingProfile24+workspace14); final native2/preservation2 and app/browser types/lint/build pass; later final staged whitespace failed; corrected full staged recheck PASS; normal hygiene successor/push remains **PENDING**. Null confidence is unit-proven; native RED captures the other three null fields. Planned618/90 adds eight cases/one suite to prior derived610/89, superseding the earlier six-case616 expectation; neither is a fresh full run. Forward ID preservation cannot safely remap older orphaned overrides automatically: historical records remain, with recovery requiring a separate justified decision.
|
||||
Two metadata cases extend the bounded new normalizer suite to8; revised unit RED06:08:59UTC passes26/fails6 of32 cases, including valid0/finite/numeric-string preservation. The approved frontend compatibility repair includes eight optional-ID additions and four nullish metadata guards in profileCv.ts, retaining existing field/payload contracts and valid numeric behavior. Baseline profileCv/CareerProfilePage raw snapshots match git show8b4d5c2 canonical LF bytes. Fresh **unit46/3 GREEN passed06:10:43UTC** (normalizer8+existingProfile24+workspace14); final native2/preservation2 and app/browser types/lint/build pass; later final staged whitespace failed; corrected full staged recheck PASS; normal chronological repair3047b6c4/hygiene704637a push directly verified06:34:48UTC. Null confidence is unit-proven; native RED captures the other three null fields. Planned618/90 adds eight cases/one suite to prior derived610/89, superseding the earlier six-case616 expectation; neither is a fresh full run. Forward ID preservation cannot safely remap older orphaned overrides automatically: historical records remain, with recovery requiring a separate justified decision.
|
||||
|
||||
### Prerequisite runtime and finite acceptance
|
||||
|
||||
@@ -28,7 +28,7 @@ Root verified all11 readback flags TRUE: IDs match all three recorded source sna
|
||||
|
||||
Root actually opened two final PNGs plus the corrected-RED failure viewport image. The final390x4683 existing-editor image reaches Save/content and captures sticky chrome at current scroll. The frozen-package image blends underlying workspace/chrome through the dialog; its possible transition cause is undiagnosed and settled-dialog visual acceptance remains P7-06/P7-11 qualification. These finite inspections are not a cosmetic migration or new responsive/theme/human acceptance. Both native lanes contain **0 axe attachments**; the earlier P7-02 incomplete inventory/manual gates remain, and no new axe clearance is inferred.
|
||||
|
||||
**Bounded runtime compatibility repair GO; corrected full staged hygiene PASS, normal hygiene successor/push PENDING.** Structured-editor and import/history presentation, old orphaned-override recovery and all manual/production gates remain pending. Fullfrontend618/90 and ordinarybrowser216 are derived only after this +8/+1-suite addition; no fresh full-suite result replaces inherited573/89.
|
||||
**Bounded forward compatibility repair GO; corrected full staged hygiene PASS, normal repair/hygiene push verified.** Structured-editor and import/history presentation, old orphaned-override recovery and all manual/production gates remain pending. Fullfrontend618/90 and ordinarybrowser216 are derived only after this +8/+1-suite addition; no fresh full-suite result replaces inherited573/89.
|
||||
|
||||
Slice-specific [source-ID static checks](evidence/source-id-static-checks.json) passed2026-10-12 06:21:50–06:21:53UTC: four secret/working/staged/entry-whitespace commands exit0;10 Markdown documents/370 local links checked with0errors at observation;57 qualified groups/32 routes retained, main unchanged. Canonical UTF-8/LF SHA256 is `3a910cd0041f2cf855484c161b21bc4f4b1de7446af80600315b4fcf18e76863`; exact static snapshot/log bytes are retained in the final capsule. Root independently verified81 refs/62 unique files and75-file frozen export before later review/receipt metadata. Normal push receipt remains pending; no new runtime or manual claim follows.
|
||||
|
||||
@@ -38,10 +38,52 @@ Root created local **unpushed** repair `3047b6c4a87c43de6f397e4a3d109be9ce3ddeca
|
||||
|
||||
As-run test bytes/hashes remain frozen at3047b6c4; the original normalizer-test canonical hash now points to its immutable snapshot. Corrected test raw/LF metadata and exact historical failure command/log are recorded separately in the manifest. A normal successor commit will contain only this test whitespace and transparent evidence/docs correction after a **fresh full staged gate**. Both commits remain chronological, with no rewrite/force push. Prior06:21 static PASS is historical, not the corrected final gate; fresh corrected full staged gate now passes; normal hygiene successor commit and normal push remain pending.
|
||||
|
||||
Fresh [hygiene-correction static checks](evidence/source-id-hygiene-correction-static-checks.json) passed2026-10-12 06:32:09–06:32:12UTC with all four commands0,10docs/374 local links0errors at observation,57 groups/32 routes retained and main unchanged. Canonical UTF-8/LF SHA256 is `24c3147e21e266e2b2d9e22cc1f0f716da791b730d280328d3ceae02fb5e67e1`; exact static/log bytes are frozen separately. Original failure,3047 source applicability and all as-run snapshots remain unchanged. The normal hygiene successor and subsequent two-commit push are pending.
|
||||
Fresh [hygiene-correction static checks](evidence/source-id-hygiene-correction-static-checks.json) passed2026-10-12 06:32:09–06:32:12UTC with all four commands0,10docs/374 local links0errors at observation,57 groups/32 routes retained and main unchanged. Canonical UTF-8/LF SHA256 is `24c3147e21e266e2b2d9e22cc1f0f716da791b730d280328d3ceae02fb5e67e1`; exact static/log bytes are frozen separately. Original failure,3047 source applicability and all as-run snapshots remain unchanged. They were pending at this staged-gate observation; the actual normal two-commit push is recorded in the structured-editor entry below.
|
||||
|
||||
Before changing save/history ownership, resolve or explicitly bound RD21 canonical profile/job stale-save and creation-intent behavior with actual stale-write/recovery tests. Prove dirty drafts survive UI-locale changes and relevant read-retry/navigation boundaries; prove held-PUT/pending-write snapshots, edit/save completion ownership and recoverable failure. Existing verified CV revision handling is a different contract. Presentation migration must retain current data-saving semantics and existing guards; do not infer a missing server token or invent one.
|
||||
|
||||
## Structured-editor entry after prerequisite push
|
||||
|
||||
Actual normal push2026-10-12 06:34:48.620963UTC includes repair `3047b6c4a87c43de6f397e4a3d109be9ce3ddeca` and hygiene successor `704637ab375c32d14aa46f9d4ef0f210136de4d9`: localHEAD=origin=live development704637a, local/origin/live main27657f3 unchanged and clean worktree at observation. The successor appends this receipt; both commits and the unhandled original whitespace failure remain chronological. All three measured test canonical references now use their immutable as-run snapshots after legitimate editor-test changes; source3047 and corrected hygiene test metadata remain distinct, with no hash/runtime reinterpretation.
|
||||
|
||||
CareerProfilePage/CareerProfileSections raw baselines are frozen under `.artifacts/phase7/p7-03/editor/baseline/source/`, canonical LF equal git show704637a. Baseline translations are the **committed Git blob**, SHA256 `fea1eb8ba58a5b4ff86c33fa651ec542fe6df46dcbade226790737dc5994d30c`, rather than the already edited worktree catalog. Root prepared five new bilingual keys and five existing-copy entries for meaningful unit RED expectations. Native baseline uses unchanged prebuiltbzQi/704637a old labels and H3/UI contract; no presentation PASS follows from the new test catalog. Existing75-file export is referenced without duplication. Initial editor RED is recorded below; implementation and final acceptance remain **PENDING**. Latest full573/89 remains inherited and618/90/browser216/backend1,034 are derived only.
|
||||
|
||||
### Structured-editor failing baseline
|
||||
|
||||
Actual first native execution2026-10-12 06:38:45–06:40:15UTC fails all11 ordinary cases, with0passes/skips/flaky/retries. The affected unit pack06:40:10–06:40:44UTC passes38/fails8 of46 cases across3 suites: new editor1/7, existing Profile23/1 and workspace14/0;0pending/todo or console errors. The deliberate old-copy expectation failure remains visible. Raw commands/reports/logs, the entire native results/trace folder,28 decoded attachments including12 PNGs, and seven as-run source/test/catalog owners are frozen under `.artifacts/phase7/p7-03/editor/baseline/native-first/`. Product page/sections snapshots still equal the accepted704637a baseline. Native raw report SHA256 is `66aa335e861d61d7255ae93875a850e63788aafb93d1066f96d62febdc4ce55a`; `baseline-results.json` preserves full rule/node/check vectors and exact provenance.
|
||||
|
||||
The reproduction shows a locale change repeating GET and overwriting phone/raw drafts, held PUT leaving35 fields/26 actions and raw editing enabled while Bold changes the draft, and an actual controlled400 showing no form error. Root actually inspected only the320px NB/dark baseline image: its350px-wide full-page capture shows30px overflow while the form fields remain inside. Other PNGs are retained without claiming individual inspection. Twelve all-enabled scans record0violation nodes/**408 incomplete contrast occurrences**:396 overlapping-background checks and12 short-text badges. Per-state counts are6 for the locale view,37 for six narrow/pending/error views and36 for five desktop/tablet views; M09/M11 contextual/human qualification remains. These failing results establish the bounded repair scope; they provide no editor GO, settled visual conformance or import/history acceptance.
|
||||
|
||||
A separate overlapping narrow diagnostic executed2026-10-12 10:37:40–10:37:51UTC fails the same320px NB/dark ordinary case, with0skip/flaky/retry. Its raw report/log/command/results/trace, diagnostic audit and PNG are frozen under `.artifacts/phase7/p7-03/editor/baseline/native-narrow/`; raw report SHA256 `d4e2a23c3ad880c50a7a23cc3e5cb9da02f740caac347cc52893074a313a77a8`. The actual DOM records30px root overflow and20 overflowing elements, including outer navigation/editor boxes ending at349.6875px, while all35 form fields end at or before314.6875px. This establishes geometry, with source cause/repair requiring separate review. Its single scan retains0violations/37 incomplete contrast occurrences; it overlaps the first baseline and adds no test or independent full-scope acceptance count. No individual inspection of its new PNG is claimed.
|
||||
|
||||
### Structured-editor unit-green candidate
|
||||
|
||||
Fresh affected unit execution2026-10-12 10:46:11–10:46:43UTC passes54/4 with0failed/pending/todo: editor8+existing Profile24+workspace14+normalizer8. App TypeScript exits0 at10:46:21–10:46:32UTC. Three product owners, four unit owners and the native spec, plus exact command/report/log bytes, are snapshotted under `.artifacts/phase7/p7-03/editor/candidate-20261012T104643Z/`. This is a **candidate**, awaiting final browser TypeScript/lint/build, ordinary native editor11/sourceID2/Career14/preservation2, actual visual/axe contextual review and staged hygiene/push. The eight added editor cases/one suite yield frontend626/91 as a derived expectation only; existing Profile/workspace expectation updates add no cases. Import/history presentation and manual/production gates remain pending.
|
||||
|
||||
### Native candidate history; acceptance withheld
|
||||
|
||||
The first post-implementation ordinary editor run10:47:48–10:48:38UTC passes8/fails3 of11 with0skip/flaky/retry. Actual durable-error alerts omitted the general failure heading beside server detail, and a320px ProFeatureNotice message was scrollable without keyboard focus. Its12 scans retain8 violations (7 inactive helper-text contrast and1 scrollable-region focusability) plus374 incomplete contrast occurrences. Root then corrected the local notice wrapping and error heading. The earlier browser TypeScript duplicate diagnostic property TS1117 failure is retained; removing only the duplicate property left the stronger diagnostic and fresh browser typecheck passed. Raw commands/reports/logs/results/traces, decoded evidence and parent-confirmed original candidate sources remain under `.artifacts/phase7/p7-03/editor/attempt1-20261012T104838Z/`. **Original DwxCC BUILD_ID/export bytes were overwritten by the corrected build before the freeze could copy them**; exact build command/log and directly observed identity remain, with no retroactively reconstructed export claim.
|
||||
|
||||
The corrected `jjBcTV3XoPOhWzOYiJ0FR` candidate passes affected54/4 and app/browser types/lint/build, then ordinary editor11/sourceID2/Career14/preservation2 at10:52:33–10:54:46UTC:29 finite overlapping cases,0skip/flaky/retry. Its75-file export, source/tests/API/config, reports and decoded evidence are frozen under `.artifacts/phase7/p7-03/editor/attempt2-20261012T105446Z/` as a **historical attempt with acceptance withheld**; the [current editor evidence](evidence/editor-results.json) records the final superseder below. Editor12 all-enabled scans retain7 actual held-save helper-text contrast violations: six4.48:1 on white and one4.14:1 on the secondary surface, all `.Mui-disabled` “One item per line.” descriptions. They are retained rather than silently excluded. Incompletes374 comprise361 background overlaps,12 short-text badges and1 partially obscured error alert. The separate22 Career regression scans retain0violations/99 incompletes; source-ID/preservation lanes contain0axe scans. All12 editor root-overflow measurements are0, but native PASS alone supplies no axe or manual GO. Parent viewed three images (NB320, EN360 and EN1920); nine others have no individual review claim at that observation. Further corrections and final acceptance follow below. Whole P7-03 import/history remains incomplete.
|
||||
|
||||
### Final structured-editor result
|
||||
|
||||
[Final editor evidence](evidence/editor-results.json) records three changed product owners and five measured test owners, preserved under `.artifacts/phase7/p7-03/editor/final-expanded/`. The editor now uses shared sections and semantic headings, contextual remove actions, localized instructions and save/error feedback, and narrow layouts. UI-locale changes retain structured/raw dirty drafts without repeating their source GET. Held saves lock the submitted editing surface, including rich-text and expanded raw controls; durable failures retain draft and server detail with a localized heading/retry. Generic fallback errors follow the current UI locale. The local ProFeatureNotice wraps, and disabled helpers use the existing text-secondary token in both structured and raw sections. Canonical saving, source IDs, sibling overrides, histories and frozen documents keep their established owners and semantics.
|
||||
|
||||
Fresh affected **54/4 PASS** at2026-10-12 11:13:30–11:14:03UTC comprises eight new editor cases plus existing Profile24/workspace14/normalizer8, with0failed/pending/todo. App/browser TypeScript, lint and production build exit0; the latest browser TypeScript at11:16:54–11:16:58 covers the final native oracle. Build `W4fUO7_GUC0Qh5FuL3qVL` has75 frozen exported files/digest `6e60c305555153d3379be3dac24c0845cf7665855bb7bcba95b26b9131cfd33c`; three-product LF digest `75fa95c655d9e3361af9209a82ce9e64f9a6091a4806752bdb32fa76a7be5b1a`. API identity is unchanged; no new backend build/test is claimed.
|
||||
|
||||
Final ordinary editor **11/11 PASS** at11:16:54–11:17:44UTC includes13 captured states. Its strengthened oracle requires the raw disclosure expanded, textarea visible/in viewport, nonempty field inventories in both areas, expected raw label and0axe violations in every captured state. Source-ID2/Career14/ordinary P2-D01 and mobile-override2 also pass on the same unchanged export at11:14:58–11:16:22UTC. These29 finite overlapping cases have0skipped/unexpected/flaky/retries; the final editor rerun supersedes its earlier test-only capture/geometry oracle, while the other18 unchanged-source results remain applicable. Full frontend **573/89 remains inherited**; **626/91**, browser227 and backend1,034 are derived expectations only. Added editor8/+1 suite and native11 are the only new count increments here.
|
||||
|
||||
Root actually inspected **all13 final PNGs**: locale/held structured/held expanded raw/failed save/actual400 plus eight finite width-language-theme samples spanning320–1920px and1280x320 landscape. Recorded geometry has0accidental root overflow. Expanded raw held390 visibly contains the disabled textarea/readable helper; locale1440 retains the dirty raw draft. Deep-scroll/full-page sticky chrome, visible skip-link and toast overlays retain capture/focus qualifications. Controlled500 and actual400 English server details are retained provenance, alongside localized product headings/fallbacks. No physical input, browser zoom, human assistive technology, density matrix, provider or production qualification is inferred.
|
||||
|
||||
Editor **13 all-enabled axe scans** retain **0violation nodes/377 incomplete occurrences**:362 contrast background overlaps,13 invisible-badge short-text checks, one partially obscured actual400 toast/alert context and one aria-hidden-focus context at the hidden MUI select portal `#menu-` (`li[data-value=import]`, tabindex0). The separate Career22 scans retain0/99 (74contrast overlaps,22badges,3hidden evidence-select portal contexts); source-ID/preservation lanes have0axe attachments. Every category/context remains retained, with full vectors in hashed raw/extracted reports. M09/M11 reader/portal-focus and contextual contrast/forced-colors requirements remain open; these contexts are neither hidden nor treated as established new defects.
|
||||
|
||||
History retains meaningful generic-locale unit6PASS/2FAIL and native10PASS/1FAIL helper contrast RED, as well as raw-expanded0/1 RED (one4.48:1 helper contrast failure) before the final scoped correction. Earlier13-capture PASS with a collapsed raw panel remains coverage-limited. Old0UBD12-state source/export/results are retained consistently under `attempt3-20261012T110336Z`, with original metadata bytes and explicit reference-prefix relocation; the final W4 capsule uses `final-expanded`, so old source/export hashes are never relabelled current. The original DwxCC export retention gap above remains. Invalid runner aliases asserted before launch; an initially wrong unit selector produced46/3 and was corrected to54/4. These tooling/selection corrections add no skipped cases or passing scope. Root and this agent independently verified **290 references/197 unique files,75 exported files and eight current source/test files**; the checker's Windows-path ordering correction changed no measured bytes.
|
||||
|
||||
**Structured-editor implemented scope CONDITIONAL GO; final staged hygiene PASS, normal commit/push PENDING.** Import review/history presentation remains the separate approved next slice; whole P7-03 is unfinished. RD21 stale-save/idempotency, old orphaned override recovery, M01–M12/manual/provider/output requirements, deferred M13/P5-13 and production NO-GO remain. All57 PRES statuses remain56 PARTIAL/C11 DEFERRED and32 routes retained. No Phase8 implementation or main push follows.
|
||||
|
||||
[Final staged editor static checks](evidence/editor-static-checks.json) passed2026-10-12 11:30:01–11:30:04UTC: all four secret/working/staged/entry-whitespace commands exit0;10 Markdown documents/384 local links checked with0errors,57 qualified groups/32 routes retained and main unchanged. Canonical UTF-8/LF SHA256 is `18cb0a46e035d6af96b1489509aab0f5979db2a81b635df164bb9759a33b23c5`. Exact JSON and four raw logs are frozen separately in `final-expanded/static/20261012T113001Z`; no new runtime or human acceptance follows. Normal commit/push is pending its actual receipt.
|
||||
|
||||
## Approved presentation boundaries
|
||||
|
||||
| Boundary | Existing owners and bounded change | Required finite acceptance |
|
||||
@@ -57,4 +99,4 @@ Existing [profile tests](../../../../job-tracker-ui/src/profile-page.test.tsx),
|
||||
|
||||
C01–C04/E08/E09 and relevant C07/W07 frozen/override boundaries remain qualified in the [matrix](../PRESERVATION.md). Record raw commands/results/attempts, measured source/build/export identity and every axe violation/incomplete category/context; retain full vectors in hashed immutable reports. Native emulation and finite images do not supply human screen-reader, zoom/reflow, physical touch/software-keyboard, real provider, production-font/photo or deployed-output acceptance. Density is tested only where an actual control applies.
|
||||
|
||||
The source-ID prerequisite has bounded runtime/readback GO; local repair3047b6c4 is unpushed; corrected full staged recheck PASS, normal hygiene successor/push pending. Structured-editor and import/history presentation remain **PENDING**. [Debt](../DEBT.md) retains RD21 separately, M01–M12 manual requirements, deferred M13/P5-13, optional P5-05/`followMode`, production NO-GO and Phase8 separation. Conditional development entry authorizes independent bounded work; it does not declare these gates complete.
|
||||
The source-ID prerequisite has bounded runtime/readback GO; repair3047b6c4 plus hygiene704637a are normally pushed/directly verified; original whitespace failure and exact snapshot relation remain recorded. Structured-editor implemented scope is CONDITIONAL GO with final staged hygiene PASS/normal push pending; import/history presentation remains **PENDING**. [Debt](../DEBT.md) retains RD21 separately, M01–M12 manual requirements, deferred M13/P5-13, optional P5-05/`followMode`, production NO-GO and Phase8 separation. Conditional development entry authorizes independent bounded work; it does not declare these gates complete.
|
||||
|
||||
Reference in New Issue
Block a user