PERSONAL REVIEW EDIT MERGE
# Architecture Plan — Merge the data reviewer into Settings → Personal ("Review & Edit") Status: ALL 7 BUNDLES SHIPPED on branch `feat/personal-review-edit-merge` (2026-06-24), 1.50.848 → 1.50.854. Each bundle is e2e/unit-verified (pwa/test/diag-personal-merge*.mjs). NOT yet merged to main / not pushed. Owner spot-check still pending on the bundle-4 Languages prefer-richer merge (live data). Shipped bundles: 1 launcher Account→Personal · 2 collapsible cards + role collapse · 3 editable tone editors (hosts WritingStylePicker sub-editors) · 4 Languages/Interests/Accessibility Additional sub-blocks · 5 FAB removal + personality results/Retake · 6 hide native dupes (coverage-proven CSS sidecar) · 7 account-locked import verified. Plus: repaired the e2e harness gate-seed and fixed two latent bugs it surfaced (AntcvReactIslands namespace clobber; personality card stale anchor). --- Owner brief: move the high-quality "Review my data" reviewer and merge its functionality into the Personal tab; complete the gaps; make every sub-panel editable, collapsible, language-aware; retire the duplicate native Personal controls. ### Owner decisions (2026-06-24) — these govern the design 1. **The modal IS the presentation.** "Review my data is the new modal from my point of view, this is how I want things presented." So we KEEP the modal layout as the review/edit surface — we do NOT inline it into the Personal flex column. The Personal-tab native inline editors go away; the modal's **launch button moves from Account (privacy zone) → Personal tab**. The modal itself gets the gaps/edit/collapse work. 2. **Languages:** `sections.cv.languages` is canonical; one-time prefer-richer merge from the Additional-info rows. (Owner spot-check gated.) 3. **FABs:** remove the floating 🔒 Export / 📥 Import FABs entirely — controls live in the Personal tab (and the modal footer) only. --- ## 0. Current state (verified) Three independent surfaces today edit the SAME `personalInfo` store but look and behave differently: | Surface | Built in | Loaded by | Quality | |---|---|---|---| | **"Review my data" modal** | `pwa/antcv-data-export-360.js` (vanilla DOM, `openReview()` → `window.AntcvReviewData`) | index.html:972 | HIGH read layout; only Identity/Summary/Experience/Sidebar/Visibility are editable. Tone + Languages are **read-only chips** that explicitly say "Edit these in Settings → Personal" (`:424-425`). | | **Settings → Personal native controls** | `pwa/app.src.js` ~22270-23000 (flex column, order-based) | app.js | Name, Headline, Quick contact, Background, CV Sidebar — duplicate the reviewer, lower fidelity. | | **Personal React islands** | `src/islands/*.tsx` → `pwa/antcv-react-islands.js` (vite build) | index.html:989 | WritingStylePicker (banned words/phrases per-language + bank + bulk-paste + semantic-constraint editor, **export/import-correct**), LanguageCard, JobSearchTargeting. | Plus standalone sidecars already in Personal: `antcv-personality-quiz-439.js` (Personality kernel card with Take/Retake), `antcv-sections-normalize-415.js` (explodes Additional → `languages`/`interests`/`accessibility` sidebar sections), `antcv-additional-info-row-controls-247.js`. ### The core problem The best-looking surface (the modal) has two read-only panels; the full tone/language editors live elsewhere; and the Personal tab duplicates identity/contact at lower fidelity. The owner wants the modal to be THE review/edit surface, launched from Personal, with editing everywhere — and the Personal tab stripped of the duplicates. ### Canonical data model (single source of truth — do NOT add parallel write paths) | Data | Store | Canonical writer | Notes | |---|---|---|---| | Identity, summary, experience, sidebar (tools/edu/cert/regulatory/additional), visibilityControls | `personalInfo.*` | reviewer `rdSavePI` / app.js | reviewer already edits these | | Banned words/phrases (cross-lang) | `personalInfo.stylePrefs.banned_words` / `banned_phrases` (csv) | WritingStylePicker `writeWritingPrefs` | | | Banned words/phrases (per-lang) | `personalInfo.writingPrefs.extraBannedWords[lang]` / `extraBannedPhrases[lang]` (`en/da/es/zh`) | WritingStylePicker | "All languages" = union across buckets | | Semantic constraints (canonical) | `personalInfo.stylePrefs.semanticConstraintsV2[]` | WritingStylePicker `writeSemRules` | also regenerates flat `bannedContextual[]` for the prompt — keep both in parity | | Languages | `personalInfo.languages[]` AND exploded `sections.cv[{id:'languages'}]` | LanguageCard / 415 | **two sources; reconcile — see W2; section is canonical (owner)** | | Interests / Accessibility | `sections.cv[{id:'interests'|'accessibility'}]` | 415 normalize | | | Personality kernel | `personalInfo.personality` | `antcv-personality-quiz-439.js` | traits[] + work_style_line | | Job-search targeting | localStorage prefs | JobSearchTargeting island | | | Account-locked export | `.locked.json` `{_antcvBackupUserBound, owner, iv, ciphertext}` AES-256-GCM, server key `/api/export-key` | export-360 `exportUserBound` | import-331 already decrypts (`:250`) | **Design principle:** every editor writes through the EXISTING canonical writer for its store. We relocate/host editors; we do not duplicate write logic. This is what guarantees export/import parity for the tone controls for free. --- ## 1. Target architecture (modal = presentation; Personal = lean launcher) **A. Relocate the launcher.** The `Review my data` button (renamed **"Review & Edit my data"**) moves from the Account/privacy zone into Settings → Personal. The `Export (account-locked)` control also lives in Personal (it already sits in the modal footer too). **B. Strip the Personal tab down.** The native inline editors the modal already covers are hidden, and the WritingStylePicker island's Banned/Phrases/Semantic sub-sections are hidden in Personal (they become editable inside the modal).
fill the variables
This prompt has 3 variables. Pro fills them into a ready-to-paste prompt for you — no manual find-and-replace.
{id:'languages'}{id:'interests'|'accessibility'}{_antcvBackupUserBound, owner, iv, ciphertext}
Unlock with Pro →when to use it
Community prompt sourced from the open-source GitHub repo gabrielk83/AntCV (no explicit license). A "PERSONAL REVIEW EDIT MERGE" style prompt — adapt the placeholders and specifics to your task. Imported as-is and not independently retested here, so check the output before relying on it.
tags
roleplaycommunitygeneral
source
gabrielk83/AntCV · no explicit license