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
14 KiB
Skill Test Spec: /adopt
Skill Summary
/adopt audits an existing project's artifacts — GDDs, ADRs, stories, infrastructure
files, and technical-preferences.md — for format compliance with the template's
skill pipeline. It classifies every gap by severity (BLOCKING / HIGH / MEDIUM / LOW),
composes a numbered, ordered migration plan, and writes it to docs/adoption-plan-[date].md
after explicit user approval via AskUserQuestion.
The resolved workflow tier scopes the audit: full requires all 8 GDD sections,
standard requires 5 (+ Formulas for numeric systems), and minimal — the
default, since modes.rigor defaults to minimal — audits design/game-brief.md
instead and checks any existing GDD only advisorily, and the plan prescribes no
infrastructure bootstrap (/architecture-review, /create-control-manifest,
/sprint-plan, /gate-check are not on the minimal path). Fixtures that exercise the
GDD and ADR audits therefore set modes.rigor: full in project.yaml.
A v1.0 project (no project.yaml, legacy config with real values) is migrated
only by .claude/scripts/migrate-v1-config.sh — --dry-run first, the real run
after an ask naming the files it writes, and --finalize left until the user
has read the migration report. /adopt never writes a review mode; it reports
the resolved one.
This skill is distinct from /project-stage-detect (which checks what exists).
/adopt checks whether what exists will actually work with the template's skills.
No director gates apply. The skill does NOT invoke any director agents.
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 severity tier keywords: BLOCKING, HIGH, MEDIUM, LOW
- Contains "May I write" or
AskUserQuestionlanguage before writing the adoption plan - Has a next-step handoff at the end (e.g., offering to fix the highest-priority gap immediately)
Director Gate Checks
None. /adopt is a brownfield audit utility. No director gates apply.
Test Cases
Case 1: Happy Path — All GDDs compliant, no BLOCKING or HIGH gaps
Fixture:
project.yamlsetsmodes.rigor: full,project.stage, andengine.name,engine.version,engine.language,engine.rendering,engine.physicsdesign/gdd/contains 3 GDD files; each has all 8 required sections with content and a valid> **Status**:fielddocs/architecture/adr-0001.mdexists with## Status,## ADR Dependencies,## Engine Compatibility,## GDD Requirements Addressedand## Performance Implicationsdocs/architecture/tr-registry.yamlanddocs/architecture/control-manifest.mdexistdocs/engine-reference/[engine]/VERSION.mdexists
Input: /adopt
Expected behavior:
- Skill emits "Scanning project artifacts..." then reads all artifacts silently
- Reports detected phase, GDD count, ADR count, story count
- Phase 2 audit:
gdd-structure-check.shis run once per GDD path; all 3 GDDs have all 8 sections and a valid Status field - ADR audit: all critical sections present
- Infrastructure audit: registry, manifest and engine reference all exist
- Phase 3: zero BLOCKING and zero HIGH gaps — the project is reported
template-compatible with only advisory improvements remaining (any MEDIUM/LOW
item, e.g. a missing
sprint-status.yaml, is listed as advisory) - Uses
AskUserQuestionto ask about writing the plan; user selects write - Adoption plan is written to
docs/adoption-plan-[date].md - Phase 6b reports the resolved review mode ("Review mode resolves to
full— frommodes.rigor, unless something pins it") and writes nothing for it - Phase 7 takes the "no BLOCKING or HIGH" branch: "No blocking gaps — this project is template-compatible. What next?"
Assertions:
- Skill reads silently before presenting any output
- "Scanning project artifacts..." appears before the silent read phase
gdd-structure-check.shis invoked with an explicit path per GDD (not bare)- Gap counts show
BLOCKING: 0andHIGH: 0, and the project is reported template-compatible AskUserQuestionis used before writing the adoption plan- Adoption plan file is written to
docs/adoption-plan-[date].md modes.review_modeis not written toproject.yamlandproduction/review-mode.txtis not created — the review mode is reported, never pinned- Phase 7 asks "No blocking gaps — this project is template-compatible. What next?" via
AskUserQuestion
Case 2: Non-Compliant Documents — GDDs missing sections, BLOCKING and HIGH gaps
Fixture:
project.yamlsetsmodes.rigor: fulland configures the enginedesign/gdd/contains 2 GDD files:combat.md— missing## Acceptance Criteriaand## Formulassectionsmovement.md— all 8 sections present
- One ADR (
adr-0001.md) is missing## Statussection docs/architecture/tr-registry.yamldoes not exist
Input: /adopt
Expected behavior:
- Skill scans all artifacts
- Phase 2 audit finds:
combat.md: 2 missing sections (Acceptance Criteria, Formulas)adr-0001.md: missing## Status— BLOCKING impacttr-registry.yaml: missing — HIGH impact
- Phase 3 classifies:
- BLOCKING:
adr-0001.mdmissing## Status(story-readiness silently passes) - HIGH:
tr-registry.yamlmissing;combat.mdmissing Acceptance Criteria (can't generate stories) - MEDIUM:
combat.mdmissing Formulas
- BLOCKING:
- Phase 4 builds ordered migration plan:
- Step 1 (BLOCKING): Add
## Statustoadr-0001.md— command:/architecture-decision retrofit - Step 2 (HIGH): Run
/architecture-reviewto bootstrap tr-registry.yaml - Step 3 (HIGH): Add Acceptance Criteria to
combat.md— command:/design-system retrofit - Step 4 (MEDIUM): Add Formulas to
combat.md
- Step 1 (BLOCKING): Add
- Gap Preview shows BLOCKING items as bullets (actual file names), HIGH/MEDIUM as counts
AskUserQuestionasks to write the plan; writes after approval- Phase 7 offers to fix the highest-priority gap (ADR Status) immediately
Assertions:
- BLOCKING gaps are listed as explicit file-name bullets in the Gap Preview
- HIGH and MEDIUM shown as counts in Gap Preview
- Migration plan items are in BLOCKING-first order
- Each plan item includes the fix command or manual steps
AskUserQuestionis used before writing- Phase 7 offers to immediately retrofit the first BLOCKING item
Case 3: Mixed State — Some docs compliant, some not, partial report
Fixture:
project.yamlsetsmodes.rigor: fulland configures engine, naming and performance- 4 GDD files: 2 fully compliant, 2 with gaps (one missing Tuning Knobs, one missing Formulas)
- ADRs: 3 files — 2 compliant, 1 missing
## ADR Dependencies - Stories: 5 files — 3 have TR-ID references, 2 do not
- Infrastructure: all critical files present
Input: /adopt
Expected behavior:
- Skill audits all artifact types
- Adoption Audit Summary shows
GDDs audited: 4 (2 fully compliant, 2 with gaps),ADRs audited: 3 (2 fully compliant, 1 with gaps)andStories audited: 5 - Gap classification:
- No BLOCKING gaps
- HIGH: 1 ADR missing
## ADR Dependencies - MEDIUM: 2 GDDs with missing sections (Tuning Knobs, Formulas); 2 stories missing TR-IDs
- Gap Preview has no BLOCKING bullets and shows HIGH / MEDIUM as counts
- Migration plan lists the HIGH gap first, then MEDIUM gaps with GDD gaps before story gaps
- Note included: "Existing stories continue to work — do not regenerate stories that are in progress or done"
AskUserQuestionto write plan; writes after approval
Assertions:
- Summary shows GDD and ADR tallies as
N (X fully compliant, Y with gaps)andStories audited: 5 - Summary shows
BLOCKING: 0and the Gap Preview lists no BLOCKING bullets - The 2 stories without TR-IDs are counted as MEDIUM gaps
- Existing story compatibility note is included in the plan
- HIGH gap precedes MEDIUM gaps; MEDIUM GDD gaps precede MEDIUM story gaps
AskUserQuestionis used before writing
Case 4: No Artifacts Found — Fresh project, guidance to run /start
Fixture:
- Repository has no files in
design/gdd/,docs/architecture/,production/epics/ - No
project.stageinproject.yamland noproduction/stage.txt - No source code: none of
src/,Assets/orSource/exists - No game-concept.md, no game-brief.md, no systems-index.md
Input: /adopt
Expected behavior:
- Phase 1 existence check finds no artifacts
- Skill infers "Fresh" — no brownfield work to migrate
- Uses
AskUserQuestion:- "This looks like a fresh project — no existing artifacts found.
/adoptis for projects with work to migrate. What would you like to do?" - Options: "Run
/start", "My artifacts are in a non-standard location", "Cancel"
- "This looks like a fresh project — no existing artifacts found.
- Skill stops — does not proceed to audit regardless of user selection
Assertions:
AskUserQuestionis used (not a plain text message) when no artifacts are found/startis presented as a named option- Skill stops after the question — no audit phases run
- No adoption plan file is written
Case 5: Director Gate Check — No gate; minimal tier scopes the audit to the brief
Fixture:
project.yamlconfigures the engine and has nomodesblock (workflowresolves tominimal)design/game-brief.mdexistsdesign/gdd/combat.mdexists and is missing## Acceptance Criteria
Input: /adopt
Expected behavior:
- Phase 2 audits
design/game-brief.md; GDDs, ADRs and UX specs are not expected combat.mdis checked at thestandardbar advisorily — its missing Acceptance Criteria is reported as informational, not as a HIGH gap- The plan does not prescribe the infrastructure bootstrap: its Step 3 says in
one line that it is not on the minimal path and names
/create-storiesas the next step (no stories exist) - No director agents are spawned at any point
- No gate IDs (CD-, TD-, AD-, PR-) appear in output
- No
/gate-checkis invoked during the skill run
Assertions:
design/game-brief.mdis audited- Absent ADRs and UX specs are not reported as gaps
combat.md's missing Acceptance Criteria is not counted in the HIGH total- The plan prescribes none of
/architecture-review,/create-control-manifest,/sprint-planor/gate-check— none is on the minimal path - No director gate is invoked and no gate skip messages appear
- Skill reaches plan-writing or cancellation without any gate verdict
Case 6: v1.0 Project — Converter run, never hand-migrated
Fixture:
- No
project.yamlat the repo root production/stage.txtreadsProduction;.claude/docs/technical-preferences.mdhas- **Engine**: Godot 4.6and a filled naming sectiondesign/gdd/holds GDDs; noproduction/migration-report.md
Input: /adopt
Expected behavior:
- Phase 2g identifies a v1.0 project needing migration (no
project.yaml, legacy files with real, migratable values) - It runs
bash .claude/scripts/migrate-v1-config.sh --dry-runduring the audit (the dry run writes nothing) — it does not hand-writeproject.yaml - The migration is classified BLOCKING in Phase 3 and heads the plan, which reports what the dry run listed
- After the plan, Phase 7 offers the migration first: it asks "May I run the
converter? It writes
project.yamlandproduction/migration-report.md." and runs it without--dry-runonly after approval - It tells the user to read
production/migration-report.mdbefore runningbash .claude/scripts/migrate-v1-config.sh --finalize, and does not run--finalizeitself before the user has read the report
Assertions:
--dry-runruns before any real migration, and its output is reportedproject.yamlis written only by the converter, after the ask namingproject.yamlandproduction/migration-report.mdis approved--finalizeis not run before the user has readproduction/migration-report.md- The migration is a BLOCKING item, first in the plan
- No legacy file is deleted during the run
Protocol Compliance
- Emits "Scanning project artifacts..." before silent read phase
- Reads all artifacts silently before presenting any results
- Shows Adoption Audit Summary and Gap Preview before asking to write
- Uses
AskUserQuestionbefore writing the adoption plan file - Adoption plan written to
docs/adoption-plan-[date].md— not to any other path - Migration plan items ordered: BLOCKING first, HIGH second, MEDIUM third, LOW last
- Phase 7 always offers a single specific next action (not a generic list)
- Never regenerates existing artifacts — only fills gaps in what exists
- Does not invoke director gates at any point
Coverage Notes
- The
gdds,adrs,stories, andinfraargument modes narrow the audit scope; each follows the same pattern as the full audit but limited to that artifact type. Not separately fixture-tested here. - The systems-index.md parenthetical status value check (BLOCKING) is a special case that triggers an immediate fix offer before writing the plan; not separately tested.
- Phase 6b reports the resolved review mode and writes nothing —
review_modeis fronted bymodes.rigor, so pinning it would shadow the rigor expansion; Case 1 asserts that nothing is written for it. - The converter's refusals (exit 3 when its values disagree or a migration
already ran;
--finalizeexiting 4 on a mismatch) are not separately tested; Case 6 covers the migration itself.