Planning in Small Increments
All work must be done in small, known-good increments. Each increment leaves the codebase in a working state where all tests pass.
Document Management:
- •Long-term plan:
localdocs/plan.<topic>.md - •Future (not yet planned):
localdocs/backlog.<topic>.md - •Execution logs:
worklogskill (localdocs/worklog.todo.md,localdocs/worklog.doing.md,localdocs/worklog.done.md) - •Learning notes:
localdocs/learn.<topic>.md
Usage Boundary
- •Use this
planningskill at planning time (before implementation starts). - •During implementation execution, use
progress-guardianto track progress/learning snapshots and step-by-step status. - •During RED/GREEN/REFACTOR test loops, use
tdd-guardian.
Plan + Worklog + Learn Model
For significant work, maintain one long-term plan, worklog files, and a learning note:
| Document | Purpose | Lifecycle |
|---|---|---|
localdocs/backlog.<topic>.md | Future ideas before planning | Optional, persistent |
localdocs/plan.<topic>.md | What we're doing | Created at start, changes need approval |
localdocs/worklog.todo.md | Pending phase/session tasks | Persistent |
localdocs/worklog.doing.md | In-progress phase/session tasks | Persistent |
localdocs/worklog.done.md | Completed phase/session log | Persistent |
localdocs/learn.<topic>.md | Learning notes / gotchas / decisions | Temporary, merged then archived/removed |
Document Relationships
`localdocs/plan.<topic>.md` (static) `worklog.todo/doing/done` (execution log) `localdocs/learn.<topic>.md` (learning notes)
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Goal │ │ Current step │ │ Gotchas │
│ Acceptance │ ──► │ Status │ ──► │ Patterns │
│ Steps 1-N │ │ Blockers │ │ Decisions │
│ (approved) │ │ Next action │ │ Edge cases │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ │ │
└─────────────────────────┴─────────────────────────┘
│
▼
END OF FEATURE
│
┌─────────────┴─────────────┐
│ │
▼ ▼
Keep worklog logs Merge architectural learnings into:
- CLAUDE.md (`learn`)
- ADRs (`adr`)
What Makes a "Known-Good Increment"
Each step MUST:
- •Leave all tests passing
- •Be independently deployable
- •Have clear done criteria
- •Fit in a single commit
- •Be describable in one sentence
If you can't describe a step in one sentence, break it down further.
Step Size Heuristics
Too big if:
- •Takes more than one session
- •Requires multiple commits to complete
- •Has multiple "and"s in description
- •You're unsure how to test it
- •Involves more than 3 files
Right size if:
- •One clear test case
- •One logical change
- •Can explain to someone in 30 seconds
- •Obvious when done
- •Single responsibility
TDD Integration
Every step follows RED-GREEN-REFACTOR. See testing skill for factory patterns.
FOR EACH STEP:
│
├─► RED: Write failing test FIRST
│ - Test describes expected behavior
│ - Test fails for the right reason
│
├─► GREEN: Write MINIMUM code to pass
│ - No extra features
│ - No premature optimization
│ - Just make the test pass
│
├─► REFACTOR: Assess improvements
│ - See `refactoring` skill
│ - Only if it adds value
│ - All tests still pass
│
└─► STOP: Wait for commit approval
No exceptions. No "I'll add tests later."
Commit Discipline
NEVER commit without user approval.
After completing a step (RED-GREEN-REFACTOR):
- •Verify all tests pass
- •Verify static analysis passes
- •Update
localdocs/worklog.doing.mdwith progress - •Move task states with
worklogskill (todo→doing→done) - •Capture knowledge learnings in
localdocs/learn.<topic>.mdwhen discovered - •STOP and ask: "Ready to commit [description]. Approve?"
Only proceed with commit after explicit approval.
Why Wait for Approval?
- •User maintains control of git history
- •Opportunity to review before commit
- •Prevents accidental commits of incomplete work
- •Creates natural checkpoint for discussion
localdocs/plan.<topic>.md Structure
# Plan: [Feature Name] ## Goal [One sentence describing the outcome] ## Acceptance Criteria - [ ] Criterion 1 - [ ] Criterion 2 - [ ] Criterion 3 ## Steps ### Step 1: [One sentence description] **Test**: What failing test will we write? **Implementation**: What code will we write? **Done when**: How do we know it's complete? ### Step 2: [One sentence description] **Test**: ... **Implementation**: ... **Done when**: ...
Plan Changes Require Approval
If the plan needs to change:
- •Explain what changed and why
- •Propose updated steps
- •Wait for approval before proceeding
Plans are not immutable, but changes must be explicit and approved.
worklog Structure
Use the worklog skill as the source of truth for:
- •
localdocs/worklog.todo.md - •
localdocs/worklog.doing.md - •
localdocs/worklog.done.md
Do not maintain separate manual templates for these files in planning docs.
Progress Snapshot Must Always Be Accurate
Update localdocs/worklog.doing.md:
- •When starting a new step
- •When status changes (RED → GREEN → REFACTOR)
- •When blockers appear or resolve
- •After each commit
- •At end of each session
If localdocs/worklog.doing.md doesn't reflect reality, update it immediately.
localdocs/worklog.done.md
Append-only execution history grouped by date. Update via worklog done ....
Capture Execution Logs As They Occur
Don't wait until the end. When you discover something:
- •Record task completion in
localdocs/worklog.done.mdviaworklog done ... - •Continue with current work
- •At end of feature, use this as execution history only
localdocs/learn.<topic>.md Structure
# Learnings: [Feature Name] ## Gotchas - [What happened and why] ## Patterns - [What worked and when to apply] ## Decisions - [Decision + rationale + trade-offs]
End of Feature
When all steps are complete:
1. Verify Completion
- •All acceptance criteria met
- •All tests passing
- •All steps marked complete in
localdocs/worklog.doing.md
2. Merge Learnings (if any)
Use localdocs/learn.<topic>.md as the source for knowledge merge (learn/adr):
| Learning Type | Destination | Method |
|---|---|---|
| Gotchas | CLAUDE.md | Use learn agent |
| Patterns | CLAUDE.md | Use learn agent |
| Architectural decisions | ADR | Use adr agent |
| Domain knowledge | Project docs | Direct update |
3. Close Plan
After learnings are merged:
rm localdocs/plan.feature.md git add -A git commit -m "chore: complete [feature], remove planning docs"
The knowledge lives on in:
- •CLAUDE.md (gotchas, patterns)
- •ADRs (architectural decisions)
- •Git history (what was done)
- •Project docs (if applicable)
Anti-Patterns
❌ Committing without approval
- •Always wait for explicit "yes" before committing
❌ Steps that span multiple commits
- •Break down further until one step = one commit
❌ Writing code before tests
- •RED comes first, always
❌ Letting localdocs/worklog.doing.md become stale
- •Update immediately when reality changes
❌ Confusing worklog and learning docs
- •Worklog tracks execution;
learn/adrcapture lasting knowledge
❌ Putting future ideas directly into plan
- •If not in current approved scope, record first in
localdocs/backlog.<topic>.md
❌ Plans that change silently
- •All plan changes require discussion and approval
❌ Deleting worklog files
- •Worklog files are persistent logs and should remain
Quick Reference
START FEATURE │ ├─► Create `localdocs/plan.<topic>.md` (get approval) ├─► Use `worklog todo` to queue phase/session tasks ├─► Use `worklog doing` to start tasks │ │ FOR EACH STEP: │ │ │ ├─► RED: Failing test │ ├─► GREEN: Make it pass │ ├─► REFACTOR: If valuable │ ├─► Update `worklog` states │ ├─► Record completions in `localdocs/worklog.done.md` │ └─► **WAIT FOR COMMIT APPROVAL** │ END FEATURE │ ├─► Verify all criteria met ├─► Merge learnings (learn agent, adr agent) └─► Close/remove only `localdocs/plan.<topic>.md` (keep worklog files)