Skip to content

Sunset VueForge: extract it to its own repository and remove it here - #19

Merged
KolesnikovKirill merged 3 commits into
mainfrom
chore/sunset-vueforge
Sep 4, 2026
Merged

KolesnikovKirill merged 3 commits into
mainfrom
chore/sunset-vueforge

Conversation

@KolesnikovKirill

Copy link
Copy Markdown
Member

What and why

VueForge is sunset — no further development. Its eight packages, with commit history intact, now live in codemonster-ru/vueforge. This removes them, the frozen showcase they were compared against, and the migration apparatus from this repository's working tree — all three kept in this repository's own git history, per the decision behind this branch.

The extraction, verified before anything was removed

git subtree split on each of the eight package directories, assembled into a fresh repository with git subtree add — the same mechanism this repo already uses to split packages/razor into codemonster-ru/ui-razor. Before removing anything here, the new repository's install/build/lint/typecheck/test were run independently and passed for all eight packages.

Two packages carry truncated history. vueforge-layouts and vueforge-icons were renamed this week to free their names for CodeMonster UI's own packages, and git subtree split does not follow a rename across differently-named prefixes — so the new repo has 1-2 commits for those two instead of their full history. Nothing is lost: the fuller history stays in this repository's own log, just not linearly in the new one.

Documentation moved with the code, not just the packages: docs/core, docs/layouts, docs/icons, docs/codeblock, docs/playground, and the 1.x-to-2.x migration guide are in the new repo too, on the same reasoning already used for the packages — documentation for a product belongs with the product.

