Etude · The anti-cascader
Author one step
Write the rename rule. Run it against the fixture. See what 14 lines of authored migration feels like.
The codemod inside one step of the migration is not magic. It is a small pattern: match this; replace with that; constrain by where it appears.
You're authoring step 02 of /migrate-spring-boot-3. Edit the rules. Hit run. See it land against a fixture file.
Rules · javax → jakarta
Fixture · OrderEntity.java
Same file, before and after. Diff highlighted in green and red.
Before
After
(run rules to see)
Assertions · what should be true
What just happened
You wrote a transform. You ran it against a fixture. You saw assertions pass or fail. That's the loop a migration author lives in. Not 700 lines of LLM-generated refactor; a small set of mechanical rules with a fixture corpus that shows when you got too greedy or too conservative.
Bob's contribution isn't this rule shape — codemod engines have shipped this for years. Bob's contribution is the wrapper: the explanation that prints before this rule runs, the per-step PR cadence, the state file. The rule itself is the boring deterministic core.