Files
Claude-Code-Game-Studios/CCGS Skill Testing Framework/skills/utility/start.md
T
DonchitosandClaude Opus 5.5 b21fa0f7f2 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
2026-09-29 21:32:19 +10:00

250 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Skill Test Spec: /start
## Skill Summary
`/start` is the first-time onboarding skill. Phase 1 silently detects project
state (engine from `project.yaml` or `technical-preferences.md`, concept or
brief, source code under the engine's code root, prototypes, GDDs, production
artifacts, and whether `.git/config`'s `origin` still points at the template
repo). Phase 2 asks where the user is with four `AskUserQuestion` options
(A No idea yet, B Vague idea, C Clear concept, D Existing work); engine choice
is not asked here — it is deferred to `/setup-engine`.
Phase 3 routes by answer and names only the immediate next step. Phase 3c asks
"May I write `project.stage: [stage]` to `project.yaml` (and the legacy mirror
`production/stage.txt`)?" — one approval that also covers the Phase 3d and 3e
answers — then writes both and announces them. Phase 3d asks the rigor question and Phase
3e the automation question, each skipped when the key is already set; each
answer is written to `project.yaml` straight from the selection. `/start` never
writes any of the six knobs `modes.rigor` fronts (`modes.review_mode`,
`modes.workflow`, `docs.density`, `qa.level`, `modes.story_granularity`,
`team.size`) or `production/review-mode.txt`. Phase 4 prints the path for the
chosen rigor — Path D2's retrofit path included — and asks which step to take
first; Phase 5 prints a single "Type `[skill command]` to begin." line. A
returning user (engine configured and a concept or brief present) skips
onboarding. No director gates apply. Verdict: COMPLETE.
---
## 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 keyword: COMPLETE
- [ ] States the write rule for every write it makes: "May I write" before the `project.yaml` write, the same ask naming the `production/stage.txt` legacy mirror; `modes.rigor` and `modes.automation` written as a direct consequence of the user's selection, under that approval
- [ ] Has a next-step handoff at the end (Phase 5: "Type `[skill command]` to begin.")
---
## Director Gate Checks
None. `/start` is a utility setup skill. No director agents exist yet at the
point this skill runs.
---
## Test Cases
### Case 1: Happy Path — Fresh repo, Path A, minimal rigor
**Fixture:**
- No `project.yaml`, no `production/stage.txt`; `technical-preferences.md`
holds only placeholders
- No design docs, prototypes or source code; `origin` is the user's own repo
- The user picks `A) No idea yet`, approves the `project.yaml` write, then picks
`Jam / prototype / first game`, then `Guided`
**Input:** `/start`
**Expected behavior:**
1. Phase 1 detection runs without printing its findings
2. Phase 2 `AskUserQuestion` offers exactly A–D; no engine question is asked
3. Path A: explains `/brainstorm` tier-neutrally and names only `/brainstorm open`
as the next step ("I'll lay out the full path once I know how much process you want")
4. Phase 3c asks "May I write `project.stage: Concept` to `project.yaml` (and the
legacy mirror `production/stage.txt`)?",
saying the file will be created; on approval it creates `project.yaml` from
the v1.1 minimal template with `project: stage: Concept` (no `modes.rigor`,
no `modes.review_mode`), writes `Concept` to `production/stage.txt` under
the same approval, and announces both
5. Phase 3d offers `Jam / prototype / first game (Recommended)` first (no
concept → minimal); `modes.rigor: minimal` is written on selection
6. Phase 3e writes `modes.automation: guided` on selection
7. Phase 4 prints the minimal 4-step path (`/setup-engine`, `/brainstorm`,
`/create-stories`, `/dev-story`) and asks which step to take first
8. Phase 5 prints only "Type `[skill command]` to begin."; verdict COMPLETE
**Assertions:**
- [ ] Phase 2 offers exactly the four A–D options and no engine choice
- [ ] `project.yaml` and `production/stage.txt` are written only after the one "May I write" ask that names both
- [ ] `project.stage` and `production/stage.txt` are both `Concept`
- [ ] `project.yaml` ends up holding only `project.stage`, `modes.rigor` and `modes.automation` from `/start` — none of the six rigor-fronted knobs — and `production/review-mode.txt` is not written
- [ ] The recommended rigor option is listed first with ` (Recommended)`
- [ ] Phase 4 prints the minimal 4-step path
- [ ] The next skill is not auto-run; Verdict is COMPLETE
---
### Case 2: Returning User — Onboarding skipped
**Fixture:**
- `project.yaml` has `engine.name: Godot` and `modes.rigor: minimal`; no explicit `modes.review_mode`
- `design/game-brief.md` exists
**Input:** `/start`
**Expected behavior:**
1. Phase 1 finds the engine configured and the brief present
2. Skill skips onboarding: "It looks like you're already set up! Your engine is
Godot and you have … a game brief at `design/game-brief.md`."
3. Review mode is reported as `solo` (resolved from `modes.rigor: minimal`)
4. Skill points to `/help` or asks what the user would like to work on
**Assertions:**
- [ ] The A–D starting-point question is not asked
- [ ] The message names the configured engine (Godot) and the brief path
- [ ] Review mode is reported as `solo`, resolved from rigor
- [ ] No write is made to `project.yaml` or `production/stage.txt`
---
### Case 3: Existing Work on Unity — Path D2, stage and rigor already set
**Fixture:**
- `project.yaml` has `engine.name: Unity`, `modes.rigor: standard` and
`modes.automation: collaborative`
- C# scripts exist under `Assets/Scripts/`; `design/gdd/` holds 3 system GDDs;
no `design/gdd/game-concept.md`, no `docs/architecture/`
- The user picks `D) Existing work` and approves the `project.yaml` write
**Input:** `/start`
**Expected behavior:**
1. Phase 1 resolves the code root as `Assets/` for Unity and finds source files
there (it does not scan `src/` and conclude there is no code)
2. Phase 3 D shares what it found (source files, 3 design docs, engine Unity)
3. Sub-case D2: recommends `/project-stage-detect` then `/adopt`, naming
`/project-stage-detect` as the immediate step; the tiered path waits for
Phase 4
4. Phase 3c asks "May I write `project.stage: Systems Design` to
`project.yaml` (and the legacy mirror `production/stage.txt`)?", then writes `Systems Design` (GDDs, no architecture) to the
existing `project.yaml` (read first, then edited) and to `production/stage.txt`
5. Phase 3d prints "Rigor is set to `standard`." and Phase 3e "Automation is set
to `collaborative`." — neither question is asked
6. Phase 4 prints the D2 retrofit path at `standard`: `/project-stage-detect`,
`/adopt`, `/design-system retrofit`, `/architecture-decision retrofit`,
`/architecture-review`, `/gate-check`
**Assertions:**
- [ ] Source files are found under `Assets/`, not reported as absent
- [ ] `/project-stage-detect` and `/adopt` are recommended for D2
- [ ] Stage `Systems Design` is written to both `project.yaml` and `production/stage.txt`, after the "May I write" ask
- [ ] The rigor and automation questions are skipped because both keys are set
- [ ] The D2 retrofit path is printed in Phase 4, including the GDD, ADR and registry retrofit steps
- [ ] Verdict is COMPLETE
---
### Case 4: Clone Still Wired to the Template Repo — remote note, never run
**Fixture:**
- Fresh project as in Case 1
- `.git/config` has `[remote "origin"]` with url
`https://github.com/Donchitos/Claude-Code-Game-Studios.git`
- The user picks `B) Vague idea` with the hint "a small weekend puzzler"
**Input:** `/start`
**Expected behavior:**
1. Phase 1 reads `.git/config` as a file and matches the template URL case-insensitively
2. Path B recommends `/brainstorm a small weekend puzzler` as the immediate step
3. Phase 3d recommends `Jam / prototype / first game` for the described scope
4. After the Phase 4 path, the skill adds once: the clone's `origin` still points
at the Claude Code Game Studios repo, and suggests
`git remote rename origin template` then `git remote add origin <your repo URL>`
5. The commands are suggested only — no git command is run
**Assertions:**
- [ ] The template-origin note appears exactly once, after the path
- [ ] Both suggested commands are given as written above
- [ ] No git command is executed (read of `.git/config` only)
- [ ] The minimal rigor option is the recommended one for the described scope
---
### Case 5: Director Gate Check — No gate; start is a utility setup skill
**Fixture:**
- Fresh project and answers as in Case 1 (`A) No idea yet`, the write approved,
`Jam / prototype / first game`, `Guided`)
**Input:** `/start`
**Expected behavior:**
1. Skill completes the onboarding flow through Phase 5
2. No director agents are spawned at any point
3. No gate IDs (CD-*, TD-*, AD-*, PR-*) appear in the output
**Assertions:**
- [ ] No director gate is invoked during the skill execution
- [ ] No gate skip messages appear (gates are absent, not suppressed)
- [ ] Skill reaches COMPLETE without any gate verdict
---
### Case 6: Path D2 With Rigor Unset — the retrofit path waits for the answer
**Fixture:**
- `project.yaml` has `engine.name: Godot` and no `modes` block
- `src/` holds GDScript files; `design/gdd/` holds 4 system GDDs; no
`docs/architecture/`
- The user picks `D) Existing work`, approves the `project.yaml` write, then
picks `Several systems that affect each other` and `Collaborative`
**Input:** `/start`
**Expected behavior:**
1. Phase 3 D2 names `/project-stage-detect` as the immediate step and prints no
tiered path yet
2. Phase 3c asks, then writes `Systems Design`
3. Phase 3d asks the rigor question, since `modes.rigor` is unset;
`modes.rigor: standard` is written on selection
4. Phase 4 prints the D2 retrofit path at `standard`, including
`/design-system retrofit`, `/architecture-decision retrofit` and
`/architecture-review` — not the minimal stop after `/adopt` and
`/setup-engine`
**Assertions:**
- [ ] No tiered D2 path is printed before Phase 3d has the rigor
- [ ] The rigor question is asked because the key is unset
- [ ] Phase 4's D2 path matches the chosen `standard`, with the GDD, ADR and registry retrofit steps
- [ ] None of the six rigor-fronted knobs is written — only `modes.rigor` and `modes.automation` are added
---
## Protocol Compliance
- [ ] Detects project state silently before the first question
- [ ] Asks the starting-point question via `AskUserQuestion` with options A–D; defers engine choice to `/setup-engine`
- [ ] Never writes any of the six rigor-fronted knobs (`modes.review_mode`, `modes.workflow`, `docs.density`, `qa.level`, `modes.story_granularity`, `team.size`) or `production/review-mode.txt`
- [ ] Skips the rigor and automation questions when those keys are already set
- [ ] Asks "May I write" before the `project.yaml` write, naming `production/stage.txt` in the same ask; announces the stage it wrote; writes rigor/automation only from the user's selection
- [ ] Prints the Path D2 retrofit path only in Phase 4, after the rigor is known
- [ ] Never auto-runs the next skill; a completed onboarding run (not the returning-user skip, which ends at its `/help` pointer) ends with "Type `[skill command]` to begin." and Verdict COMPLETE
---
## Coverage Notes
- Path C (clear concept, `Formalize it first` vs `Jump straight in`) is not
separately tested.
- The `standard` and `full` Phase 4 paths follow Case 1 with the longer
pipeline; not separately tested.
- The mismatch note (a rigor that contradicts the described project) and the
edge cases "picks D but project is empty" / "picks A but code exists" are not
separately tested.
- A declined Phase 3c write (neither file written, the stage and the two
answers kept for the run and reported as not saved) is not separately tested.