home/roleplay/personal-review-edit-merge

PERSONAL REVIEW EDIT MERGE

GPTClaudeGemini··677 copies·updated 2026-07-14
personal-review-edit-merge.prompt
# 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