30eggis

spec-scenario-loader

by @30eggis in Tools
0
0
# Install this skill:
npx skills add 30eggis/claude-frontend-skills --skill "spec-scenario-loader"

Install specific skill from multi-skill repository

# Description

|

# SKILL.md


name: spec-scenario-loader
description: |
์ ์ง„์ ์œผ๋กœ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ณ„ํš์„œ๋ฅผ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
ํŽ˜๋ฅด์†Œ๋‚˜๋ณ„, ํ™”๋ฉด๋ณ„, Critical Path๋ณ„ ๋กœ๋”ฉ ์ง€์›.
Agent์˜ ์ปจํ…์ŠคํŠธ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์„ ํƒ์ ์œผ๋กœ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
allowed-tools: Read, Glob, Grep
argument-hint: " [--list] [--persona ] [--screen ] [--critical-path] [--failed]"
permissionMode: bypassPermissions


spec-scenario-loader

์‹œ๋‚˜๋ฆฌ์˜ค ๊ณ„ํš์„œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋กœ๋”ฉํ•˜์—ฌ Agent์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ชฉ์ 

  • E2E ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋งŽ์œผ๋ฉด Agent ํ˜ธ์ถœ ์‹œ ์ปจํ…์ŠคํŠธ ์ดˆ๊ณผ ์œ„ํ—˜
  • ํ•„์š”ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ์ ์ง„์ ์œผ๋กœ ๋กœ๋”ฉ
  • Critical Path ์šฐ์„ , ํ™”๋ฉด๋ณ„/ํŽ˜๋ฅด์†Œ๋‚˜๋ณ„ ์„ธ๋ถ„ํ™”๋œ ๋กœ๋”ฉ

์‚ฌ์šฉ๋ฒ•

์ „์ฒด ์‹œ๋‚˜๋ฆฌ์˜ค ๋ชฉ๋ก (์š”์•ฝ)

/spec-scenario-loader {spec-folder} --list

์ถœ๋ ฅ:

# ์‹œ๋‚˜๋ฆฌ์˜ค ๋ชฉ๋ก ์š”์•ฝ

## Critical Path (5๊ฐœ)
1. ํšŒ์›๊ฐ€์ž… โ†’ ๋กœ๊ทธ์ธ โ†’ ๋Œ€์‹œ๋ณด๋“œ ์ ‘๊ทผ
2. ์ข…๋ชฉ ๊ฒ€์ƒ‰ โ†’ ์ƒ์„ธ ๋ณด๊ธฐ โ†’ ๊ด€์‹ฌ์ข…๋ชฉ ์ถ”๊ฐ€
3. ํฌํŠธํด๋ฆฌ์˜ค ์กฐํšŒ โ†’ ๋งค์ˆ˜/๋งค๋„
4. ์•Œ๋ฆผ ์„ค์ • โ†’ ์•Œ๋ฆผ ์ˆ˜์‹  ํ™•์ธ
5. ์„ค์ • ๋ณ€๊ฒฝ โ†’ ๋กœ๊ทธ์•„์›ƒ

## ํ™”๋ฉด๋ณ„ ์‹œ๋‚˜๋ฆฌ์˜ค
| ํ™”๋ฉด | ์‹œ๋‚˜๋ฆฌ์˜ค ์ˆ˜ | ์ฃผ์š” ํ”Œ๋กœ์šฐ |
|------|-------------|-------------|
| Dashboard | 8 | ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ, ์œ„์ ฏ ์ƒํ˜ธ์ž‘์šฉ |
| StockDetail | 6 | ์ฐจํŠธ, ๋งค๋งค, ์•Œ๋ฆผ |
| Settings | 4 | ํ”„๋กœํ•„, ์•Œ๋ฆผ, ํ…Œ๋งˆ |
| Search | 3 | ๊ฒ€์ƒ‰, ํ•„ํ„ฐ, ์ •๋ ฌ |

## ํŽ˜๋ฅด์†Œ๋‚˜๋ณ„ ์‹œ๋‚˜๋ฆฌ์˜ค
| ํŽ˜๋ฅด์†Œ๋‚˜ | ์‹œ๋‚˜๋ฆฌ์˜ค ์ˆ˜ | ํ•ต์‹ฌ ๋‹ˆ์ฆˆ |
|----------|-------------|-----------|
| Busy Professional | 5 | ๋น ๋ฅธ ์ •๋ณด ํ™•์ธ |
| Casual Investor | 4 | ๊ฐ„๋‹จํ•œ ๋งค๋งค |
| Day Trader | 6 | ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ, ๋น ๋ฅธ ์ฃผ๋ฌธ |

