maskweaver 0.8.6 → 0.8.8
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/README.ko.md +217 -217
- package/README.md +235 -235
- package/assets/agents/squad-operator.md +56 -56
- package/assets/commands/weave-approve-plan.md +57 -57
- package/assets/commands/weave-craft.md +43 -43
- package/assets/commands/weave-design.md +64 -64
- package/assets/commands/weave-flow.md +48 -48
- package/assets/commands/weave-help.md +101 -101
- package/assets/commands/weave-init.md +23 -23
- package/assets/commands/weave-plan.md +15 -15
- package/assets/commands/weave-prepare.md +69 -69
- package/assets/commands/weave-refine-plan.md +59 -59
- package/assets/commands/weave-repair.md +70 -70
- package/assets/commands/weave-research.md +51 -51
- package/assets/commands/weave-spec.md +227 -227
- package/assets/commands/weave-status.md +2 -2
- package/assets/commands/weave-verify.md +44 -44
- package/assets/commands/weave-worktree.md +69 -69
- package/dist/cli/doctor.d.ts +16 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +355 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/install.js +9 -0
- package/dist/cli/install.js.map +1 -1
- package/dist/plugin/config/index.d.ts +3 -10
- package/dist/plugin/config/index.d.ts.map +1 -1
- package/dist/plugin/config/index.js +12 -15
- package/dist/plugin/config/index.js.map +1 -1
- package/dist/plugin/index.d.ts +1 -27
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +113 -240
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/tools/slashcommand.js +59 -59
- package/dist/plugin/tools/squad.js +3 -3
- package/dist/plugin/tools/weave.js +111 -111
- package/dist/plugin/types.d.ts +10 -8
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/types.js +2 -0
- package/dist/plugin/types.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +4 -2
- package/postinstall.mjs +97 -0
|
@@ -1,227 +1,227 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 요구사항 정제 및 검증 기준 추출
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /weave-spec - 요구사항 정제
|
|
6
|
-
|
|
7
|
-
## 개요
|
|
8
|
-
|
|
9
|
-
기획 문서나 자연어 요구사항을 **구조화된 명세**로 정제합니다.
|
|
10
|
-
각 요구사항에서 **검증 기준(Acceptance Criteria)**을 추출하여, 이후 구현 완료의 성공 판정 기준으로 사용합니다.
|
|
11
|
-
|
|
12
|
-
**입력 방식**: `/weave-design`과 동일
|
|
13
|
-
- 정확한 경로: `docs/`, `wiki/spec.md`
|
|
14
|
-
- 자연어 힌트: `기획 폴더`, `README`
|
|
15
|
-
|
|
16
|
-
> 이 커맨드는 **선택 사항**입니다. `/weave-design`을 바로 실행해도 됩니다.
|
|
17
|
-
> 요구사항이 복잡하거나, 구현 완료 기준을 명확히 하고 싶을 때 사용합니다.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 실행
|
|
22
|
-
|
|
23
|
-
```txt
|
|
24
|
-
weave command=spec docsPath="$ARGUMENTS"
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## 사전 조건
|
|
30
|
-
|
|
31
|
-
`/weave-init`이 실행되어 있어야 합니다.
|
|
32
|
-
실행되지 않았다면 자동으로 init을 먼저 수행합니다.
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## 실행 흐름
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
0. INIT CHECK
|
|
40
|
-
↓
|
|
41
|
-
1. RESOLVE (입력 해석 → 실제 경로 찾기)
|
|
42
|
-
↓
|
|
43
|
-
2. ANALYZE (문서에서 요구사항 추출)
|
|
44
|
-
↓
|
|
45
|
-
3. STRUCTURE (요구사항 분류 + 검증 기준 도출)
|
|
46
|
-
↓
|
|
47
|
-
4. REVIEW (유저에게 제시 → 피드백)
|
|
48
|
-
↓
|
|
49
|
-
5. SAVE (스펙 파일 생성)
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## 단계별 상세
|
|
55
|
-
|
|
56
|
-
### Step 0: INIT CHECK
|
|
57
|
-
|
|
58
|
-
`.opencode/weave/state.yaml` 존재 확인. 없으면 `/weave-init` 자동 실행.
|
|
59
|
-
|
|
60
|
-
### Step 1: RESOLVE
|
|
61
|
-
|
|
62
|
-
`/weave-design`과 동일한 경로 해석 로직. (정확한 경로, 디렉토리 힌트, 시간 힌트, 내용 힌트 등)
|
|
63
|
-
|
|
64
|
-
### Step 2: ANALYZE
|
|
65
|
-
|
|
66
|
-
**수행 작업**:
|
|
67
|
-
1. 해석된 경로의 모든 문서 읽기
|
|
68
|
-
2. 기능 요구사항과 비기능 요구사항 분리
|
|
69
|
-
3. 암묵적 요구사항 식별 (명시되지 않았지만 당연히 필요한 것)
|
|
70
|
-
4. 요구사항 간 의존관계 파악
|
|
71
|
-
5. 과거 유사 프로젝트 검색 (Memory 시스템)
|
|
72
|
-
|
|
73
|
-
### Step 3: STRUCTURE
|
|
74
|
-
|
|
75
|
-
각 요구사항을 정제하고, **검증 기준**을 도출합니다.
|
|
76
|
-
|
|
77
|
-
#### 요구사항 분류
|
|
78
|
-
|
|
79
|
-
| 분류 | 설명 | 예시 |
|
|
80
|
-
|------|------|------|
|
|
81
|
-
| `functional` | 시스템이 해야 하는 동작 | 사용자가 로그인할 수 있다 |
|
|
82
|
-
| `constraint` | 기술적/비즈니스 제약 | 데이터를 외부 서버로 전송하지 않는다 |
|
|
83
|
-
| `performance` | 성능 요구 | 목록 로딩 2초 이내 |
|
|
84
|
-
| `ux` | 사용성/접근성 요구 | 모바일에서도 사용 가능해야 한다 |
|
|
85
|
-
|
|
86
|
-
#### 우선순위 (MoSCoW)
|
|
87
|
-
|
|
88
|
-
| 값 | 의미 |
|
|
89
|
-
|----|------|
|
|
90
|
-
| `must` | 없으면 출시 불가 |
|
|
91
|
-
| `should` | 강력히 권장, 가능하면 포함 |
|
|
92
|
-
| `could` | 있으면 좋지만 없어도 됨 |
|
|
93
|
-
| `wont` | 이번 범위에서 명시적으로 제외 |
|
|
94
|
-
|
|
95
|
-
#### 검증 기준 유형
|
|
96
|
-
|
|
97
|
-
| type | 의미 | 실행 방법 |
|
|
98
|
-
|------|------|----------|
|
|
99
|
-
| `e2e` | 브라우저/UI 시나리오 테스트 | Playwright, Cypress 등 |
|
|
100
|
-
| `integration` | API/서비스 간 통합 테스트 | supertest, httpx, curl 등 |
|
|
101
|
-
| `script` | CLI/스크립트 실행 결과 확인 | shell script, node script |
|
|
102
|
-
| `performance` | 성능 기준 충족 | benchmark, lighthouse 등 |
|
|
103
|
-
| `manual` | 자동화 불가, 사용자 확인 | 체크리스트로 유저 핸드오프에 포함 |
|
|
104
|
-
|
|
105
|
-
#### 검증 기준 작성 원칙
|
|
106
|
-
|
|
107
|
-
- **모호하지 않을 것**: "잘 동작한다" ✗ → "저장 후 목록에서 확인 가능" ✓
|
|
108
|
-
- **실행 가능할 것**: 구체적인 입력과 기대 결과를 명시
|
|
109
|
-
- **독립적일 것**: 하나의 기준이 하나의 시나리오만 검증
|
|
110
|
-
- **유형은 정직하게**: E2E가 불가능한 것은 `manual`로. 억지로 자동화하지 않음
|
|
111
|
-
|
|
112
|
-
### Step 4: REVIEW
|
|
113
|
-
|
|
114
|
-
구조화된 명세를 유저에게 제시합니다:
|
|
115
|
-
|
|
116
|
-
```markdown
|
|
117
|
-
## 요구사항 명세
|
|
118
|
-
|
|
119
|
-
**스펙 이름**: `emotion-diary` (변경 가능)
|
|
120
|
-
|
|
121
|
-
### 기능 요구사항 (Functional)
|
|
122
|
-
|
|
123
|
-
**R1** [must]: 사용자가 감정을 선택하고 일기를 저장할 수 있다
|
|
124
|
-
- [e2e] 감정 선택 → 텍스트 입력 → 저장 → 목록에서 확인
|
|
125
|
-
- [e2e] 빈 텍스트로 저장 시도 → 에러 메시지 표시
|
|
126
|
-
|
|
127
|
-
**R2** [must]: 저장된 일기 목록을 조회할 수 있다
|
|
128
|
-
- [e2e] 저장된 일기 3개가 목록에 최신순으로 표시
|
|
129
|
-
|
|
130
|
-
### 비기능 요구사항
|
|
131
|
-
|
|
132
|
-
**R3** [should]: 일기 목록이 2초 이내에 로딩된다
|
|
133
|
-
- [performance] 100개 일기 기준 로딩 시간 < 2000ms
|
|
134
|
-
|
|
135
|
-
**R4** [could]: 오프라인에서도 저장된 일기를 조회할 수 있다
|
|
136
|
-
- [manual] 네트워크 차단 후 기존 일기 목록 접근 가능
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
빠진 요구사항이 있거나, 검증 기준을 수정하고 싶으면 말씀해주세요.
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Step 5: SAVE
|
|
143
|
-
|
|
144
|
-
유저 승인 시 스펙 파일을 생성합니다.
|
|
145
|
-
|
|
146
|
-
**파일 경로**: `.opencode/weave/specs/{spec-name}.yaml`
|
|
147
|
-
|
|
148
|
-
```yaml
|
|
149
|
-
spec_name: "emotion-diary"
|
|
150
|
-
project_name: "감정 일기 앱"
|
|
151
|
-
created_at: "2026-02-06"
|
|
152
|
-
source_docs:
|
|
153
|
-
- "docs/requirements.md"
|
|
154
|
-
|
|
155
|
-
requirements:
|
|
156
|
-
- id: R1
|
|
157
|
-
description: "사용자가 감정을 선택하고 일기를 저장할 수 있다"
|
|
158
|
-
category: functional
|
|
159
|
-
priority: must
|
|
160
|
-
acceptance:
|
|
161
|
-
- id: AC-R1-1
|
|
162
|
-
scenario: "감정 선택 → 텍스트 입력 → 저장 → 목록에서 확인"
|
|
163
|
-
type: e2e
|
|
164
|
-
- id: AC-R1-2
|
|
165
|
-
scenario: "빈 텍스트로 저장 시도 → 에러 메시지 표시"
|
|
166
|
-
type: e2e
|
|
167
|
-
|
|
168
|
-
- id: R2
|
|
169
|
-
description: "저장된 일기 목록을 조회할 수 있다"
|
|
170
|
-
category: functional
|
|
171
|
-
priority: must
|
|
172
|
-
acceptance:
|
|
173
|
-
- id: AC-R2-1
|
|
174
|
-
scenario: "저장된 일기 3개가 목록에 최신순으로 표시"
|
|
175
|
-
type: e2e
|
|
176
|
-
|
|
177
|
-
- id: R3
|
|
178
|
-
description: "일기 목록이 2초 이내에 로딩된다"
|
|
179
|
-
category: performance
|
|
180
|
-
priority: should
|
|
181
|
-
acceptance:
|
|
182
|
-
- id: AC-R3-1
|
|
183
|
-
scenario: "100개 일기 기준 로딩 시간 < 2000ms"
|
|
184
|
-
type: performance
|
|
185
|
-
|
|
186
|
-
- id: R4
|
|
187
|
-
description: "오프라인에서도 저장된 일기를 조회할 수 있다"
|
|
188
|
-
category: constraint
|
|
189
|
-
priority: could
|
|
190
|
-
acceptance:
|
|
191
|
-
- id: AC-R4-1
|
|
192
|
-
scenario: "네트워크 차단 후 기존 일기 목록 접근 가능"
|
|
193
|
-
type: manual
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
**완료 메시지**:
|
|
197
|
-
```markdown
|
|
198
|
-
## 요구사항 명세가 생성되었습니다
|
|
199
|
-
|
|
200
|
-
📁 파일: `.opencode/weave/specs/emotion-diary.yaml`
|
|
201
|
-
📊 요구사항: 4개 (functional 2, performance 1, constraint 1)
|
|
202
|
-
🎯 검증 기준: 5개 (e2e 3, performance 1, manual 1)
|
|
203
|
-
|
|
204
|
-
### 다음 단계
|
|
205
|
-
이 명세를 기반으로 실행 계획을 세우려면:
|
|
206
|
-
`/weave-design emotion-diary`
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## 완료 후 검증 (필수)
|
|
212
|
-
|
|
213
|
-
스펙 파일 생성 후, 반드시 다음을 확인합니다:
|
|
214
|
-
|
|
215
|
-
1. **스펙 파일 존재 확인**: `.opencode/weave/specs/{spec-name}.yaml` 존재 검증
|
|
216
|
-
2. **YAML 파싱 가능 확인**: 파일 내용이 유효한 YAML인지 검증
|
|
217
|
-
3. **검증 실패 시**: 유저에게 오류를 알리고 재생성 시도
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## 핵심 원칙
|
|
222
|
-
|
|
223
|
-
1. **명세만 수립, 계획/구현 금지**: Phase 분할이나 코드 구현은 하지 않음
|
|
224
|
-
2. **검증 기준은 구체적으로**: 입력 → 기대결과 형태로 작성
|
|
225
|
-
3. **유형은 정직하게**: 자동화 불가능하면 `manual`. 억지로 끼워맞추지 않음
|
|
226
|
-
4. **스펙 이름은 kebab-case**: 이후 `/weave-design`의 플랜 이름으로 사용됨
|
|
227
|
-
5. **wont도 기록**: 명시적으로 제외한 것을 기록해야 나중에 "왜 안 했어?"를 방지
|
|
1
|
+
---
|
|
2
|
+
description: 요구사항 정제 및 검증 기준 추출
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /weave-spec - 요구사항 정제
|
|
6
|
+
|
|
7
|
+
## 개요
|
|
8
|
+
|
|
9
|
+
기획 문서나 자연어 요구사항을 **구조화된 명세**로 정제합니다.
|
|
10
|
+
각 요구사항에서 **검증 기준(Acceptance Criteria)**을 추출하여, 이후 구현 완료의 성공 판정 기준으로 사용합니다.
|
|
11
|
+
|
|
12
|
+
**입력 방식**: `/weave-design`과 동일
|
|
13
|
+
- 정확한 경로: `docs/`, `wiki/spec.md`
|
|
14
|
+
- 자연어 힌트: `기획 폴더`, `README`
|
|
15
|
+
|
|
16
|
+
> 이 커맨드는 **선택 사항**입니다. `/weave-design`을 바로 실행해도 됩니다.
|
|
17
|
+
> 요구사항이 복잡하거나, 구현 완료 기준을 명확히 하고 싶을 때 사용합니다.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 실행
|
|
22
|
+
|
|
23
|
+
```txt
|
|
24
|
+
weave command=spec docsPath="$ARGUMENTS"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 사전 조건
|
|
30
|
+
|
|
31
|
+
`/weave-init`이 실행되어 있어야 합니다.
|
|
32
|
+
실행되지 않았다면 자동으로 init을 먼저 수행합니다.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 실행 흐름
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
0. INIT CHECK
|
|
40
|
+
↓
|
|
41
|
+
1. RESOLVE (입력 해석 → 실제 경로 찾기)
|
|
42
|
+
↓
|
|
43
|
+
2. ANALYZE (문서에서 요구사항 추출)
|
|
44
|
+
↓
|
|
45
|
+
3. STRUCTURE (요구사항 분류 + 검증 기준 도출)
|
|
46
|
+
↓
|
|
47
|
+
4. REVIEW (유저에게 제시 → 피드백)
|
|
48
|
+
↓
|
|
49
|
+
5. SAVE (스펙 파일 생성)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 단계별 상세
|
|
55
|
+
|
|
56
|
+
### Step 0: INIT CHECK
|
|
57
|
+
|
|
58
|
+
`.opencode/weave/state.yaml` 존재 확인. 없으면 `/weave-init` 자동 실행.
|
|
59
|
+
|
|
60
|
+
### Step 1: RESOLVE
|
|
61
|
+
|
|
62
|
+
`/weave-design`과 동일한 경로 해석 로직. (정확한 경로, 디렉토리 힌트, 시간 힌트, 내용 힌트 등)
|
|
63
|
+
|
|
64
|
+
### Step 2: ANALYZE
|
|
65
|
+
|
|
66
|
+
**수행 작업**:
|
|
67
|
+
1. 해석된 경로의 모든 문서 읽기
|
|
68
|
+
2. 기능 요구사항과 비기능 요구사항 분리
|
|
69
|
+
3. 암묵적 요구사항 식별 (명시되지 않았지만 당연히 필요한 것)
|
|
70
|
+
4. 요구사항 간 의존관계 파악
|
|
71
|
+
5. 과거 유사 프로젝트 검색 (Memory 시스템)
|
|
72
|
+
|
|
73
|
+
### Step 3: STRUCTURE
|
|
74
|
+
|
|
75
|
+
각 요구사항을 정제하고, **검증 기준**을 도출합니다.
|
|
76
|
+
|
|
77
|
+
#### 요구사항 분류
|
|
78
|
+
|
|
79
|
+
| 분류 | 설명 | 예시 |
|
|
80
|
+
|------|------|------|
|
|
81
|
+
| `functional` | 시스템이 해야 하는 동작 | 사용자가 로그인할 수 있다 |
|
|
82
|
+
| `constraint` | 기술적/비즈니스 제약 | 데이터를 외부 서버로 전송하지 않는다 |
|
|
83
|
+
| `performance` | 성능 요구 | 목록 로딩 2초 이내 |
|
|
84
|
+
| `ux` | 사용성/접근성 요구 | 모바일에서도 사용 가능해야 한다 |
|
|
85
|
+
|
|
86
|
+
#### 우선순위 (MoSCoW)
|
|
87
|
+
|
|
88
|
+
| 값 | 의미 |
|
|
89
|
+
|----|------|
|
|
90
|
+
| `must` | 없으면 출시 불가 |
|
|
91
|
+
| `should` | 강력히 권장, 가능하면 포함 |
|
|
92
|
+
| `could` | 있으면 좋지만 없어도 됨 |
|
|
93
|
+
| `wont` | 이번 범위에서 명시적으로 제외 |
|
|
94
|
+
|
|
95
|
+
#### 검증 기준 유형
|
|
96
|
+
|
|
97
|
+
| type | 의미 | 실행 방법 |
|
|
98
|
+
|------|------|----------|
|
|
99
|
+
| `e2e` | 브라우저/UI 시나리오 테스트 | Playwright, Cypress 등 |
|
|
100
|
+
| `integration` | API/서비스 간 통합 테스트 | supertest, httpx, curl 등 |
|
|
101
|
+
| `script` | CLI/스크립트 실행 결과 확인 | shell script, node script |
|
|
102
|
+
| `performance` | 성능 기준 충족 | benchmark, lighthouse 등 |
|
|
103
|
+
| `manual` | 자동화 불가, 사용자 확인 | 체크리스트로 유저 핸드오프에 포함 |
|
|
104
|
+
|
|
105
|
+
#### 검증 기준 작성 원칙
|
|
106
|
+
|
|
107
|
+
- **모호하지 않을 것**: "잘 동작한다" ✗ → "저장 후 목록에서 확인 가능" ✓
|
|
108
|
+
- **실행 가능할 것**: 구체적인 입력과 기대 결과를 명시
|
|
109
|
+
- **독립적일 것**: 하나의 기준이 하나의 시나리오만 검증
|
|
110
|
+
- **유형은 정직하게**: E2E가 불가능한 것은 `manual`로. 억지로 자동화하지 않음
|
|
111
|
+
|
|
112
|
+
### Step 4: REVIEW
|
|
113
|
+
|
|
114
|
+
구조화된 명세를 유저에게 제시합니다:
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
## 요구사항 명세
|
|
118
|
+
|
|
119
|
+
**스펙 이름**: `emotion-diary` (변경 가능)
|
|
120
|
+
|
|
121
|
+
### 기능 요구사항 (Functional)
|
|
122
|
+
|
|
123
|
+
**R1** [must]: 사용자가 감정을 선택하고 일기를 저장할 수 있다
|
|
124
|
+
- [e2e] 감정 선택 → 텍스트 입력 → 저장 → 목록에서 확인
|
|
125
|
+
- [e2e] 빈 텍스트로 저장 시도 → 에러 메시지 표시
|
|
126
|
+
|
|
127
|
+
**R2** [must]: 저장된 일기 목록을 조회할 수 있다
|
|
128
|
+
- [e2e] 저장된 일기 3개가 목록에 최신순으로 표시
|
|
129
|
+
|
|
130
|
+
### 비기능 요구사항
|
|
131
|
+
|
|
132
|
+
**R3** [should]: 일기 목록이 2초 이내에 로딩된다
|
|
133
|
+
- [performance] 100개 일기 기준 로딩 시간 < 2000ms
|
|
134
|
+
|
|
135
|
+
**R4** [could]: 오프라인에서도 저장된 일기를 조회할 수 있다
|
|
136
|
+
- [manual] 네트워크 차단 후 기존 일기 목록 접근 가능
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
빠진 요구사항이 있거나, 검증 기준을 수정하고 싶으면 말씀해주세요.
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Step 5: SAVE
|
|
143
|
+
|
|
144
|
+
유저 승인 시 스펙 파일을 생성합니다.
|
|
145
|
+
|
|
146
|
+
**파일 경로**: `.opencode/weave/specs/{spec-name}.yaml`
|
|
147
|
+
|
|
148
|
+
```yaml
|
|
149
|
+
spec_name: "emotion-diary"
|
|
150
|
+
project_name: "감정 일기 앱"
|
|
151
|
+
created_at: "2026-02-06"
|
|
152
|
+
source_docs:
|
|
153
|
+
- "docs/requirements.md"
|
|
154
|
+
|
|
155
|
+
requirements:
|
|
156
|
+
- id: R1
|
|
157
|
+
description: "사용자가 감정을 선택하고 일기를 저장할 수 있다"
|
|
158
|
+
category: functional
|
|
159
|
+
priority: must
|
|
160
|
+
acceptance:
|
|
161
|
+
- id: AC-R1-1
|
|
162
|
+
scenario: "감정 선택 → 텍스트 입력 → 저장 → 목록에서 확인"
|
|
163
|
+
type: e2e
|
|
164
|
+
- id: AC-R1-2
|
|
165
|
+
scenario: "빈 텍스트로 저장 시도 → 에러 메시지 표시"
|
|
166
|
+
type: e2e
|
|
167
|
+
|
|
168
|
+
- id: R2
|
|
169
|
+
description: "저장된 일기 목록을 조회할 수 있다"
|
|
170
|
+
category: functional
|
|
171
|
+
priority: must
|
|
172
|
+
acceptance:
|
|
173
|
+
- id: AC-R2-1
|
|
174
|
+
scenario: "저장된 일기 3개가 목록에 최신순으로 표시"
|
|
175
|
+
type: e2e
|
|
176
|
+
|
|
177
|
+
- id: R3
|
|
178
|
+
description: "일기 목록이 2초 이내에 로딩된다"
|
|
179
|
+
category: performance
|
|
180
|
+
priority: should
|
|
181
|
+
acceptance:
|
|
182
|
+
- id: AC-R3-1
|
|
183
|
+
scenario: "100개 일기 기준 로딩 시간 < 2000ms"
|
|
184
|
+
type: performance
|
|
185
|
+
|
|
186
|
+
- id: R4
|
|
187
|
+
description: "오프라인에서도 저장된 일기를 조회할 수 있다"
|
|
188
|
+
category: constraint
|
|
189
|
+
priority: could
|
|
190
|
+
acceptance:
|
|
191
|
+
- id: AC-R4-1
|
|
192
|
+
scenario: "네트워크 차단 후 기존 일기 목록 접근 가능"
|
|
193
|
+
type: manual
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**완료 메시지**:
|
|
197
|
+
```markdown
|
|
198
|
+
## 요구사항 명세가 생성되었습니다
|
|
199
|
+
|
|
200
|
+
📁 파일: `.opencode/weave/specs/emotion-diary.yaml`
|
|
201
|
+
📊 요구사항: 4개 (functional 2, performance 1, constraint 1)
|
|
202
|
+
🎯 검증 기준: 5개 (e2e 3, performance 1, manual 1)
|
|
203
|
+
|
|
204
|
+
### 다음 단계
|
|
205
|
+
이 명세를 기반으로 실행 계획을 세우려면:
|
|
206
|
+
`/weave-design emotion-diary`
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 완료 후 검증 (필수)
|
|
212
|
+
|
|
213
|
+
스펙 파일 생성 후, 반드시 다음을 확인합니다:
|
|
214
|
+
|
|
215
|
+
1. **스펙 파일 존재 확인**: `.opencode/weave/specs/{spec-name}.yaml` 존재 검증
|
|
216
|
+
2. **YAML 파싱 가능 확인**: 파일 내용이 유효한 YAML인지 검증
|
|
217
|
+
3. **검증 실패 시**: 유저에게 오류를 알리고 재생성 시도
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 핵심 원칙
|
|
222
|
+
|
|
223
|
+
1. **명세만 수립, 계획/구현 금지**: Phase 분할이나 코드 구현은 하지 않음
|
|
224
|
+
2. **검증 기준은 구체적으로**: 입력 → 기대결과 형태로 작성
|
|
225
|
+
3. **유형은 정직하게**: 자동화 불가능하면 `manual`. 억지로 끼워맞추지 않음
|
|
226
|
+
4. **스펙 이름은 kebab-case**: 이후 `/weave-design`의 플랜 이름으로 사용됨
|
|
227
|
+
5. **wont도 기록**: 명시적으로 제외한 것을 기록해야 나중에 "왜 안 했어?"를 방지
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 프로젝트 유형 자동 감지 기반 검증 실행 (build/test)
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /weave-verify - 검증 실행
|
|
6
|
-
|
|
7
|
-
## 개요
|
|
8
|
-
|
|
9
|
-
현재 worktree(프로젝트 루트)에서 **빌드/테스트 검증**을 실행합니다.
|
|
10
|
-
|
|
11
|
-
Weave는 특정 생태계(npm)만 가정하지 않고, 프로젝트 루트의 증거를 기반으로 검증 커맨드를 추천/실행합니다.
|
|
12
|
-
|
|
13
|
-
- Node: `package.json scripts` 기반(`npm|pnpm|yarn|bun` 자동 감지)
|
|
14
|
-
- Go: `go build ./...`, `go test ./...`
|
|
15
|
-
- Rust: `cargo check`, `cargo test`
|
|
16
|
-
- Python: `pytest` 또는 `python -m unittest` (+ optional ruff/mypy)
|
|
17
|
-
- .NET: `dotnet build`, `dotnet test`
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 실행
|
|
22
|
-
|
|
23
|
-
```txt
|
|
24
|
-
weave command=verify
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
프로젝트 타입 힌트를 주고 싶으면:
|
|
28
|
-
|
|
29
|
-
```txt
|
|
30
|
-
weave command=verify projectType="go"
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
빠르게(typecheck+tests만) 돌리려면:
|
|
34
|
-
|
|
35
|
-
```txt
|
|
36
|
-
weave command=verify verifyMode="quick"
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 결과
|
|
42
|
-
|
|
43
|
-
- PASS면 `✅ Verification passed.`
|
|
44
|
-
- FAIL이면 실패한 레이어와 로그(tail)를 출력합니다
|
|
1
|
+
---
|
|
2
|
+
description: 프로젝트 유형 자동 감지 기반 검증 실행 (build/test)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /weave-verify - 검증 실행
|
|
6
|
+
|
|
7
|
+
## 개요
|
|
8
|
+
|
|
9
|
+
현재 worktree(프로젝트 루트)에서 **빌드/테스트 검증**을 실행합니다.
|
|
10
|
+
|
|
11
|
+
Weave는 특정 생태계(npm)만 가정하지 않고, 프로젝트 루트의 증거를 기반으로 검증 커맨드를 추천/실행합니다.
|
|
12
|
+
|
|
13
|
+
- Node: `package.json scripts` 기반(`npm|pnpm|yarn|bun` 자동 감지)
|
|
14
|
+
- Go: `go build ./...`, `go test ./...`
|
|
15
|
+
- Rust: `cargo check`, `cargo test`
|
|
16
|
+
- Python: `pytest` 또는 `python -m unittest` (+ optional ruff/mypy)
|
|
17
|
+
- .NET: `dotnet build`, `dotnet test`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 실행
|
|
22
|
+
|
|
23
|
+
```txt
|
|
24
|
+
weave command=verify
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
프로젝트 타입 힌트를 주고 싶으면:
|
|
28
|
+
|
|
29
|
+
```txt
|
|
30
|
+
weave command=verify projectType="go"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
빠르게(typecheck+tests만) 돌리려면:
|
|
34
|
+
|
|
35
|
+
```txt
|
|
36
|
+
weave command=verify verifyMode="quick"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 결과
|
|
42
|
+
|
|
43
|
+
- PASS면 `✅ Verification passed.`
|
|
44
|
+
- FAIL이면 실패한 레이어와 로그(tail)를 출력합니다
|