skills/docs/intent-approach-work.md

293 lines
7.5 KiB
Markdown

# Intent / Approach / Work
A lightweight planning framework for AI-assisted coding.
## Why Structure?
AI coding assistants work best with explicit phases and human checkpoints. Without structure:
- AI hallucinates solutions before understanding the problem
- Context drifts mid-implementation
- Complexity gets papered over instead of surfaced
This framework forces **Chain of Thought** into the workflow: separate *what* from *how* from *do*.
## The Four Phases
```
Intent → [approve] → Approach → [approve] → Work → [execute] → Review → [done]
```
Human gates at every transition. Don't rubber-stamp—add a critique or constraint to prove you read it.
### Intent (what)
| Field | Purpose |
|-------|---------|
| **Problem** | What's broken or missing? |
| **Context** | What code/docs were read to understand this? |
| **Edge cases** | What could go wrong? (AI is happy-path oriented) |
| **Solution** | High-level approach, not technical |
| **Constraints** | Requirements, limits, must-haves |
### Approach (how)
| Field | Purpose |
|-------|---------|
| **Technical** | How we'll solve it |
| **Interfaces** | Types/signatures before logic |
| **Rejected alternatives** | What we considered and why not |
| **Verification** | How we'll prove success (test command, manual check) |
| **Side effects** | Security, performance, auth implications |
| **Rollback** | How to undo if it fails |
| **Non-goals** | What we will NOT touch |
| **Files** | What we'll change |
### Work (do)
- **Pre-flight check**: "I have all info needed. Missing: [X]"
- Concrete steps as checkboxes
- First step often: write the failing test
- Commit after 1-2 checkboxes (atomic commits)
### Review (verify)
- [ ] Diff matches Intent
- [ ] Verification passed (paste raw output)
- [ ] Scaffolding removed (debug prints, commented code)
- [ ] Linter passes
- [ ] Docs updated if needed
---
## Templates
### Full Template
Use when: Rule of Three triggered, security/auth/data involved, or new feature.
```markdown
## Intent
**Problem**: What's broken or missing
**Context**: Code/docs read (include versions/hashes for long sessions)
**Edge cases**: What could go wrong?
**Solution**: High-level approach (not technical)
**Constraints**: Requirements, limits, must-haves
## Approach
**Technical**: How we'll solve it
**Interfaces**: Types/signatures we'll create or modify
**Rejected alternatives**: What we considered and why not
**Verification**: How we'll prove success (prefer: specific test command)
**Side effects**: Security, performance, auth implications
**Rollback**: How to undo if it fails
**Non-goals**: What we will NOT touch
**Files**:
- path/to/file.ts (change description)
## Work
**Pre-flight**: I have all info needed. Missing: [none]
- [ ] Write failing test for X
- [ ] Implement X
- [ ] Step 3
## Review
- [ ] Diff matches Intent
- [ ] Verification passed (paste output)
- [ ] Scaffolding removed
- [ ] Linter passes
- [ ] Docs updated
```
### Medium Template
Use when: 2-3 files, straightforward change, some edge cases.
```markdown
## Intent
**Problem**: What's broken
**Solution**: How we'll fix it
**Edge cases**: What could go wrong?
## Approach
**Technical**: How we'll solve it
**Verification**: How we'll prove success
**Files**:
- path/to/file.ts (change)
## Work
- [ ] Step 1
- [ ] Step 2
## Review
- [ ] Verification passed
- [ ] Cleanup done
```
### Minimal Template
Use when: Single file, obvious fix, low risk.
```markdown
## Intent
[One-liner: what and why]
## Work
- [ ] Step 1
- [ ] Step 2
```
---
## When to Use Structure
**Rule of Three** (+ security trigger):
- Affects >3 files
- Introduces >1 new dependency
- Changes existing interface/API
- Involves security, auth, or data persistence
If any true → use full structure. Otherwise, use judgment.
---
## Workflow Mechanics
### Human Gates
Don't just click approve. Add a critique, constraint, or question. If you can't find anything wrong, you didn't read it carefully enough.
### Context Anchoring
During Work phase, re-inject Intent + Approach summary. Don't rely on chat history alone—AI will drift by step 5.
### Pivot Protocol
When Work reveals Approach was wrong:
1. **Stop** - don't hack around it
2. **Diagnose** - summarize WHY it failed
3. **Learn** - add failure as negative constraint to Intent
4. **Revert** - return to Approach phase
5. **Revise** - update Approach with new constraint
Trigger pivot if changing >2 lines of Approach to make Work succeed.
### Complexity Promotion
When a Work item grows complex:
- Promote it to its own bead with full Intent/Approach/Work
- Original checkbox becomes reference to new bead
- Max depth: 2 levels of nesting
---
## Examples
### Full: Rate Limiting Feature
```markdown
## Intent
**Problem**: API has no rate limiting, vulnerable to abuse
**Context**: Read src/middleware/auth.ts, src/routes/api.ts
**Edge cases**: Redis unavailable, clock skew, boundary conditions
**Solution**: Add per-user rate limits using sliding window
**Constraints**: <5ms latency, graceful degradation
## Approach
**Technical**: Redis sorted sets for sliding window. Middleware on /api/*.
**Interfaces**:
interface RateLimitConfig { windowMs: number; maxRequests: number }
**Rejected alternatives**: In-memory (no multi-instance), fixed window (thundering herd)
**Verification**: npm test -- --grep "rate limit"
**Side effects**: Adds Redis dependency, clients need 429 handling
**Rollback**: Remove middleware, delete rateLimit.ts
**Non-goals**: Admin bypass, per-endpoint limits
**Files**:
- src/middleware/rateLimit.ts (new)
- src/routes/api.ts (add middleware)
- tests/rateLimit.test.ts (new)
## Work
**Pre-flight**: Have all info. Missing: none
- [ ] Write failing test for 429 response
- [ ] Implement sliding window counter
- [ ] Create middleware
- [ ] Wire to routes
- [ ] Add graceful degradation test
## Review
- [ ] 5/5 tests pass
- [ ] No debug prints
- [ ] README updated
```
### Medium: Timezone Bug Fix
```markdown
## Intent
**Problem**: Dates show "Invalid Date" for Asia/Tokyo users
**Solution**: Use UTC internally, format at display
**Edge cases**: DST transitions, pre-1970 dates
## Approach
**Technical**: Replace new Date(str) with dayjs.utc(str)
**Verification**: npm test -- --grep "formatDate" + manual TZ check
**Files**:
- src/utils/date.ts
- src/components/DateDisplay.tsx
## Work
- [ ] Add failing test with Tokyo fixture
- [ ] Fix date.ts
- [ ] Update DateDisplay
- [ ] Manual verify with TZ=Asia/Tokyo
## Review
- [ ] Tests pass
- [ ] Manual check done
```
### Minimal: Typo Fix
```markdown
## Intent
Fix "recieve" → "receive" in error message
## Work
- [ ] Update src/errors.ts:42
- [ ] Grep for other instances
```
---
## Meta-Insight
> "Intent compresses the Past, Approach compresses the Future, Work is the Decompression."
The critical success factor is **strictness of Human Gates**. Rigorous Approach review = magic Work phase. Rubber-stamp = hallucination engine.
---
## Prior Art
| Framework | Phase 1 | Phase 2 | Phase 3 | Phase 4 |
|-----------|---------|---------|---------|---------|
| GitHub Spec-Kit | Specify | Plan | Tasks | Implement |
| Amazon Kiro | Requirements | Design | Tasks | - |
| Traditional SDLC | Requirements | Design | Implementation | Testing |
| **This** | **Intent** | **Approach** | **Work** | **Review** |
## References
- [Martin Fowler: SDD Tools Comparison](https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html)
- [GitHub Spec-Kit](https://github.com/github/spec-kit)
- [Amazon Kiro](https://kiro.dev/)
- [AGENTS.md Standard](https://agents.md)
- [Addy Osmani: LLM Coding Workflow](https://addyosmani.com/blog/ai-coding-workflow/)