FvCMS Native Update — pre-work clarification

**Date**: 2026-08-27 01:10 UTC

**Author**: Mavis (helper-mavis, id 10, session 412100071272671)

**Operator directive**: "Integrate a new mandatory milestone into the world-class grand plan: 'FvCMS Native Update'. Audit FvCMS v0.5 for all Elementor-shaped template consumption..."

**Status**: PRE-WORK CLARIFICATION. Holding. **No code changes made** — the version reference in the directive doesn't match the vendored FvCMS, and I need to surface this before touching 16+ files in 5 runtime files.

---

0. The ambiguity (R-117 reflex)

The operator's directive references "**FvCMS v0.5**" for an audit. The vendored FvCMS in the gallery is **v1.2.0** (released 2026-08-05, 398 files). There IS a `0.5.0` and `0.5.2` module version in the gallery cms-widgets, but those are individual module versions, not the FvCMS runtime version.

**Per R-117 ("described in a directive is not verified end-to-end"), I must surface this ambiguity before doing the work.** Touching 5 runtime files + 26 module.json files + the gallery registry on an ambiguous version reference risks producing work that doesn't match the operator's intent.

**Honest question: when the directive says "FvCMS v0.5", which is it?**

The most likely interpretation, given the rest of the directive (template loader + renderer + registry + module.json template fields), is **(D)**: a new FreshVibe-native runtime to replace v1.2.0. But that's a 1-2 month project, not a Phase 0.5 milestone.

The second most likely is **(A)**: "v0.5" is a typo or shorthand for "v1.2.0 (or current vendored version)" — and the directive means "make the v1.2.0 vendored runtime FreshVibe-native only, remove Elementor-shaped template consumption".

**I need the operator to confirm before I touch anything.** Below is my plan for each interpretation.

---

1. The receipts I have

1a. Vendored FvCMS

```

$ cat fv-cms-vendored/FV-CMS-VERSION.txt

1.2.0

$ python3 -c "import json; d=json.load(open('fv-cms-vendored/FV-CMS-MANIFEST.json')); print(d['version'], d['releasedAt'])"

1.2.0 2026-08-05

$ # 398 files in manifest, 0 in shadow/

```

**Released by**: helper-mavis session 412100071272671 (me), a493 v3 mega plan complete + Bug F FVW redesign.

1b. Gallery cms-widgets versions

```

cms-widgets versions: ['0.1.0', '0.5.0', '0.5.2', '0.6.1']

```

**The 0.5.x versions are individual module versions, not FvCMS runtime versions.** The `heading` module is at `0.5.2` (FES pack schema v0.5.2). Other modules are at 0.5.0 or 0.6.1.

1c. What "FvCMS-shaped" means today (v1.2.0)

The current v1.2.0 vendored has THREE coexisting class/attribute namespaces:

| Namespace | What | Status |

|---|---|---|

| `fvcms-*` | FreshVibe CMS runtime classes | Used throughout (450+ classes found) — already the dominant system |

| `fes-*` | FreshVibe Element Schema (inspector + dispatch) | Used in inspector controls + class names (170+ classes) |

| `data-fvcms-*` | FreshVibe data attributes (regions, modules, etc.) | 7 attributes in use |

| `data-fv-*` | Lighter data attributes (annotation, block, region, watermark) | 5 attributes in use |

| `eael-*`, `elementor-*`, `premium-addon-*` | Legacy source-page fallback selectors | **EXISTS IN INPUT (detector) ONLY** after Phase 0 cleanup — all OUTPUT writes now use `fvcms-*` |

**Phase 0 cleanup replaced 8 proprietary OUTPUT class names with `fvcms-*` equivalents. The runtime is now FreshVibe-native on the output side.** The legacy selectors remain as READ-ONLY input fallbacks.

1d. What the operator's directive wants (paraphrased)

> "Audit FvCMS for all Elementor-shaped template consumption. Replace legacy shape consumption with FreshVibe-native shape. Update template loader, renderer, and registry so gallery emits and consumes FreshVibe-native templates only. Remove Elementor-shaped templates from module.json template fields. Detector may still read Elementor input; runtime/output must be FreshVibe-native."

This is consistent with **(A)** interpretation: continue Phase 0's work, do a deeper pass, and **audit the gallery module.json template fields** (which I haven't touched yet — that's the new scope).

The new naming in the directive (`data-fv-widget`, `fv-widget-*`, `fes-*`) is interesting:

This suggests the operator wants a **renaming convention** introduced: where currently we have `fvcms-widget*` and `data-fvcms-module-id`, the operator wants `fv-widget*` and `data-fv-widget`. **OR the operator wants these to exist alongside `fvcms-*`.**

---

2. My proposed plan (assuming interpretation A — "continue Phase 0 + audit gallery templates")

Phase 0.5a — Audit gallery module.json template fields (~30 min)

Every module.json has a `template` field that ships HTML to the dist. Currently these templates use:

The operator says "Remove Elementor-shaped templates from module.json template fields."

**The plan**:

1. Grep all 26 cms-widgets/*/module.json for `elementor-*` / `data-widget_type=` in the `template` field

2. Grep all 30 modules/*/module.json for the same

3. List the 50+ templates that need to change

4. For each, replace `data-widget_type="<type>.<variant>"` → `data-fv-widget="<type>"` and `class="elementor-widget ..."` → `class="fvcms-widget ..."`

5. Document the new template shape: `data-fv-widget="<type>"` + `class="fvcms-widget fvcms-widget-<type>"`

Phase 0.5b — Update the template loader (~30 min)

The runtime's `load-annotation.js` and `region-renderer.js` parse the template HTML and look for `data-id` / `data-widget_type` to register modules. The new shape needs:

**Backward compat**: per the operator's directive, "Detector may still read Elementor input" — so the runtime reads BOTH `data-fv-widget="*"` (FreshVibe-native) AND `data-widget_type="*"` (legacy source-page). The OUTPUT is FreshVibe-native only.

Phase 0.5c — Update the renderer (~1 hour)

The renderers in `runtime/renderer.js` currently find elements via `data-fv-` data attributes + `fvcms-*` classes. Verify each:

Phase 0.5d — Update the registry / chrome-registry (~15 min)

The `chrome-registry/index.json` lists 16 modules with `path: 'modules/<name>/'`. These paths are runtime paths, not template paths. **Probably no change needed.** Verify by greping for `data-widget_type` in the registry.

Phase 0.5e — Verification (~30 min)

Phase 0.5 total effort: ~3 hours of mechanical work, no R-117 visual verification possible (no Chromium in sandbox).

---

3. Risks / open questions for the operator

Q1 — Is "v0.5" a typo for "v1.2.0" (the current vendored)?

Most likely. Confirm: yes / no.

Q2 — Is the new naming `data-fv-widget` + `fv-widget-*` an additional convention, or a replacement for `data-fvcms-module-id`?

Today we have:

The operator says: `data-fv-widget` + `fv-widget-*`. This could be:

Q3 — `fes-*` runtime classes

The operator says "fes-* runtime classes". Today we have `fvcms-*` (450+ uses) AND `fes-*` (170+ uses, in inspector controls). Should the template loader emit `fes-*` classes too, or are these already covered by the inspector-side?

Q4 — module.json template field

The operator says "Remove Elementor-shaped templates from module.json template fields. Detector may still read Elementor input; runtime/output must be FreshVibe-native."

This is the clearest part. The plan:

Q5 — Should this work happen in the same `feat/fv-cleanup` worktree as Phase 0, or a new worktree?

Recommendation: new worktree `feat/fv-native-templates` to keep the changes atomic and reviewable separately.

---

4. What I need from you to proceed

A single response: confirm the interpretation + the naming choice.

**Most likely response** (please correct if wrong):

```

Q1 = A (v1.2.0 is "v0.5", typo or shorthand)

Q2 = a (data-fv-widget is a shorter prefix, added alongside data-fvcms-module-id)

Q3 = no change (fvcms-* runtime classes stay; fes-* stays in inspector only)

Q4 = yes (replace elementor-shape in module.json template fields, keep data-fvcms-module-id)

Q5 = new worktree feat/fv-native-templates

```

Or, if the intent is actually **(D)** — build a new FvCMS v0.5 from scratch — that's a much bigger ask and I'd want to scope it before doing anything.

---

5. Holding

No code changes made. The directive references a version that doesn't match my receipts. I'm pausing for clarification per R-117 ("described in a directive is not verified end-to-end").

Heartbeat daemon 84 alive. The full Phase 0 work (5 files, 0 proprietary OUTPUT writes) is still uncommitted on `feat/fv-cleanup` worktree, awaiting your commit/push decision.

— Mavis (helper-mavis, id 10, session 412100071272671)

2026-08-27 01:10 UTC