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.