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
11 KiB
Skill Test Spec: /retrospective
Skill Summary
/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)
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 keywords: COMPLETE, BLOCKED
- Contains "May I write" language (skill writes retrospective document)
- Has a next-step handoff (offer to start
/sprint-plan new;/gate-checkafter a milestone retrospective)
Director Gate Checks
None. Retrospectives are team self-reflection documents; no gates are invoked.
Test Cases
Case 1: Happy Path — Sprint with mixed outcomes
Fixture:
production/sprints/sprint-005.mdexists with 6 stories; no earlier sprint plan exists inproduction/sprints/production/sprint-status.yamlcovers sprint 5: 4 storiesdone, 1blocked(blocker: "Waiting on the save-format decision"), 1 stillbacklogproject.yamlsetsmodes.workflow: standardproduction/retrospectives/holds no retrospective at all
Input: /retrospective sprint-005
Expected behavior:
- Skill globs
production/retrospectives/retro-sprint-005-*.md— no match - Skill reads the sprint plan and
production/sprint-status.yaml, using the yaml as the primary source for completion (4 of 6 done) - Skill runs
git logfor the sprint period and counts TODO/FIXME/HACK markers - 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 - Skill presents the retrospective and top findings (completion rate, velocity trend — reported as not assessed — top blocker, most important action item)
- Skill asks "May I write this to
production/retrospectives/retro-sprint-005-[today's date].md?" - User approves; file is written; verdict COMPLETE
- Skill asks whether to start sprint planning now (
/sprint-plan new)
Assertions:
- 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].mdand appears before the write - Verdict is COMPLETE after the write, followed by the offer to start
/sprint-plan new
Case 2: No Sprint Data — Manual input fallback
Fixture:
- User calls
/retrospective sprint-009 production/sprints/sprint-009.mddoes NOT exist andproduction/sprint-status.yamlhas no sprint 9project.yamlsetsmodes.workflow: standard- No retrospective for sprint-009 exists
Input: /retrospective sprint-009
Expected behavior:
- Skill finds no sprint plan for sprint-009
- Skill outputs "No sprint data found for sprint-009 …"
- Skill asks via
AskUserQuestion: [A] Provide data manually, [B] Stop - User selects [A] and describes the sprint's tasks, dates and outcomes
- Skill uses that input as the source of truth and formats it into the retrospective structure
- Skill asks "May I write" and writes the document on approval
Assertions:
- 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
AskUserQuestionoffers [A] Provide data manually and [B] Stop — not [C] Look back over the closed stories, which is offered only atworkflow: 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 — Update existing or start fresh
Fixture:
production/retrospectives/retro-sprint-005-[earlier date].mdalready exists with contentproduction/sprints/sprint-005.mdexists- User re-runs
/retrospective sprint-005and, when asked, selects [B] Start fresh
Input: /retrospective sprint-005
Expected behavior:
- Before loading any sprint data, skill globs
production/retrospectives/retro-sprint-005-*.mdand finds the existing file - 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) - User selects [B]; skill compiles from a blank slate — the old file is not touched yet
- 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 - User approves; skill renames the old file, then writes the new one; verdict COMPLETE
Assertions:
- 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].mdand 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-[date].mdexists with 2 action items marked[ ](not done)production/sprints/sprint-005.mdexists; no retrospective for sprint-005 exists- User runs
/retrospective sprint-005
Input: /retrospective sprint-005
Expected behavior:
- Skill reads previous retrospectives in
production/retrospectives/ - Skill checks whether the sprint-004 action items were addressed — 2 were not
- The new retrospective's "Previous Action Items Follow-Up" table lists both items with a status other than Done
- The follow-up table is separate from "Action Items for Next Iteration"
Assertions:
- 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"
Case 5: Gate Compliance — No gate invoked in any mode
Fixture:
production/sprints/sprint-005.mdexists with complete storiesproject.yamlsetsmodes.review_mode: full
Input: /retrospective sprint-005
Expected behavior:
- Skill compiles the retrospective
- No director gate is invoked (retrospectives are team self-reflection, not delivery gates)
- Skill asks user for approval and writes the file on confirmation
- 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 the "May I write" prompt
review_modeis not among the keys the skill resolves (it resolvesautomation,workflow,qa.level)
Case 6: Minimal Workflow — Look back over the closed stories
Fixture:
project.yamlsets neithermodes.rigornormodes.workflow, so the injected block readsworkflow: minimal (rigor:minimal)production/sprints/,production/milestones/andproduction/retrospectives/do not exist- 3 stories under
production/epics/core/haveStatus: Complete; 1 hasStatus: In Progress
Input: /retrospective sprint-001
Expected behavior:
- Skill finds no retrospective and no sprint data for sprint-001
- At
workflow: minimal, skill asks viaAskUserQuestionwith three options: [A] Provide data manually, [B] Stop, [C] Look back over the closed stories - User selects [C]; skill reads the 3
Completestories and continues to Phase 3 - The retrospective covers those 3 stories; the sections that need sprint data
(planned vs actual, velocity, carryover, estimation accuracy) read
NOT ASSESSED — NO DATA - 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
Completestories — the run does not stop BLOCKED - The
In Progressstory is not reported as completed work - The sections that need sprint data read
NOT ASSESSED — NO DATArather than invented figures - "May I write" appears before the write, and the verdict is COMPLETE after it
Protocol Compliance
- 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 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 (
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.