Repository navigation
Conversation
…eset Adds @skillsoft/gamut-codemods: the CLI (clean-tree guard, --dry, --only, --no-report, --force), the runner for ast, splice, and file migrations, the shared helpers (module-string finder, leftovers report, version-range checks, flat ESLint config detection), the preset registry, and the fixture harness. The scope-swap preset has its package map but no migrations yet, so a run only reports the lines that still name an old package. Each breaking change lands its migration in its own PR. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…swap scope-rename swaps @Codecademy/gamut* and eslint-plugin-gamut for their @SkillSoft names in every module position and in comments. package-json, mdx-imports, and yarnrc cover dependencies, MDX ESM blocks, and .yarnrc.yml lists. @codecademy/gamut-kit has no replacement, so package-json and mf-shared expand it into the packages it bundled. In Module Federation config that makes Gamut a real singleton, which the checklist calls out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ides moved-exports moves Video and VideoProps from the root to @Codecademy/gamut/Video (scope-rename then swaps the scope). markdown-video-overrides adds explicit iframeOverride/videoOverride to each <Markdown>, since it no longer renders video through Video by default, and drops the removed skipDefaultOverrides keys. tsconfig-dom warns about tsconfigs without "dom", which Video used to supply. On the Gamut side, a Video/package.json stub makes the subpath resolve under node10, MarkdownVideo no longer passes NaN sizes, and a one-line <video> is no longer wrapped in a <p>. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ectDropdown elements Exports formFieldStyles, formFieldPaddingStyles, conditionalStyles, ButtonBaseProps, HTMLToReactNode, MenuToolTipWrapper, and Menu's list elements from the root. The list elements and SelectDropdown's option component are renamed (MenuList*, MenuListButton, IconOptionComponent) so they don't collide with the public List component and IconOption type. The deep-imports codemod rewrites known /dist/ paths to the root, keeps local names across renames, merges into existing imports, and warns on paths with no public replacement. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
eslint-comments rewrites gamut/ directives to @skillsoft/gamut/, and eslint-config updates the plugin name, plugin: extends, and rule keys in legacy .eslintrc files. Under a flat config the prefix is the plugins key, so eslint-comments skips itself and the checklist explains why. Also types eslint-plugin-gamut's recommended severities as literals, so the plugin fits ESLint's Plugin type in a typed flat config. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@skillsoft/gamut ships strict-ESM .mjs. With experimental.esmExternals off, Next require()s server externals and default imports from @emotion/styled and react-select break while it collects page data. next-config is report-only: dropping the flag can take other config with it, so it warns and adds a checklist item instead of rewriting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ap-skill # Conflicts: # packages/gamut-codemods/README.md # packages/gamut-codemods/src/presets/scope-swap/index.ts
# Conflicts: # packages/gamut-codemods/README.md # packages/gamut-codemods/src/__tests__/lib.test.ts # packages/gamut-codemods/src/presets/scope-swap/index.ts
…p-skill # Conflicts: # packages/gamut-codemods/README.md # packages/gamut-codemods/src/__tests__/cli.test.ts # packages/gamut-codemods/src/presets/scope-swap/index.ts
The skill works alongside the scope-swap codemod: it reads the warnings, leftovers, and next steps, and helps with what the codemod can't rewrite. BREAKING_CHANGES.md lists every change in the move, and NEXT_EMOTION_INTEROP.md covers the Next.js esmExternals fallback. Also restores the end-to-end and MDX fixtures that run every migration together, and fixes the cli.test merge between the sibling branches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CodeQL read `migration.match(file)` in cli.ts as String.prototype.match on a command-line argument and flagged js/regex-injection. Nothing builds a regex from the path; the method just had the same name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…migrations Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…migrations Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…migrations Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…migrations Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The package-json warning already names each range that's newer than the fork point, so the extra next step only repeated it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rkdown # Conflicts: # packages/gamut-codemods/src/presets/scope-swap/index.ts
# Conflicts: # packages/gamut-codemods/src/presets/scope-swap/index.ts
# Conflicts: # packages/gamut-codemods/src/presets/scope-swap/index.ts
…swap-skill # Conflicts: # packages/gamut-codemods/src/presets/scope-swap/index.ts
# Conflicts: # packages/gamut-codemods/src/presets/scope-swap/index.ts
…p-skill # Conflicts: # packages/gamut-codemods/src/presets/scope-swap/index.ts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Moves Gamut color names onto the generated color system's roles using design's migration map (gamut-sandbox c363244). Renames and merges are applied; splits, retired and pending names get a color-roles comment and a warning. Old palette names and runtime-built names only warn. Presets are now generic over their manifest and bring their own pre-filter and leftovers report. scope-swap's behavior is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6 of 7 tasks
#45 landed as a squash with later edits, so the color-roles preset is reapplied on main's codemod framework. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@skillsoft/eslint-plugin-gamut
@skillsoft/gamut
@skillsoft/gamut-agent-tools
@skillsoft/gamut-codemods
@skillsoft/gamut-icons
@skillsoft/gamut-illustrations
@skillsoft/gamut-patterns
@skillsoft/gamut-styles
@skillsoft/gamut-tests
@skillsoft/variance
commit: |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #53 +/- ##
==========================================
- Coverage 90.29% 90.18% -0.11%
==========================================
Files 434 438 +4
Lines 7930 8107 +177
Branches 2553 2628 +75
==========================================
+ Hits 7160 7311 +151
- Misses 760 785 +25
- Partials 10 11 +1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This was referenced Oct 28, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
Adds a
color-rolespreset that moves Gamut color names onto the generated system's roles, using design's migration map. Presets can now have their own manifest, pre-filter and leftovers report; scope-swap's behavior is unchanged. Draft, stacked on #45.Framework
lib/types.ts,lib/run-source.ts,presets/index.ts—Preset<M>and the migration types are generic over their manifest, defaulting to scope-swap's. A preset brings its ownmentionspre-filter and an optionalleftoversreport.cli.ts,transform.ts,presets/scope-swap— call those hooks; scope-swap passes the pre-filter and leftovers report the CLI used to call directly.__tests__/manifest.test.ts,fixtures.test.ts— the export check covers manifests that promise exports; end-to-end fixtures for other presets live in__tests__/__testfixtures__/<preset>/.color-roles
migrations/color-roles— one splice migration. Rename and merge rows are applied. Split, retired and pending names stay (they still fail the type check), with a/* color-roles: … */comment carrying design's rule and a warning. Old palette names and runtime-built names (${variant}-hover) only warn.&&, responsive values),theme.colors.x/['x'],themed('colors.x').variant="primary"and other look-alike strings are left alone.presets/color-roles— the manifest (32 aliases, 43 roles, 104 old palette names), a leftovers report of unresolvedcolor-roles:comments, the checklist.aliases.tsis generated from gamut-stylescolorSystem/migration.ts.Tests and docs
color-roles-manifest.test.ts: every applied row names exactly one real role.README.md— running color-roles, what it changes, its limits.PR Checklist
c363244)Testing Instructions
yarn nx test gamut-codemods→ 128 tests pass; scope-swap's 100 are unchanged.yarn nx build gamut-codemods, thennode packages/gamut-codemods/dist/bin.js list→color-rolesis listed.node packages/gamut-codemods/dist/bin.js color-roles packages/gamut/src --dry. On feat(gamut-styles)!: brands, overrides and Original Codecademy on the color system #52's branch: 60 files, 171 warnings, 0 errors.Known gap:
aliases.tsis a generated copy of design's map, and the generator (gen-manifest.ts) still lives outside the repo, because this branch and #50 don't share gamut-styles yet. It should move in and read the workspace package once they do.🤖 Generated with Claude Code