ํŽ˜๋ฅด์†Œ๋‚˜๋ณ„ ๋กœ๋”ฉ

/spec-scenario-loader {spec-folder} --persona "Busy Professional"
/spec-scenario-loader {spec-folder} --persona "Casual Investor"

์ถœ๋ ฅ: ํ•ด๋‹น ํŽ˜๋ฅด์†Œ๋‚˜์˜ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค ์ „์ฒด ๋‚ด์šฉ

ํ™”๋ฉด๋ณ„ ์‹œ๋‚˜๋ฆฌ์˜ค

/spec-scenario-loader {spec-folder} --screen dashboard
/spec-scenario-loader {spec-folder} --screen stock-detail
/spec-scenario-loader {spec-folder} --screen settings

์ถœ๋ ฅ: ํ•ด๋‹น ํ™”๋ฉด์˜ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค ์ „์ฒด ๋‚ด์šฉ

Critical Path๋งŒ

/spec-scenario-loader {spec-folder} --critical-path

์ถœ๋ ฅ: Critical Path ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ๋กœ๋”ฉ (๊ฐ€์žฅ ์ค‘์š”ํ•œ ์‚ฌ์šฉ์ž ํ๋ฆ„)

์‹คํŒจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ (์žฌ์‹คํ–‰์šฉ)

/spec-scenario-loader {spec-folder} --failed

์ถœ๋ ฅ: ๋งˆ์ง€๋ง‰ E2E ์‹คํ–‰์—์„œ ์‹คํŒจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ๋กœ๋”ฉ

Spec ํด๋” ๊ตฌ์กฐ

{spec-folder}/04-review/scenarios/
โ”œโ”€โ”€ critical-path.md           โ†’ Critical Path ์‹œ๋‚˜๋ฆฌ์˜ค (legacy)
โ”œโ”€โ”€ critical-path.yaml         โ†’ Critical Path (YAML preferred)
โ”œโ”€โ”€ screen-dashboard.md        โ†’ Dashboard ํ™”๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค
โ”œโ”€โ”€ screen-dashboard.yaml      โ†’ Dashboard (YAML preferred)
โ”œโ”€โ”€ screen-stock-detail.md     โ†’ ์ข…๋ชฉ ์ƒ์„ธ ํ™”๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค
โ”œโ”€โ”€ screen-settings.md         โ†’ ์„ค์ • ํ™”๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค
โ”œโ”€โ”€ screen-search.md           โ†’ ๊ฒ€์ƒ‰ ํ™”๋ฉด ์‹œ๋‚˜๋ฆฌ์˜ค
โ”œโ”€โ”€ persona-busy-professional.md
โ”œโ”€โ”€ persona-casual-investor.md
โ””โ”€โ”€ persona-day-trader.md

Format Detection

The loader auto-detects spec format by file extension:

Extension Format Priority
.yaml YAML (structured) Preferred
.md Markdown (legacy) Fallback

When both formats exist for a scenario, YAML takes precedence.

๋กœ๋”ฉ ๋กœ์ง

--list ๋ชจ๋“œ

