# Rename Map for FV-CMS v2.0.0 Generic Refactor

**Goal**: Make FreshVibe CMS truly generic. No "Oscar" in source code, comments, or globals. Keep back-compat aliases.

**Branch**: `feat/generic-v2-rename` (worktree: `/workspace/freshvibe-cms.worktrees/generic-v2/`)

**Base**: `9b87281 ID10 v0.6 Day 1` (current main, FV-CMS v1.3.0/manifest 1.4.0)

**Target**: v2.0.0/manifest 2.0.0

---

## RENAME RULES (apply in this order)

### Rule 1: Globals (window.__oscar* and window.Oscar*)

Replace all `__oscar*` and `Oscar*` window globals with `__fvcms*` and `Fvcms*` versions. KEEP the old names as back-compat aliases that delegate to the new ones.

| Old name | New name | Alias line (added at end of file) |
|---|---|---|
| `window.__oscarTogglePanel` | `window.__fvcmsToggleDevPanel` | `window.__oscarTogglePanel = window.__fvcmsToggleDevPanel;` |
| `window.__oscarCmsTogglePanel` | `window.__fvcmsToggleCmsPanel` | `window.__oscarCmsTogglePanel = window.__fvcmsToggleCmsPanel;` |
| `window.__oscarEscapeHtml` | `window.__fvcmsEscapeHtml` | `window.__oscarEscapeHtml = window.__fvcmsEscapeHtml;` |
| `window.__oscarToastTimer` | `window.__fvcmsToastTimer` | `window.__oscarToastTimer = window.__fvcmsToastTimer;` |
| `window.OscarPanelManager` | `window.FvcmsPanelManager` | `window.OscarPanelManager = window.FvcmsPanelManager;` |
| `window.__oscarCmsAllWidgetsOn` | `window.__fvcmsCmsAllWidgetsOn` | `window.__oscarCmsAllWidgetsOn = window.__fvcmsCmsAllWidgetsOn;` |
| `window.__oscarCmsBootData` | `window.__fvcmsCmsBootData` | `window.__oscarCmsBootData = window.__fvcmsCmsBootData;` |
| `window.__oscarCmsBuildModuleRow` | `window.__fvcmsCmsBuildModuleRow` | `window.__oscarCmsBuildModuleRow = window.__fvcmsCmsBuildModuleRow;` |
| `window.__oscarCmsBuildStructureContent` | `window.__fvcmsCmsBuildStructureContent` | `window.__oscarCmsBuildStructureContent = window.__fvcmsCmsBuildStructureContent;` |
| `window.__oscarCmsClearHighlight` | `window.__fvcmsCmsClearHighlight` | `window.__oscarCmsClearHighlight = window.__fvcmsCmsClearHighlight;` |
| `window.__oscarCmsDevKeyBound` | `window.__fvcmsCmsDevKeyBound` | `window.__oscarCmsDevKeyBound = window.__fvcmsCmsDevKeyBound;` |
| `window.__oscarCmsFes` | `window.__fvcmsCmsFes` | `window.__oscarCmsFes = window.__fvcmsCmsFes;` |
| `window.__oscarCmsFocusPanel` | `window.__fvcmsCmsFocusPanel` | `window.__oscarCmsFocusPanel = window.__fvcmsCmsFocusPanel;` |
| `window.__oscarCmsGetSelection` | `window.__fvcmsCmsGetSelection` | `window.__oscarCmsGetSelection = window.__fvcmsCmsGetSelection;` |
| `window.__oscarCmsHideOverlays` | `window.__fvcmsCmsHideOverlays` | `window.__oscarCmsHideOverlays = window.__fvcmsCmsHideOverlays;` |
| `window.__oscarCmsHighlightRegion` | `window.__fvcmsCmsHighlightRegion` | `window.__oscarCmsHighlightRegion = window.__fvcmsCmsHighlightRegion;` |
| `window.__oscarCmsInspect` | `window.__fvcmsCmsInspect` | `window.__oscarCmsInspect = window.__fvcmsCmsInspect;` |
| `window.__oscarCmsMounted` | `window.__fvcmsCmsMounted` | `window.__oscarCmsMounted = window.__fvcmsCmsMounted;` |
| `window.__oscarCmsOpenEditor` | `window.__fvcmsCmsOpenEditor` | `window.__oscarCmsOpenEditor = window.__fvcmsCmsOpenEditor;` |
| `window.__oscarCmsRefresh` | `window.__fvcmsCmsRefresh` | `window.__oscarCmsRefresh = window.__fvcmsCmsRefresh;` |
| `window.__oscarCmsSetDevMode` | `window.__fvcmsCmsSetDevMode` | `window.__oscarCmsSetDevMode = window.__fvcmsCmsSetDevMode;` |
| `window.__oscarCmsShowOverlays` | `window.__fvcmsCmsShowOverlays` | `window.__oscarCmsShowOverlays = window.__fvcmsCmsShowOverlays;` |
| `window.__oscarCmsStageFBadge` | `window.__fvcmsCmsStageFBadge` | `window.__oscarCmsStageFBadge = window.__fvcmsCmsStageFBadge;` |
| `window.__oscarCmsToggleAllWidgets` | `window.__fvcmsCmsToggleAllWidgets` | `window.__oscarCmsToggleAllWidgets = window.__fvcmsCmsToggleAllWidgets;` |
| `window.__oscarCmsUndo` | `window.__fvcmsCmsUndo` | `window.__oscarCmsUndo = window.__fvcmsCmsUndo;` |
| `window.__oscarCmsUndoStack` | `window.__fvcmsCmsUndoStack` | `window.__oscarCmsUndoStack = window.__fvcmsCmsUndoStack;` |

