添加 claude code game studios 到项目
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
# Skill Test Spec: /create-control-manifest
|
||||
|
||||
## Skill Summary
|
||||
|
||||
`/create-control-manifest` reads all Accepted ADRs from `docs/architecture/` and
|
||||
generates a control manifest — a summary document that captures all architectural
|
||||
constraints, required patterns, and forbidden patterns in one place. The manifest
|
||||
is the reference document that story authors use when writing story files, ensuring
|
||||
stories inherit the correct architectural rules without having to read all ADRs
|
||||
individually.
|
||||
|
||||
The skill only includes Accepted ADRs; Proposed ADRs are excluded and noted. It
|
||||
has no director gates. The skill asks "May I write" before writing
|
||||
`docs/architecture/control-manifest.md`.
|
||||
|
||||
---
|
||||
|
||||
## 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: CREATED, BLOCKED
|
||||
- [ ] Contains "May I write" collaborative protocol language (for control-manifest.md)
|
||||
- [ ] Has a next-step handoff at the end (`/create-epics` or `/create-stories`)
|
||||
- [ ] Documents that only Accepted ADRs are included (not Proposed)
|
||||
|
||||
---
|
||||
|
||||
## Director Gate Checks
|
||||
|
||||
No director gates — this skill spawns no director gate agents. The control
|
||||
manifest is a mechanical extraction from Accepted ADRs; no creative or technical
|
||||
review gate is needed.
|
||||
|
||||
---
|
||||
|
||||
## Test Cases
|
||||
|
||||
### Case 1: Happy Path — 4 Accepted ADRs create a correct manifest
|
||||
|
||||
**Fixture:**
|
||||
- `docs/architecture/` contains 4 ADR files, all with `Status: Accepted`
|
||||
- Each ADR has a "Required Patterns" and/or "Forbidden Patterns" section
|
||||
- No existing `docs/architecture/control-manifest.md`
|
||||
|
||||
**Input:** `/create-control-manifest`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads all ADR files in `docs/architecture/`
|
||||
2. Extracts Required Patterns, Forbidden Patterns, and key constraints from each
|
||||
3. Drafts the manifest with correct section structure
|
||||
4. Shows the draft manifest to the user
|
||||
5. Asks "May I write `docs/architecture/control-manifest.md`?"
|
||||
6. Writes the manifest after approval
|
||||
|
||||
**Assertions:**
|
||||
- [ ] All 4 Accepted ADRs are represented in the manifest
|
||||
- [ ] Manifest includes distinct sections for Required Patterns and Forbidden Patterns
|
||||
- [ ] Manifest includes the source ADR number for each constraint
|
||||
- [ ] "May I write" is asked before writing
|
||||
- [ ] Skill does NOT write without approval
|
||||
- [ ] Verdict is CREATED after writing
|
||||
|
||||
---
|
||||
|
||||
### Case 2: Failure Path — No ADRs found
|
||||
|
||||
**Fixture:**
|
||||
- `docs/architecture/` directory exists but contains no ADR files
|
||||
|
||||
**Input:** `/create-control-manifest`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads `docs/architecture/` and finds no ADR files
|
||||
2. Skill outputs: "No ADRs found. Run `/architecture-decision` to create ADRs before generating the control manifest."
|
||||
3. Skill exits without creating any file
|
||||
4. Verdict is BLOCKED
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill outputs a clear error when no ADRs are found
|
||||
- [ ] No control manifest file is written
|
||||
- [ ] Skill recommends `/architecture-decision` as the next action
|
||||
- [ ] Verdict is BLOCKED (not an error crash)
|
||||
|
||||
---
|
||||
|
||||
### Case 3: Mixed ADR Statuses — Only Accepted ADRs included
|
||||
|
||||
**Fixture:**
|
||||
- `docs/architecture/` contains 3 Accepted ADRs and 2 Proposed ADRs
|
||||
|
||||
**Input:** `/create-control-manifest`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads all ADR files and filters by Status: Accepted
|
||||
2. Manifest is drafted from the 3 Accepted ADRs only
|
||||
3. Output notes: "2 Proposed ADRs were excluded: [adr-NNN-name, adr-NNN-name]"
|
||||
4. User sees which ADRs were excluded before approving the write
|
||||
5. Asks "May I write `docs/architecture/control-manifest.md`?"
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Only the 3 Accepted ADRs appear in the manifest content
|
||||
- [ ] Excluded Proposed ADRs are listed by name in the output
|
||||
- [ ] User sees the exclusion list before approving the write
|
||||
- [ ] Skill does NOT silently omit Proposed ADRs without noting them
|
||||
|
||||
---
|
||||
|
||||
### Case 4: Edge Case — Manifest already exists
|
||||
|
||||
**Fixture:**
|
||||
- `docs/architecture/control-manifest.md` already exists (version 1, dated last week)
|
||||
- `docs/architecture/` contains Accepted ADRs (some new since last manifest)
|
||||
|
||||
**Input:** `/create-control-manifest`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill detects existing manifest and reads its version number / date
|
||||
2. Skill offers to regenerate: "control-manifest.md already exists (v1, [date]). Regenerate with current ADRs?"
|
||||
3. If user confirms: skill drafts updated manifest, increments version number
|
||||
4. Asks "May I write `docs/architecture/control-manifest.md`?" (overwrite)
|
||||
5. Writes updated manifest after approval
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill reads and reports the existing manifest version before offering to regenerate
|
||||
- [ ] User is offered a regenerate/skip choice — not auto-overwritten
|
||||
- [ ] Updated manifest has an incremented version number
|
||||
- [ ] "May I write" is asked before overwriting the existing file
|
||||
|
||||
---
|
||||
|
||||
### Case 5: Director Gate — No gate spawned; no review-mode.txt read
|
||||
|
||||
**Fixture:**
|
||||
- 4 Accepted ADRs exist
|
||||
- `production/session-state/review-mode.txt` exists with `full`
|
||||
|
||||
**Input:** `/create-control-manifest`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads ADRs and drafts manifest
|
||||
2. Skill does NOT read `production/session-state/review-mode.txt`
|
||||
3. No director gate agents are spawned at any point
|
||||
4. Skill proceeds directly to "May I write" after drafting
|
||||
5. Review mode setting has no effect on this skill's behavior
|
||||
|
||||
**Assertions:**
|
||||
- [ ] No director gate agents are spawned (no CD-, TD-, PR-, AD- prefixed gates)
|
||||
- [ ] Skill does NOT read `production/session-state/review-mode.txt`
|
||||
- [ ] Output contains no "Gate: [GATE-ID]" or gate-skipped entries
|
||||
- [ ] The manifest is generated from ADRs alone, with no external gate review
|
||||
|
||||
---
|
||||
|
||||
## Protocol Compliance
|
||||
|
||||
- [ ] Reads all ADR files before drafting manifest
|
||||
- [ ] Only Accepted ADRs included — Proposed ones noted as excluded
|
||||
- [ ] Manifest draft shown to user before "May I write" ask
|
||||
- [ ] "May I write `docs/architecture/control-manifest.md`?" asked before writing
|
||||
- [ ] No director gates — no review-mode.txt read
|
||||
- [ ] Ends with next-step handoff: `/create-epics` or `/create-stories`
|
||||
|
||||
---
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- The exact section structure of the generated manifest (constraint tables, pattern
|
||||
lists) is defined by the skill body and not re-enumerated in test assertions.
|
||||
- The `version` field incrementing logic (v1 → v2) is tested via Case 4 but exact
|
||||
version numbering format is not fixture-locked.
|
||||
- ADR parsing (extracting Required/Forbidden Patterns) depends on consistent ADR
|
||||
structure — tested implicitly via Case 1's fixture.
|
||||
190
CCGS Skill Testing Framework/skills/pipeline/create-epics.md
Normal file
190
CCGS Skill Testing Framework/skills/pipeline/create-epics.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# Skill Test Spec: /create-epics
|
||||
|
||||
## Skill Summary
|
||||
|
||||
`/create-epics` reads all approved GDDs and translates them into EPIC.md files,
|
||||
one per system. Epics are organized by layer (Foundation → Core → Feature →
|
||||
Presentation) and processed in priority order within each layer. Each EPIC.md
|
||||
includes scope, governing ADRs, GDD requirements, engine risk level, and a
|
||||
Definition of Done. The skill asks "May I write" before creating each EPIC file.
|
||||
|
||||
In `full` review mode, a PR-EPIC gate (producer) runs after drafting epics and
|
||||
before writing any files. In `lean` or `solo` mode, PR-EPIC is skipped and noted.
|
||||
Epics are written to `production/epics/[layer]/EPIC-[name].md`.
|
||||
|
||||
---
|
||||
|
||||
## 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: CREATED, BLOCKED
|
||||
- [ ] Contains "May I write" collaborative protocol language (per-epic approval)
|
||||
- [ ] Has a next-step handoff at the end (`/create-stories`)
|
||||
- [ ] Documents PR-EPIC gate behavior: runs in full mode; skipped in lean/solo
|
||||
|
||||
---
|
||||
|
||||
## Director Gate Checks
|
||||
|
||||
In `full` mode: PR-EPIC (producer) gate runs after epics are drafted and before
|
||||
any epic file is written. If PR-EPIC returns CONCERNS, epics are revised before
|
||||
the "May I write" ask.
|
||||
|
||||
In `lean` mode: PR-EPIC is skipped. Output notes: "PR-EPIC skipped — lean mode".
|
||||
|
||||
In `solo` mode: PR-EPIC is skipped. Output notes: "PR-EPIC skipped — solo mode".
|
||||
|
||||
---
|
||||
|
||||
## Test Cases
|
||||
|
||||
### Case 1: Happy Path — Two approved GDDs create two EPIC files
|
||||
|
||||
**Fixture:**
|
||||
- `design/gdd/systems-index.md` exists with 2 systems listed
|
||||
- Both systems have approved GDDs in `design/gdd/`
|
||||
- `docs/architecture/architecture.md` exists with matching modules
|
||||
- At least one Accepted ADR exists for each system
|
||||
- `production/session-state/review-mode.txt` contains `lean`
|
||||
|
||||
**Input:** `/create-epics`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads systems index and both GDDs
|
||||
2. Drafts 2 EPIC definitions (layer, GDD path, ADRs, requirements, engine risk)
|
||||
3. PR-EPIC gate is skipped (lean mode) — noted in output
|
||||
4. For each epic: asks "May I write `production/epics/[layer]/EPIC-[name].md`?"
|
||||
5. After approval: writes both EPIC files
|
||||
6. Creates or updates `production/epics/index.md`
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Epic summary is shown before any write ask
|
||||
- [ ] "May I write" is asked per-epic (not once for all epics together)
|
||||
- [ ] Each EPIC.md contains: layer, GDD path, governing ADRs, requirements table, Definition of Done
|
||||
- [ ] PR-EPIC skip is noted in output
|
||||
- [ ] `production/epics/index.md` is updated after writing
|
||||
- [ ] Skill does NOT write EPIC files without per-epic approval
|
||||
|
||||
---
|
||||
|
||||
### Case 2: Failure Path — No approved GDDs found
|
||||
|
||||
**Fixture:**
|
||||
- `design/gdd/systems-index.md` exists
|
||||
- No GDDs in `design/gdd/` have approved status (all are Draft or In Progress)
|
||||
|
||||
**Input:** `/create-epics`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads systems index and attempts to find approved GDDs
|
||||
2. No approved GDDs found
|
||||
3. Skill outputs: "No approved GDDs to convert. GDDs must be Approved before creating epics."
|
||||
4. Skill suggests running `/design-system` and completing GDD approval first
|
||||
5. Skill exits without creating any EPIC files
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill stops cleanly with a clear message when no approved GDDs exist
|
||||
- [ ] No EPIC files are written
|
||||
- [ ] Skill recommends the correct next action
|
||||
- [ ] Verdict is BLOCKED
|
||||
|
||||
---
|
||||
|
||||
### Case 3: Director Gate — Full mode spawns PR-EPIC before writing
|
||||
|
||||
**Fixture:**
|
||||
- 2 approved GDDs exist
|
||||
- `production/session-state/review-mode.txt` contains `full`
|
||||
|
||||
**Full mode expected behavior:**
|
||||
1. Skill drafts both epics
|
||||
2. PR-EPIC gate spawns and reviews the epic drafts
|
||||
3. If PR-EPIC returns APPROVED: "May I write" ask proceeds normally
|
||||
4. Epic files are written after approval
|
||||
|
||||
**Assertions (full mode):**
|
||||
- [ ] PR-EPIC gate appears in output as an active gate
|
||||
- [ ] PR-EPIC runs before any "May I write" ask
|
||||
- [ ] Epic files are NOT written before PR-EPIC completes
|
||||
|
||||
**Fixture (lean mode):**
|
||||
- Same GDDs
|
||||
- `production/session-state/review-mode.txt` contains `lean`
|
||||
|
||||
**Lean mode expected behavior:**
|
||||
1. Epics are drafted
|
||||
2. PR-EPIC is skipped — noted in output
|
||||
3. "May I write" ask proceeds directly
|
||||
|
||||
**Assertions (lean mode):**
|
||||
- [ ] "PR-EPIC skipped — lean mode" appears in output
|
||||
- [ ] Skill proceeds to "May I write" without waiting for PR-EPIC
|
||||
|
||||
---
|
||||
|
||||
### Case 4: Edge Case — Epic already exists for a GDD
|
||||
|
||||
**Fixture:**
|
||||
- `production/epics/[layer]/EPIC-[name].md` already exists for one of the approved GDDs
|
||||
- The other GDD has no existing EPIC file
|
||||
|
||||
**Input:** `/create-epics`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill detects the existing EPIC file for the first system
|
||||
2. Skill offers to update rather than overwrite: "EPIC-[name].md already exists. Update it, or skip?"
|
||||
3. For the second system (no existing file): proceeds normally with "May I write"
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill detects existing EPIC files before writing
|
||||
- [ ] User is offered "update" or "skip" options — not auto-overwritten
|
||||
- [ ] The new system's EPIC is created normally without conflict
|
||||
|
||||
---
|
||||
|
||||
### Case 5: Director Gate — PR-EPIC returns CONCERNS
|
||||
|
||||
**Fixture:**
|
||||
- 2 approved GDDs exist
|
||||
- `production/session-state/review-mode.txt` contains `full`
|
||||
- PR-EPIC gate returns CONCERNS (e.g., scope of one epic is too large)
|
||||
|
||||
**Input:** `/create-epics`
|
||||
|
||||
**Expected behavior:**
|
||||
1. PR-EPIC gate spawns and returns CONCERNS with specific feedback
|
||||
2. Skill surfaces the concerns to the user before any write ask
|
||||
3. User is given options: revise epics, accept concerns and proceed, or stop
|
||||
4. If user revises: updated epic drafts are shown before the "May I write" ask
|
||||
5. Skill does NOT write epics while CONCERNS are unaddressed
|
||||
|
||||
**Assertions:**
|
||||
- [ ] CONCERNS from PR-EPIC are shown to the user before writing
|
||||
- [ ] Skill does NOT auto-write epics when CONCERNS are returned
|
||||
- [ ] User is given a clear choice to revise, proceed, or stop
|
||||
- [ ] Revised epic drafts are re-shown after revision before final approval
|
||||
|
||||
---
|
||||
|
||||
## Protocol Compliance
|
||||
|
||||
- [ ] Epic drafts shown to user before any "May I write" ask
|
||||
- [ ] "May I write" asked per-epic, not once for the entire batch
|
||||
- [ ] PR-EPIC gate (if active) runs before write asks — not after
|
||||
- [ ] Skipped gates noted by name and mode in output
|
||||
- [ ] EPIC.md content sourced only from GDDs, ADRs, and architecture docs — nothing invented
|
||||
- [ ] Ends with next-step handoff: `/create-stories [epic-slug]` per created epic
|
||||
|
||||
---
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- Processing of Core, Feature, and Presentation layers follows the same per-epic
|
||||
pattern as Foundation — layer-specific ordering is not independently tested.
|
||||
- Engine risk level assignment (LOW/MEDIUM/HIGH) from governing ADRs is
|
||||
validated implicitly via Case 1's fixture structure.
|
||||
- The `layer: [name]` and `[system-name]` argument modes follow the same approval
|
||||
pattern as the default (all systems) mode.
|
||||
191
CCGS Skill Testing Framework/skills/pipeline/create-stories.md
Normal file
191
CCGS Skill Testing Framework/skills/pipeline/create-stories.md
Normal file
@@ -0,0 +1,191 @@
|
||||
# Skill Test Spec: /create-stories
|
||||
|
||||
## Skill Summary
|
||||
|
||||
`/create-stories` breaks a single epic into developer-ready story files. It reads
|
||||
the EPIC.md, the corresponding GDD, governing ADRs, the control manifest, and the
|
||||
TR registry. Each story gets structured frontmatter including: Title, Epic, Layer,
|
||||
Priority, Status, TR-ID, ADR references, Acceptance Criteria, and Definition of
|
||||
Done. Stories are classified by type (Logic / Integration / Visual/Feel / UI /
|
||||
Config/Data) which determines the required test evidence path.
|
||||
|
||||
In `full` review mode, a QL-STORY-READY check runs per story after creation. In
|
||||
`lean` or `solo` mode, QL-STORY-READY is skipped. The skill asks "May I write"
|
||||
before writing each story file. Stories are written to
|
||||
`production/epics/[layer]/story-[name].md`.
|
||||
|
||||
---
|
||||
|
||||
## 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: COMPLETE, BLOCKED, NEEDS WORK
|
||||
- [ ] Contains "May I write" collaborative protocol language (per-story approval)
|
||||
- [ ] Has a next-step handoff at the end (`/story-readiness`, `/dev-story`)
|
||||
- [ ] Documents story Status: Blocked when governing ADR is Proposed
|
||||
- [ ] Documents QL-STORY-READY gate: active in full mode, skipped in lean/solo
|
||||
|
||||
---
|
||||
|
||||
## Director Gate Checks
|
||||
|
||||
In `full` mode: QL-STORY-READY check runs per story after creation. Stories that
|
||||
fail the check are noted as NEEDS WORK before the "May I write" ask.
|
||||
|
||||
In `lean` mode: QL-STORY-READY is skipped. Output notes:
|
||||
"QL-STORY-READY skipped — lean mode" per story.
|
||||
|
||||
In `solo` mode: QL-STORY-READY is skipped with equivalent notes.
|
||||
|
||||
---
|
||||
|
||||
## Test Cases
|
||||
|
||||
### Case 1: Happy Path — Epic with 3 stories, all ADRs Accepted
|
||||
|
||||
**Fixture:**
|
||||
- `production/epics/[layer]/EPIC-[name].md` exists with 3 GDD requirements
|
||||
- Corresponding GDD exists with matching acceptance criteria
|
||||
- All governing ADRs have `Status: Accepted`
|
||||
- `docs/architecture/control-manifest.md` exists
|
||||
- `docs/architecture/tr-registry.yaml` has TR-IDs for all 3 requirements
|
||||
- `production/session-state/review-mode.txt` contains `lean`
|
||||
|
||||
**Input:** `/create-stories [epic-name]`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads EPIC.md, GDD, governing ADRs, control manifest, and TR registry
|
||||
2. Classifies each requirement into a story type (Logic / Integration / Visual/Feel / UI / Config/Data)
|
||||
3. Drafts 3 story files with correct frontmatter schema
|
||||
4. QL-STORY-READY is skipped (lean mode) — noted in output
|
||||
5. Asks "May I write" before writing each story file
|
||||
6. Writes all 3 story files after approval
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Each story's frontmatter contains: Title, Epic, Layer, Priority, Status, TR-ID, ADR reference, Acceptance Criteria, DoD
|
||||
- [ ] Story types are correctly classified (at least one Logic type in fixture)
|
||||
- [ ] "May I write" is asked per story (not once for the entire batch)
|
||||
- [ ] QL-STORY-READY skip is noted in output
|
||||
- [ ] All 3 story files are written with correct naming: `story-[name].md`
|
||||
- [ ] Skill does NOT start implementation
|
||||
|
||||
---
|
||||
|
||||
### Case 2: Failure Path — No epic file found
|
||||
|
||||
**Fixture:**
|
||||
- The epic path provided does not exist in `production/epics/`
|
||||
|
||||
**Input:** `/create-stories nonexistent-epic`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill attempts to read the EPIC.md file
|
||||
2. File not found
|
||||
3. Skill outputs a clear error with the path it searched
|
||||
4. Skill suggests checking `production/epics/` or running `/create-epics` first
|
||||
5. No story files are created
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill outputs a clear error naming the missing file path
|
||||
- [ ] No story files are written
|
||||
- [ ] Skill recommends the correct next action (`/create-epics`)
|
||||
- [ ] Skill does NOT create stories without a valid EPIC.md
|
||||
|
||||
---
|
||||
|
||||
### Case 3: Blocked Story — ADR is Proposed
|
||||
|
||||
**Fixture:**
|
||||
- EPIC.md exists with 2 requirements
|
||||
- Requirement 1 is covered by an Accepted ADR
|
||||
- Requirement 2 is covered by an ADR with `Status: Proposed`
|
||||
|
||||
**Input:** `/create-stories [epic-name]`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads the ADR for Requirement 2 and finds Status: Proposed
|
||||
2. Story for Requirement 2 is drafted with `Status: Blocked`
|
||||
3. Blocking note references the specific ADR: "BLOCKED: ADR-NNN is Proposed"
|
||||
4. Story for Requirement 1 is drafted normally with `Status: Ready`
|
||||
5. Both stories are shown in the draft — user asked "May I write" for both
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Story 2 has `Status: Blocked` in its frontmatter
|
||||
- [ ] Blocking note names the specific ADR number and recommends `/architecture-decision`
|
||||
- [ ] Story 1 has `Status: Ready` — blocked status does not affect non-blocked stories
|
||||
- [ ] Blocked status is shown in the draft preview before writing
|
||||
- [ ] Both story files are written (blocked stories are still written — just flagged)
|
||||
|
||||
---
|
||||
|
||||
### Case 4: Edge Case — No argument provided
|
||||
|
||||
**Fixture:**
|
||||
- `production/epics/` directory exists with ≥2 epic subdirectories
|
||||
|
||||
**Input:** `/create-stories` (no argument)
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill detects no argument is provided
|
||||
2. Outputs a usage error: "No epic specified. Usage: /create-stories [epic-name]"
|
||||
3. Skill lists available epics from `production/epics/`
|
||||
4. No story files are created
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill outputs a usage error when no argument is given
|
||||
- [ ] Skill lists available epics to help the user choose
|
||||
- [ ] No story files are written
|
||||
- [ ] Skill does NOT silently pick an epic without user input
|
||||
|
||||
---
|
||||
|
||||
### Case 5: Director Gate — Full mode runs QL-STORY-READY; stories failing noted as NEEDS WORK
|
||||
|
||||
**Fixture:**
|
||||
- EPIC.md exists with 2 requirements
|
||||
- Both governing ADRs are Accepted
|
||||
- `production/session-state/review-mode.txt` contains `full`
|
||||
- QL-STORY-READY check finds one story has ambiguous acceptance criteria
|
||||
|
||||
**Input:** `/create-stories [epic-name]`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Both stories are drafted
|
||||
2. QL-STORY-READY check runs for each story
|
||||
3. Story 1 passes QL-STORY-READY
|
||||
4. Story 2 fails QL-STORY-READY — noted as NEEDS WORK with specific feedback
|
||||
5. Both stories are shown to user with pass/fail status before "May I write"
|
||||
6. User can proceed (story written as-is with NEEDS WORK note) or revise first
|
||||
|
||||
**Assertions:**
|
||||
- [ ] QL-STORY-READY results appear per story in the output
|
||||
- [ ] Story 2 is flagged as NEEDS WORK with the specific failing criteria
|
||||
- [ ] Story 1 shows as passing QL-STORY-READY
|
||||
- [ ] User is given the choice to proceed or revise before writing
|
||||
- [ ] Skill does NOT auto-block writing of stories that fail QL-STORY-READY without user input
|
||||
|
||||
---
|
||||
|
||||
## Protocol Compliance
|
||||
|
||||
- [ ] All context (EPIC, GDD, ADRs, manifest, TR registry) loaded before drafting stories
|
||||
- [ ] Story drafts shown in full before any "May I write" ask
|
||||
- [ ] "May I write" asked per story (not once for the entire batch)
|
||||
- [ ] Blocked stories flagged before write approval — not discovered after writing
|
||||
- [ ] TR-IDs reference the registry — requirement text is not embedded inline in story files
|
||||
- [ ] Control manifest rules quoted per-story from the manifest, not invented
|
||||
- [ ] Ends with next-step handoff: `/story-readiness` → `/dev-story`
|
||||
|
||||
---
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- Integration story test evidence (playtest doc alternative) follows the same
|
||||
approval pattern as Logic stories — not independently fixture-tested.
|
||||
- Story ordering (foundational first, UI last) is validated implicitly via
|
||||
Case 1's multi-story fixture.
|
||||
- The story sizing rule (splitting large requirement groups) is not tested here
|
||||
— it is addressed in the `/create-stories` skill's internal logic.
|
||||
205
CCGS Skill Testing Framework/skills/pipeline/dev-story.md
Normal file
205
CCGS Skill Testing Framework/skills/pipeline/dev-story.md
Normal file
@@ -0,0 +1,205 @@
|
||||
# Skill Test Spec: /dev-story
|
||||
|
||||
## Skill Summary
|
||||
|
||||
`/dev-story` reads a story file, loads all required context (referenced ADR,
|
||||
TR-ID from the registry, control manifest, engine preferences), implements the
|
||||
story, verifies that all acceptance criteria are met, and marks the story
|
||||
Complete. The skill routes implementation to the correct specialist agent based
|
||||
on the engine and file type — it does not write source code directly.
|
||||
|
||||
In `full` review mode, an LP-CODE-REVIEW gate runs before marking the story
|
||||
Complete. In `lean` or `solo` mode, LP-CODE-REVIEW is skipped and the story is
|
||||
marked Complete after the user confirms all criteria are met. The skill asks
|
||||
"May I write" before updating story status and before writing code files.
|
||||
|
||||
---
|
||||
|
||||
## 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: COMPLETE, BLOCKED, IN PROGRESS, NEEDS CHANGES
|
||||
- [ ] Contains "May I write" collaborative protocol language (story status + code files)
|
||||
- [ ] Has a next-step handoff at the end (`/story-done`)
|
||||
- [ ] Documents LP-CODE-REVIEW gate: active in full mode, skipped in lean/solo
|
||||
- [ ] Notes that implementation is delegated to specialist agents (not done directly)
|
||||
|
||||
---
|
||||
|
||||
## Director Gate Checks
|
||||
|
||||
In `full` mode: LP-CODE-REVIEW gate runs after implementation is complete and all
|
||||
criteria are verified, before marking the story Complete.
|
||||
|
||||
In `lean` mode: LP-CODE-REVIEW is skipped. Output notes:
|
||||
"LP-CODE-REVIEW skipped — lean mode". Story is marked Complete after user confirms.
|
||||
|
||||
In `solo` mode: LP-CODE-REVIEW is skipped with equivalent notes.
|
||||
|
||||
---
|
||||
|
||||
## Test Cases
|
||||
|
||||
### Case 1: Happy Path — Story implemented and marked Complete (full mode)
|
||||
|
||||
**Fixture:**
|
||||
- A story file exists at `production/epics/[layer]/story-[name].md` with:
|
||||
- `Status: Ready`
|
||||
- A TR-ID referencing a registered requirement
|
||||
- At least 2 Given-When-Then acceptance criteria
|
||||
- A test evidence path
|
||||
- Referenced ADR has `Status: Accepted`
|
||||
- `docs/architecture/control-manifest.md` exists
|
||||
- `.claude/docs/technical-preferences.md` has engine and language configured
|
||||
- `production/session-state/review-mode.txt` contains `full`
|
||||
|
||||
**Input:** `/dev-story production/epics/[layer]/story-[name].md`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads the story file and all referenced context
|
||||
2. Skill verifies the ADR is Accepted (no block)
|
||||
3. Skill routes implementation to the correct specialist agent
|
||||
4. All acceptance criteria are verified as met
|
||||
5. LP-CODE-REVIEW gate spawns and returns APPROVED
|
||||
6. Skill asks "May I update story status to Complete?"
|
||||
7. Story status is updated to Complete
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill reads story before spawning any agent
|
||||
- [ ] ADR status is checked before implementation begins
|
||||
- [ ] Implementation is delegated to a specialist agent (not done inline)
|
||||
- [ ] All acceptance criteria are confirmed before LP-CODE-REVIEW
|
||||
- [ ] LP-CODE-REVIEW appears in output as a completed gate
|
||||
- [ ] Story status is updated to Complete only after gate approval and user consent
|
||||
- [ ] Test file is written as part of implementation (not deferred)
|
||||
|
||||
---
|
||||
|
||||
### Case 2: Failure Path — Referenced ADR is Proposed
|
||||
|
||||
**Fixture:**
|
||||
- A story file exists with `Status: Ready`
|
||||
- The story's TR-ID points to a requirement covered by an ADR with `Status: Proposed`
|
||||
|
||||
**Input:** `/dev-story production/epics/[layer]/story-[name].md`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads the story file
|
||||
2. Skill resolves the TR-ID and reads the governing ADR
|
||||
3. ADR status is Proposed — skill outputs a BLOCKED message
|
||||
4. Skill names the specific ADR blocking the story
|
||||
5. Skill recommends running `/architecture-decision` to advance the ADR
|
||||
6. Implementation does NOT begin
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill does NOT begin implementation with a Proposed ADR
|
||||
- [ ] BLOCKED message names the specific ADR number and title
|
||||
- [ ] Skill recommends `/architecture-decision` as the next action
|
||||
- [ ] Story status remains unchanged (not set to In Progress or Complete)
|
||||
|
||||
---
|
||||
|
||||
### Case 3: Ambiguous Acceptance Criteria — Skill asks for clarification
|
||||
|
||||
**Fixture:**
|
||||
- A story file exists with `Status: Ready`
|
||||
- Referenced ADR is Accepted
|
||||
- One acceptance criterion is ambiguous (not Given-When-Then; uses subjective language like "feels responsive")
|
||||
|
||||
**Input:** `/dev-story production/epics/[layer]/story-[name].md`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads the story and identifies the ambiguous criterion
|
||||
2. Before routing to the specialist, skill asks the user to clarify the criterion
|
||||
3. User provides a concrete, testable restatement
|
||||
4. Skill proceeds with implementation using the clarified criterion
|
||||
5. Skill does NOT guess at the intended behavior
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill surfaces the ambiguous criterion before implementation starts
|
||||
- [ ] Skill asks for user clarification (not auto-interpretation)
|
||||
- [ ] Implementation begins only after clarification is provided
|
||||
- [ ] Clarified criterion is used in the test (not the original vague version)
|
||||
|
||||
---
|
||||
|
||||
### Case 4: Edge Case — No argument; reads from session state
|
||||
|
||||
**Fixture:**
|
||||
- No argument is provided
|
||||
- `production/session-state/active.md` references an active story file
|
||||
- That story file exists with `Status: In Progress`
|
||||
|
||||
**Input:** `/dev-story` (no argument)
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill detects no argument is provided
|
||||
2. Skill reads `production/session-state/active.md`
|
||||
3. Skill finds the active story reference
|
||||
4. Skill confirms with user: "Continuing work on [story title] — is that correct?"
|
||||
5. After confirmation, skill proceeds with that story
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill reads session state when no argument is provided
|
||||
- [ ] Skill confirms the active story with the user before proceeding
|
||||
- [ ] Skill does NOT silently assume the active story without confirmation
|
||||
- [ ] If session state has no active story, skill asks which story to implement
|
||||
|
||||
---
|
||||
|
||||
### Case 5: Director Gate — LP-CODE-REVIEW returns NEEDS CHANGES; lean mode skips gate
|
||||
|
||||
**Fixture (full mode):**
|
||||
- Story is implemented and all criteria appear met
|
||||
- `production/session-state/review-mode.txt` contains `full`
|
||||
- LP-CODE-REVIEW gate returns NEEDS CHANGES with specific feedback
|
||||
|
||||
**Full mode expected behavior:**
|
||||
1. LP-CODE-REVIEW gate spawns after implementation
|
||||
2. Gate returns NEEDS CHANGES with 2 specific issues
|
||||
3. Story status remains In Progress — NOT marked Complete
|
||||
4. User is shown the gate feedback and asked how to proceed
|
||||
|
||||
**Assertions (full mode):**
|
||||
- [ ] Story is NOT marked Complete when LP-CODE-REVIEW returns NEEDS CHANGES
|
||||
- [ ] Gate feedback is shown to the user verbatim
|
||||
- [ ] Story status stays In Progress until issues are resolved and gate passes
|
||||
|
||||
**Fixture (lean mode):**
|
||||
- Same story, `production/session-state/review-mode.txt` contains `lean`
|
||||
|
||||
**Lean mode expected behavior:**
|
||||
1. Implementation completes
|
||||
2. LP-CODE-REVIEW gate is skipped — noted in output
|
||||
3. User is asked to confirm all criteria are met
|
||||
4. Story is marked Complete after user confirmation
|
||||
|
||||
**Assertions (lean mode):**
|
||||
- [ ] "LP-CODE-REVIEW skipped — lean mode" appears in output
|
||||
- [ ] Story is marked Complete after user confirms criteria (no gate required)
|
||||
- [ ] Skill does NOT block on a gate that is skipped
|
||||
|
||||
---
|
||||
|
||||
## Protocol Compliance
|
||||
|
||||
- [ ] Does NOT write source code directly — delegates to specialist agents
|
||||
- [ ] Reads all context (story, TR-ID, ADR, manifest, engine prefs) before implementation
|
||||
- [ ] "May I write" asked before updating story status and before writing code files
|
||||
- [ ] Skipped gates noted by name and mode in output
|
||||
- [ ] Updates `production/session-state/active.md` after story completion
|
||||
- [ ] Ends with next-step handoff: `/story-done`
|
||||
|
||||
---
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- Engine routing logic (Godot vs Unity vs Unreal) is not tested per engine —
|
||||
the routing pattern is consistent; engine selection is a config fact.
|
||||
- Visual/Feel and UI story types (no automated test required) have different
|
||||
evidence requirements and are not covered in these cases.
|
||||
- Integration story type follows the same pattern as Logic but with a different
|
||||
evidence path — not independently fixture-tested.
|
||||
196
CCGS Skill Testing Framework/skills/pipeline/map-systems.md
Normal file
196
CCGS Skill Testing Framework/skills/pipeline/map-systems.md
Normal file
@@ -0,0 +1,196 @@
|
||||
# Skill Test Spec: /map-systems
|
||||
|
||||
## Skill Summary
|
||||
|
||||
`/map-systems` decomposes a game concept into a systems index. It reads the
|
||||
approved game concept and pillars, enumerates both explicit and implicit systems,
|
||||
maps dependencies between systems, assigns priority tiers (MVP / Vertical Slice /
|
||||
Alpha / Full Vision), and organizes systems into a layered design order
|
||||
(Foundation → Core → Feature → Presentation). The output is written to
|
||||
`design/systems-index.md` after user approval.
|
||||
|
||||
This skill is required between game concept approval and per-system GDD creation
|
||||
— it is a mandatory gate in the pipeline. In `full` review mode, CD-SYSTEMS
|
||||
(creative-director) and TD-SYSTEM-BOUNDARY (technical-director) spawn in parallel
|
||||
after the decomposition is drafted. In `lean` or `solo` mode, both gates are
|
||||
skipped. The skill writes to `design/systems-index.md`.
|
||||
|
||||
---
|
||||
|
||||
## 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: COMPLETE, BLOCKED
|
||||
- [ ] Contains "May I write" collaborative protocol language (for systems-index.md)
|
||||
- [ ] Has a next-step handoff at the end (`/design-system`)
|
||||
- [ ] Documents gate behavior: CD-SYSTEMS + TD-SYSTEM-BOUNDARY in parallel in full mode
|
||||
|
||||
---
|
||||
|
||||
## Director Gate Checks
|
||||
|
||||
In `full` mode: CD-SYSTEMS (creative-director) and TD-SYSTEM-BOUNDARY
|
||||
(technical-director) spawn in parallel after the systems decomposition is drafted
|
||||
and before `design/systems-index.md` is written.
|
||||
|
||||
In `lean` mode: both gates are skipped. Output notes:
|
||||
"CD-SYSTEMS skipped — lean mode" and "TD-SYSTEM-BOUNDARY skipped — lean mode".
|
||||
|
||||
In `solo` mode: both gates are skipped with equivalent notes.
|
||||
|
||||
---
|
||||
|
||||
## Test Cases
|
||||
|
||||
### Case 1: Happy Path — Game concept exists, 5-8 systems identified
|
||||
|
||||
**Fixture:**
|
||||
- `design/gdd/game-concept.md` exists with Core Mechanics and MVP Definition sections
|
||||
- `design/gdd/game-pillars.md` exists with ≥1 pillar defined
|
||||
- No `design/systems-index.md` exists yet
|
||||
- `production/session-state/review-mode.txt` contains `full`
|
||||
|
||||
**Input:** `/map-systems`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads game-concept.md and game-pillars.md
|
||||
2. Identifies 5-8 systems (explicit + implicit)
|
||||
3. Maps dependencies between systems and assigns layers
|
||||
4. CD-SYSTEMS and TD-SYSTEM-BOUNDARY spawn in parallel and return APPROVED
|
||||
5. Asks "May I write `design/systems-index.md`?"
|
||||
6. Writes systems-index.md after approval
|
||||
7. Updates `production/session-state/active.md`
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Between 5 and 8 systems are identified (not fewer, not more without explanation)
|
||||
- [ ] CD-SYSTEMS and TD-SYSTEM-BOUNDARY spawn in parallel (not sequentially)
|
||||
- [ ] Both gates complete before the "May I write" ask
|
||||
- [ ] "May I write `design/systems-index.md`?" is asked before writing
|
||||
- [ ] systems-index.md is NOT written without approval
|
||||
- [ ] Session state is updated after writing
|
||||
- [ ] Verdict is COMPLETE
|
||||
|
||||
---
|
||||
|
||||
### Case 2: Failure Path — No game concept found
|
||||
|
||||
**Fixture:**
|
||||
- `design/gdd/game-concept.md` does NOT exist
|
||||
- `design/gdd/` directory may be empty or absent
|
||||
|
||||
**Input:** `/map-systems`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill attempts to read `design/gdd/game-concept.md`
|
||||
2. File not found
|
||||
3. Skill outputs: "No game concept found. Run `/brainstorm` to create one, then return to `/map-systems`."
|
||||
4. Skill exits without creating systems-index.md
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill outputs a clear error naming the missing file path
|
||||
- [ ] Skill recommends `/brainstorm` as the next action
|
||||
- [ ] No systems-index.md is created
|
||||
- [ ] Verdict is BLOCKED
|
||||
|
||||
---
|
||||
|
||||
### Case 3: Director Gate — CD-SYSTEMS returns CONCERNS (missing core system)
|
||||
|
||||
**Fixture:**
|
||||
- Game concept exists
|
||||
- `production/session-state/review-mode.txt` contains `full`
|
||||
- CD-SYSTEMS gate returns CONCERNS: "The [core-system] is implied by the concept but not identified"
|
||||
|
||||
**Input:** `/map-systems`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Systems are drafted (5-8 initial systems identified)
|
||||
2. CD-SYSTEMS gate returns CONCERNS naming the missing core system
|
||||
3. TD-SYSTEM-BOUNDARY returns APPROVED
|
||||
4. Skill surfaces CD-SYSTEMS concerns to user
|
||||
5. User is asked: revise systems list to add the missing system, or proceed as-is
|
||||
6. If revised: updated systems list shown before "May I write" ask
|
||||
|
||||
**Assertions:**
|
||||
- [ ] CD-SYSTEMS concerns are shown to the user before writing
|
||||
- [ ] Skill does NOT auto-write systems-index.md while CONCERNS are unresolved
|
||||
- [ ] User is given the option to revise or proceed
|
||||
- [ ] Revised systems list is re-shown after revision before final "May I write"
|
||||
|
||||
---
|
||||
|
||||
### Case 4: Edge Case — systems-index.md already exists
|
||||
|
||||
**Fixture:**
|
||||
- `design/gdd/game-concept.md` exists
|
||||
- `design/systems-index.md` already exists with N systems
|
||||
|
||||
**Input:** `/map-systems`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads the existing systems-index.md and presents its current state
|
||||
2. Skill asks: "systems-index.md already exists with [N] systems. Update with new systems, or review and revise priorities?"
|
||||
3. User chooses an action
|
||||
4. Skill does NOT silently overwrite the existing index
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill detects and reads the existing systems-index.md before proceeding
|
||||
- [ ] User is offered update/review options — not auto-overwritten
|
||||
- [ ] Existing system count is presented to the user
|
||||
- [ ] Skill does NOT proceed with a full re-decomposition without user choosing to do so
|
||||
|
||||
---
|
||||
|
||||
### Case 5: Director Gate — Lean mode and solo mode both skip gates, noted
|
||||
|
||||
**Fixture (lean mode):**
|
||||
- Game concept exists
|
||||
- `production/session-state/review-mode.txt` contains `lean`
|
||||
|
||||
**Lean mode expected behavior:**
|
||||
1. Systems are decomposed and drafted
|
||||
2. Both CD-SYSTEMS and TD-SYSTEM-BOUNDARY are skipped
|
||||
3. Output notes: "CD-SYSTEMS skipped — lean mode" and "TD-SYSTEM-BOUNDARY skipped — lean mode"
|
||||
4. "May I write" ask proceeds directly
|
||||
|
||||
**Assertions (lean mode):**
|
||||
- [ ] Both gate skip notes appear in output
|
||||
- [ ] Skill proceeds to "May I write" without gate approval
|
||||
- [ ] systems-index.md is written after user approval
|
||||
|
||||
**Fixture (solo mode):**
|
||||
- Same game concept, `production/session-state/review-mode.txt` contains `solo`
|
||||
|
||||
**Solo mode expected behavior:**
|
||||
1. Same decomposition workflow
|
||||
2. Both gates skipped — noted in output with "solo mode"
|
||||
3. "May I write" ask proceeds
|
||||
|
||||
**Assertions (solo mode):**
|
||||
- [ ] Both skip notes appear with "solo mode" label
|
||||
- [ ] Behavior is otherwise identical to lean mode for this skill
|
||||
|
||||
---
|
||||
|
||||
## Protocol Compliance
|
||||
|
||||
- [ ] Reads game-concept.md and game-pillars.md before any decomposition
|
||||
- [ ] "May I write `design/systems-index.md`?" asked before writing
|
||||
- [ ] systems-index.md is NOT written without user approval
|
||||
- [ ] CD-SYSTEMS and TD-SYSTEM-BOUNDARY spawn in parallel in full mode
|
||||
- [ ] Skipped gates noted by name and mode in lean/solo output
|
||||
- [ ] Ends with next-step handoff: `/design-system [next-system]`
|
||||
|
||||
---
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- Circular dependency detection (System A depends on System B which depends on A)
|
||||
is part of the dependency mapping phase — not independently fixture-tested here.
|
||||
- Priority tier assignment (MVP heuristics) is evaluated as part of the Case 1
|
||||
collaborative workflow rather than independently.
|
||||
- The `next` argument mode (handing off the highest-priority undesigned system to
|
||||
`/design-system`) is not tested here — it is a post-index-creation convenience.
|
||||
@@ -0,0 +1,175 @@
|
||||
# Skill Test Spec: /propagate-design-change
|
||||
|
||||
## Skill Summary
|
||||
|
||||
`/propagate-design-change` handles GDD revision cascades. When a GDD is updated,
|
||||
the skill traces all downstream artifacts that reference it: ADRs, TR-registry
|
||||
entries, stories, and epics. It produces a structured impact report showing what
|
||||
needs to change and why. The skill does NOT automatically apply changes — it
|
||||
proposes edits for each affected artifact and asks "May I write" per artifact
|
||||
before making any modification.
|
||||
|
||||
The skill is read-only during analysis and write-gated per artifact during the
|
||||
update phase. It has no director gates — the analysis itself is mechanical
|
||||
tracing, not a creative review.
|
||||
|
||||
---
|
||||
|
||||
## 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: COMPLETE, BLOCKED, NO IMPACT
|
||||
- [ ] Contains "May I write" collaborative protocol language (per-artifact approval)
|
||||
- [ ] Has a next-step handoff at the end
|
||||
- [ ] Documents that changes are proposed, not applied automatically
|
||||
|
||||
---
|
||||
|
||||
## Director Gate Checks
|
||||
|
||||
No director gates — this skill spawns no director gate agents during analysis.
|
||||
The impact report is a mechanical tracing operation; no creative or technical
|
||||
director review is required at the analysis stage.
|
||||
|
||||
---
|
||||
|
||||
## Test Cases
|
||||
|
||||
### Case 1: Happy Path — GDD revision affects 2 stories and 1 epic
|
||||
|
||||
**Fixture:**
|
||||
- `design/gdd/[system].md` exists and has been recently revised (git diff shows changes)
|
||||
- `production/epics/[layer]/EPIC-[system].md` references this GDD
|
||||
- 2 story files reference TR-IDs from this GDD
|
||||
- The changed GDD section affects the acceptance criteria of both stories
|
||||
|
||||
**Input:** `/propagate-design-change design/gdd/[system].md`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads the revised GDD and identifies what changed (git diff or content comparison)
|
||||
2. Skill scans ADRs, TR-registry, epics, and stories for references to this GDD
|
||||
3. Skill produces an impact report: 1 epic affected, 2 stories affected
|
||||
4. Skill shows the proposed change for each artifact
|
||||
5. For each artifact: asks "May I update [filepath]?" separately
|
||||
6. Applies changes only after per-artifact approval
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Impact report identifies all 3 affected artifacts (1 epic + 2 stories)
|
||||
- [ ] Each affected artifact's proposed change is shown before asking to write
|
||||
- [ ] "May I write" is asked per artifact (not once for all artifacts)
|
||||
- [ ] Skill does NOT apply any changes without per-artifact approval
|
||||
- [ ] Verdict is COMPLETE after all approved changes are applied
|
||||
|
||||
---
|
||||
|
||||
### Case 2: No Impact — Changed GDD has no downstream references
|
||||
|
||||
**Fixture:**
|
||||
- `design/gdd/[system].md` exists and has been revised
|
||||
- No ADRs, stories, or epics reference this GDD's TR-IDs or GDD path
|
||||
|
||||
**Input:** `/propagate-design-change design/gdd/[system].md`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads the revised GDD
|
||||
2. Skill scans all ADRs, stories, and epics for references
|
||||
3. No references found
|
||||
4. Skill outputs: "No downstream impact found for [system].md — no artifacts reference this GDD."
|
||||
5. No write operations are performed
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill outputs the "No downstream impact found" message
|
||||
- [ ] Verdict is NO IMPACT
|
||||
- [ ] No "May I write" asks are issued (nothing to update)
|
||||
- [ ] Skill does NOT error or crash when no references are found
|
||||
|
||||
---
|
||||
|
||||
### Case 3: In-Progress Story Warning — Referenced story is currently being developed
|
||||
|
||||
**Fixture:**
|
||||
- A story referencing this GDD has `Status: In Progress`
|
||||
- The developer has already started implementing this story
|
||||
|
||||
**Input:** `/propagate-design-change design/gdd/[system].md`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill identifies the In Progress story as an affected artifact
|
||||
2. Skill outputs an elevated warning: "CAUTION: [story-file] is currently In Progress — a developer may be working on this. Coordinate before updating."
|
||||
3. The warning appears in the impact report before the "May I write" ask for that story
|
||||
4. User can still approve or skip the update for that story
|
||||
|
||||
**Assertions:**
|
||||
- [ ] In Progress story is flagged with an elevated warning (distinct from regular affected-artifact entries)
|
||||
- [ ] Warning appears before the "May I write" ask for that story
|
||||
- [ ] Skill still offers to update the story — the warning does not block the option
|
||||
- [ ] Other (non-In-Progress) artifacts are not affected by this warning
|
||||
|
||||
---
|
||||
|
||||
### Case 4: Edge Case — No argument provided
|
||||
|
||||
**Fixture:**
|
||||
- Multiple GDDs exist in `design/gdd/`
|
||||
|
||||
**Input:** `/propagate-design-change` (no argument)
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill detects no argument is provided
|
||||
2. Skill outputs a usage error: "No GDD specified. Usage: /propagate-design-change design/gdd/[system].md"
|
||||
3. Skill lists recently modified GDDs as suggestions (git log)
|
||||
4. No analysis is performed
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill outputs a usage error when no argument is given
|
||||
- [ ] Usage example is shown with the correct path format
|
||||
- [ ] No impact analysis is performed without a target GDD
|
||||
- [ ] Skill does NOT silently pick a GDD without user input
|
||||
|
||||
---
|
||||
|
||||
### Case 5: Director Gate — No gate spawned regardless of review mode
|
||||
|
||||
**Fixture:**
|
||||
- A GDD has been revised with downstream references
|
||||
- `production/session-state/review-mode.txt` exists with `full`
|
||||
|
||||
**Input:** `/propagate-design-change design/gdd/[system].md`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads the GDD and traces downstream references
|
||||
2. Skill does NOT read `production/session-state/review-mode.txt`
|
||||
3. No director gate agents are spawned at any point
|
||||
4. Impact report is produced and per-artifact approval proceeds normally
|
||||
|
||||
**Assertions:**
|
||||
- [ ] No director gate agents are spawned (no CD-, TD-, PR-, AD- prefixed gates)
|
||||
- [ ] Skill does NOT read `production/session-state/review-mode.txt`
|
||||
- [ ] Output contains no "Gate: [GATE-ID]" or gate-skipped entries
|
||||
- [ ] Review mode has no effect on this skill's behavior
|
||||
|
||||
---
|
||||
|
||||
## Protocol Compliance
|
||||
|
||||
- [ ] Reads revised GDD and all potentially affected artifacts before producing impact report
|
||||
- [ ] Impact report shown in full before any "May I write" ask
|
||||
- [ ] "May I write" asked per artifact — never for the entire set at once
|
||||
- [ ] In Progress stories flagged with elevated warning before their approval ask
|
||||
- [ ] No director gates — no review-mode.txt read
|
||||
- [ ] Ends with next-step handoff appropriate to verdict (COMPLETE or NO IMPACT)
|
||||
|
||||
---
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- ADR impact (when a GDD change requires an ADR update or new ADR) follows the
|
||||
same per-artifact approval pattern as story/epic updates — not independently
|
||||
fixture-tested.
|
||||
- TR-registry impact (when changed GDD requires new or updated TR-IDs) is part
|
||||
of the analysis phase but not independently fixture-tested.
|
||||
- The git diff comparison method (detecting what changed in the GDD) is a runtime
|
||||
concern — fixtures use pre-arranged content differences.
|
||||
Reference in New Issue
Block a user