git:20260613.a8c0f41 to git:20260615.6fc573e

42 added, 65 removed. Audit A to A.

---
description: "4-implementation: Sprint Planning"
globs:
alwaysApply: false
---
# Sprint Planning
# Sprint Planning
- **Goal.** Pick what enters this sprint. Capacity-honest, priority-honest, risk-honest. The sprint is a commitment about a small slice of the future, not a wish list.
+ **Goal.** Pick what enters this sprint. Capacity-honest, priority-honest, risk-honest.
- Maria Hill chairs. Tony advises on slicing. Hawkeye flags risk on stories. Shuri commits to the load.
+ Maria Hill chairs. Tony advises on slicing. Hawkeye flags risk. Shuri commits to the load.
## Inputs
- Story backlog: `.wize/solutioning/stories/`
- - Velocity history: `.wize/implementation/sprint-status.md` (previous sprints) — when present.
+ - Previous sprint state: `.wize/implementation/sprint-status.yaml`
- `.wize/implementation/tea/risk-profile.md`
- - Open `tea-gate` outcomes from last sprint.
- - Team availability for the next interval (vacations, on-call rotation, planned meetings).
+ - Team availability for the next interval.
## Output
- - New sprint block appended to `.wize/implementation/sprint-status.md`.
- - Story files updated `priority: 1` for chosen stories.
-
- ## Rules
-
- 1. **Capacity = min(history velocity, declared availability).** Not the average of optimistic estimates.
- 2. **High-risk stories** (linked to `R-x` HIGH in risk profile) get TEA design done in the planning meeting, not at story start.
- 3. **Stretch goals** are explicit, named, not silent. If a stretch ships, great. If not, the sprint isn't a failure.
- 4. **Don't carry over without reason.** A carried-over story gets a one-line "why" in the sprint log.
+ - Updated `.wize/implementation/sprint-status.yaml`.
+ - Story files updated with `priority: 1` for chosen stories.
## Steps
- ### 1. Look back (3 min)
-
- Last sprint: what shipped, what slipped, what surprised. Don't relitigate; observe.
-
- ### 2. Refresh capacity
-
- - Person-days available this sprint = sum(working days) × (1 - meetings load).
- - Subtract on-call burden, oncall handoff time, planned reviews.
-
- ### 3. Pull stories (in priority order)
-
- Default selection algorithm:
- - Always pull continuation stories (in-flight from last sprint) first.
- - Then highest-priority stories that fit the capacity.
- - Then risk-driven: high-risk stories (R-HIGH) preferred over more low-risk ones when capacity is tight.
-
- For each pulled story, confirm INVEST still holds; re-slice if needed.
-
- ### 4. Reserve buffer
-
- 10–15% buffer for unknowns (bug fixes, support escalations). Don't fill the sprint to 100% — you'll always pay.
-
- ### 5. Walk the gate plan
-
- For each story pulled, what's the TEA gate cadence? Most stories: design at start, trace + review + gate at end. High-risk: include NFR re-check at epic close.
-
- ### 6. Commit (verbal + written)
+ 1. **Look back** — what shipped, what slipped, what surprised.
+ 2. **Refresh capacity** — person-days × utilization − overhead.
+ 3. **Pull stories** — continuation first, then priority, then risk.
+ 4. **Reserve 10–15% buffer** for unknowns.
+ 5. **Walk the gate plan** — design/trace/review/gate per story.
+ 6. **Commit** — verbal + written into YAML.
- Each engineer reads back the stories they're owning. Hill writes them into the sprint block. Sprint starts.
+ ## Status state machine
- ## Sprint block template (appended to `sprint-status.md`)
+ - Epic: `backlog` → `in-progress` → `done`
+ - Story: `backlog` → `ready-for-dev` → `in-progress` → `review` → `done`
+ - Retrospective: `optional` ↔ `done`
- ```markdown
- ## Sprint 7 — 2026-06-12 → 2026-06-25
+ ## Sprint block template
- **Capacity:** 24 person-days (3 engineers × 10 days × 0.8 utilization)
- **Carry-over:** E01-S05 (90% done; Shuri); E03-S01 (TEA review pending)
- **Pulled:**
- - E01-S06 — M — owner: Shuri — gate cadence: design+gate
- - E02-S02 — L — owner: Shuri — gate cadence: design+trace+review+gate (R-3)
- - E03-S02 — M — owner: Aaliyah — gate cadence: design+trace+review+gate (R-1)
- - E04-S01 — S — owner: Shuri — gate cadence: smoke (quick-dev pattern)
- - E02-S03 — S — stretch
+ ```yaml
+ # generated: YYYY-MM-DD
+ # last_updated: YYYY-MM-DD
+ # project: {project_name}
+ # project_key: {project_key}
+ # tracking_system: file-system
+ # story_location: .wize/solutioning/stories
- **Out (deferred to Sprint 8):**
- - E03-S03 — reason: depends on E03-S02 ADR
- - E05-S01 — reason: out of NFR-cost budget; revisit
+ generated: YYYY-MM-DD
+ last_updated: YYYY-MM-DD
+ project: {project_name}
+ project_key: {project_key}
+ tracking_system: file-system
+ story_location: .wize/solutioning/stories
- **Risks flagged:**
- - E02-S02 — auth refresh story; high-risk; TEA design done at planning.
+ development_status:
+ epic-1: backlog
+ 1-1-story-one: backlog
+ 1-2-story-two: backlog
+ epic-1-retrospective: optional
```
- ## Anti-patterns Hill rejects
+ ## Anti-patterns
- - **"Optimistic" velocity that ignores history.** Use observed velocity.
- - **Stories pulled without owners.** Don't aspire; commit.
- - **Stretch goals so big they're really plan.** Stretch = optional, not "we hope we can."
- - **Pulling a story when its dependency hasn't shipped.** It will sit blocked.
- - **No buffer.** Real sprints have surprises.
+ - Optimistic velocity.
+ - Stories without owners.
+ - Stretch goals that are really plan.
+ - Pulling blocked dependencies.
+ - Zero buffer.
## Hand-off
- > Sprint 7 committed at `.wize/implementation/sprint-status.md`. Shuri owns most; Aaliyah picks up E03-S02. Hawkeye, NFR gate due on E03 at sprint end. Wizer, retro on the 25th.
+ > Sprint committed at `.wize/implementation/sprint-status.yaml`. Next: `/wize-sprint-status`.