1. Glob: {spec-folder}/04-review/scenarios/*.{yaml,md}
2. ๊ฐ ํŒŒ์ผ์—์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ:
   - YAML: direct parse from id, screen, persona fields
   - MD: regex parse from headers
   - ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฐœ์ˆ˜
   - ํ™”๋ฉด/ํŽ˜๋ฅด์†Œ๋‚˜ ๋ถ„๋ฅ˜
   - Critical Path ์—ฌ๋ถ€
3. ์š”์•ฝ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

--persona ๋ชจ๋“œ

1. Read: {spec-folder}/04-review/scenarios/persona-{name}.yaml (preferred)
2. Fallback: {spec-folder}/04-review/scenarios/persona-{name}.md
3. ์—†์œผ๋ฉด Grep์œผ๋กœ ํŽ˜๋ฅด์†Œ๋‚˜๋ช… ๊ฒ€์ƒ‰
4. ๊ด€๋ จ ์‹œ๋‚˜๋ฆฌ์˜ค ํ†ตํ•ฉ ์ถœ๋ ฅ

--screen ๋ชจ๋“œ

1. Read: {spec-folder}/04-review/scenarios/screen-{name}.yaml (preferred)
2. Fallback: {spec-folder}/04-review/scenarios/screen-{name}.md
3. ํ•ด๋‹น ํ™”๋ฉด์˜ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค ์ถœ๋ ฅ

--critical-path ๋ชจ๋“œ

1. Read: {spec-folder}/04-review/scenarios/critical-path.yaml (preferred)
2. Fallback: {spec-folder}/04-review/scenarios/critical-path.md
3. ์ „์ฒด ๋‚ด์šฉ ์ถœ๋ ฅ

--failed ๋ชจ๋“œ

1. Read: .spec-it/execute/{sessionId}/logs/e2e-results.json
2. ์‹คํŒจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ID ์ถ”์ถœ
3. ํ•ด๋‹น ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ๋กœ๋”ฉ (YAML ์šฐ์„ )
4. ์‹คํŒจ ์›์ธ ์ปจํ…์ŠคํŠธ ํฌํ•จ

YAML Parsing Guide

YAML ํฌ๋งท ์‹œ๋‚˜๋ฆฌ์˜ค ์ŠคํŽ™์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ:

# ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
id: "SCN-001"           โ†’ ์‹œ๋‚˜๋ฆฌ์˜ค ID
name: "์‹ค์‹œ๊ฐ„ ์ฃผ๊ฐ€ ํ™•์ธ" โ†’ ์‹œ๋‚˜๋ฆฌ์˜ค ์ด๋ฆ„
screen: "dashboard"     โ†’ ํ™”๋ฉด
persona: "Busy Professional"
priority: "P0"
criticalPath: true

# ์‹œ๋‚˜๋ฆฌ์˜ค ๋‚ด์šฉ
given:
  - "์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ"
  - "๊ด€์‹ฌ์ข…๋ชฉ์ด ์ตœ์†Œ 1๊ฐœ ์ด์ƒ ๋“ฑ๋ก๋จ"

when:
  - "Dashboard ํŽ˜์ด์ง€ ์ ‘๊ทผ"
  - "์‹ค์‹œ๊ฐ„ ์ฃผ๊ฐ€ ์œ„์ ฏ ํ™•์ธ"

then:
  - "๊ด€์‹ฌ์ข…๋ชฉ ์ฃผ๊ฐ€๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ๋จ"
  - "๋“ฑ๋ฝ๋ฅ ์ด ์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„๋จ"

playwright:
  selector: "[data-testid='price-widget']"
  assertion: "toBeVisible"

์‹œ๋‚˜๋ฆฌ์˜ค ํฌ๋งท

๊ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ํŒŒ์ผ์€ ๋‹ค์Œ ํ˜•์‹์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

# Screen: Dashboard

## Scenario: SC-001 ์‹ค์‹œ๊ฐ„ ์ฃผ๊ฐ€ ํ™•์ธ

**ํŽ˜๋ฅด์†Œ๋‚˜:** Busy Professional
**Priority:** P0
**Critical Path:** Yes

### Given (์ „์ œ์กฐ๊ฑด)
- ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ
- ๊ด€์‹ฌ์ข…๋ชฉ์ด ์ตœ์†Œ 1๊ฐœ ์ด์ƒ ๋“ฑ๋ก๋จ

### When (๋™์ž‘)
1. Dashboard ํŽ˜์ด์ง€ ์ ‘๊ทผ
2. ์‹ค์‹œ๊ฐ„ ์ฃผ๊ฐ€ ์œ„์ ฏ ํ™•์ธ

### Then (๊ธฐ๋Œ€๊ฒฐ๊ณผ)
- [ ] ๊ด€์‹ฌ์ข…๋ชฉ ์ฃผ๊ฐ€๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ๋จ
- [ ] ๋“ฑ๋ฝ๋ฅ ์ด ์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„๋จ (์ƒ์Šน: ๋นจ๊ฐ•, ํ•˜๋ฝ: ํŒŒ๋ž‘)
- [ ] ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„์ด ํ‘œ์‹œ๋จ

### Playwright ํžŒํŠธ
```typescript
await page.goto('/dashboard');
await expect(page.locator('[data-testid="price-widget"]')).toBeVisible();
await expect(page.locator('[data-testid="last-update"]')).toContainText(/\d{2}:\d{2}/);
## Agent ์—ฐ๋™ ์˜ˆ์‹œ

### Phase 7: SCENARIO-TEST์—์„œ ์‚ฌ์šฉ

Task(e2e-implementer, opus):
prompt: "
# Step 1: Critical Path ๋จผ์ € ๊ตฌํ˜„
Skill(spec-scenario-loader {spec-folder} --critical-path)
โ†’ E2E ํ…Œ์ŠคํŠธ ๊ตฌํ˜„

# Step 2: ํ™”๋ฉด๋ณ„ ์‹œ๋‚˜๋ฆฌ์˜ค
FOR screen IN [dashboard, stock-detail, settings]:
  Skill(spec-scenario-loader {spec-folder} --screen {screen})
  โ†’ E2E ํ…Œ์ŠคํŠธ ๊ตฌํ˜„

# Step 3: ์‹คํŒจ ์ผ€์ด์Šค ์žฌํ™•์ธ
Skill(spec-scenario-loader {spec-folder} --failed)
โ†’ ์‹คํŒจ ์›์ธ ๋ถ„์„ ๋ฐ ์ˆ˜์ •

"

### ์ ์ง„์  ๋กœ๋”ฉ ํŒจํ„ด

1๋‹จ๊ณ„: ์ „์ฒด ๊ตฌ์กฐ ํŒŒ์•…

Skill(spec-scenario-loader specs --list)

2๋‹จ๊ณ„: Critical Path ์šฐ์„  (๊ฐ€์žฅ ์ค‘์š”)

Skill(spec-scenario-loader specs --critical-path)

3๋‹จ๊ณ„: ํ™”๋ฉด๋ณ„ ์„ธ๋ถ€ ์‹œ๋‚˜๋ฆฌ์˜ค

Skill(spec-scenario-loader specs --screen dashboard)

4๋‹จ๊ณ„: ํŠน์ • ํŽ˜๋ฅด์†Œ๋‚˜ ์‹œ๋‚˜๋ฆฌ์˜ค

Skill(spec-scenario-loader specs --persona "Busy Professional")

## ์ถœ๋ ฅ ํฌ๋งท

๋ชจ๋“  ์ถœ๋ ฅ์€ Markdown ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค:

```markdown
# {๋กœ๋”ฉ ํƒ€์ž…} ์‹œ๋‚˜๋ฆฌ์˜ค

## ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
- ๋กœ๋”ฉ ์ผ์‹œ: {timestamp}
- ์†Œ์Šค: {spec-folder}
- ํ•„ํ„ฐ: {filter-type}
- ์‹œ๋‚˜๋ฆฌ์˜ค ์ˆ˜: {count}

## ์‹œ๋‚˜๋ฆฌ์˜ค ๋ชฉ๋ก

{actual content}

---
*Loaded by spec-scenario-loader*

E2E ์‹คํ–‰ ๊ฒฐ๊ณผ ์—ฐ๋™

์‹คํŒจ ์‹œ๋‚˜๋ฆฌ์˜ค ์ถ”์ 

// .spec-it/execute/{sessionId}/logs/e2e-results.json
{
  "timestamp": "2026-01-30T15:00:00Z",
  "total": 15,
  "passed": 13,
  "failed": 2,
  "failures": [
    {
      "scenarioId": "SC-003",
      "file": "screen-dashboard.md",
      "error": "Timeout waiting for price update",
      "screenshot": "screenshots/sc-003-failure.png"
    }
  ]
}

--failed ๋ชจ๋“œ ์ถœ๋ ฅ

# ์‹คํŒจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค (2๊ฑด)

## SC-003: ์‹ค์‹œ๊ฐ„ ์ฃผ๊ฐ€ ์—…๋ฐ์ดํŠธ

**ํŒŒ์ผ:** screen-dashboard.md
**์—๋Ÿฌ:** Timeout waiting for price update
**์Šคํฌ๋ฆฐ์ƒท:** screenshots/sc-003-failure.png

### ์›๋ณธ ์‹œ๋‚˜๋ฆฌ์˜ค
{scenario content}

### ์‹คํŒจ ๋ถ„์„
- WebSocket ์—ฐ๊ฒฐ ์ง€์—ฐ ๊ฐ€๋Šฅ์„ฑ
- Mock ์„œ๋ฒ„ ์‘๋‹ต ํ™•์ธ ํ•„์š”

---

๊ด€๋ จ Skill

  • spec-test-loader: ํ…Œ์ŠคํŠธ ๊ณ„ํš์„œ ๋กœ๋”ฉ
  • spec-component-loader: ์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™ ๋กœ๋”ฉ
  • spec-it-execute: Phase 7์—์„œ ์ด skill ์‚ฌ์šฉ

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.