codemod-react-pipeline

v2026.09.24

Guided, scripted pipeline for running JSX/TSX/React codemods safely across large legacy codebases. Use when you need to scaffold a codemod, dry-run it, validate its findings, and apply it across many files (50 to 100k+) without breaking the build. Walks the full inner/outer loop with the Codemod CLI (JSSG, ast-grep, workflows). Triggers on large-scale refactor, legacy React migration, codemod a prop/API change, migrate components across the codebase, run a codemod safely, batched/resumable codemod apply, dry-run a codemod.

GitHub
Install command
npx skhub add pproenca/codemod-react-pipeline
Markdown
SKILL.md

Codemod React Pipeline

A safe, repeatable workflow for applying JSX / TSX / React codemods to large legacy codebases — from a 50-file rename to a 100k-file API migration. It composes the Codemod CLI (JSSG, ast-grep, workflows) into an inner/outer loop and gates every mass change behind a dry-run plus validation. For the why behind each rule it cites, see the sibling codemod best-practices reference.

When to Apply

Use this skill when:

  • You're migrating a pattern across a large React/TS codebase (component/prop rename, deprecated API, import swap, hook migration) and a hand-run codemod jssg run ./t.ts ./src is too risky.
  • You need the change to land incrementally and reviewably — per-batch commits, resumable on failure, with the build/typecheck/tests green at every checkpoint.
  • You want to see and validate the findings (what would change, and whether it's safe) before touching files at scale.
  • The transform must be idempotent and proven so before mass apply.

Don't use it for a one-file edit, or a change better done by hand in a single PR.

Workflow Overview

00 plan ─▶ 01 scaffold ─▶ 02 inner loop ─▶ 03 dry-run ─▶ 04 validate ─▶ 05 batched apply ─▶ 06 verify
   goal       templates      fixture tests     preview       gates          per-batch            final
   + blast    (transform/    + 1-file trial    + findings     (idempotency,  apply+verify+commit  assertions
   radius     rule/wf/tests)                    report        type/lint/test) (resumable)
                                                  │                                  │
                                                  └── sentinel ──── required by ──────┘
                              (on any failure: working tree reverted; fix and re-run — nothing committed yet)
StepActionTool / ScriptRisk
0Capture goal, classify transform, count blast radiusscripts/00-plan.shread-only
1Scaffold transform + fixtures + workflow from templatesscripts/01-scaffold.shwrite (new files)
2Fixture tests + single-file trial run (auto-reverted)scripts/02-inner-loop.shread-only (reverts)
3Preview changes; write findings report + dry-run sentinelscripts/03-dry-run.shread-only (reverts)
4Gate: idempotency, typecheck, lint, format, testsscripts/04-validate-findings.shread-only (reverts)
5Apply in resumable batches, verify + commit eachscripts/05-run-batched.shdestructive (commits)
6Final assertions over the whole migrationscripts/verify.shread-only

A PreToolUse hook (hooks/hooks.json) blocks a broad codemod jssg run that lacks --dry-run when no dry-run sentinel exists — so step 5 (or an ad-hoc apply) cannot skip steps 3–4.

Requirements

  • Codemod CLI — npm i -g codemod (or the scripts fall back to npx codemod). Provides jssg run/test and workflow run/validate/resume/status.
  • git — the pipeline requires a clean tree and makes per-batch checkpoint commits.
  • jq — the scripts read config.json with it.
  • Your project's gate tooling — TypeScript, ESLint, Prettier, a test runner (whichever gates you enable in config.json).

Setup

Edit config.json for the target repo (see each field's _setup_instructions):

  • src_globs: the files the codemod may touch (scopes blast radius + gates)
  • language: tsx | jsx | typescript | javascript
  • typecheck_cmd / lint_cmd / format_cmd / test_cmd: gate commands (empty disables a gate)
  • batch_size: files per checkpoint in the outer loop
  • gates: per-gate on/off toggles

Add your state_dir (default .codemod-pipeline) to the target repo's .gitignore.

Quick Reference

ScriptPurpose
scripts/00-plan.sh "<goal>" [name]Plan + blast-radius estimate
scripts/01-scaffold.sh <name> [--rule]Scaffold a JSSG transform (or ast-grep rule)
scripts/02-inner-loop.sh <name> [--watch|--file P|-u]Tight loop: fixture tests / 1-file trial
scripts/03-dry-run.sh <name> [--sample N]Preview; write findings + sentinel
scripts/04-validate-findings.sh <name>Run validation gates
scripts/05-run-batched.sh <name> [--batch-size N|--dry]Resumable batched apply + commits
scripts/verify.sh <name>Final sign-off assertions
scripts/selftest.shSelf-test this skill's scripts/assets

How to Use

  1. From the target repo root, run 00-plan.sh "<goal>" and read the generated plan.md.
  2. 01-scaffold.sh <name>, then implement codemods/<name>/transform.ts and its fixtures.
  3. Iterate with 02-inner-loop.sh <name> --watch until fixtures pass; try --file <path> on a real file.
  4. 03-dry-run.sh <name> and read the findings report; then 04-validate-findings.sh <name>.
  5. Only after gates pass: 05-run-batched.sh <name> (resume by re-running it after any fix).
  6. verify.sh <name> to confirm the migration is complete and idempotent.

See references/workflow.md for per-step inputs, outputs, failure handling, and rollback; references/inner-outer-loop.md for the mental model; and references/safety-and-scale.md for batching and rollback at 100k-file scale.

Gotchas

See gotchas.md. The big ones: workflow commit: checkpoints are cloud-only (the pipeline commits locally instead); always exclude generated/vendored trees; and design for idempotency from the first line.

Related Skills

  • codemod — the best-practices reference (48 rules) this pipeline operationalizes. Steps here cite specific rules (e.g. test-run-on-subset-first, state-use-for-resumability, pattern-ensure-idempotency, security-minimize-capabilities).
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/.experimental/codemod-react-pipeline

Default branch

master

Latest commit

cf93c57

Tree SHA

afbb575