@simplysm/sd-claude 14.0.80 → 14.0.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/claude/references/sd-requirement-source-handling.md +17 -17
- package/claude/references/sd-simplysm14/README.md +58 -58
- package/claude/references/sd-simplysm14/manuals/client-component.md +739 -739
- package/claude/references/sd-simplysm14/manuals/client-crud.md +1 -1
- package/claude/references/sd-simplysm14/manuals/client-demo.md +1 -1
- package/claude/references/sd-simplysm14/manuals/client-setup.md +2 -2
- package/claude/references/sd-simplysm14/manuals/client-tab.md +2 -2
- package/claude/references/sd-simplysm14/manuals/logging.md +3 -3
- package/claude/references/sd-simplysm14/manuals/orm-union.md +7 -7
- package/claude/references/sd-simplysm14/manuals/orm.md +75 -75
- package/claude/references/sd-simplysm14/manuals/test.md +8 -8
- package/claude/rules/sd-base-rules.md +306 -293
- package/claude/rules/sd-design-rules.md +44 -44
- package/claude/skills/sd-commit/SKILL.md +17 -17
- package/claude/skills/sd-config/SKILL.md +4 -4
- package/claude/skills/sd-demo/SKILL.md +40 -48
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/.specs/inventory/spec.md +99 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/package.json +12 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/index.ts +3 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/screens/inbound/inbound.list.ts +150 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/screens/inventory/inventory-master.list.ts +143 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/screens/outbound/outbound.list.ts +150 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/pnpm-workspace.yaml +2 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/sd.config.ts +12 -0
- package/claude/skills/sd-demo/evals/golden.jsonl +1 -5
- package/claude/skills/sd-dev/SKILL.md +49 -22
- package/claude/skills/sd-dev/evals/fixtures/minimal-ts-pkg/package.json +8 -0
- package/claude/skills/sd-dev/evals/fixtures/minimal-ts-pkg/src/.gitkeep +0 -0
- package/claude/skills/sd-dev/evals/fixtures/minimal-ts-pkg/tests/.gitkeep +0 -0
- package/claude/skills/sd-dev/evals/fixtures/{case-modify → minimal-ts-pkg}/tsconfig.json +1 -3
- package/claude/skills/sd-dev/evals/golden.jsonl +1 -3
- package/claude/skills/sd-docs/SKILL.md +8 -8
- package/claude/skills/sd-impl/SKILL.md +172 -82
- package/claude/skills/sd-impl/evals/fixtures/case-a-new-screen/.specs/260513120000_warehouse/spec.md +101 -0
- package/claude/skills/sd-impl/evals/fixtures/case-b-update-with-demo/.specs/260513120000_warehouse/spec.md +101 -0
- package/claude/skills/sd-impl/evals/fixtures/case-b-update-with-demo/packages/app/src/screens/box-register/box-register.view.ts +46 -0
- package/claude/skills/sd-impl/evals/fixtures/case-c-new-cross/.specs/260513120000_warehouse/spec.md +89 -0
- package/claude/skills/sd-impl/evals/fixtures/case-d-spec-modify/.specs/260513120000_warehouse/spec.md +101 -0
- package/claude/skills/sd-impl/evals/golden.jsonl +4 -6
- package/claude/skills/sd-review/SKILL.md +33 -0
- package/claude/skills/sd-review/evals/fixtures/code-review/src/foo.ts +7 -0
- package/claude/skills/sd-review/evals/fixtures/doc-review/docs/foo.md +4 -0
- package/claude/skills/sd-review/evals/golden.jsonl +2 -0
- package/claude/skills/sd-skill/SKILL.md +99 -91
- package/claude/skills/sd-skill/evals/fixtures/existing-skill/.claude/skills/todo-format/SKILL.md +14 -0
- package/claude/skills/sd-skill/evals/fixtures/new-skill/.gitkeep +0 -0
- package/claude/skills/sd-skill/evals/golden.jsonl +2 -0
- package/claude/skills/sd-spec/SKILL.md +251 -246
- package/claude/skills/sd-spec/references/example-spec.md +1 -1
- package/claude/skills/sd-unpack/SKILL.md +83 -83
- package/claude/skills/sd-use/SKILL.md +4 -4
- package/package.json +1 -1
- package/claude/skills/sd-demo/evals/fixtures/empty/.specs/260513120000_warehouse/spec.md +0 -45
- package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/.specs/260513120000_warehouse/spec.md +0 -42
- package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/packages/app/src/screens/dashboard/dashboard.view.ts +0 -33
- package/claude/skills/sd-demo/evals/fixtures/with-master-screen/.specs/260513120000_warehouse/spec.md +0 -45
- package/claude/skills/sd-demo/evals/fixtures/with-master-screen/packages/app/src/screens/dashboard/dashboard.view.ts +0 -33
- package/claude/skills/sd-demo/evals/fixtures/with-modal/.specs/260513120000_warehouse/spec.md +0 -75
- package/claude/skills/sd-demo/evals/fixtures/with-modal/packages/app/src/screens/dashboard/dashboard.view.ts +0 -33
- package/claude/skills/sd-demo/evals/fixtures/with-screens/.specs/260513120000_warehouse/spec.md +0 -45
- package/claude/skills/sd-demo/evals/fixtures/with-screens/packages/app/src/screens/dashboard/dashboard.view.ts +0 -33
- package/claude/skills/sd-dev/evals/fixtures/case-add/package.json +0 -13
- package/claude/skills/sd-dev/evals/fixtures/case-add/src/index.ts +0 -10
- package/claude/skills/sd-dev/evals/fixtures/case-add/tests/index.test.ts +0 -11
- package/claude/skills/sd-dev/evals/fixtures/case-add/tsconfig.json +0 -12
- package/claude/skills/sd-dev/evals/fixtures/case-bug/package.json +0 -13
- package/claude/skills/sd-dev/evals/fixtures/case-bug/src/index.ts +0 -10
- package/claude/skills/sd-dev/evals/fixtures/case-bug/tests/index.test.ts +0 -11
- package/claude/skills/sd-dev/evals/fixtures/case-bug/tsconfig.json +0 -12
- package/claude/skills/sd-dev/evals/fixtures/case-modify/package.json +0 -13
- package/claude/skills/sd-dev/evals/fixtures/case-modify/src/index.ts +0 -10
- package/claude/skills/sd-dev/evals/fixtures/case-modify/tests/index.test.ts +0 -11
- package/claude/skills/sd-impl/evals/fixtures/case-001-new-screen/spec.md +0 -55
- package/claude/skills/sd-impl/evals/fixtures/case-002-auto-process/spec.md +0 -55
- package/claude/skills/sd-impl/evals/fixtures/case-003-update-screen/packages/client/src/pages/book-list.ts +0 -22
- package/claude/skills/sd-impl/evals/fixtures/case-003-update-screen/spec.md +0 -57
- package/claude/skills/sd-impl/evals/fixtures/case-004-ambiguous-spec/spec.md +0 -58
- package/claude/skills/sd-impl/evals/fixtures/case-005-id-mismatch/spec.md +0 -52
- package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/packages/client/src/pages//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/251/353/241/235.test.ts +0 -10
- package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/packages/client/src/pages//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/251/353/241/235.ts +0 -11
- package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/packages/server/src/data-access//352/261/260/353/236/230/354/262/230-/354/240/221/352/267/274.ts +0 -12
- package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/packages/server/src/models//352/261/260/353/236/230/354/262/230.ts +0 -8
- package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/spec.md +0 -77
- package/claude/skills/sd-impl/evals/fixtures/case-new/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +0 -101
- package/claude/skills/sd-impl/evals/fixtures/case-update/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +0 -101
- package/claude/skills/sd-impl/evals/fixtures/case-update/src//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/250/353/215/270.txt +0 -1
- package/claude/skills/sd-impl/evals/fixtures/case-update/src//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/251/353/241/235.txt +0 -1
- package/claude/skills/sd-impl/references/spec-cross-check.md +0 -82
package/claude/skills/sd-impl/evals/fixtures/case-c-new-cross/.specs/260513120000_warehouse/spec.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# 재고관리 요구 분석서
|
|
2
|
+
|
|
3
|
+
## 1. 개요
|
|
4
|
+
|
|
5
|
+
### 1.1 핵심 목적
|
|
6
|
+
|
|
7
|
+
- 박스 단위 입고·재고 관리
|
|
8
|
+
|
|
9
|
+
### 1.2 주요 목표
|
|
10
|
+
|
|
11
|
+
- 데이터 변경 이력 추적
|
|
12
|
+
|
|
13
|
+
### 1.3 최종 사용자/이해관계자
|
|
14
|
+
|
|
15
|
+
- 창고 작업자
|
|
16
|
+
- 시스템 운영자 (감사)
|
|
17
|
+
|
|
18
|
+
### 1.4 환경/장치
|
|
19
|
+
|
|
20
|
+
#### 구성도
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
┌──────────────┐ ┌──────────────┐
|
|
24
|
+
│ PC 클라이언트 │───→│ 서버 │
|
|
25
|
+
└──────────────┘ └──────────────┘
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
#### 장치 목록
|
|
29
|
+
|
|
30
|
+
- PC: Chrome 최신
|
|
31
|
+
- 서버: Node 20
|
|
32
|
+
|
|
33
|
+
## 2. 업무 프로세스
|
|
34
|
+
|
|
35
|
+
## 3. 기타 요구사항
|
|
36
|
+
|
|
37
|
+
### 3.1 데이터 변경 이력 추적 [확정: 2026-05-20]
|
|
38
|
+
|
|
39
|
+
모든 도메인 모델 변경분을 변경 로그에 기록. 감사·복구 목적.
|
|
40
|
+
|
|
41
|
+
관련 섹션: [횡단 처리.데이터 변경 로그]
|
|
42
|
+
|
|
43
|
+
## 4. 화면
|
|
44
|
+
|
|
45
|
+
## 5. 자동 처리
|
|
46
|
+
|
|
47
|
+
## 6. 횡단 처리
|
|
48
|
+
|
|
49
|
+
### 6.1 데이터 변경 로그 [확정: 2026-05-20]
|
|
50
|
+
|
|
51
|
+
목적: 모든 도메인 모델 변경분 기록
|
|
52
|
+
트리거: 모든 엔티티 update 시 / 전체
|
|
53
|
+
관련 섹션: [모델.변경 로그]
|
|
54
|
+
|
|
55
|
+
#### 처리
|
|
56
|
+
|
|
57
|
+
1. 변경 전 엔티티 스냅샷 수집
|
|
58
|
+
2. 변경 후 엔티티 스냅샷 수집
|
|
59
|
+
3. 변경 로그 1건 적재 (필드: 엔티티명·키·변경 전·변경 후·일시·사용자)
|
|
60
|
+
|
|
61
|
+
#### 예외 처리
|
|
62
|
+
|
|
63
|
+
- 적재 실패: 로그 X, 원 트랜잭션 진행 (best-effort)
|
|
64
|
+
|
|
65
|
+
## 7. 공통 정의
|
|
66
|
+
|
|
67
|
+
## 8. 도메인 모델
|
|
68
|
+
|
|
69
|
+
### 8.1 변경 로그 [확정: 2026-05-20]
|
|
70
|
+
|
|
71
|
+
필드:
|
|
72
|
+
|
|
73
|
+
| 필드 | 타입 | 필수 | 비고 |
|
|
74
|
+
| --------- | ------ | ---- | --------------------- |
|
|
75
|
+
| ID | 숫자 | Y | 자동 부여 |
|
|
76
|
+
| 엔티티명 | 문자열 | Y | 변경된 엔티티 종류 |
|
|
77
|
+
| 엔티티 키 | 문자열 | Y | 변경된 엔티티 식별 키 |
|
|
78
|
+
| 변경 전 | 텍스트 | N | JSON 직렬화 |
|
|
79
|
+
| 변경 후 | 텍스트 | N | JSON 직렬화 |
|
|
80
|
+
| 일시 | 일시 | Y | 변경 발생 시점 |
|
|
81
|
+
| 사용자 | 문자열 | Y | 변경 수행자 |
|
|
82
|
+
|
|
83
|
+
키/제약:
|
|
84
|
+
|
|
85
|
+
- 식별 키: ID
|
|
86
|
+
|
|
87
|
+
## 9. 외부 인터페이스
|
|
88
|
+
|
|
89
|
+
## 10. 본문 외 결정사항
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# 재고관리 요구 분석서
|
|
2
|
+
|
|
3
|
+
## 1. 개요
|
|
4
|
+
|
|
5
|
+
### 1.1 핵심 목적
|
|
6
|
+
|
|
7
|
+
- 박스 단위 입고·재고 관리
|
|
8
|
+
|
|
9
|
+
### 1.2 주요 목표
|
|
10
|
+
|
|
11
|
+
- 박스 1건 등록
|
|
12
|
+
|
|
13
|
+
### 1.3 최종 사용자/이해관계자
|
|
14
|
+
|
|
15
|
+
- 창고 작업자
|
|
16
|
+
|
|
17
|
+
### 1.4 환경/장치
|
|
18
|
+
|
|
19
|
+
#### 구성도
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
┌──────────────┐ ┌──────────────┐
|
|
23
|
+
│ PC 클라이언트 │───→│ 서버 │
|
|
24
|
+
└──────────────┘ └──────────────┘
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
#### 장치 목록
|
|
28
|
+
|
|
29
|
+
- PC: 창고 작업자용. Chrome 최신. 1920x1080
|
|
30
|
+
- 서버: Node 20
|
|
31
|
+
|
|
32
|
+
## 2. 업무 프로세스
|
|
33
|
+
|
|
34
|
+
## 3. 기타 요구사항
|
|
35
|
+
|
|
36
|
+
## 4. 화면
|
|
37
|
+
|
|
38
|
+
| § | 분류 | 화면 | 유형 | 장치 |
|
|
39
|
+
| --- | -------- | --------- | -------- | ---- |
|
|
40
|
+
| 4.1 | 기준정보 | 박스 등록 | 트랜잭션 | PC |
|
|
41
|
+
|
|
42
|
+
### 4.1 박스 등록 (PC) [확정: 2026-05-20]
|
|
43
|
+
|
|
44
|
+
Actor: 창고 작업자
|
|
45
|
+
관련 섹션: [모델.박스]
|
|
46
|
+
|
|
47
|
+
기능 개요:
|
|
48
|
+
|
|
49
|
+
- 박스 1건 신규 등록
|
|
50
|
+
|
|
51
|
+
#### 와이어프레임 (텍스트)
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
┌─────────────────────────┐
|
|
55
|
+
│ 박스 등록 │
|
|
56
|
+
├─────────────────────────┤
|
|
57
|
+
│ <등록 폼> │
|
|
58
|
+
│ │
|
|
59
|
+
│ [저장] │
|
|
60
|
+
└─────────────────────────┘
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### 항목
|
|
64
|
+
|
|
65
|
+
**등록 폼**
|
|
66
|
+
|
|
67
|
+
| 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
|
|
68
|
+
| --------- | ------ | ---- | ---------------- | ------------------- |
|
|
69
|
+
| 박스 코드 | 문자열 | Y | [모델.박스.코드] | 코드 길이 규칙 따름 |
|
|
70
|
+
| 품목 코드 | 문자열 | Y | [모델.박스.품목] | - |
|
|
71
|
+
|
|
72
|
+
#### 동작
|
|
73
|
+
|
|
74
|
+
- `[저장]` 클릭: 입력값으로 박스 1건 등록
|
|
75
|
+
|
|
76
|
+
## 5. 자동 처리
|
|
77
|
+
|
|
78
|
+
## 6. 횡단 처리
|
|
79
|
+
|
|
80
|
+
## 7. 공통 정의
|
|
81
|
+
|
|
82
|
+
## 8. 도메인 모델
|
|
83
|
+
|
|
84
|
+
### 8.1 박스 [확정: 2026-05-20]
|
|
85
|
+
|
|
86
|
+
필드:
|
|
87
|
+
|
|
88
|
+
| 필드 | 타입 | 필수 | 비고 |
|
|
89
|
+
| ---- | ------ | ---- | --------------------------------- |
|
|
90
|
+
| ID | 숫자 | Y | 자동 부여 |
|
|
91
|
+
| 코드 | 문자열 | Y | 길이 [OPEN] — 12자 또는 24자 결정 필요 |
|
|
92
|
+
| 품목 | 문자열 | Y | 품목 코드 |
|
|
93
|
+
|
|
94
|
+
키/제약:
|
|
95
|
+
|
|
96
|
+
- 식별 키: ID
|
|
97
|
+
- 비즈니스 키: 코드 (수정 가능)
|
|
98
|
+
|
|
99
|
+
## 9. 외부 인터페이스
|
|
100
|
+
|
|
101
|
+
## 10. 본문 외 결정사항
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
{"id": "case-
|
|
2
|
-
{"id": "case-
|
|
3
|
-
{"id": "case-
|
|
4
|
-
{"id": "case-
|
|
5
|
-
{"id": "case-005-id-mismatch", "input": "/sd-impl spec.md §4.99 (평가 환경: 8단계 시연 스킵, 9단계 완료 보고로 종료. dev 서버·외부 프로세스 자체 실행 금지.)", "fixture": "case-005-id-mismatch", "rubric": ["assistant 응답에 spec.md 의 §4 화면 목록 후보가 사용자에게 제시되었는가 (표 또는 목록 형태)", "사용자에게 식별자 확정을 요청하는 질문 표현이 응답에 등장하는가"]}
|
|
6
|
-
{"id": "case-006-with-reference-units", "input": "/sd-impl spec.md §4.2 (평가 환경: 4단계 분해 표·6단계 subagent 대조 호출·9단계 완료 보고만 수행. 5단계 작업 사이클·7단계 코드 정리·8단계 시연은 스킵. dev 서버·외부 프로세스 자체 실행 금지.)", "fixture": "case-006-with-reference-units", "rubric": ["assistant 응답에 spec 항목들을 분해한 표가 마크다운 표 형식으로 출력되었고 컬럼이 5개 이상이며 데이터 행이 1개 이상 채워졌는가", "assistant 응답에 4계층 어휘 (도메인 모델·데이터 접근·본체·테스트 또는 한국어 동의어 모델·DB접근·UI/화면·테스트 등) 중 최소 3종 이상이 등장하는가", "assistant 응답 또는 events 에 §4.1 거래처 목록 또는 packages/client/src/pages/거래처 경로가 기준 단위 후보로 식별·언급되는 흐름이 등장하는가", "events 에 packages/client/src/pages/거래처/ 또는 packages/server/src/ 하위 풀구현 stub 파일 중 1개 이상에 대한 읽기 흔적 (Read 호출 또는 Bash 의 cat 등 동등 명령) 이 발생했는가", "최종 tree 에 spec.md 및 풀구현 stub 4종 (거래처-목록.ts, 거래처-목록.test.ts, 거래처.ts, 거래처-접근.ts) 이 손실 없이 보존되었는가"]}
|
|
1
|
+
{"id": "case-a-new-screen", "input": ".specs/260513120000_warehouse/spec.md §4.1 화면 풀 구현해줘. eval 환경 단축 모드: 단위 테스트 핵심 1건만, 6단계 subagent 대조·7단계 코드 정리·REFACTOR·dev 시연 스킵.", "rubric": ["fixture 의 spec.md 파일이 워크스페이스에 보존되었는가", "워크스페이스 spec.md 의 §4.1 헤더에 [확정: YYYY-MM-DD, 구현: YYYY-MM-DD] 형식 마커가 부착되었는가", "워크스페이스에 §4.1 화면 본체에 해당하는 코드 파일이 1개 이상 생성되었는가 (예: 박스 등록 화면 컴포넌트)", "assistant 응답에 spec 분해 표가 마크다운 표 형식(파이프 구분, 헤더 행 포함)으로 출력되었는가"], "fixture": "case-a-new-screen"}
|
|
2
|
+
{"id": "case-b-update-with-demo", "input": ".specs/260513120000_warehouse/spec.md §4.1 데모를 실 구현으로 전환해줘. eval 환경 단축 모드: 단위 테스트 핵심 1건만, 6단계 subagent 대조·7단계 코드 정리·REFACTOR·dev 시연 스킵.", "rubric": ["fixture 의 데모 골격 파일(packages/app/src/screens/box-register/box-register.view.ts)이 워크스페이스에 보존되었는가 (삭제되지 않았는가)", "워크스페이스 spec.md 의 §4.1 헤더에 [확정: YYYY-MM-DD, 구현: YYYY-MM-DD] 형식 마커가 부착되었는가", "워크스페이스에 데모 골격 외의 코드 파일(데이터 접근 또는 단위 테스트 계층)이 1개 이상 추가되었는가", "assistant 응답에 spec 분해 표가 마크다운 표 형식(파이프 구분, 헤더 행 포함)으로 출력되었는가"], "fixture": "case-b-update-with-demo"}
|
|
3
|
+
{"id": "case-c-new-cross", "input": ".specs/260513120000_warehouse/spec.md §6.1 횡단 처리 풀 구현해줘. eval 환경 단축 모드: 단위 테스트 핵심 1건만, 6단계 subagent 대조·7단계 코드 정리·REFACTOR·dev 시연 스킵.", "rubric": ["워크스페이스에 §6.1 횡단 처리 본체(부수효과 후크 또는 처리 로직)에 해당하는 코드 파일이 1개 이상 생성되었는가", "워크스페이스 spec.md 의 §6.1 헤더에 [확정: YYYY-MM-DD, 구현: YYYY-MM-DD] 형식 마커가 부착되었는가", "assistant 응답에 spec 분해 표가 마크다운 표 형식(파이프 구분, 헤더 행 포함)으로 출력되었는가"], "fixture": "case-c-new-cross"}
|
|
4
|
+
{"id": "case-d-spec-modify", "input": ".specs/260513120000_warehouse/spec.md §4.1 화면 풀 구현해줘. §8.1 의 인라인 [OPEN] 마커는 만나는 즉시 결정해서 spec.md 를 직접 수정하고 진행해줘. eval 환경 단축 모드: 단위 테스트 핵심 1건만, 6단계 subagent 대조·7단계 코드 정리·REFACTOR·dev 시연 스킵.", "rubric": ["fixture spec.md 안의 인라인 [OPEN] 마커가 워크스페이스 spec.md 의 §8.1 본문에서 제거 또는 결정 내용으로 치환되었는가 ('[OPEN]' 문자열이 §8.1 본문에 더 이상 존재하지 않는가)", "워크스페이스 spec.md 의 §4.1 헤더에 [확정: YYYY-MM-DD, 구현: YYYY-MM-DD] 형식 마커가 부착되었는가", "events 에 sd-spec 룰 자료(.claude/skills/sd-spec/SKILL.md 또는 동등 자료) 읽기 흔적(Read·Bash cat 등 동등 명령)이 1회 이상 있는가", "워크스페이스에 §4.1 화면 본체에 해당하는 코드 파일이 1개 이상 생성되었는가"], "fixture": "case-d-spec-modify"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sd-review
|
|
3
|
+
description: 산출물(코드·문서 등) 을 적용 룰 기준으로 검증해 발견 사항을 보고. Use when 사용자가 리뷰 혹은 검토를 요청할 때.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# sd-review
|
|
7
|
+
|
|
8
|
+
## 워크플로
|
|
9
|
+
|
|
10
|
+
1. **리뷰 대상 식별** — 사용자가 지정한 대상(파일 경로·코드·문서 등) 확정. 모호 시 사용자에게 묻기.
|
|
11
|
+
|
|
12
|
+
2. **작업 도메인 명시** — 대상이 어떤 도메인의 산출물인가 식별 (예: LLM 문서 / 사람 문서 / UI / 코드).
|
|
13
|
+
|
|
14
|
+
3. **적용 룰 인용** — 도메인의 적용 룰 인용 (sd-base-rules·sd-design-rules·도메인별 룰 등). 룰 항목 직접 표기.
|
|
15
|
+
|
|
16
|
+
4. **룰 부합 검증** — 대상이 인용 룰에 부합하는가 점검. 위반 항목 식별.
|
|
17
|
+
|
|
18
|
+
5. **발견 사항 분류** — 각 항목을 다음 기준으로 분류:
|
|
19
|
+
|
|
20
|
+
| 판정 | 기준 |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| `[자동]` 화이트리스트 | 오타·맞춤법·띄어쓰기·조사 오용·들여쓰기/줄바꿈 통일·trailing whitespace·중복 제거 등 형식 정리 |
|
|
23
|
+
| `[자동]` 의미·범위 변동 없음 | 변경 전후 의미·적용 범위가 동일함이 명백한 표현 정리 |
|
|
24
|
+
| 결정 대상 | 위 자동 분기 어디에도 해당하지 않는 모든 항목 (의미·적용 범위 변동 가능성이 조금이라도 있음) |
|
|
25
|
+
|
|
26
|
+
6. **자동 적용 실행** — `자동 적용` 분류 항목을 즉시 변경.
|
|
27
|
+
|
|
28
|
+
7. **보고** — 모든 발견 사항 나열. 자동 적용 항목과 결정 대상을 분리 표기.
|
|
29
|
+
- 각 항목 필수 필드: 제목, 적용 룰 (출처 인용), 판정.
|
|
30
|
+
- 자동 적용 항목: `[자동]` 마커 (변경 완료).
|
|
31
|
+
- 결정 대상: 마커 없음.
|
|
32
|
+
|
|
33
|
+
8. **결정 진행 모드 전환** — 결정 대상이 1건 이상이면 sd-base-rules 결정 진행 모드로 전환 (사용자 트리거 대기 X). 0건이면 종료.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{"id": "code-review", "input": "/sd-review src/foo.ts 코드 리뷰", "rubric": ["응답에 리뷰 대상(파일 경로 또는 코드 인용)이 명시되었는가?", "응답에 적용 룰·기준·원칙 인용이 1건 이상 포함되었는가?", "응답에 코드의 잠재 문제·개선점 또는 통과 판정이 명시되었는가?"], "fixture": "code-review"}
|
|
2
|
+
{"id": "doc-review", "input": "/sd-review docs/foo.md 문서 리뷰", "rubric": ["응답에 리뷰 대상(파일 경로 또는 문서 인용)이 명시되었는가?", "응답에 적용 룰·기준·원칙 인용이 1건 이상 포함되었는가?", "응답에 문서의 잠재 문제·개선점 또는 통과 판정이 명시되었는가?"], "fixture": "doc-review"}
|
|
@@ -1,96 +1,98 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sd-skill
|
|
3
|
-
description: 사용자가 정의한 작업 도메인을 SKILL.md + (필요 시) scripts 묶음으로
|
|
3
|
+
description: 사용자가 정의한 작업 도메인을 SKILL.md + (필요 시) scripts 묶음으로 생성·수정. Use when 새 스킬을 작성하거나 기존 스킬을 수정할 때.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 스킬 작성
|
|
7
7
|
|
|
8
|
-
워크플로 = 아래 § 1~
|
|
8
|
+
워크플로 = 아래 § 1~5 순서. 처음부터 끝까지 읽으며 그대로 수행.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
사용자 질문 시점 = § 1 의도 합의 + § 2 case `input` 발화 선택. § 2~5 의 그 외는 § 1 합의 기반 자동 진행, 부족 발견 시 § 1 회귀.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## 1단계. 의도 정의
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
다음 파악:
|
|
15
|
+
|
|
16
|
+
- 스킬 목적은? (한 줄 동사형) + 커버 유즈케이스는?
|
|
17
|
+
- 주요 사용자 입력 시나리오는? (호출 트리거 발화 형태)
|
|
18
|
+
- 핵심 산출물은? (생성·수정 대상 파일·디렉토리 형태) — § 2 rubric 형식 검증 근거
|
|
16
19
|
- 실행 스크립트 필요 / 지침만으로 충분?
|
|
17
20
|
- 함께 포함할 참고 자료?
|
|
18
21
|
|
|
19
|
-
## 2
|
|
22
|
+
## 2단계. Eval 케이스 정의
|
|
20
23
|
|
|
21
24
|
채점 케이스: `evals/golden.jsonl`. 케이스 초기 워크스페이스: `evals/fixtures/<name>/`.
|
|
22
25
|
|
|
23
|
-
**주의**: 타 스킬 eval 답습 금지, 아래 룰만 따를 것.
|
|
24
|
-
|
|
25
26
|
### 자동답변 환경
|
|
26
27
|
|
|
27
28
|
Eval 실행 시 사용자 응답 불가. 대상 스킬은 입력 필요 시점마다 **스스로 답변**하며 끝까지 진행 (대화 흐름·산출물 형식 검증용). 케이스 설계는 이 제약 전제.
|
|
28
29
|
|
|
29
30
|
- `input` = 1턴 사용자 발화. 후속 응답 가정 X.
|
|
30
31
|
- rubric = 자체 답변 가능 영역만 검증: 산출물 존재/형식/구조·흐름 진행 여부·frontmatter 키 등. *"사용자가 X 를 골랐을 때 Y 가 나오는가"* 처럼 특정 사용자 응답 값 의존 항목 금지 (자체 답변값은 매번 다름).
|
|
31
|
-
- **사용자 응답 발생 자체 의존 rubric 금지**: 대상 스킬이 "사용자 질문"·"OPEN 처리/대기"·"임의 채움 금지" 룰 보유해도, 룰 발현 자체는
|
|
32
|
-
- ❌ `"사용자에게 질문하거나 OPEN 처리하는 흐름이 등장하는가"` (자체 답변으로 채운 뒤 진행 = 위반 아니라 환경 정상 동작)
|
|
33
|
-
- ❌ `"임의 채움 흔적이 없는가"` (자체 답변 자체가 "임의 채움" 으로 보임)
|
|
34
|
-
- 대응: 케이스 재설계 또는 `input` 본문에 룰 강조 명시 (예: "모호 발견 시
|
|
32
|
+
- **사용자 응답 발생 자체 의존 rubric 금지**: 대상 스킬이 "사용자 질문"·"OPEN 처리/대기"·"임의 채움 금지" 룰 보유해도, 룰 발현 자체는 Eval 검증 불가. 자동답변 환경은 사용자 답변 즉시 생성·진행 → "사용자 질문/대기" 흐름 본질적으로 미발생.
|
|
33
|
+
- ❌ `"사용자에게 질문하거나 OPEN 처리하는 흐름이 등장하는가"` (자체 답변으로 채운 뒤 진행 = 위반 아니라 환경 정상 동작).
|
|
34
|
+
- ❌ `"임의 채움 흔적이 없는가"` (자체 답변 자체가 "임의 채움" 으로 보임).
|
|
35
|
+
- 대응: 케이스 재설계 또는 `input` 본문에 룰 강조 명시 (예: "모호 발견 시 보류 마커만 산출물에 박고 종료").
|
|
35
36
|
- fixture = 자체 답변 미차단되게 구성. 외부 시크릿·실시간 API 없이 진행 가능한 초기 상태로.
|
|
36
37
|
|
|
37
38
|
### 근거 제약
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
Eval 입력/rubric 의 근거 = **§ 1 에서 합의된 의도뿐**. 이전 버전 동작·대화 메모리의 옛 컨텍스트, **타 스킬의 `evals/golden.jsonl` rubric** 인용 금지.
|
|
40
41
|
|
|
41
|
-
-
|
|
42
|
-
- "이전 버전과 다르게 X 하는가" negative rubric 금지. 현재
|
|
42
|
+
- 합의된 의도에 없는 동작 → 입력·rubric 둘 다 등장 X.
|
|
43
|
+
- "이전 버전과 다르게 X 하는가" negative rubric 금지. 현재 의도상 X 요구 → `"X 하는가"` 로 직접 검증.
|
|
44
|
+
- **타 스킬 rubric 답습 금지**: 비슷한 도메인 스킬이라도 rubric 은 본 스킬 § 1 에서 합의된 의도에서 직접 도출. 타 스킬 rubric 을 참고용으로 열어보는 것도 X (복제 유혹 차단).
|
|
43
45
|
|
|
44
|
-
###
|
|
46
|
+
### 골든 케이스
|
|
45
47
|
|
|
46
48
|
`evals/golden.jsonl`, 한 줄 한 케이스:
|
|
47
49
|
|
|
48
50
|
```json
|
|
49
|
-
{"id": "case-001", "input": "/<skill-name> ...", "rubric": ["
|
|
51
|
+
{"id": "case-001", "input": "/<skill-name> ...", "rubric": ["rubric 항목 1", "rubric 항목 2"], "fixture": "<fixture-dir-name>"}
|
|
50
52
|
```
|
|
51
53
|
|
|
52
|
-
- `id`: 케이스
|
|
53
|
-
- `input`: 평가 대상 스킬에 전달할 사용자
|
|
54
|
-
- `rubric`: PASS/FAIL 판정
|
|
55
|
-
- `fixture`: 케이스 시작 시점 샌드박스 초기 상태 디렉토리
|
|
54
|
+
- `id`: 케이스 식별자.
|
|
55
|
+
- `input`: 평가 대상 스킬에 전달할 사용자 입력. § 1 시나리오 기반으로 LLM 이 발화 후보 제시 → 사용자 선택.
|
|
56
|
+
- `rubric`: PASS/FAIL 판정 항목 목록.
|
|
57
|
+
- `fixture`: 케이스 시작 시점 샌드박스 초기 상태 디렉토리 이름.
|
|
56
58
|
|
|
57
|
-
**케이스 크기**: 한 케이스 작업량이 단일 실행 컨텍스트 소진 정도로 크면 X.
|
|
59
|
+
**케이스 크기**: 한 케이스 작업량이 단일 실행 컨텍스트 소진 정도로 크면 X. Eval = 흐름·산출물 형식 검증 목적 → 풀 구현·대량 분석 요구 input 회피, 최소 시연 수준으로 좁힘. 본질이 큰 풀구현 스킬은 input 의 평가 환경 단서로 rubric 검증에 불필요한 워크플로 단계를 명시 스킵.
|
|
58
60
|
|
|
59
61
|
### Rubric 작성
|
|
60
62
|
|
|
61
|
-
각 항목 = **PASS/FAIL 판정 가능한 명확한
|
|
63
|
+
각 항목 = **PASS/FAIL 판정 가능한 명확한 검증 항목**. 추상 표현 → judge 판단 흔들림 → 회피.
|
|
62
64
|
|
|
63
65
|
**모호 부사·형용사 회피** ("잘"·"적절히"·"합리적으로"·"명확히" → 기준이 사람마다 다름):
|
|
64
66
|
|
|
65
|
-
- ❌ `"한국어 지원이 잘 되었는가?"` ("잘" 모호)
|
|
66
|
-
- ✅ `"본문에 한국어 응답 강제 지시가 명시적 문장으로 들어갔는가?"
|
|
67
|
+
- ❌ `"한국어 지원이 잘 되었는가?"` ("잘" 모호).
|
|
68
|
+
- ✅ `"본문에 한국어 응답 강제 지시가 명시적 문장으로 들어갔는가?"`.
|
|
67
69
|
|
|
68
70
|
**형식 검증 선호** (의미보다 형식·존재 여부 → judge 흔들림 ↓):
|
|
69
71
|
|
|
70
|
-
- ❌ `"description 이 트리거 조건을 명확히 표현하는가?"
|
|
71
|
-
- ✅ `"description 끝에 'Use when ~' 형식 문장이 포함되었는가?"
|
|
72
|
+
- ❌ `"description 이 트리거 조건을 명확히 표현하는가?"`.
|
|
73
|
+
- ✅ `"description 끝에 'Use when ~' 형식 문장이 포함되었는가?"`.
|
|
72
74
|
|
|
73
75
|
**관찰 가능 산출물에 묶기** (파일 존재·특정 키 포함·특정 디렉토리 구조 등 tree/events 에서 직접 확인 가능한 사실):
|
|
74
76
|
|
|
75
|
-
- ✅ `"기존 .claude/skills/review/SKILL.md 파일이 손실되지 않고 보존되었는가?"
|
|
76
|
-
- ✅ `"SKILL.md frontmatter 에 name·description 키 모두 존재하는가?"
|
|
77
|
+
- ✅ `"기존 .claude/skills/review/SKILL.md 파일이 손실되지 않고 보존되었는가?"`.
|
|
78
|
+
- ✅ `"SKILL.md frontmatter 에 name·description 키 모두 존재하는가?"`.
|
|
77
79
|
|
|
78
80
|
**명세 어휘 매칭 금지**: 명세 특정 단어를 rubric 에 그대로 박아 정확 매칭 요구 X. LLM 응답은 동의어·다른 표현으로 동일 본질 전달 → 어휘 정확 매칭 = 본질-무관 FAIL 양산. rubric 은 본질(형식·구조·존재 여부)만 검증.
|
|
79
81
|
|
|
80
|
-
- ❌ `"분해 표 첫 컬럼이 '항목' 인가"` (LLM 이 'ID'·'식별자' 로 출력해도 본질 동일)
|
|
81
|
-
- ✅ `"분해 표가 마크다운 표 형식으로 출력되고 컬럼 6개 모두 존재하는가"
|
|
82
|
+
- ❌ `"분해 표 첫 컬럼이 '항목' 인가"` (LLM 이 'ID'·'식별자' 로 출력해도 본질 동일).
|
|
83
|
+
- ✅ `"분해 표가 마크다운 표 형식으로 출력되고 컬럼 6개 모두 존재하는가"`.
|
|
82
84
|
|
|
83
85
|
**도구명 매칭 금지**: "events 에 특정 도구(Glob/Grep/Read 등) 호출이 있는가" 는 그 도구 사용 자체가 본질일 때만. 본질이 "탐색·조사·읽기" 등 행위면 동등 효과의 다른 도구(Bash 의 ls/find/dir/cat 등) 도 PASS.
|
|
84
86
|
|
|
85
|
-
- ❌ `"events 에 Glob 또는 Grep 호출이 1회 이상 있는가"` (Bash ls/find 로 동등 효과인데 FAIL)
|
|
86
|
-
- ✅ `"events 에 코드베이스 탐색 흔적(Glob·Grep 호출 또는 Bash 의 ls/find/dir 등 동등 명령) 이 1회 이상 있는가"
|
|
87
|
+
- ❌ `"events 에 Glob 또는 Grep 호출이 1회 이상 있는가"` (Bash ls/find 로 동등 효과인데 FAIL).
|
|
88
|
+
- ✅ `"events 에 코드베이스 탐색 흔적(Glob·Grep 호출 또는 Bash 의 ls/find/dir 등 동등 명령) 이 1회 이상 있는가"`.
|
|
87
89
|
|
|
88
90
|
### Fixtures
|
|
89
91
|
|
|
90
92
|
`evals/fixtures/<name>/` = 케이스 시작 시점 샌드박스 초기 상태. 케이스 실행 시 통째로 샌드박스 복사.
|
|
91
93
|
|
|
92
|
-
- **빈 워크스페이스**: 디렉토리만 (`.gitkeep` 등 자리 표시)
|
|
93
|
-
- **기존 스킬 수정 케이스**: 그 스킬의 SKILL.md + 관련 파일 미리
|
|
94
|
+
- **빈 워크스페이스**: 디렉토리만 (`.gitkeep` 등 자리 표시).
|
|
95
|
+
- **기존 스킬 수정 케이스**: 그 스킬의 SKILL.md + 관련 파일 미리 배치.
|
|
94
96
|
|
|
95
97
|
예: `with-existing-review/.claude/skills/review/SKILL.md` — 케이스 시작 시 review 스킬 기존 존재 상태.
|
|
96
98
|
|
|
@@ -98,11 +100,11 @@ eval 입력/rubric 의 근거 = **검증 대상 SKILL.md (수정 시: 수정 후
|
|
|
98
100
|
|
|
99
101
|
골든 셋이 단순 PASS 외 다음 분기 커버 시 회귀 감지 강화:
|
|
100
102
|
|
|
101
|
-
- 신규 작성 / 기존 수정
|
|
102
|
-
- 워크플로 주요 분기점 (예: 스크립트 필요/불필요, 참조 파일 분리 필요/불필요)
|
|
103
|
-
- 과거 실패 패턴 — FAIL 케이스 reason 분석 후 재발 방지용
|
|
103
|
+
- 신규 작성 / 기존 수정 각각.
|
|
104
|
+
- 워크플로 주요 분기점 (예: 스크립트 필요/불필요, 참조 파일 분리 필요/불필요).
|
|
105
|
+
- 과거 실패 패턴 — FAIL 케이스 reason 분석 후 재발 방지용 추가.
|
|
104
106
|
|
|
105
|
-
## 3
|
|
107
|
+
## 3단계. 스킬 작성
|
|
106
108
|
|
|
107
109
|
간결·명확한 SKILL.md + 별도 참고 파일 (필요 시) + 유틸리티 스크립트 (필요 시).
|
|
108
110
|
|
|
@@ -125,66 +127,76 @@ eval 입력/rubric 의 근거 = **검증 대상 SKILL.md (수정 시: 수정 후
|
|
|
125
127
|
|
|
126
128
|
### SKILL.md 템플릿
|
|
127
129
|
|
|
130
|
+
frontmatter:
|
|
131
|
+
|
|
128
132
|
```markdown
|
|
129
133
|
---
|
|
130
134
|
name: skill-name
|
|
131
135
|
description: 기능 설명. Use when [활용상황]
|
|
132
136
|
---
|
|
133
|
-
|
|
134
|
-
# 스킬 이름
|
|
135
|
-
|
|
136
|
-
## 워크플로
|
|
137
|
-
|
|
138
|
-
[단계별 절차]
|
|
139
137
|
```
|
|
140
138
|
|
|
139
|
+
본문은 다음 "본문 작성 원칙" 따름.
|
|
140
|
+
|
|
141
141
|
### description
|
|
142
142
|
|
|
143
143
|
에이전트의 라우팅 진입점. 에이전트가 description 으로 사용자 요청에 맞는 스킬 호출.
|
|
144
144
|
|
|
145
145
|
**전달 정보**:
|
|
146
146
|
|
|
147
|
-
- 이 스킬의
|
|
148
|
-
- 트리거 맥락 (언제·왜)
|
|
149
|
-
- 타 스킬과 구분
|
|
147
|
+
- 이 스킬의 목적.
|
|
148
|
+
- 트리거 맥락 (언제·왜).
|
|
149
|
+
- 타 스킬과 구분 단서.
|
|
150
150
|
|
|
151
151
|
**형식**:
|
|
152
152
|
|
|
153
|
-
- 최대 200자, 한
|
|
154
|
-
- 3
|
|
153
|
+
- 최대 200자, 한 줄.
|
|
154
|
+
- 3인칭.
|
|
155
155
|
- 첫 문장: 입력 → 산출물(또는 효과). 내부 처리 단계 금지.
|
|
156
|
-
- 두 번째 문장: "Use when [활용상황]"
|
|
156
|
+
- 두 번째 문장: "Use when [활용상황]".
|
|
157
157
|
|
|
158
158
|
**금지**: 내부 단계·알고리즘·사용 도구·로직 흐름 → SKILL.md 본문 워크플로의 몫. description 은 외부 관찰 경계(입력·산출물·트리거)만 노출.
|
|
159
159
|
|
|
160
|
+
### 본문 작성 원칙
|
|
161
|
+
|
|
162
|
+
YAGNI — § 2 케이스가 통과되는 최소 본문만. 케이스가 검증하지 않는 절·예시·옵션 추가 X.
|
|
163
|
+
|
|
164
|
+
- **워크플로 단위 어휘 통일**: "사이클" (반복형) 또는 "단계" (순차형) 중 선택해 본문 전체 일관.
|
|
165
|
+
- **본문 어휘 일관**: 같은 개념은 같은 단어로. 동의어 혼용 X.
|
|
166
|
+
- **자가검증 게이트** (해당 시): 출력 직전 자문 항목을 본문에 명시 — 스킬 고유 형식·근거·단순화 차단 점검.
|
|
167
|
+
- **모범 예시 인용** (해당 시): 형식 따라야 할 산출물 있으면 `references/example-X.md` 보관 + 본문에서 한 줄 참조.
|
|
168
|
+
- **도구명 박기 금지**: 본문에 Glob·Grep 등 도구명 직접 박지 X. "코드베이스 탐색"·"파일 읽기" 등 동등 행위 표현 (§ 2 rubric "도구명 매칭 금지" 와 일관).
|
|
169
|
+
|
|
160
170
|
### 스크립트 추가 기준
|
|
161
171
|
|
|
162
172
|
다음 시 유틸리티 스크립트 추가:
|
|
163
173
|
|
|
164
|
-
- 동작이 결정론(deterministic)적 (validation·formatting)
|
|
165
|
-
- 코드 생성이 매번
|
|
166
|
-
- 에러 명시 처리
|
|
174
|
+
- 동작이 결정론(deterministic)적 (validation·formatting).
|
|
175
|
+
- 코드 생성이 매번 동일.
|
|
176
|
+
- 에러 명시 처리 필요.
|
|
167
177
|
|
|
168
178
|
스크립트 → 토큰 절약 + 안정성 개선.
|
|
169
179
|
|
|
170
180
|
**작성 원칙**:
|
|
171
181
|
|
|
172
|
-
- Python(`.py`) 으로
|
|
182
|
+
- Python(`.py`) 으로 작성.
|
|
173
183
|
- 내부 에러 처리 X. 에러 즉시 throw.
|
|
174
184
|
|
|
175
185
|
### 파일 분리 기준
|
|
176
186
|
|
|
177
187
|
다음 시 별도 파일 분리:
|
|
178
188
|
|
|
179
|
-
- SKILL.md 분량이 에이전트가 한 자리에서 워크플로 흐름 인식 어려울 만큼
|
|
180
|
-
- 명백히 다른
|
|
181
|
-
- 거의 안 쓰는 고급
|
|
189
|
+
- SKILL.md 분량이 에이전트가 한 자리에서 워크플로 흐름 인식 어려울 만큼 누적.
|
|
190
|
+
- 명백히 다른 도메인.
|
|
191
|
+
- 거의 안 쓰는 고급 기능.
|
|
192
|
+
|
|
193
|
+
**참조 깊이 한 단계**: SKILL.md → `references/X.md` 까지만. references 파일 안에서 또 다른 파일 참조 X.
|
|
182
194
|
|
|
183
|
-
## 4
|
|
195
|
+
## 4단계. Eval 실행
|
|
184
196
|
|
|
185
197
|
### 명령
|
|
186
198
|
|
|
187
|
-
`python .claude/skills/sd-skill/scripts/run_eval.py
|
|
199
|
+
`python .claude/skills/sd-skill/scripts/run_eval.py <대상-스킬-이름>`.
|
|
188
200
|
|
|
189
201
|
대상 스킬에 `evals/golden.jsonl` + `evals/fixtures/<fixture-name>/` 필요.
|
|
190
202
|
|
|
@@ -192,46 +204,42 @@ description: 기능 설명. Use when [활용상황]
|
|
|
192
204
|
|
|
193
205
|
케이스마다:
|
|
194
206
|
|
|
195
|
-
1. 격리 작업 공간 준비 (`.claude/` 복사 + fixture 오버레이)
|
|
196
|
-
2. 대상 스킬 실행. `EVAL_MODE_PREFIX` 가 사용자
|
|
197
|
-
3. 에이전트 동작 기록 + 종료 시점 파일 트리
|
|
198
|
-
4. 별도 평가 에이전트가 rubric 항목별 PASS/FAIL 채점 → 모두 PASS 시 케이스 PASS
|
|
207
|
+
1. 격리 작업 공간 준비 (`.claude/` 복사 + fixture 오버레이).
|
|
208
|
+
2. 대상 스킬 실행. `EVAL_MODE_PREFIX` 가 사용자 입력 앞에 붙어, 대상 스킬이 입력 필요 시점마다 스스로 답변하며 끝까지 진행하도록 지시. 자체 답변은 사용자 명시 발언과 동등 취급 (다이얼로그 기반 스킬도 평가 가능, 단 자체 답변이라 흐름·형식 검증용).
|
|
209
|
+
3. 에이전트 동작 기록 + 종료 시점 파일 트리 수집.
|
|
210
|
+
4. 별도 평가 에이전트가 rubric 항목별 PASS/FAIL 채점 → 모두 PASS 시 케이스 PASS.
|
|
199
211
|
|
|
200
212
|
### 출력 구조
|
|
201
213
|
|
|
202
|
-
stdout: summary JSON
|
|
214
|
+
stdout: summary JSON.
|
|
203
215
|
|
|
204
|
-
- `run_id`, `results_dir
|
|
205
|
-
- `summary`: total / pass / fail / error
|
|
206
|
-
- `cases[]`: 케이스별 verdict + 결과 dir
|
|
216
|
+
- `run_id`, `results_dir`.
|
|
217
|
+
- `summary`: total / pass / fail / error.
|
|
218
|
+
- `cases[]`: 케이스별 verdict + 결과 dir 경로.
|
|
207
219
|
|
|
208
220
|
각 케이스 결과 파일 (`results_dir/cases/<id>/`):
|
|
209
221
|
|
|
210
|
-
- `judge_output.json` — rubric 항목별 PASS/FAIL + reason
|
|
211
|
-
- `events.json` — 에이전트 이벤트
|
|
212
|
-
- `tree.json` — 샌드박스 종료 시 파일
|
|
222
|
+
- `judge_output.json` — rubric 항목별 PASS/FAIL + reason.
|
|
223
|
+
- `events.json` — 에이전트 이벤트 시퀀스.
|
|
224
|
+
- `tree.json` — 샌드박스 종료 시 파일 트리.
|
|
213
225
|
|
|
214
|
-
## 5
|
|
226
|
+
## 5단계. 개선 및 리뷰
|
|
215
227
|
|
|
216
|
-
|
|
217
|
-
- FAIL reason 분석:
|
|
218
|
-
- 결과 파일 (`judge_output.json`·`events.json`·`tree.json`) read
|
|
219
|
-
- 스킬/Eval 어느 쪽 문제인지 판단
|
|
220
|
-
- 모호 시 사용자 질문
|
|
221
|
-
- 수정 → 같은 골든 셋 전체 § 4 재실행
|
|
222
|
-
- 새 실패 패턴은 골든 셋에 케이스 추가
|
|
223
|
-
|
|
224
|
-
## 6. 산출물 가독성 점검
|
|
228
|
+
### FAIL 처리
|
|
225
229
|
|
|
226
|
-
|
|
230
|
+
- 보고: 전체 PASS/FAIL 카운트 + FAIL 케이스 목록.
|
|
231
|
+
- FAIL reason 분석:
|
|
232
|
+
- 결과 파일 (`judge_output.json`·`events.json`·`tree.json`) 읽기.
|
|
233
|
+
- 스킬/Eval 어느 쪽 문제인지 판단:
|
|
234
|
+
- **스킬 측**: 본문 명세대로 동작해도 FAIL → 명세 빈/모호 → 본문 보강.
|
|
235
|
+
- **Eval 측**: 본문 명세 만족하는데 rubric 이 본질 외(어휘 매칭·도구명 매칭 등) 으로 FAIL → rubric 수정 (§ 2 rubric 안티패턴 인용).
|
|
236
|
+
- **모호 시**: 사용자 질문.
|
|
237
|
+
- 수정 → 같은 골든 셋 전체 § 4 재실행.
|
|
238
|
+
- **수렴 한도**: 같은 케이스 3회 연속 FAIL 시 진행 중단 + 사용자 보고 (무한 루프 방지).
|
|
239
|
+
- 새 실패 패턴은 골든 셋에 케이스 추가.
|
|
227
240
|
|
|
228
|
-
### 리뷰
|
|
241
|
+
### 리뷰
|
|
229
242
|
|
|
230
|
-
-
|
|
231
|
-
- [ ] description 에 내부 단계·알고리즘·도구 미포함?
|
|
232
|
-
- [ ] SKILL.md 분량이 에이전트가 한 자리에서 워크플로 인식 가능?
|
|
233
|
-
- [ ] 용어 일관?
|
|
234
|
-
- [ ] 구체 예시 포함?
|
|
235
|
-
- [ ] 참조 깊이 한 단계? (SKILL.md → references/X.md 까지만. references 파일 안에서 또 다른 파일 참조 X)
|
|
243
|
+
PASS 후 sd-review 호출. 적용 룰: sd-base-rules + § 3 본문 작성 원칙·파일 분리 기준.
|
|
236
244
|
|
|
237
|
-
|
|
245
|
+
수정 시 § 4 재실행.
|
|
File without changes
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{"id": "case-001", "input": "/sd-skill 할일 텍스트를 마크다운 표로 변환하는 스킬 만들자. § 4·§ 5 스킵.", "rubric": ["`.claude/skills/` 하위에 신규 스킬 디렉토리가 생성되고 그 안에 `SKILL.md` 파일이 존재하는가?", "신규 SKILL.md frontmatter 에 `name` 키와 `description` 키가 모두 존재하는가?", "신규 SKILL.md frontmatter 의 `description` 에 'Use when' 표현이 포함되었는가?", "신규 스킬 디렉토리 하위에 `evals/golden.jsonl` 파일이 존재하고 1줄 이상의 JSON 케이스가 포함되었는가?", "신규 스킬 디렉토리 하위에 `evals/fixtures/` 디렉토리가 존재하고 그 하위에 1개 이상의 fixture 디렉토리가 존재하는가?"], "fixture": "new-skill"}
|
|
2
|
+
{"id": "case-002", "input": "/sd-skill 기존 todo-format 스킬에 우선순위 정렬 기능 추가하자. § 4·§ 5 스킵.", "rubric": ["기존 `.claude/skills/todo-format/SKILL.md` 파일이 손실 없이 존재하는가?", "SKILL.md frontmatter 에 `name` 키와 `description` 키가 모두 존재하는가?", "SKILL.md frontmatter 의 `name` 값이 `todo-format` 으로 유지되었는가?", "SKILL.md frontmatter 의 `description` 에 'Use when' 표현이 포함되었는가?"], "fixture": "existing-skill"}
|