What left the working tree, and why each piece is safe to lose

  • The frozen showcase (examples/vue, pinned to fd793696) — it proved CodeMonster UI reproduced VueForge pixel for pixel. That proof is complete and permanent; continuing to rebuild and compare against it forever protects nothing further.
  • The whole migration apparatus (migration/*.json, the codemod, the vueforge-baseline/mapping/coverage checkers) — it answered "does the migration map state what actually happened," a question that stops needing an answer once there's no more migrating to do.
  • Six completed verification records and the whole docs/design-audit/ directory — VueForge's own phase-by-phase design audit trail, marked Complete or dated, self-contained, referenced by nothing living.

What stayed, on purpose

Two things look VueForge-shaped but protect something real, not something historical, so they're untouched:

  • visual-baselines/vueforge-cross-platform and packages/tokens/parity/vueforge-2-token-parity.json — committed data captured once from VueForge, still the live baseline Vue and Razor are compared against today. That comparison proves the two current platforms agree with each other, not with VueForge; nothing about it depended on VueForge staying in this repository.
  • The tree-shaking and package-contract guards against retained VueForge internals — that risk doesn't disappear because the packages are uninstalled right now; it reappears the moment anyone reintroduces the dependency.

Three real bugs, none of them about VueForge

  • package.json's verify script was missing npm run before its first step — a mechanical slip from an earlier edit this session that would have made every future npm run verify fail outright. Caught by running it.
  • check:frozen-showcase's own acknowledgedChanges entry had gone stale, describing a path that no longer differed from main — caught by the staleness check built into that guard specifically for this.
  • component-palette-contract.spec.ts hardcoded 'layouts/src' as VueForge core's sibling to scan for color literals. On this repository's main that path now belongs to CodeMonster's ui-layouts, so the test had been silently checking the wrong package's CSS and passing by coincidence. Fixed in the extracted copy — the file was leaving this repository anyway, so fixing it here would have been fixing something about to be deleted.

Scripts rewritten or removed, not left as dead code

check-package-contracts.mjs and check-packed-consumer.mjs were built entirely around the VueForge release train; once that train was gone they became either ~400 lines of unreachable code or fully redundant with an existing, independent CodeMonster-only equivalent. Both were trimmed or removed rather than left in place with an empty array quietly making every function inside them unreachable. check-documentation-contracts.mjs lost a parallel ~400-line component-doc-contract system that existed only to check VueForge's own Vf* components against docs/core/docs/layouts — CodeMonster's Cm* components already have their own separate, already-working check.

ARCHITECTURE.md described Vf*/vf- as this repository's naming convention, which had already been wrong for weeks; it now points at the actual authoritative naming document instead of carrying a stale duplicate.

Known remaining gap — unrelated to this change

check:component-documentation verifies a component name appears in the guides by substring, so CmIcon counts as documented because the string "CmIcon" appears inside "CmIconButton". CmIcon has no real documentation entry of its own. Left for a follow-up: it predates this branch, and fixing it well means writing real docs, not just tightening a regex.

Checks

npm run verify passes in full.

VueForge is no longer developed. Its eight packages -- core, layouts,
icons, theme, codeblock, playground, playground-core, playground-vite-plugin --
moved to codemonster-ru/vueforge with their commit history intact via
git subtree split, the same mechanism this repo already used to split
packages/razor into codemonster-ru/ui-razor. That repository's tooling was
verified independently: install, build, lint, typecheck, and test all pass
for all eight packages before anything was removed here.

Two packages (vueforge-layouts, vueforge-icons) carry only 1-2 commits of
history in the new repo rather than their full history, because they were
renamed this week to free their names for CodeMonster UI's own packages, and
git subtree split does not follow a rename across differently-named prefixes.
The fuller history is not lost -- it stays in this repository's own git log --
it just is not linear in the new repository.

What left the working tree, and why each piece is safe to remove:

- The eight package directories and examples/vue, the frozen VueForge showcase
  pinned to commit fd79369. That showcase was the proof that CodeMonster UI
  reproduced VueForge pixel for pixel; the migration it proved is complete and
  permanent, so continuing to rebuild and compare against it forever protects
  nothing further.
- The whole migration apparatus: migration/*.json, the codemod, and the
  vueforge-baseline/mapping/coverage checkers. It answered "does the migration
  map state what actually happened," a question that stops needing an answer
  once there is no more migrating to do.
- Six completed verification records under docs/verification/ and the whole
  docs/design-audit/ directory -- VueForge's own phase-by-phase design-system
  audit trail, unrelated to the CodeMonster migration specifically. All of it
  is marked Complete or dated, historical, and self-contained; nothing living
  referenced any of it.
- docs/core, docs/layouts, docs/icons, docs/codeblock, docs/playground, and
  the 1.x-to-2.x migration guide moved to the new repository instead of being
  deleted, on the same reasoning already used for the packages: documentation
  for a product belongs with the product.

What stayed, on purpose, because it protects something real rather than
something historical:

- visual-baselines/vueforge-cross-platform and packages/tokens/parity/
  vueforge-2-token-parity.json. Both are committed data whose pixels or values
  were captured once from VueForge, and both are still the live baseline the
  Vue and Razor adapters are compared against today -- proving the two
  platforms agree with each other, not with VueForge. Their provenance stays
  named honestly; nothing about what they protect depended on VueForge staying
  in this repository.
- check:consumer-tree-shaking's forbidden-output markers and
  validateNoVueForgeImports in code-monster-ui-package-contracts.mjs. Both
  guard against a CodeMonster bundle accidentally retaining VueForge internals.
  That risk does not disappear because the packages are uninstalled right now
  -- it reappears the moment anyone reintroduces the dependency.

Three real bugs surfaced along the way, none of them about VueForge:

- package.json's verify script was missing "npm run " before its first step,
  a mechanical slip from an earlier edit this session that would have made
  every future `npm run verify` fail outright.
- The check:frozen-showcase guard's own acknowledgedChanges list had gone
  stale, describing a path that no longer differed -- caught by the staleness
  check built into the guard itself.
- component-palette-contract.spec.ts hardcoded 'layouts/src' as VueForge
  core's sibling to scan for color literals. On this repository's own main
  branch that path now belongs to CodeMonster's ui-layouts, so the test had
  been silently checking the wrong package's CSS and passing by coincidence.
  Fixed in the extracted copy, since the file was about to leave this
  repository anyway.

Two scripts (check-package-contracts.mjs, check-packed-consumer.mjs) were
built entirely around the VueForge release train and became either dead code
or fully redundant with an existing, independent CodeMonster-only equivalent
once that train was gone; both were rewritten or removed rather than left as
unreachable code. check-documentation-contracts.mjs lost roughly 400 lines of
a parallel component-doc-contract system that existed only to check VueForge's
own Vf* components against docs/core and docs/layouts -- CodeMonster's Cm*
components already have their own, separate check.

ARCHITECTURE.md described Vf*/vf- as this repository's naming convention,
which had already been wrong for weeks; it now points at the actual
authoritative naming document instead of duplicating a stale copy of it.

Known remaining gap, unrelated to this change: check:component-documentation
verifies a component name appears in the guides by substring, so CmIcon
counts as documented because the string "CmIcon" appears inside "CmIconButton".
CmIcon has no real documentation entry of its own. Left for a follow-up since
it predates this branch and fixing it well means writing real docs, not just
tightening a regex.
scripts/visual/compare-showcase.mjs imports pngjs directly and always has,
but nothing in this repository declared it -- it only worked because
packages/vueforge-icons declared ^7.0.0 and npm hoisted it to root
node_modules. Removing that package left the import resolving to nothing on
a clean install, which is exactly how CI caught it and a local npm install
(as opposed to npm ci) did not: incremental installs do not prune packages
whose only declaring package.json disappeared.

Checked every other dependency the eight removed packages declared for the
same failure mode. Ten more (shiki, the two @shikijs/* packages, resvg-js,
tsup, sass, jiti, unplugin-dts, vite-plugin-lib-inject-css, @types/jsdom)
were declared only by those packages and are not referenced anywhere that
survives; pngjs was the only one both orphaned and still imported.

Verified against a genuinely clean install this time: rm -rf node_modules,
npm ci, npm run verify. The lockfile diff touches only the removed packages'
entries and pngjs's new root declaration -- no shared package changed
version.
compare-showcase.mjs requires an exact match on referenceCommit between the
baseline manifest and the current one, for every comparison it runs, not
just the removed showcase flow. The baseline (visual-baselines/vueforge-cross-
platform/manifest.json) still honestly carries fd79369 as where its pixels
came from, by design; the manifest capture-cross-platform-cases.mjs generates
had stopped carrying that field at all when the vueforge capture mode was
removed, so the two disagreed and every comparison failed before a single
pixel was checked.

Nothing local catches this: check:verify-coverage already declares the three
visual:cross-platform:* steps CI-only, specifically because they need a
pinned browser and two live servers verify cannot assume exist. Confirmed
against CI's actual failure rather than guessed at, then verified the fix
by running the full sequence locally with a real Chrome and a real baseline
comparison -- razor-render, serve, capture, compare -- both platforms report
0 changed, 0 missing, 0 unexpected.
@KolesnikovKirill
KolesnikovKirill merged commit 19748e6 into main Sep 4, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant