Milestones
Milestones are development checkpoints with explicit acceptance criteria. They define what “done” looks like for each phase of your project. Telesis uses milestones to scope work, validate progress, and control gates.
Milestone Structure
Each milestone in docs/MILESTONES.md has:
- Version — a semver version (e.g., v0.5.0)
- Goal — a one-sentence description of what the milestone achieves
- Status —
Planned,Active, orComplete - Acceptance criteria — numbered, explicit conditions that must be true for the milestone to be done
- Build sequence — an ordered list of implementation phases (optional but recommended)
- TDD reference — a link to the Technical Design Document, if applicable
Checking Milestone Readiness
Before marking a milestone complete, verify it’s ready:
| |
This runs a validation suite:
- Drift detection — runs
telesis driftand checks for zero errors - Tests — runs the project’s test suite
- Build — verifies the project compiles
- Lint — runs type checking
- Acceptance criteria — lists each criterion for manual confirmation
The command exits 1 on any automated failure. Acceptance criteria are displayed for you to verify manually — Telesis can check structural requirements automatically, but whether a feature “works correctly” requires human judgment.
Completing a Milestone
| |
This automates the mechanical steps of milestone completion:
- Sets the milestone status to
Completeindocs/MILESTONES.md - Bumps the
versionfield inpackage.jsonto the milestone version - Updates referenced TDD statuses to
Accepted - Regenerates
CLAUDE.mdwith the updated project state
After completion, Telesis prompts you for the remaining manual steps:
- Update
docs/PRD.mdwith documentation for new CLI features - Update
docs/ARCHITECTURE.mdwith new modules and file structure - Commit the changes
- Tag the release (
git tag v0.X.0 && git push origin v0.X.0)
Milestone Workflow
The full milestone workflow:
| |
Scope Discipline
Milestones enforce scope discipline. If something isn’t in the current milestone’s acceptance criteria, it’s out of scope. Name it, park it (as a note or a future milestone), and don’t let it creep in.
This is particularly important when using autonomous agents. Agents will happily gold-plate, refactor adjacent code, and add “nice to have” features unless the scope is explicitly bounded. Milestones provide that boundary.