6.0 KiB
Skill Test Spec: /scope-check
Skill Summary
/scope-check is a Haiku-tier read-only skill that analyzes a feature, sprint,
or story for scope creep risk. It reads sprint and story files and compares them
against the active milestone goals. It is designed for fast, low-cost checks
before or during planning. No director gates are invoked. No files are written.
Verdicts: ON SCOPE, CONCERNS, or SCOPE CREEP DETECTED.
Static Assertions (Structural)
Verified automatically by /skill-test static — no fixture needed.
- Has required frontmatter fields:
name,description,argument-hint,user-invocable,allowed-tools - Has ≥2 phase headings
- Contains verdict keywords: ON SCOPE, CONCERNS, SCOPE CREEP DETECTED
- Does NOT require "May I write" language (read-only skill)
- Has a next-step handoff (what to do based on verdict)
Director Gate Checks
None. Scope check is a read-only advisory skill; no gates are invoked.
Test Cases
Case 1: Happy Path — Sprint stories align with milestone goals
Fixture:
production/milestones/milestone-03.mdlists 3 goals: combat system, enemy AI, level loadingproduction/sprints/sprint-006.mdcontains 5 stories, all tagged to one of the 3 goalsproduction/session-state/active.mdreferences milestone-03 as the active milestone
Input: /scope-check
Expected behavior:
- Skill reads active milestone goals from milestone-03
- Skill reads sprint-006 stories and checks each against milestone goals
- All 5 stories map to one of the 3 goals
- Skill outputs a mapping table: story → milestone goal
- Verdict is ON SCOPE
Assertions:
- Each story is mapped to a milestone goal in the output
- Verdict is ON SCOPE when all stories map to milestone goals
- No files are written
- Skill does not modify sprint or milestone files
Case 2: Scope Creep Detected — Stories introducing systems not in milestone
Fixture:
production/milestones/milestone-03.mdgoals: combat, enemy AI, level loadingproduction/sprints/sprint-006.mdcontains 5 stories:- 3 stories map to milestone goals
- 2 stories reference "online leaderboard" and "achievement system" (not in milestone-03)
Input: /scope-check
Expected behavior:
- Skill reads milestone goals and sprint stories
- Skill identifies 2 stories with no matching milestone goal
- Skill names the out-of-scope stories: "Online Leaderboard Feature", "Achievement System Setup"
- Verdict is SCOPE CREEP DETECTED
Assertions:
- Out-of-scope stories are named explicitly in the output
- Verdict is SCOPE CREEP DETECTED when any story has no milestone goal match
- Skill does not automatically remove the stories — findings are advisory
- Output recommends deferring the out-of-scope stories to a later milestone
Case 3: No Milestone Defined — CONCERNS; scope cannot be validated
Fixture:
production/session-state/active.mdhas no milestone referenceproduction/milestones/directory exists but is emptyproduction/sprints/sprint-006.mdhas 4 stories
Input: /scope-check
Expected behavior:
- Skill reads active.md — finds no milestone reference
- Skill checks
production/milestones/— no milestone files found - Skill outputs: "No active milestone defined — scope cannot be validated"
- Verdict is CONCERNS
Assertions:
- Skill does not error when no milestone is defined
- Output explicitly states that scope validation requires a milestone reference
- Verdict is CONCERNS (not ON SCOPE or SCOPE CREEP DETECTED without data)
- Output suggests running
/milestone-reviewor creating a milestone
Case 4: Single Story Check — Evaluated against its parent epic
Fixture:
- User targets a single story:
production/epics/combat/story-parry-timing.md - Story references parent epic:
epic-combat.md production/epics/combat/epic-combat.mdhas scope: "melee combat mechanics"- Story title: "Implement parry timing window" — matches epic scope
Input: /scope-check production/epics/combat/story-parry-timing.md
Expected behavior:
- Skill reads the specified story file
- Skill reads the parent epic to get scope definition
- Skill evaluates story against epic scope — "parry timing" matches "melee combat"
- Verdict is ON SCOPE
Assertions:
- Single-file argument is accepted (story path, not sprint)
- Skill reads the parent epic referenced in the story file
- Story is evaluated against epic scope (not milestone scope) in single-story mode
- Verdict is ON SCOPE when story matches epic scope
Case 5: Gate Compliance — No gate; PR may be consulted separately
Fixture:
- Sprint has 2 SCOPE CREEP stories and 3 ON SCOPE stories
review-mode.txtcontainsfull
Input: /scope-check
Expected behavior:
- Skill reads milestone and sprint; identifies 2 scope creep items
- No director gate is invoked regardless of review mode
- Skill presents findings with SCOPE CREEP DETECTED verdict
- Output notes: "Consider raising scope concerns with the Producer before sprint begins"
- Skill ends without writing any files
Assertions:
- No director gate is invoked in any review mode
- Producer consultation is suggested (not mandated)
- No files are written
- Verdict is SCOPE CREEP DETECTED
Protocol Compliance
- Reads milestone goals and sprint/story files before analysis
- Maps each story to a milestone goal (or flags as unmapped)
- Does not write any files
- No director gates are invoked
- Runs on Haiku model tier (fast, low-cost)
- Verdict is one of: ON SCOPE, CONCERNS, SCOPE CREEP DETECTED
Coverage Notes
- The case where the sprint file itself does not exist is not tested; the skill would output a CONCERNS verdict with a message about missing sprint data.
- Partial scope overlap (story touches a milestone goal but also introduces new scope) is not explicitly tested; implementation may classify this as CONCERNS rather than SCOPE CREEP DETECTED.