### Rule 2: Class/identifier names (Oscar*)

| Old | New |
|---|---|
| `OscarPanelManager` | `FvcmsPanelManager` |
| `OscarEdgePanel` | `FvcmsEdgePanel` |
| `OscarContentSeed` | `FvcmsContentSeed` |
| `oscarCmsEditable` | `fvcmsEditable` |
| `oscarCms*` (any other camelCase) | `fvcms*` (lowercase) |

### Rule 3: Fragment IDs

| Old | New |
|---|---|
| `fragment.oscar.cms-data` | `fragment.fvcms.cms-data` |
| `fragment.oscar.cms-panel` | `fragment.fvcms.cms-panel` |
| `fragment.oscar.dev-btn` | `fragment.fvcms.dev-btn` |
| `fragment.oscar.dev-panel` | `fragment.fvcms.dev-panel` |
| `fragment.oscar.floating-buttons` | `fragment.fvcms.floating-buttons` |
| `fragment.oscar.module-editor` | `fragment.fvcms.module-editor` |
| `fragment.oscar.panel-manager` | `fragment.fvcms.panel-manager` |
| `fragment.oscar.region-editor` | `fragment.fvcms.region-editor` |
| `fragment.oscar.trace` | `fragment.fvcms.trace` |
| `fragment.oscar.watermark-hider` | `fragment.fvcms.watermark-hider` |

### Rule 4: Comments mentioning Oscar

Replace comments that mention "Oscar" with neutral language:
- "Oscar's" → "the host's" (or "Fvcms'" if referring to a sibling module)
- "Oscar" → "Fvcms" or "the host application"
- "designed to work alongside Oscar" → "designed to work alongside the host application"
- "Oscar install" → "Fvcms install"
- "(e.g. Oscar-web)" → "(e.g. the host application)"

**DO NOT** touch:
- `app-pact/shadow/` (intentional historical archive, kept for reference)
- `docs/_code-references/` (legacy code samples)
- Comments that mention `avidtech6/oscar-cms` (different product, not our project)
- `oscar-web` in `sites.canonical.json` (different product reference)

