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
8.3 KiB
Skill Test Spec: /estimate
Skill Summary
/estimate [task-description] estimates the effort for one task. It reads the
task description from the argument (asking for clarification first if it is too
vague to estimate), the project context from CLAUDE.md, and any related GDD in
design/gdd/ (Phase 1). It scans the affected code for complexity, integration
points and test coverage, and reads production/sprints/ for similar completed
tasks and historical velocity (Phase 2). It analyzes code complexity, scope and
risk (Phase 3), then prints an estimate (Phase 4): a Complexity Assessment
table, an Effort Estimate in days for Optimistic / Expected / Pessimistic
scenarios, a recommended budget equal to the Expected figure, a Confidence of
High / Medium / Low with its drivers, Risk Factors, Dependencies, a Suggested
Breakdown with a total, and Notes and Assumptions — followed by a one-line
summary and Verdict: COMPLETE — estimate generated. Estimates are rounded to
half days. The skill is read-only and invokes no director gates.
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 the Optimistic / Expected / Pessimistic scenarios, the High / Medium / Low confidence levels, and the
COMPLETEverdict - Does NOT require "May I write" language (read-only; states that no files are written)
- Has a next-step handoff (how to use the estimate in sprint planning)
Director Gate Checks
None. Estimation is an advisory informational skill; no gates are invoked.
Test Cases
Case 1: Happy Path — Clear task in a documented system with existing patterns
Fixture:
project.yaml:engine.name: godot, so the code root issrc/design/gdd/combat.mddocuments melee hit detectionsrc/combat/holds the melee attack code; similar collision code already exists thereproduction/sprints/sprint-003.mdthroughsprint-005.mdrecord completed combat tasks
Input: /estimate Add hitbox detection to melee attacks
Expected behavior:
- Skill restates the task; the description is specific enough, so no clarification is asked
- Skill reads
design/gdd/combat.mdbecause the task relates to a documented system - Skill scans
src/combat/for affected files, integration points and existing tests - Skill reads
production/sprints/for similar completed tasks and velocity - Output follows the Phase 4 template: Complexity Assessment, Effort Estimate (Optimistic / Expected / Pessimistic, in days), Recommended budget, Confidence, Risk Factors, Dependencies, Suggested Breakdown with a Total, Notes and Assumptions
- Recommended budget equals the Expected figure; all figures are in half-day increments
- A brief summary gives the recommended budget, the confidence level and the single biggest risk
- Output ends with
Verdict: COMPLETE — estimate generated.; no files are written
Assertions:
- The combat GDD and the sprint history are read before the estimate is produced
- Effort is given as three day figures (Optimistic, Expected, Pessimistic), not a single number
- Recommended budget equals the Expected figure, not the Optimistic one
- Figures are rounded to half days, not hours
- The closing summary names budget, confidence and the biggest risk
- No files are written
Case 2: High Uncertainty — New subsystem, no architecture decided
Fixture:
project.yaml:engine.name: godotsrc/holds no source files for an online or matchmaking subsystemdesign/gdd/online.mddescribes the lobby with open "TBD" requirements, and says the networking approach (transport, host model) is not yet decided
Input: /estimate Implement online lobby matchmaking
Expected behavior:
- Skill reads
design/gdd/online.mdand finds the unresolved requirements and the undecided networking approach - Code scan finds no existing subsystem; "Existing patterns available" is No
- Risk Factors table lists the specific unknowns: the networking approach the GDD leaves undecided, new technology, unclear requirements
- Confidence is Low, with the drivers explained
- Phase 5 recommends a time-boxed spike via
/prototypebefore committing - No files are written
Assertions:
- Confidence is Low when the task has an undecided approach, no existing code and TBD requirements
- The Risk Factors table names the specific unknowns driving the uncertainty
- Output recommends a time-boxed
/prototypespike before committing - No files are written
Case 3: No Sprint Velocity Data — Estimate still produced, gap stated
Fixture:
project.yaml:engine.name: godot;src/core/holds the inventory code the save touchesdesign/gdd/save-load.mddocuments the save system clearlyproduction/sprints/is empty — no historical sprints
Input: /estimate Implement save and load of player inventory
Expected behavior:
- Skill reads the task, the GDD and the affected code
- Skill looks for past sprint data and finds none
- The estimate is still produced with all three scenarios and a recommended budget
- Notes and Assumptions (or the Confidence explanation) states that no sprint history was available, so the figures are not calibrated to team velocity
- No figure is padded silently to cover the missing data — any extra risk is called out explicitly
- No files are written
Assertions:
- Skill does not error or stop when no sprint history exists
- Estimate is still produced with Optimistic, Expected and Pessimistic figures
- Output states that no sprint history was available for velocity calibration
- Any allowance for the missing data is stated as a risk, not hidden in the figures
Case 4: Vague Task — Clarification before estimating
Fixture:
project.yaml:engine.name: godot- Project has GDDs and source code under
src/; sprint history exists
Input: /estimate make combat feel better
Expected behavior:
- Skill reads the task description and finds it too vague to estimate meaningfully (no scope, no named change)
- Skill asks for clarification before proceeding
- No Complexity Assessment, Effort Estimate or verdict is produced until the task is clarified
- No files are written
Assertions:
- Skill asks for clarification for a task that names no concrete change
- No estimate figures are produced before the clarification is answered
Verdict: COMPLETEis not printed for an unclarified task- No files are written
Case 5: Gate Compliance — No gate; estimates are informational
Fixture:
project.yaml:engine.name: godot,modes.review_mode: full- Task relates to a documented system with medium complexity; its code is under
src/
Input: /estimate Add item pickup with inventory stacking
Expected behavior:
- Skill reads context, scans code and sprint history; produces the estimate
- No director gate is invoked in any review mode
- Estimate is presented as advisory output only
- Next steps include "run
/sprint-plan updateto add it to the next sprint"
Assertions:
- No director gate is invoked regardless of review mode
- Output is purely informational — no approval or write prompt
- Next-step recommendation references
/sprint-plan - Estimate does not change based on review mode
Protocol Compliance
- Reads the task argument, project context and any related GDD before estimating
- Reads
production/sprints/for similar tasks and velocity when available - Produces an effort range (Optimistic / Expected / Pessimistic days), not a single number
- Does not write any files
- No director gates are invoked
- Ends with Phase 5 next steps matched to the result (
/prototypefor Low confidence,/create-storiesfor tasks over 10 days,/sprint-plan updateto schedule)
Coverage Notes
- The skill estimates one task per run; a sprint file with several stories is not a supported input.
- The "task over 10 days → break it into smaller stories via
/create-stories" branch is not given its own case. - The accuracy of the day figures depends on the team and is not tested; the assertions check the range's structure, its sources and its stated drivers.