Files
gh-dgomezs-claude-code-plug…/commands/test-scenarios.md
2025-11-29 18:20:16 +08:00

539 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
---
allowed-tools: Task(*), Read(*), Glob(*), Write(*), Edit(*), Bash(mkdir:*)
argument-hint: <task-directory> [operation-prompt]
description: Create or manage test scenarios from requirements.md using the qa-engineer agent. Supports creating, adding, modifying, or discovering scenarios.
---
# Test Scenarios Command
Execute test scenario creation or management for: $ARGUMENTS
## Overview
This command creates and manages test scenarios from a requirements.md file containing high-level acceptance criteria.
It orchestrates scenario generation by:
1. Determining what operation to perform (create all, add one, modify one, discover gaps)
2. Reading requirements.md and preparing context
3. Calling qa-engineer agent to generate scenario content
4. Handling all file operations (writing, numbering, organizing, linking)
The qa-engineer agent ONLY generates scenario content. This command handles everything else.
## Step 1: Parse Arguments and Determine Operation
### Operation Detection
Analyze `$ARGUMENTS` to determine the operation:
**EXPAND Mode** - Create comprehensive scenarios from requirements.md:
- Single argument: directory path containing `requirements.md`
- Example: `/test-scenarios apps/feature/task-001/`
**ADD Mode** - Add single scenario to existing set:
- First argument: directory path
- Second argument contains "add"
- Example: `/test-scenarios apps/feature/task-001/ "add scenario for null input to AC-1"`
**MODIFY Mode** - Edit existing scenario:
- First argument: directory path
- Second argument contains "modify" or "edit"
- Example: `/test-scenarios apps/feature/task-001/ "modify scenario 1.2 to test empty string"`
**DISCOVER Mode** - Find gaps in existing scenarios:
- First argument: directory path
- Second argument contains "discover" or "gaps"
- Optional: Tag additional context files (e.g., @research.md, @tech-design.md) for deeper analysis
- Example: `/test-scenarios apps/feature/task-001/ "discover gaps"`
- Example with context: `/test-scenarios apps/feature/task-001/ "discover gaps" @research.md @tech-design.md`
**DELETE Mode** - Remove a scenario:
- First argument: directory path
- Second argument contains "delete" or "remove"
- Example: `/test-scenarios apps/feature/task-001/ "delete scenario 1.3"`
## Step 2: Gather Context
All modes use `requirements.md` as the base input containing high-level acceptance criteria.
Read relevant files from the task directory:
### For EXPAND Mode:
```
Required:
- <directory>/requirements.md (high-level acceptance criteria)
```
### For ADD/MODIFY/DISCOVER/DELETE Modes:
```
Required:
- <directory>/requirements.md (high-level acceptance criteria - for context)
- <directory>/scenarios.md (existing scenarios with implementation tracking)
- <directory>/test-scenarios/*.md (existing scenario details)
Optional (if tagged in user prompt):
- Any additional context files (research.md, tech-design.md, code files, etc.)
- These provide deeper context for scenario discovery and analysis
```
## Step 3: Prepare Agent Request
Based on operation mode, formulate a simple request for qa-engineer:
### EXPAND Mode Request:
```
Generate comprehensive test scenarios for these acceptance criteria:
[paste requirements.md content - high-level acceptance criteria]
Generate multiple scenarios per acceptance criterion, ordered by implementation priority.
```
### ADD Mode Request:
```
Generate ONE scenario for AC-[N] to test: [specific behavior]
Acceptance Criterion:
[AC-[N] from requirements.md]
Existing scenarios for AC-[N]:
[list existing scenarios with names only]
Check for duplicates against existing scenarios.
```
### MODIFY Mode Request:
```
Modify scenario [N.M]:
Current scenario:
[paste current scenario]
Current implementation progress: [checkboxes state]
Requested change: [what user specified]
Preserve structure and warn if existing tests/implementation may need updates.
```
### DISCOVER Mode Request:
```
Analyze existing scenarios for gaps and generate NEW scenarios to fill those gaps.
Acceptance Criteria:
[paste all ACs from requirements.md]
Existing Scenarios:
[paste organized list of scenarios by AC with their types]
[IF additional context files were tagged, include them here:]
Additional Context:
[For each tagged file, include a section:]
File: [filename]
[paste file content]
[Repeat for all tagged files]
Generate new scenarios to fill any gaps. If no gaps found, return: "No gaps found - coverage is complete"
```
## Step 4: Invoke qa-engineer Agent
Use Task tool to launch qa-engineer with the prepared request:
```
Task: qa-engineer
Description: Generate test scenario content
[Paste the request from Step 3]
```
The agent is the QA domain expert. It will:
- Ask clarification questions if needed (wait for answers)
- Apply its QA heuristics automatically
- Assign scenario types and priorities based on QA expertise
- Generate scenario content in Given-When-Then format
- Return structured JSON with scenarios, warnings, and optional context requests
**Expected JSON Response:**
```json
{
"scenarios": [...],
"warnings": {
"duplicates": [...],
"gaps": [...],
"implementation_impact": [...]
},
"context_requests": [...] // Optional, for DISCOVER mode
}
```
**Handle Context Requests (DISCOVER mode only):**
If agent returns `context_requests` array:
1. Read each requested file
2. Append to the original request with section: "Additional Context:\n[file content]"
3. Re-invoke agent with updated request
4. Repeat until agent returns scenarios or "No gaps found"
## Step 5: Common File Operations
All modes (except DELETE) use these common operations after receiving agent JSON output.
### 5.1: Parse Agent JSON Response
```javascript
const response = JSON.parse(agent_output);
const scenarios = response.scenarios || [];
const warnings = response.warnings || {};
const contextRequests = response.context_requests || [];
```
### 5.2: Display Warnings
```
if (warnings.duplicates?.length > 0) {
Display: ⚠️ Duplicate warnings: [list warnings.duplicates]
}
if (warnings.gaps?.length > 0) {
Display: Identified gaps: [list warnings.gaps]
}
if (warnings.implementation_impact?.length > 0) {
Display: ⚠️ Implementation impact: [list warnings.implementation_impact]
Display: "Review existing tests/code for needed updates"
}
```
### 5.3: Write Scenario Content to Type File
For any scenario that needs to be written or updated:
```bash
# Determine target file from scenario.type:
target_file = test-scenarios/{scenario.type}.md
# Where scenario.type is one of: "happy-path", "error-case", "edge-case"
# Write scenario.content exactly as received from agent:
[Paste scenario.content]
# Agent's content includes:
# - ## Scenario N.M: [Name] heading
# - Proper blank lines (MD022/MD032 compliance)
# - Trailing --- separator
```
### 5.4: Update scenarios.md Tracking
For any scenario that needs tracking entry:
```markdown
### Scenario N.M: [scenario.name]
- **Type**: [scenario.type]
- **Details**: [test-scenarios/{scenario.type}.md#scenario-nm](test-scenarios/{scenario.type}.md#scenario-nm)
- **Implementation Progress**: [ ] Test Written [ ] Implementation [ ] Refactoring
```
**Important**: When modifying existing entry, PRESERVE checkbox states.
### 5.5: Determine Next Scenario Number
When adding new scenarios, find the next available number for an AC:
```bash
# Read scenarios.md
# Find all scenarios for the target AC (e.g., "AC-2")
# Find highest number (e.g., if 2.1, 2.2, 2.3 exist → next is 2.4)
# Return next_number
```
## Step 6: Mode-Specific Workflows
After receiving JSON output from qa-engineer, perform mode-specific operations:
### For EXPAND Mode:
Creates all scenario files from scratch.
**Your tasks:**
1. **Use Step 5.1** to parse JSON response
2. **Use Step 5.2** to display warnings
3. **Group scenarios by type**:
- Filter `scenarios` where `type === "happy-path"` → happy-path.md
- Filter `scenarios` where `type === "error-case"` → error-cases.md
- Filter `scenarios` where `type === "edge-case"` → edge-cases.md
4. **Create directory**:
```bash
mkdir -p <directory>/test-scenarios
```
5. **Assign scenario numbers**:
- Group scenarios by `acceptance_criterion` field (e.g., "AC-1")
- Sort within each AC by `priority` field (1, 2, 3...)
- Assign numbers: AC-1 → 1.1, 1.2, 1.3...; AC-2 → 2.1, 2.2...
- Agent determines priority (happy-path first, then error-case, then edge-case)
6. **Write type files** with headers:
**happy-path.md**:
```markdown
# Happy Path Scenarios
Valid inputs and successful outcomes that represent typical user workflows.
---
[For each happy-path scenario, use Step 5.3 to write scenario.content]
```
**error-cases.md**:
```markdown
# Error Case Scenarios
Invalid inputs and failure conditions.
---
[For each error-case scenario, use Step 5.3 to write scenario.content]
```
**edge-cases.md**:
```markdown
# Edge Case Scenarios
Boundary values, limits, and unusual but valid conditions.
---
[For each edge-case scenario, use Step 5.3 to write scenario.content]
```
7. **Create scenarios.md** with tracking:
```markdown
# Test Scenarios
[For each AC in requirements.md:]
## AC-N: [Title from requirements.md]
**Source**: [requirements.md#ac-n](requirements.md#ac-n)
[For each scenario for this AC, use Step 5.4 to create tracking entry]
```
### For ADD Mode:
Adds one new scenario to existing set.
**Your tasks:**
1. **Use Step 5.1** to parse JSON (get `scenarios[0]` as the single scenario)
2. **Use Step 5.2** to display warnings
3. **Check for duplicates** - if `warnings.duplicates` is not empty:
```
Ask user: "Proceed anyway? (yes/no)"
If no, abort
```
4. **Use Step 5.5** to determine next scenario number for the AC
5. **Use Step 5.3** to append scenario.content to appropriate type file
6. **Use Step 5.4** to add tracking entry to scenarios.md under the AC section
7. **Display confirmation**:
```
✅ Added Scenario N.M: [scenario.name]
- Type: [scenario.type]
- AC: [scenario.acceptance_criterion]
```
### For MODIFY Mode:
Updates an existing scenario.
**Your tasks:**
1. **Use Step 5.1** to parse JSON (get `scenarios[0]` as the updated scenario)
2. **Use Step 5.2** to display warnings
3. **Update type file**:
- Find scenario in `test-scenarios/{scenario.type}.md`
- Locate section starting with `## Scenario N.M:`
- Replace entire section (from heading to `---`) with **Step 5.3** content
4. **Update scenarios.md** (if name or type changed):
- Find scenario entry `### Scenario N.M`
- Update name and type using **Step 5.4** format
- **PRESERVE existing checkbox states**
5. **Display confirmation**:
```
✅ Modified Scenario N.M: [scenario.name]
If tests/implementation exist, review them for needed updates.
```
### For DISCOVER Mode:
Analyzes existing scenarios for gaps and adds missing scenarios.
**Your tasks:**
1. **Use Step 5.1** to parse JSON
2. **Handle context requests** (if any):
```
if (response.context_requests?.length > 0) {
For each requested file:
- Read the file
- Append to original request: "Additional Context:\n\nFile: {filename}\n{content}\n"
Re-invoke qa-engineer agent with updated request
Return to step 1 when agent responds
}
```
3. **If scenarios found** (`response.scenarios.length > 0`):
a. **Use Step 5.2** to display warnings (especially gaps identified)
b. **For each new scenario**:
- **Use Step 5.5** to determine next scenario number for the AC
- **Use Step 5.3** to append to appropriate type file
- **Use Step 5.4** to add tracking entry to scenarios.md
c. **Display summary**:
```
✅ Discovered and added {count} new scenarios:
- Scenario X.Y: [scenario.name] ({scenario.type})
[list all new scenarios]
```
4. **If no gaps found** (`response.message === "No gaps found - coverage is complete"`):
```
Display:
✅ No gaps found - scenario coverage is complete
```
### For DELETE Mode:
**No agent needed** - this is a file operation only
**Your tasks:**
1. **Parse scenario number** from user request (e.g., "1.3")
2. **Remove from scenarios.md**:
```bash
# Find and remove the scenario entry:
### Scenario N.M: [Name]
- **Type**: [type]
- **Details**: [link]
- **Implementation Progress**: [checkboxes]
```
3. **Remove from scenario detail file**:
```bash
# Find and remove from <directory>/test-scenarios/{type}.md
## Scenario N.M: [Name]
[entire scenario content]
---
```
4. **Display confirmation**:
```
✅ Deleted Scenario N.M: [Name]
- Removed from scenarios.md
- Removed from test-scenarios/{type}.md
⚠️ Note: If this scenario had implementation (tests/code), you may need to remove those manually.
```
## Expected File Structure
After EXPAND mode, the directory structure will be:
```
<task-directory>/
├── requirements.md (INPUT - read-only, contains acceptance criteria)
├── scenarios.md (OUTPUT - all scenarios with Implementation tracking)
└── test-scenarios/
├── happy-path.md (OUTPUT - success cases)
├── error-cases.md (OUTPUT - failure cases)
└── edge-cases.md (OUTPUT - boundary cases)
```
## Usage Examples
### Example 1: Create comprehensive scenarios from requirements.md
```bash
/test-scenarios apps/snyk-cmd/docs/features/bulk-ignore/tasks/task-001/
```
Creates all scenarios from requirements.md in that directory.
### Example 2: Add single scenario
```bash
/test-scenarios apps/feature/task-001/ "add scenario for null organization name to AC-3"
```
Adds one scenario to existing set for AC-3.
### Example 3: Modify existing scenario
```bash
/test-scenarios apps/feature/task-001/ "modify scenario 2.1 to test empty string instead of null"
```
Updates scenario 2.1 with new behavior.
### Example 4: Discover and add missing scenarios
```bash
/test-scenarios apps/feature/task-001/ "discover gaps in existing scenarios"
```
Analyzes scenarios for gaps and automatically generates and adds missing test scenarios.
### Example 4a: Discover gaps with additional context
```bash
/test-scenarios apps/feature/task-001/ "discover gaps" @research.md @tech-design.md
```
Uses additional context files to discover edge cases, technical constraints, and integration scenarios that may not be obvious from requirements alone. The qa-engineer agent may ask clarifying questions, then generates and adds the missing scenarios automatically.
### Example 5: Delete scenario
```bash
/test-scenarios apps/feature/task-001/ "delete scenario 1.3"
```
Removes scenario 1.3 from scenarios.md and test-scenarios files.
## Key Principles
This command is the **orchestrator**:
- ✅ Determines what to do (mode selection)
- ✅ Prepares context for agent
- ✅ Calls agent with simple request
- ✅ Parses structured JSON output
- ✅ Handles all file operations
- ✅ Manages scenario numbering based on agent's priority
- ✅ Creates links and tracking
- ✅ Displays warnings to user
- ✅ Handles context requests from agent (DISCOVER mode)
The qa-engineer agent is the **QA expert**:
- ✅ Applies QA heuristics
- ✅ Classifies scenarios by type (happy-path/error-case/edge-case)
- ✅ Assigns priority based on QA expertise
- ✅ Links scenarios to acceptance criteria
- ✅ Generates Given-When-Then scenarios
- ✅ Uses business-friendly language
- ✅ Warns about duplicates and implementation impact
- ✅ Requests additional context if needed (DISCOVER mode)
- ✅ Returns structured JSON for easy parsing
- ❌ Does NOT handle files, numbering, or organization