This repository is the hands-on workspace for the sprint checkpoints.
starter: learner-facing working branchcomplete: instructor/reference branch
Each checkpoint is the last spec in its milestone. The platform teaches the thinking.
The repository carries the hands-on code, tests, commits, and local workflow.
That split matters because:
- the checkpoint should feel like real engineering work
- learners should run tests and make commits locally
- TypeScript and Python tracks should stay parallel, not mixed together
- each milestone should have a clean, isolated workspace
- starter and complete should differ only in learner task state, not in structure
refactoring-mastery/
├─ docs/
│ ├─ sprint-overview.md
│ ├─ repo-workflow.md
│ └─ branch-strategy.md
├─ checkpoints/
│ ├─ 01-evaluate-and-decide/
│ │ ├─ README.md
│ │ ├─ CONSTRAINTS.md
│ │ ├─ DECISIONS.md
│ │ ├─ typescript/
│ │ │ ├─ package.json
│ │ │ ├─ tsconfig.json
│ │ │ ├─ src/
│ │ │ └─ tests/
│ │ └─ python/
│ │ ├─ requirements.txt
│ │ ├─ src/
│ │ └─ tests/
│ ├─ 02-refactor-the-billing-workflow/
│ ├─ 03-add-a-feature-to-prove-extensibility/
│ ├─ 04-transform-the-pricing-engine/
│ ├─ 05-clean-up-a-tangled-service-interface/
│ ├─ 06-restructure-an-inheritance-hierarchy/
│ ├─ 07-restructure-the-codebase-without-breaking-tests/
│ ├─ 08-manual-refactor-vs-ai-refactor-side-by-side/
│ └─ 09-write-and-defend-a-refactoring-proposal/
└─ .github/
└─ workflows/
└─ checkpoint-ci.yml
- Fork the repository
- Clone your fork
- Stay on
starterbranch - Move into the milestone checkpoint you are currently on
- Choose
typescriptorpython - Write characterization tests
- Make the required safe structural change
- Commit your work
- Compare against
completeonly after finishing
Every milestone gets exactly one checkpoint workspace:
- one scenario
- one decision document
- one TypeScript implementation
- one Python implementation
- one consistent task contract
That makes the repository predictable, which is important because predictability reduces learner navigation cost.