### Rule 5: VERSION bump

- `FV-CMS-VERSION.txt`: `1.3.0` → `2.0.0`
- `FV-CMS-MANIFEST.json`: `"version": "1.4.0"` → `"version": "2.0.0"`
- `package.json`: any version field → bump
- `runtime/cms-panel.js`, `bootstrap.js` if they hardcode version

---

## FILES TO TOUCH (audit pre-run)

```
app-fragments/fvcms-cms-panel/fvcms-cms-panel.js
app-fragments/fvcms-dev-btn/fvcms-dev-btn.js
app-fragments/fvcms-dev-btn/fvcms-dev-btn.css
app-fragments/fvcms-dev-panel/fvcms-dev-panel.js
app-fragments/fvcms-dev-panel/fvcms-dev-panel.css
app-fragments/fvcms-floating-buttons/fvcms-floating-buttons.js
app-fragments/fvcms-module-editor/fvcms-module-editor.js
app-fragments/fvcms-module-editor/fvcms-module-editor.css
app-fragments/fvcms-panel-manager/fvcms-panel-manager.js
app-fragments/fvcms-region-editor/runtime/panel-creator.js
app-fragments/fvcms-trace/fvcms-trace.js
app-fragments/fvcms-trace/fvcms-trace.css
runtime/cms-panel.js
runtime/edge-panel/edge-panel.js
runtime/editor-shell.js
runtime/install-editor.js
runtime/outline.js
runtime/panel-manager/panel-manager.js
runtime/visualizer.js
runtime/renderer.js
runtime/selection.js
runtime/content-admin.js
demo/cms-panel.js
bootstrap.js
app-fragments/editor-inspector/v2-inspector.js
app-fragments/editor-inspector/loader-v2.js
app-fragments/editor-inspector/open-v2.js
app-fragments/editor-inspector/index.js
```

**Total**: ~25-30 files. Plus the vendored marker, version files, and package.json.

## VERIFICATION (post-rename)

1. `grep -r "__oscar\|OscarPanelManager\|fragment\.oscar\." --include="*.js" --include="*.css" --include="*.html" --include="*.json"` (excluding `app-pact/shadow/`) should return ZERO results.
2. `grep -r "//.*[Oo]scar\|/\*.*[Oo]scar"` (excluding shadow/) should return ZERO results.
3. Test the build: `cd /workspace/freshvibe-cms && python3 -m http.server 8000` then load `http://localhost:8000/demo/` — verify the chrome still mounts.
4. The VibeCoder bundle on vibecoder.freshvibeapps.com should NOT break (the deployed bundle has the old names; this refactor only affects the source repo and the next vendor pass).

## OUT OF SCOPE

- Re-vendoring VibeCoder source (separate task)
- Re-deploying the VibeCoder bundle (separate task, requires build)
- Bumping Oscar's consumer version (separate task, requires fvcms-update run)
- Re-naming the `panel-bridge.css` etc. CSS files themselves (already named with `fvcms-`)

## METHODOLOGY

For each file, use `sed -i` to do the replacements. Then add the back-compat aliases at the end of the file. Then verify with grep.

Example workflow for one file:
```bash
FILE=app-fragments/fvcms-dev-btn/fvcms-dev-btn.js
# Replace each __oscar* with __fvcms*
sed -i 's/__oscarTogglePanel/__fvcmsToggleDevPanel/g' "$FILE"
sed -i 's/fragment\.oscar\.dev-btn/fragment.fvcms.dev-btn/g' "$FILE"
# Add back-compat alias at the end
cat >> "$FILE" << 'EOF'

// v2.0.0 back-compat alias (deprecated, remove in v3.0.0)
if (typeof window.__fvcmsToggleDevPanel === 'function' && typeof window.__oscarTogglePanel !== 'function') {
  window.__oscarTogglePanel = window.__fvcmsToggleDevPanel;
}
EOF
```

Run `git diff` on each file to verify.
