Skip to content

TODO: Publish CE pre-release for theming-system-redesign branch

Status: Done (procedure completed, theming branch advanced past this) Created: 2026-04-09 Related: AF PR #1842, CE PR #722, Linear CAV-102

Problem

AF theming-system-redesign branch fails CF Pages build because:

  • src/preview-iframe.ts imports DataStore from @cavai/creative-engine
  • Published CE 6.8.2 does NOT export DataStore
  • The export only exists on CE theming-system-redesign branch (PR #722, commits 277216301 + 158c0d194)
  • CF Pages uses npm install, not the local file symlink, so it pulls 6.8.2 from npm and crashes

Main AF works fine because it doesn't import DataStore. But the PR build is red until CE publishes a version with the export.

Constraints

  • We don't want to publish a "real" semver version (6.9.0 / 7.0.0) — we don't know what the final version number will be when theming-system-redesign actually merges
  • We don't want main on either repo to pick up the theming changes — those must stay isolated to the PR
  • We can't change AF package.json on main, so the theming CE version must NOT match ^6.8.0

Solution: pre-release tag

Publish CE from theming-system-redesign with a pre-release version that never becomes the real release:

0.0.0-theming.1

(or tied to a commit sha: 0.0.0-theming-277216301)

Why this is safe

npm's semver treats pre-release versions as opt-in: 0.0.0-theming.1 does NOT satisfy ^6.8.0. So:

  • Main AF ("@cavai/creative-engine": "^6.8.0") → still resolves to 6.8.2 (stable)
  • Branch AF ("@cavai/creative-engine": "0.0.0-theming.1") → exact pin, only this branch uses it
  • npm install @cavai/creative-engine (no version) → still gets 6.8.2 from the latest tag

Dist-tag for extra isolation

Publish with a custom dist-tag so it doesn't land on latest:

bash
npm publish --tag theming

Steps

1. On CE theming-system-redesign (can be done on any machine)

bash
cd Creative-Engine
git checkout theming-system-redesign
git pull

# Bump version in package.json to 0.0.0-theming.1
# (or the next number if we've already published 0.0.0-theming.1 earlier)

npm version 0.0.0-theming.1 --no-git-tag-version
git add package.json package-lock.json
git commit -m "Publish pre-release 0.0.0-theming.1 for AF PR build"
git push

npm run build
npm publish --tag theming

Verify:

bash
npm view @cavai/creative-engine@0.0.0-theming.1
npm view @cavai/creative-engine dist-tags
# Should show: latest: 6.8.2, theming: 0.0.0-theming.1

2. On AF theming-system-redesign

bash
cd Application-Frontend
git checkout theming-system-redesign

# Bump CE dep to exact pre-release version
# In package.json: "@cavai/creative-engine": "0.0.0-theming.1"
# (exact pin, no ^ or ~)

npm install
git add package.json package-lock.json
git commit -m "Bump CE to 0.0.0-theming.1 pre-release"
git push

CF Pages rebuilds PR #1842 → should go green.

Local dev on both repos continues to use the local file symlink via local-setup, unaffected by the pre-release publish. The pre-release only matters for CI (CF Pages).

When theming goes live

  1. Merge CE theming-system-redesign → main
  2. Publish stable version from main (whatever the real number turns out to be — 6.9.0, 7.0.0, etc.)
  3. Merge AF theming-system-redesign → main, bumping CE dep to the new stable version in the same commit
  4. Deprecate or leave the 0.0.0-theming.* versions — they're inert

Current rebase state

AF theming-system-redesign has been rebased cleanly onto main locally (108 commits applied, 1 dropped as already upstream). npm run build passes locally. Ready to force-push as soon as the CE pre-release is published.

Conflicts resolved during rebase:

  • LocalBuildPreview.vue — kept both main's iframe-ready listener and branch's scrubObserver
  • AnimationPreviewBox.vue, ShowHideOp.vue, AnimationEffectList.vue, TemplateButton.vue — took branch's tokenized versions
  • OperatorAnimations.vue — deleted 146-line invert block (branch intentionally removed it in "kill Vuetify underline leaks" commit)

Internal documentation