mirror of
https://github.com/Donchitos/Claude-Code-Game-Studios.git
synced 2026-10-16 10:17:06 +00:00
Release 1.1.2 — the default path works end to end
Fix release for 1.1.1: the minimal path end to end, engine commands that run on Godot, Unity and Unreal, hook warnings you can see, and verdicts that say when they could not check. Details in CHANGELOG.md; upgrade steps in UPGRADING.md (v1.1.1 → v1.1.2). Fixes #67 Fixes #131 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuJn2FdynEybfL5KC697nJ
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
7ed2c3e9c4
commit
b21fa0f7f2
@@ -2,26 +2,38 @@
|
||||
|
||||
## Skill Summary
|
||||
|
||||
`/retrospective` generates a structured sprint or milestone retrospective
|
||||
covering three categories: what went well, what didn't, and action items.
|
||||
It reads sprint files and session logs to compile observations, then produces
|
||||
a retrospective document. No director gates are used — retrospectives are
|
||||
team self-reflection artifacts. The skill asks "May I write to
|
||||
`production/retrospectives/retro-sprint-NNN.md`?" before persisting.
|
||||
Verdict is always COMPLETE (retrospective is structured output, not a pass/fail
|
||||
assessment).
|
||||
`/retrospective` generates a sprint or milestone retrospective. Before loading
|
||||
any data it checks `production/retrospectives/` for an existing retrospective and
|
||||
offers to update it or start fresh (archiving the old file). It reads the sprint
|
||||
plan from `production/sprints/` (or the milestone definition), uses
|
||||
`production/sprint-status.yaml` as the primary source for completion when it
|
||||
exists, runs `git log` for the sprint period, counts TODO/FIXME/HACK markers, and
|
||||
reads previous retrospectives to follow up their action items. The output covers
|
||||
Metrics, Velocity Trend, What Went Well, What Went Poorly, Blockers Encountered,
|
||||
Estimation Accuracy, Carryover Analysis, Technical Debt Status, Previous Action
|
||||
Items Follow-Up, Action Items for Next Iteration, Process Improvements and a
|
||||
Summary; a section whose inputs are absent reads `NOT ASSESSED — NO DATA`, and
|
||||
every `blocked` story in the yaml is a Blocker with an action item. When no
|
||||
sprint data exists it offers manual input or stop — and, at `workflow: minimal`,
|
||||
a look back over the closed stories. No director gates are used —
|
||||
retrospectives are team self-reflection artifacts. The skill asks "May I write
|
||||
this to `production/retrospectives/retro-sprint-[N]-[date].md`?" (naming the
|
||||
archive rename too after Start fresh) and afterwards offers to start
|
||||
`/sprint-plan new`. Verdicts: COMPLETE
|
||||
(retrospective saved) or BLOCKED (user stopped at the no-data prompt or declined
|
||||
the write).
|
||||
|
||||
---
|
||||
|
||||
## Static Assertions (Structural)
|
||||
|
||||
Verified automatically by `/skill-test static` — no fixture needed.
|
||||
Checked against the SKILL.md by `/skill-test spec` — no fixture needed.
|
||||
|
||||
- [ ] Has required frontmatter fields: `name`, `description`, `argument-hint`, `user-invocable`, `allowed-tools`
|
||||
- [ ] Has ≥2 phase headings
|
||||
- [ ] Contains verdict keyword: COMPLETE
|
||||
- [ ] Contains verdict keywords: COMPLETE, BLOCKED
|
||||
- [ ] Contains "May I write" language (skill writes retrospective document)
|
||||
- [ ] Has a next-step handoff (what to do after retrospective is written)
|
||||
- [ ] Has a next-step handoff (offer to start `/sprint-plan new`; `/gate-check` after a milestone retrospective)
|
||||
|
||||
---
|
||||
|
||||
@@ -36,26 +48,38 @@ None. Retrospectives are team self-reflection documents; no gates are invoked.
|
||||
### Case 1: Happy Path — Sprint with mixed outcomes
|
||||
|
||||
**Fixture:**
|
||||
- `production/sprints/sprint-005.md` exists with 6 stories (4 Complete, 1 Blocked, 1 Deferred)
|
||||
- `production/session-logs/` contains log entries for the sprint period
|
||||
- No prior retrospective exists for sprint-005
|
||||
- `production/sprints/sprint-005.md` exists with 6 stories; no earlier sprint
|
||||
plan exists in `production/sprints/`
|
||||
- `production/sprint-status.yaml` covers sprint 5: 4 stories `done`, 1 `blocked`
|
||||
(`blocker: "Waiting on the save-format decision"`), 1 still `backlog`
|
||||
- `project.yaml` sets `modes.workflow: standard`
|
||||
- `production/retrospectives/` holds no retrospective at all
|
||||
|
||||
**Input:** `/retrospective sprint-005`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads sprint-005 and session logs
|
||||
2. Skill compiles three retrospective categories: went well (4 stories shipped),
|
||||
didn't (1 blocked, 1 deferred), and action items (address blocker root cause)
|
||||
3. Skill presents retrospective draft to user
|
||||
4. Skill asks "May I write to `production/retrospectives/retro-sprint-005.md`?"
|
||||
5. User approves; file is written; verdict COMPLETE
|
||||
1. Skill globs `production/retrospectives/retro-sprint-005-*.md` — no match
|
||||
2. Skill reads the sprint plan and `production/sprint-status.yaml`, using the
|
||||
yaml as the primary source for completion (4 of 6 done)
|
||||
3. Skill runs `git log` for the sprint period and counts TODO/FIXME/HACK markers
|
||||
4. Skill generates the retrospective in its template. With no earlier sprint or
|
||||
retrospective, Velocity Trend and Previous Action Items Follow-Up read
|
||||
`NOT ASSESSED — NO DATA`, naming what is missing
|
||||
5. Skill presents the retrospective and top findings (completion rate, velocity
|
||||
trend — reported as not assessed — top blocker, most important action item)
|
||||
6. Skill asks "May I write this to
|
||||
`production/retrospectives/retro-sprint-005-[today's date].md`?"
|
||||
7. User approves; file is written; verdict COMPLETE
|
||||
8. Skill asks whether to start sprint planning now (`/sprint-plan new`)
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Retrospective contains all three categories (went well / didn't / actions)
|
||||
- [ ] Blocked and deferred stories appear in the "what didn't" section
|
||||
- [ ] At least one action item is generated from the blocked story
|
||||
- [ ] Skill asks "May I write" before writing file
|
||||
- [ ] Verdict is COMPLETE after successful write
|
||||
- [ ] Retrospective contains What Went Well, What Went Poorly and Action Items for Next Iteration sections
|
||||
- [ ] Completion metrics come from `production/sprint-status.yaml` (4 of 6 done), not from markdown scanning
|
||||
- [ ] The blocked story appears under Blockers Encountered with "Waiting on the save-format decision" as its Blocker, and an action item addresses it
|
||||
- [ ] Velocity Trend reads `NOT ASSESSED — NO DATA` — no Increasing / Stable / Decreasing trend and no earlier-sprint rows are invented from a single sprint
|
||||
- [ ] Previous Action Items Follow-Up reads `NOT ASSESSED — NO DATA` (no earlier retrospective), not an empty table
|
||||
- [ ] "May I write" prompt names `production/retrospectives/retro-sprint-005-[today's date].md` and appears before the write
|
||||
- [ ] Verdict is COMPLETE after the write, followed by the offer to start `/sprint-plan new`
|
||||
|
||||
---
|
||||
|
||||
@@ -63,68 +87,85 @@ None. Retrospectives are team self-reflection documents; no gates are invoked.
|
||||
|
||||
**Fixture:**
|
||||
- User calls `/retrospective sprint-009`
|
||||
- `production/sprints/sprint-009.md` does NOT exist
|
||||
- No session logs reference sprint-009
|
||||
- `production/sprints/sprint-009.md` does NOT exist and
|
||||
`production/sprint-status.yaml` has no sprint 9
|
||||
- `project.yaml` sets `modes.workflow: standard`
|
||||
- No retrospective for sprint-009 exists
|
||||
|
||||
**Input:** `/retrospective sprint-009`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill attempts to read sprint-009 — not found
|
||||
2. Skill informs user that no sprint data was found for sprint-009
|
||||
3. Skill prompts user to provide retrospective input manually (went well, didn't, actions)
|
||||
4. User provides input; skill formats it into the retrospective structure
|
||||
5. Skill asks "May I write" and writes the document on approval
|
||||
1. Skill finds no sprint plan for sprint-009
|
||||
2. Skill outputs "No sprint data found for sprint-009 …"
|
||||
3. Skill asks via `AskUserQuestion`: [A] Provide data manually, [B] Stop
|
||||
4. User selects [A] and describes the sprint's tasks, dates and outcomes
|
||||
5. Skill uses that input as the source of truth and formats it into the
|
||||
retrospective structure
|
||||
6. Skill asks "May I write" and writes the document on approval
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill does not crash or produce an empty document when sprint file is absent
|
||||
- [ ] User is prompted to provide manual input
|
||||
- [ ] Manual input is formatted into the three-category structure
|
||||
- [ ] "May I write" prompt still appears before file write
|
||||
- [ ] Skill does not crash or produce an empty document when the sprint file is absent, and states that no sprint data was found for sprint-009
|
||||
- [ ] `AskUserQuestion` offers [A] Provide data manually and [B] Stop — not [C] Look back over the closed stories, which is offered only at `workflow: minimal`
|
||||
- [ ] Manual input is formatted into the retrospective structure (What Went Well / What Went Poorly / Action Items for Next Iteration)
|
||||
- [ ] "May I write" prompt still appears before the file write
|
||||
|
||||
---
|
||||
|
||||
### Case 3: Prior Retrospective Exists — Offer to append or replace
|
||||
### Case 3: Prior Retrospective Exists — Update existing or start fresh
|
||||
|
||||
**Fixture:**
|
||||
- `production/retrospectives/retro-sprint-005.md` already exists with content
|
||||
- User re-runs `/retrospective sprint-005` after changes
|
||||
- `production/retrospectives/retro-sprint-005-[earlier date].md` already exists
|
||||
with content
|
||||
- `production/sprints/sprint-005.md` exists
|
||||
- User re-runs `/retrospective sprint-005` and, when asked, selects [B] Start fresh
|
||||
|
||||
**Input:** `/retrospective sprint-005`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill detects that `retro-sprint-005.md` already exists
|
||||
2. Skill presents user with choice: append new observations or replace existing file
|
||||
3. User selects "replace"; skill compiles fresh retrospective
|
||||
4. Skill asks "May I write to `production/retrospectives/retro-sprint-005.md`?" (confirming overwrite)
|
||||
5. File is overwritten; verdict COMPLETE
|
||||
1. Before loading any sprint data, skill globs
|
||||
`production/retrospectives/retro-sprint-005-*.md` and finds the existing file
|
||||
2. Skill asks via `AskUserQuestion`: "An existing retrospective was found:
|
||||
[filename]. How do you want to proceed?" with [A] Update existing and
|
||||
[B] Start fresh (archive the old one)
|
||||
3. User selects [B]; skill compiles from a blank slate — the old file is not
|
||||
touched yet
|
||||
4. Skill asks "May I write this to
|
||||
`production/retrospectives/retro-sprint-005-[today's date].md`?", and the
|
||||
same ask names the rename of the old file to its `-archived-[date]` name
|
||||
5. User approves; skill renames the old file, then writes the new one; verdict
|
||||
COMPLETE
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill checks for existing retrospective file before compiling
|
||||
- [ ] User is offered append or replace choice — not silently overwritten
|
||||
- [ ] "May I write" prompt reflects the overwrite scenario
|
||||
- [ ] Verdict is COMPLETE after write regardless of append vs. replace
|
||||
- [ ] Skill checks for an existing retrospective before loading sprint data
|
||||
- [ ] User is offered Update existing or Start fresh — the old file is never silently overwritten
|
||||
- [ ] The old file is not renamed before the "May I write" prompt is approved, and that prompt names both the new dated path `retro-sprint-005-[today's date].md` and the rename
|
||||
- [ ] On approval, the old file is kept under an `-archived-[date]` name, not deleted or overwritten
|
||||
- [ ] Verdict is COMPLETE after the write
|
||||
|
||||
---
|
||||
|
||||
### Case 4: Edge Case — Unresolved action items from previous retrospective
|
||||
|
||||
**Fixture:**
|
||||
- `production/retrospectives/retro-sprint-004.md` exists with 2 action items marked `[ ]` (not done)
|
||||
- `production/retrospectives/retro-sprint-004-[date].md` exists with 2 action
|
||||
items marked `[ ]` (not done)
|
||||
- `production/sprints/sprint-005.md` exists; no retrospective for sprint-005 exists
|
||||
- User runs `/retrospective sprint-005`
|
||||
|
||||
**Input:** `/retrospective sprint-005`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads the most recent prior retrospective (retro-sprint-004)
|
||||
2. Skill detects 2 unchecked action items from sprint-004
|
||||
3. Skill includes a "Carry-over from Sprint 004" section in the new retrospective
|
||||
4. The unresolved items are listed with a note that they were not followed up
|
||||
1. Skill reads previous retrospectives in `production/retrospectives/`
|
||||
2. Skill checks whether the sprint-004 action items were addressed — 2 were not
|
||||
3. The new retrospective's "Previous Action Items Follow-Up" table lists both
|
||||
items with a status other than Done
|
||||
4. The follow-up table is separate from "Action Items for Next Iteration"
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill reads the most recent prior retrospective to check for open action items
|
||||
- [ ] Unresolved action items appear in the new retrospective under a carry-over section
|
||||
- [ ] Carry-over items are distinct from newly generated action items
|
||||
- [ ] Output notes that these items were not followed up in the previous sprint
|
||||
- [ ] Skill reads the prior retrospective in `production/retrospectives/` to check its action items
|
||||
- [ ] Both unresolved items appear in the "Previous Action Items Follow-Up" table
|
||||
- [ ] Their Status is Not Started or In Progress — not Done
|
||||
- [ ] The follow-up table is distinct from the newly generated "Action Items for Next Iteration"
|
||||
|
||||
---
|
||||
|
||||
@@ -132,38 +173,73 @@ None. Retrospectives are team self-reflection documents; no gates are invoked.
|
||||
|
||||
**Fixture:**
|
||||
- `production/sprints/sprint-005.md` exists with complete stories
|
||||
- `production/session-state/review-mode.txt` contains `full`
|
||||
- `project.yaml` sets `modes.review_mode: full`
|
||||
|
||||
**Input:** `/retrospective sprint-005`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill compiles retrospective in full mode
|
||||
1. Skill compiles the retrospective
|
||||
2. No director gate is invoked (retrospectives are team self-reflection, not delivery gates)
|
||||
3. Skill asks user for approval and writes file on confirmation
|
||||
3. Skill asks user for approval and writes the file on confirmation
|
||||
4. Verdict is COMPLETE
|
||||
|
||||
**Assertions:**
|
||||
- [ ] No director gate is invoked regardless of review mode
|
||||
- [ ] Output does not contain any gate invocation or gate result notation
|
||||
- [ ] Skill proceeds directly from compilation to "May I write" prompt
|
||||
- [ ] Review mode file content is irrelevant to this skill's behavior
|
||||
- [ ] Skill proceeds directly from compilation to the "May I write" prompt
|
||||
- [ ] `review_mode` is not among the keys the skill resolves (it resolves `automation`, `workflow`, `qa.level`)
|
||||
|
||||
---
|
||||
|
||||
### Case 6: Minimal Workflow — Look back over the closed stories
|
||||
|
||||
**Fixture:**
|
||||
- `project.yaml` sets neither `modes.rigor` nor `modes.workflow`, so the injected
|
||||
block reads `workflow: minimal (rigor:minimal)`
|
||||
- `production/sprints/`, `production/milestones/` and
|
||||
`production/retrospectives/` do not exist
|
||||
- 3 stories under `production/epics/core/` have `Status: Complete`; 1 has
|
||||
`Status: In Progress`
|
||||
|
||||
**Input:** `/retrospective sprint-001`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill finds no retrospective and no sprint data for sprint-001
|
||||
2. At `workflow: minimal`, skill asks via `AskUserQuestion` with three options:
|
||||
[A] Provide data manually, [B] Stop, [C] Look back over the closed stories
|
||||
3. User selects [C]; skill reads the 3 `Complete` stories and continues to
|
||||
Phase 3
|
||||
4. The retrospective covers those 3 stories; the sections that need sprint data
|
||||
(planned vs actual, velocity, carryover, estimation accuracy) read
|
||||
`NOT ASSESSED — NO DATA`
|
||||
5. Skill asks "May I write this to
|
||||
`production/retrospectives/retro-sprint-001-[today's date].md`?"; user
|
||||
approves; verdict COMPLETE
|
||||
|
||||
**Assertions:**
|
||||
- [ ] The no-data prompt offers [C] Look back over the closed stories alongside [A] and [B]
|
||||
- [ ] Choosing [C] continues to Phase 3 from the `Complete` stories — the run does not stop BLOCKED
|
||||
- [ ] The `In Progress` story is not reported as completed work
|
||||
- [ ] The sections that need sprint data read `NOT ASSESSED — NO DATA` rather than invented figures
|
||||
- [ ] "May I write" appears before the write, and the verdict is COMPLETE after it
|
||||
|
||||
---
|
||||
|
||||
## Protocol Compliance
|
||||
|
||||
- [ ] Always shows retrospective draft before asking to write
|
||||
- [ ] Always asks "May I write" before writing retrospective file
|
||||
- [ ] Checks for an existing retrospective before loading sprint data
|
||||
- [ ] A section whose inputs are absent reads `NOT ASSESSED — NO DATA` — never an estimate or an empty table
|
||||
- [ ] Always presents the retrospective and its top findings before asking to write
|
||||
- [ ] Always asks "May I write" before writing the retrospective file
|
||||
- [ ] No director gates are invoked
|
||||
- [ ] Verdict is always COMPLETE (not a pass/fail skill)
|
||||
- [ ] Checks prior retrospective for unresolved action items
|
||||
- [ ] Verdict is COMPLETE after a write, BLOCKED when the user stops at the no-data prompt or declines the write
|
||||
- [ ] Checks prior retrospectives for unresolved action items
|
||||
|
||||
---
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- Milestone retrospectives (as opposed to sprint retrospectives) follow the
|
||||
same pattern but read milestone files instead of sprint files; not
|
||||
separately tested here.
|
||||
- The case where session logs are empty is similar to Case 2 (no data);
|
||||
the skill falls back to manual input in both situations.
|
||||
- Milestone retrospectives (`retro-[milestone-name]-[date].md`, followed by
|
||||
`/gate-check`) are not separately tested here.
|
||||
- The [B] Stop choice at the no-data prompt and a declined write (both verdict
|
||||
BLOCKED) are not tested.
|
||||
|
||||
Reference in New Issue
Block a user