diff --git a/.claude/skills/plan-sprint/SKILL.md b/.claude/skills/plan-sprint/SKILL.md new file mode 100644 index 000000000..3764dfeef --- /dev/null +++ b/.claude/skills/plan-sprint/SKILL.md @@ -0,0 +1,127 @@ +--- +name: plan-sprint +description: > + Plan the next sprint and generate team briefing files. Use when the user says + "plan sprint", "prep sprint briefing", "plan next sprint", "sprint planning", + or invokes /plan-sprint. Gathers current sprint status, scans the backlog, + proposes ticket selection, and writes briefing files per team to + docs/sprints/sprint-N/. +user-invocable: true +allowed-tools: Bash, Read, Grep, Glob, Write, AskUserQuestion +--- + +# Plan Sprint + +Generate sprint briefing files (`server.md`, `client.md`, `joint.md`) for the +next sprint based on current project state. + +## Workflow + +### 1. Determine sprint number + +```bash +db/connectors/ticket sprint --active +``` + +Next sprint = active sprint ID + 1. If no active sprint, ask the user. + +### 2. Gather current sprint state + +Review the active sprint for carry-overs: + +```bash +db/connectors/ticket list --sprint --status in_progress +db/connectors/ticket list --sprint --status ready +``` + +Any ticket not `done` is a potential carry-over. Note these for the briefing. + +### 3. Scan the backlog + +Pull candidate tickets by priority: + +```bash +db/connectors/ticket epics --status backlog +``` + +For critical epics, check their children: + +```bash +db/connectors/ticket children +``` + +Use `ticket show --brief [...]` to quickly scan multiple tickets. + +### 4. Read existing code state + +Scan what's already built to write accurate "what exists" notes: + +```bash +# Server modules +ls server/src/ server/src/*/ + +# Client scripts +ls client/scripts/ client/scripts/*/ +``` + +Read key files that sprint tickets will build on (bridge types, existing +renderers, etc.) to reference specific integration points in the briefing. + +### 5. Select tickets — propose to user + +Based on the backlog scan, propose a sprint with: + +- **Sprint theme** — a short name (Sprint 1 was "Run", Sprint 2 was "See") +- **Sprint goal** — one sentence shared across all teams +- **Server tickets** — stories from server-side epics +- **Client tickets** — stories from client-side epics +- **Joint tasks** — integration proofs, pre-sprint decisions, schema work + +Present the proposal using AskUserQuestion for the user to approve or adjust. + +Selection heuristics: +- Follow dependency chains (don't pick a ticket if its blocker isn't in scope) +- Respect D-030 test priority phases (sprint 1-2: infra, sprint 3-4: integration) +- Mix carry-overs with new work +- Aim for 3-6 tickets per team, with parallel tracks where possible +- Check `decisions/questions.md` for open Q-NNN items that block candidates + +### 6. Read relevant decisions + +For the selected tickets, identify which `decisions/*.md` files are relevant. +Read them to provide accurate cross-references in the briefing. + +### 7. Write briefing files + +Create `docs/sprints/sprint-N/` and write one file per team. + +Read the template at `references/briefing-template.md` in this skill directory +for the exact file structure. + +Key requirements per file: +- **server.md**: Carry-overs, new tickets, dependency chain, key decisions, notes + referencing existing Rust modules by path +- **client.md**: Same structure, notes referencing existing GDScript files by path +- **joint.md**: Pre-sprint decisions table, integration tickets, sprint + completion proof (concrete observable criteria), test plan alignment + +### 8. Assign tickets to sprint in DB + +After the user approves, assign all selected tickets to the new sprint: + +```bash +# Create the sprint +db/connectors/sqlite-exec "INSERT INTO sprints (name, goal, status) VALUES ('Sprint N: Theme', 'goal', 'planned')" + +# Assign tickets +db/connectors/ticket sprint assign +``` + +### 9. Present summary + +Output: +- Sprint number, theme, and goal +- Ticket count per team +- Carry-over count +- Open questions that need early resolution +- Files written diff --git a/.claude/skills/plan-sprint/references/briefing-template.md b/.claude/skills/plan-sprint/references/briefing-template.md new file mode 100644 index 000000000..5a81729cf --- /dev/null +++ b/.claude/skills/plan-sprint/references/briefing-template.md @@ -0,0 +1,79 @@ +# Sprint Briefing Template + +Each team gets one briefing file at `docs/sprints/sprint-N/.md`. + +## File structure + +```markdown +# Sprint N: Tasks + +**Goal:** + +**Branch:** `` +**Agents:** + +## Carry-over from Sprint N-1 + +(Only if there are incomplete tickets from the previous sprint) + +| # | Title | Status | Notes | +|---|-------|--------|-------| +| #ID | Title | status | Why it carried over | + +## New Tickets + +| # | Title | Blocked by | +|---|-------|------------| +| #ID | Title | #dependency or — | + +Use `db/connectors/ticket show ` for full details. + +## Key Decisions + +- `decisions/.md` — D-NNN (short name), D-NNN (short name) + +## Open Questions to Resolve Early + +(Only if there are Q-NNN items that block sprint tickets) + +- **Q-NNN: Title** — Brief context. Resolve before #ID starts. + +## Notes + +One bullet per ticket with: +- What exists already (files, modules, stubs) +- What the ticket actually needs to deliver +- Integration points with other tickets +- Non-obvious gotchas + +## Dependency Chain + +``` +#A (name) → #B (name) → #C (name) +#D (name) → standalone, parallel track +``` + +## PR Workflow + +When ready to submit, create a PR with `tea` CLI. **All flags are required** to avoid TTY prompts (see CLAUDE.md "Gitea access" section): +\```bash +tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(): description" --description "body" --base main --head +\``` +``` + +## Joint briefing extras + +The `joint.md` file additionally includes: + +- **Pre-Sprint** table: decisions/schema work that must happen before implementation +- **Sprint Completion Proof**: concrete observable criteria (what you can see/do when the sprint is done) +- **Test plan** alignment with D-030 phases + +## Team assignments + +| Team | Branch | Agents | Scope | +|------|--------|--------|-------| +| server | `server` | Dudley (simulation), Oscar (networking) | Rust/bevy_ecs simulation | +| client | `client` | Stig (UI), Oscar (networking) | Godot client rendering | +| joint | both | All implementation agents | Integration, proofs, cross-team schema | +| content | (none) | Mellanie, Paula, Miri, Araminta | Content authoring, no code branch |