maskweaver 0.7.23 → 0.7.25
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/assets/commands/weave-craft.md +37 -132
- package/assets/commands/weave-design.md +7 -37
- package/assets/commands/weave-spec.md +219 -0
- package/dist/plugin/tools/slashcommand.d.ts.map +1 -1
- package/dist/plugin/tools/slashcommand.js +28 -9
- package/dist/plugin/tools/slashcommand.js.map +1 -1
- package/dist/plugin/tools/weave.d.ts +2 -2
- package/dist/plugin/tools/weave.d.ts.map +1 -1
- package/dist/plugin/tools/weave.js +73 -60
- package/dist/plugin/tools/weave.js.map +1 -1
- package/dist/weave/index.d.ts +2 -0
- package/dist/weave/index.d.ts.map +1 -1
- package/dist/weave/index.js +2 -0
- package/dist/weave/index.js.map +1 -1
- package/dist/weave/phase-manager.d.ts +14 -9
- package/dist/weave/phase-manager.d.ts.map +1 -1
- package/dist/weave/phase-manager.js +75 -242
- package/dist/weave/phase-manager.js.map +1 -1
- package/dist/weave/yaml-repair.d.ts +72 -0
- package/dist/weave/yaml-repair.d.ts.map +1 -0
- package/dist/weave/yaml-repair.js +443 -0
- package/dist/weave/yaml-repair.js.map +1 -0
- package/package.json +1 -1
|
@@ -17,20 +17,9 @@ AI가 자동으로 검증 루프를 돌리고, 완료되면 유저에게 전달
|
|
|
17
17
|
- **Global Knowledge**: 과거 트러블슈팅 경험 검색/기록
|
|
18
18
|
- **Verify**: 다층 AI 자동 검증 시스템
|
|
19
19
|
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
##
|
|
23
|
-
|
|
24
|
-
> **⚠️ CRITICAL: `/weave-craft`는 지정된 Phase의 작업만 수행합니다. 다른 Phase의 작업이나 계획에 없는 범위 밖 구현은 절대 수행하지 않습니다.**
|
|
25
|
-
|
|
26
|
-
- 플랜 파일에 정의된 해당 Phase의 `checklist`와 `tasks` 항목만 구현합니다.
|
|
27
|
-
- 다음 Phase에 해당하는 작업을 미리 구현하지 않습니다.
|
|
28
|
-
- Phase 범위에 명시되지 않은 기능, 파일, 설정을 추가하지 않습니다.
|
|
29
|
-
- 범위 밖 작업이 필요하다고 판단되면, 구현하지 않고 유저에게 알려 플랜 수정을 제안합니다.
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## 사전 조건: 활성 플랜 확인
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 사전 조건: 활성 플랜 확인
|
|
34
23
|
|
|
35
24
|
실행 전 반드시:
|
|
36
25
|
|
|
@@ -88,53 +77,18 @@ AI가 자동으로 검증 루프를 돌리고, 완료되면 유저에게 전달
|
|
|
88
77
|
|
|
89
78
|
---
|
|
90
79
|
|
|
91
|
-
## Step 0: LOAD PLAN
|
|
92
|
-
|
|
93
|
-
```yaml
|
|
94
|
-
# 1. state.yaml에서 활성 플랜 확인
|
|
95
|
-
active_plan: "emotion-diary"
|
|
96
|
-
|
|
97
|
-
# 2. plans/emotion-diary.yaml에서 Phase 정보 로드
|
|
98
|
-
# 3. Phase 상태가 pending 또는 in_progress인지 확인
|
|
99
|
-
# 4. completed인 Phase를 재실행하려면 유저에게 확인
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
플랜 파일(`state.yaml` 또는 `plans/*.yaml`)을 읽었을 때 YAML 파싱 에러가 발생하면, 자동 수복을 시도합니다.
|
|
105
|
-
|
|
106
|
-
**일반적인 깨짐 패턴과 수복 방법**:
|
|
107
|
-
|
|
108
|
-
| 깨짐 패턴 | 증상 | 수복 방법 |
|
|
109
|
-
|-----------|------|----------|
|
|
110
|
-
| 들여쓰기 불일치 | `bad indentation` 에러 | 들여쓰기를 2-space 기준으로 정규화 |
|
|
111
|
-
| 탭 문자 혼입 | `tab character` 에러 | 탭 → 2 spaces 변환 |
|
|
112
|
-
| 따옴표 미닫힘 | `unexpected end of stream` | 열린 따옴표 찾아서 닫기 |
|
|
113
|
-
| 중복 키 | `duplicate key` 에러 | 나중에 나온 값 유지, 중복 제거 |
|
|
114
|
-
| 빈 값/null 깨짐 | `null` 대신 빈 문자열 | `null` 또는 적절한 기본값으로 복원 |
|
|
115
|
-
| 잘린 파일 | 파일이 중간에 끊김 | 마지막 완전한 블록까지 복원 후 유저 알림 |
|
|
116
|
-
|
|
117
|
-
```
|
|
118
|
-
YAML 읽기 수복 절차:
|
|
119
|
-
1. Read(yaml_path) → 파일 내용 로드
|
|
120
|
-
2. YAML 파싱 시도
|
|
121
|
-
├─ 성공 → 정상 진행
|
|
122
|
-
└─ 실패 → 수복 시작
|
|
123
|
-
3. 수복 시도:
|
|
124
|
-
a. 파일 원본 내용을 보존 (백업용 변수에 저장)
|
|
125
|
-
b. 일반적인 깨짐 패턴 자동 교정 (위 표 참고)
|
|
126
|
-
c. 교정된 내용으로 다시 YAML 파싱 시도
|
|
127
|
-
├─ 성공 → 교정된 내용으로 파일 덮어쓰기 + 유저에게 수복 사실 알림
|
|
128
|
-
└─ 실패 → 4단계로
|
|
129
|
-
4. 수복 불가 시:
|
|
130
|
-
a. 유저에게 "YAML 파일이 심각하게 손상됨" 알림
|
|
131
|
-
b. 원본 내용을 그대로 출력하여 유저가 직접 수정할 수 있게 제공
|
|
132
|
-
c. `/weave-design`으로 플랜 재생성 제안
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
> **주의**: 수복 시 원본 데이터를 최대한 보존합니다. 확실하지 않은 값은 추측하지 않고, 유저에게 확인을 요청합니다.
|
|
136
|
-
|
|
137
|
-
---
|
|
80
|
+
## Step 0: LOAD PLAN
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
# 1. state.yaml에서 활성 플랜 확인
|
|
84
|
+
active_plan: "emotion-diary"
|
|
85
|
+
|
|
86
|
+
# 2. plans/emotion-diary.yaml에서 Phase 정보 로드
|
|
87
|
+
# 3. Phase 상태가 pending 또는 in_progress인지 확인
|
|
88
|
+
# 4. completed인 Phase를 재실행하려면 유저에게 확인
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
138
92
|
|
|
139
93
|
## Expert Summoning Strategy for Execution (Core)
|
|
140
94
|
|
|
@@ -281,77 +235,28 @@ Stuck on performance issue:
|
|
|
281
235
|
|
|
282
236
|
---
|
|
283
237
|
|
|
284
|
-
## Step 4: UPDATE PLAN
|
|
285
|
-
|
|
286
|
-
Phase 완료 시 플랜 파일을 업데이트합니다:
|
|
287
|
-
|
|
288
|
-
```yaml
|
|
289
|
-
# .opencode/weave/plans/{active_plan}.yaml 내 해당 Phase 업데이트:
|
|
290
|
-
phases:
|
|
291
|
-
- id: "P1"
|
|
292
|
-
status: "completed" # pending → in_progress → completed
|
|
293
|
-
started_at: "2026-02-06T10:30:00"
|
|
294
|
-
completed_at: "2026-02-06T13:00:00"
|
|
295
|
-
masks_used:
|
|
296
|
-
- name: "kent-beck"
|
|
297
|
-
tasks: 2
|
|
298
|
-
effectiveness: 0.9
|
|
299
|
-
- name: "dan-abramov"
|
|
300
|
-
tasks: 1
|
|
301
|
-
effectiveness: 0.85
|
|
302
|
-
retry_count: 1
|
|
303
|
-
issues:
|
|
304
|
-
- "JSON 직렬화 오류 → useEffect 의존성 추가로 해결"
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
### 플랜 업데이트 후 검증 (필수)
|
|
308
|
-
|
|
309
|
-
플랜 파일 업데이트 후, 반드시 다음을 확인합니다:
|
|
310
|
-
|
|
311
|
-
1. **Phase 상태 반영 확인**: 해당 Phase의 `status`가 `completed`로 변경되었는지 검증
|
|
312
|
-
2. **타임스탬프 기록 확인**: `started_at`과 `completed_at`이 올바르게 기록되었는지 검증
|
|
313
|
-
3. **다른 Phase 무변경 확인**: 실행하지 않은 Phase들의 상태가 변경되지 않았는지 검증
|
|
314
|
-
4. **검증 실패 시**: 유저에게 오류를 알리고 플랜 파일 재업데이트 시도
|
|
315
|
-
|
|
316
|
-
```
|
|
317
|
-
검증 절차:
|
|
318
|
-
1. Read(".opencode/weave/plans/{active_plan}.yaml") → 전체 플랜 파일 읽기
|
|
319
|
-
2. 해당 Phase의 status == "completed" 확인
|
|
320
|
-
3. started_at, completed_at 값 존재 확인
|
|
321
|
-
4. 다른 Phase들의 status가 원래 값 그대로인지 확인
|
|
322
|
-
5. 모두 정상이면 → 유저 핸드오프 진행
|
|
323
|
-
6. 하나라도 실패하면 → 오류 보고 및 재시도
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
### YAML 쓰기 시 자동 수복
|
|
327
|
-
|
|
328
|
-
플랜 파일을 업데이트한 후 다시 읽어 검증할 때 YAML 파싱 에러가 발생하면, 업데이트 과정에서 YAML이 깨진 것입니다. 이 경우 자동 수복을 수행합니다.
|
|
329
|
-
|
|
330
|
-
```
|
|
331
|
-
YAML 쓰기 수복 절차:
|
|
332
|
-
1. 플랜 파일 업데이트 (Write)
|
|
333
|
-
2. 업데이트된 파일 다시 읽기 (Read)
|
|
334
|
-
3. YAML 파싱 시도
|
|
335
|
-
├─ 성공 → 정상 진행 (검증 계속)
|
|
336
|
-
└─ 실패 → 쓰기 수복 시작
|
|
337
|
-
4. 쓰기 수복:
|
|
338
|
-
a. 업데이트 전 원본 플랜 내용을 기반으로 재구성
|
|
339
|
-
b. 변경해야 할 Phase 필드만 정확히 반영하여 YAML을 처음부터 다시 생성
|
|
340
|
-
c. 재생성된 YAML로 파일 덮어쓰기
|
|
341
|
-
d. 다시 읽어서 파싱 검증
|
|
342
|
-
├─ 성공 → 유저에게 "YAML 수복 후 정상 저장됨" 알림
|
|
343
|
-
└─ 실패 → 5단계로
|
|
344
|
-
5. 재수복 실패 시:
|
|
345
|
-
a. 유저에게 "플랜 파일 업데이트 중 YAML 손상 발생" 알림
|
|
346
|
-
b. 정상적인 원본 내용 + 이번 Phase 변경사항을 텍스트로 출력
|
|
347
|
-
c. 유저가 직접 확인 후 수동 저장하도록 안내
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
**쓰기 수복 시 핵심 규칙**:
|
|
351
|
-
- 업데이트 전 원본 파일 내용을 항상 메모리에 보관해 둡니다 (롤백 대비).
|
|
352
|
-
- YAML을 부분 편집(텍스트 치환)하지 않고, 전체 구조를 파악한 뒤 완전한 YAML로 재생성합니다.
|
|
353
|
-
- 특수문자가 포함된 문자열 값은 반드시 따옴표로 감쌉니다.
|
|
354
|
-
- 재생성 시 원본의 Phase 순서와 필드 순서를 유지합니다.
|
|
238
|
+
## Step 4: UPDATE PLAN
|
|
239
|
+
|
|
240
|
+
Phase 완료 시 플랜 파일을 업데이트합니다:
|
|
241
|
+
|
|
242
|
+
```yaml
|
|
243
|
+
# .opencode/weave/plans/{active_plan}.yaml 내 해당 Phase 업데이트:
|
|
244
|
+
phases:
|
|
245
|
+
- id: "P1"
|
|
246
|
+
status: "completed" # pending → in_progress → completed
|
|
247
|
+
started_at: "2026-02-06T10:30:00"
|
|
248
|
+
completed_at: "2026-02-06T13:00:00"
|
|
249
|
+
masks_used:
|
|
250
|
+
- name: "kent-beck"
|
|
251
|
+
tasks: 2
|
|
252
|
+
effectiveness: 0.9
|
|
253
|
+
- name: "dan-abramov"
|
|
254
|
+
tasks: 1
|
|
255
|
+
effectiveness: 0.85
|
|
256
|
+
retry_count: 1
|
|
257
|
+
issues:
|
|
258
|
+
- "JSON 직렬화 오류 → useEffect 의존성 추가로 해결"
|
|
259
|
+
```
|
|
355
260
|
|
|
356
261
|
---
|
|
357
262
|
|
|
@@ -256,40 +256,10 @@ Phase 1을 시작하려면:
|
|
|
256
256
|
|
|
257
257
|
---
|
|
258
258
|
|
|
259
|
-
##
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## 완료 후 검증 (필수)
|
|
270
|
-
|
|
271
|
-
플랜 파일 생성 후, 반드시 다음을 확인합니다:
|
|
272
|
-
|
|
273
|
-
1. **플랜 파일 존재 확인**: `.opencode/weave/plans/{plan-name}.yaml` 파일이 실제로 존재하는지 검증
|
|
274
|
-
2. **state.yaml 반영 확인**: `active_plan` 값이 새 플랜 이름으로 올바르게 설정되었는지 검증
|
|
275
|
-
3. **검증 실패 시**: 유저에게 오류를 알리고 재생성 시도
|
|
276
|
-
|
|
277
|
-
```
|
|
278
|
-
검증 절차:
|
|
279
|
-
1. Read(".opencode/weave/plans/{plan-name}.yaml") → 파일 존재 확인
|
|
280
|
-
2. Read(".opencode/weave/state.yaml") → active_plan 값 확인
|
|
281
|
-
3. 둘 다 정상이면 → 완료 메시지 출력
|
|
282
|
-
4. 하나라도 실패하면 → 오류 보고 및 재시도
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## 주의사항
|
|
288
|
-
|
|
289
|
-
1. **Phase는 작게**: 큰 Phase는 분할
|
|
290
|
-
2. **복잡한 분석은 위임**: Task(dummy-human)으로 전문가 위임
|
|
291
|
-
3. **테스트 가능해야**: 각 Phase 끝에 유저가 확인할 수 있어야
|
|
292
|
-
4. **아키텍처는 유연하게**: "변경 가능"을 명시
|
|
293
|
-
5. **플랜 이름은 kebab-case**: 파일명이 되므로 영문 소문자, 하이픈만 사용
|
|
294
|
-
6. **구현 금지**: 이 커맨드에서는 계획 파일 생성 외 어떤 코드/파일도 만들지 않음
|
|
295
|
-
7. **검증 필수**: 플랜 파일 생성 후 반드시 파일 존재와 state.yaml 반영을 확인
|
|
259
|
+
## 주의사항
|
|
260
|
+
|
|
261
|
+
1. **Phase는 작게**: 큰 Phase는 분할
|
|
262
|
+
2. **복잡한 분석은 위임**: Task(dummy-human)으로 전문가 위임
|
|
263
|
+
3. **테스트 가능해야**: 각 Phase 끝에 유저가 확인할 수 있어야
|
|
264
|
+
4. **아키텍처는 유연하게**: "변경 가능"을 명시
|
|
265
|
+
5. **플랜 이름은 kebab-case**: 파일명이 되므로 영문 소문자, 하이픈만 사용
|
|
@@ -0,0 +1,219 @@
|
|
|
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
|
+
`/weave-init`이 실행되어 있어야 합니다.
|
|
24
|
+
실행되지 않았다면 자동으로 init을 먼저 수행합니다.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 실행 흐름
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
0. INIT CHECK
|
|
32
|
+
↓
|
|
33
|
+
1. RESOLVE (입력 해석 → 실제 경로 찾기)
|
|
34
|
+
↓
|
|
35
|
+
2. ANALYZE (문서에서 요구사항 추출)
|
|
36
|
+
↓
|
|
37
|
+
3. STRUCTURE (요구사항 분류 + 검증 기준 도출)
|
|
38
|
+
↓
|
|
39
|
+
4. REVIEW (유저에게 제시 → 피드백)
|
|
40
|
+
↓
|
|
41
|
+
5. SAVE (스펙 파일 생성)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 단계별 상세
|
|
47
|
+
|
|
48
|
+
### Step 0: INIT CHECK
|
|
49
|
+
|
|
50
|
+
`.opencode/weave/state.yaml` 존재 확인. 없으면 `/weave-init` 자동 실행.
|
|
51
|
+
|
|
52
|
+
### Step 1: RESOLVE
|
|
53
|
+
|
|
54
|
+
`/weave-design`과 동일한 경로 해석 로직. (정확한 경로, 디렉토리 힌트, 시간 힌트, 내용 힌트 등)
|
|
55
|
+
|
|
56
|
+
### Step 2: ANALYZE
|
|
57
|
+
|
|
58
|
+
**수행 작업**:
|
|
59
|
+
1. 해석된 경로의 모든 문서 읽기
|
|
60
|
+
2. 기능 요구사항과 비기능 요구사항 분리
|
|
61
|
+
3. 암묵적 요구사항 식별 (명시되지 않았지만 당연히 필요한 것)
|
|
62
|
+
4. 요구사항 간 의존관계 파악
|
|
63
|
+
5. 과거 유사 프로젝트 검색 (Memory 시스템)
|
|
64
|
+
|
|
65
|
+
### Step 3: STRUCTURE
|
|
66
|
+
|
|
67
|
+
각 요구사항을 정제하고, **검증 기준**을 도출합니다.
|
|
68
|
+
|
|
69
|
+
#### 요구사항 분류
|
|
70
|
+
|
|
71
|
+
| 분류 | 설명 | 예시 |
|
|
72
|
+
|------|------|------|
|
|
73
|
+
| `functional` | 시스템이 해야 하는 동작 | 사용자가 로그인할 수 있다 |
|
|
74
|
+
| `constraint` | 기술적/비즈니스 제약 | 데이터를 외부 서버로 전송하지 않는다 |
|
|
75
|
+
| `performance` | 성능 요구 | 목록 로딩 2초 이내 |
|
|
76
|
+
| `ux` | 사용성/접근성 요구 | 모바일에서도 사용 가능해야 한다 |
|
|
77
|
+
|
|
78
|
+
#### 우선순위 (MoSCoW)
|
|
79
|
+
|
|
80
|
+
| 값 | 의미 |
|
|
81
|
+
|----|------|
|
|
82
|
+
| `must` | 없으면 출시 불가 |
|
|
83
|
+
| `should` | 강력히 권장, 가능하면 포함 |
|
|
84
|
+
| `could` | 있으면 좋지만 없어도 됨 |
|
|
85
|
+
| `wont` | 이번 범위에서 명시적으로 제외 |
|
|
86
|
+
|
|
87
|
+
#### 검증 기준 유형
|
|
88
|
+
|
|
89
|
+
| type | 의미 | 실행 방법 |
|
|
90
|
+
|------|------|----------|
|
|
91
|
+
| `e2e` | 브라우저/UI 시나리오 테스트 | Playwright, Cypress 등 |
|
|
92
|
+
| `integration` | API/서비스 간 통합 테스트 | supertest, httpx, curl 등 |
|
|
93
|
+
| `script` | CLI/스크립트 실행 결과 확인 | shell script, node script |
|
|
94
|
+
| `performance` | 성능 기준 충족 | benchmark, lighthouse 등 |
|
|
95
|
+
| `manual` | 자동화 불가, 사용자 확인 | 체크리스트로 유저 핸드오프에 포함 |
|
|
96
|
+
|
|
97
|
+
#### 검증 기준 작성 원칙
|
|
98
|
+
|
|
99
|
+
- **모호하지 않을 것**: "잘 동작한다" ✗ → "저장 후 목록에서 확인 가능" ✓
|
|
100
|
+
- **실행 가능할 것**: 구체적인 입력과 기대 결과를 명시
|
|
101
|
+
- **독립적일 것**: 하나의 기준이 하나의 시나리오만 검증
|
|
102
|
+
- **유형은 정직하게**: E2E가 불가능한 것은 `manual`로. 억지로 자동화하지 않음
|
|
103
|
+
|
|
104
|
+
### Step 4: REVIEW
|
|
105
|
+
|
|
106
|
+
구조화된 명세를 유저에게 제시합니다:
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
## 요구사항 명세
|
|
110
|
+
|
|
111
|
+
**스펙 이름**: `emotion-diary` (변경 가능)
|
|
112
|
+
|
|
113
|
+
### 기능 요구사항 (Functional)
|
|
114
|
+
|
|
115
|
+
**R1** [must]: 사용자가 감정을 선택하고 일기를 저장할 수 있다
|
|
116
|
+
- [e2e] 감정 선택 → 텍스트 입력 → 저장 → 목록에서 확인
|
|
117
|
+
- [e2e] 빈 텍스트로 저장 시도 → 에러 메시지 표시
|
|
118
|
+
|
|
119
|
+
**R2** [must]: 저장된 일기 목록을 조회할 수 있다
|
|
120
|
+
- [e2e] 저장된 일기 3개가 목록에 최신순으로 표시
|
|
121
|
+
|
|
122
|
+
### 비기능 요구사항
|
|
123
|
+
|
|
124
|
+
**R3** [should]: 일기 목록이 2초 이내에 로딩된다
|
|
125
|
+
- [performance] 100개 일기 기준 로딩 시간 < 2000ms
|
|
126
|
+
|
|
127
|
+
**R4** [could]: 오프라인에서도 저장된 일기를 조회할 수 있다
|
|
128
|
+
- [manual] 네트워크 차단 후 기존 일기 목록 접근 가능
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
빠진 요구사항이 있거나, 검증 기준을 수정하고 싶으면 말씀해주세요.
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Step 5: SAVE
|
|
135
|
+
|
|
136
|
+
유저 승인 시 스펙 파일을 생성합니다.
|
|
137
|
+
|
|
138
|
+
**파일 경로**: `.opencode/weave/specs/{spec-name}.yaml`
|
|
139
|
+
|
|
140
|
+
```yaml
|
|
141
|
+
spec_name: "emotion-diary"
|
|
142
|
+
project_name: "감정 일기 앱"
|
|
143
|
+
created_at: "2026-02-06"
|
|
144
|
+
source_docs:
|
|
145
|
+
- "docs/requirements.md"
|
|
146
|
+
|
|
147
|
+
requirements:
|
|
148
|
+
- id: R1
|
|
149
|
+
description: "사용자가 감정을 선택하고 일기를 저장할 수 있다"
|
|
150
|
+
category: functional
|
|
151
|
+
priority: must
|
|
152
|
+
acceptance:
|
|
153
|
+
- id: AC-R1-1
|
|
154
|
+
scenario: "감정 선택 → 텍스트 입력 → 저장 → 목록에서 확인"
|
|
155
|
+
type: e2e
|
|
156
|
+
- id: AC-R1-2
|
|
157
|
+
scenario: "빈 텍스트로 저장 시도 → 에러 메시지 표시"
|
|
158
|
+
type: e2e
|
|
159
|
+
|
|
160
|
+
- id: R2
|
|
161
|
+
description: "저장된 일기 목록을 조회할 수 있다"
|
|
162
|
+
category: functional
|
|
163
|
+
priority: must
|
|
164
|
+
acceptance:
|
|
165
|
+
- id: AC-R2-1
|
|
166
|
+
scenario: "저장된 일기 3개가 목록에 최신순으로 표시"
|
|
167
|
+
type: e2e
|
|
168
|
+
|
|
169
|
+
- id: R3
|
|
170
|
+
description: "일기 목록이 2초 이내에 로딩된다"
|
|
171
|
+
category: performance
|
|
172
|
+
priority: should
|
|
173
|
+
acceptance:
|
|
174
|
+
- id: AC-R3-1
|
|
175
|
+
scenario: "100개 일기 기준 로딩 시간 < 2000ms"
|
|
176
|
+
type: performance
|
|
177
|
+
|
|
178
|
+
- id: R4
|
|
179
|
+
description: "오프라인에서도 저장된 일기를 조회할 수 있다"
|
|
180
|
+
category: constraint
|
|
181
|
+
priority: could
|
|
182
|
+
acceptance:
|
|
183
|
+
- id: AC-R4-1
|
|
184
|
+
scenario: "네트워크 차단 후 기존 일기 목록 접근 가능"
|
|
185
|
+
type: manual
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**완료 메시지**:
|
|
189
|
+
```markdown
|
|
190
|
+
## 요구사항 명세가 생성되었습니다
|
|
191
|
+
|
|
192
|
+
📁 파일: `.opencode/weave/specs/emotion-diary.yaml`
|
|
193
|
+
📊 요구사항: 4개 (functional 2, performance 1, constraint 1)
|
|
194
|
+
🎯 검증 기준: 5개 (e2e 3, performance 1, manual 1)
|
|
195
|
+
|
|
196
|
+
### 다음 단계
|
|
197
|
+
이 명세를 기반으로 실행 계획을 세우려면:
|
|
198
|
+
`/weave-design emotion-diary`
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 완료 후 검증 (필수)
|
|
204
|
+
|
|
205
|
+
스펙 파일 생성 후, 반드시 다음을 확인합니다:
|
|
206
|
+
|
|
207
|
+
1. **스펙 파일 존재 확인**: `.opencode/weave/specs/{spec-name}.yaml` 존재 검증
|
|
208
|
+
2. **YAML 파싱 가능 확인**: 파일 내용이 유효한 YAML인지 검증
|
|
209
|
+
3. **검증 실패 시**: 유저에게 오류를 알리고 재생성 시도
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 핵심 원칙
|
|
214
|
+
|
|
215
|
+
1. **명세만 수립, 계획/구현 금지**: Phase 분할이나 코드 구현은 하지 않음
|
|
216
|
+
2. **검증 기준은 구체적으로**: 입력 → 기대결과 형태로 작성
|
|
217
|
+
3. **유형은 정직하게**: 자동화 불가능하면 `manual`. 억지로 끼워맞추지 않음
|
|
218
|
+
4. **스펙 이름은 kebab-case**: 이후 `/weave-design`의 플랜 이름으로 사용됨
|
|
219
|
+
5. **wont도 기록**: 명시적으로 제외한 것을 기록해야 나중에 "왜 안 했어?"를 방지
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashcommand.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/slashcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"slashcommand.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/slashcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoOH,wBAAgB,sBAAsB;;;;;oBAiBpB;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,WAChB;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;EAiExC"}
|
|
@@ -83,10 +83,28 @@ Example: weave command=craft phaseId="P1"`,
|
|
|
83
83
|
usage: '/weave status',
|
|
84
84
|
examples: ['/weave status'],
|
|
85
85
|
},
|
|
86
|
-
content: `Use the weave tool with command=status.
|
|
87
|
-
|
|
86
|
+
content: `Use the weave tool with command=status.
|
|
87
|
+
|
|
88
88
|
Example: weave command=status`,
|
|
89
89
|
},
|
|
90
|
+
'weave-repair': {
|
|
91
|
+
metadata: {
|
|
92
|
+
name: 'weave-repair',
|
|
93
|
+
description: 'Scan and auto-repair corrupted plan YAML files',
|
|
94
|
+
usage: '/weave repair',
|
|
95
|
+
examples: ['/weave repair'],
|
|
96
|
+
},
|
|
97
|
+
content: `Use the weave tool with command=repair to scan and auto-repair all plan YAML files.
|
|
98
|
+
|
|
99
|
+
This command will:
|
|
100
|
+
1. Scan all plan files in .opencode/weave/plans/
|
|
101
|
+
2. Detect YAML corruption (unclosed quotes, tab characters, etc.)
|
|
102
|
+
3. Auto-repair when possible (backup the corrupted file as .corrupted)
|
|
103
|
+
4. Restore from .bak backup if auto-repair fails
|
|
104
|
+
5. Report unrecoverable files that need manual intervention
|
|
105
|
+
|
|
106
|
+
Example: weave command=repair`,
|
|
107
|
+
},
|
|
90
108
|
};
|
|
91
109
|
// ============================================================================
|
|
92
110
|
// Command Discovery
|
|
@@ -179,12 +197,13 @@ function getAllCommands(assetsDirs, projectDir) {
|
|
|
179
197
|
// ============================================================================
|
|
180
198
|
export function createSlashcommandTool() {
|
|
181
199
|
return {
|
|
182
|
-
description: `Execute a slash command. Available commands include:
|
|
183
|
-
- /weave help - Weave
|
|
184
|
-
- /weave design [docs] -
|
|
185
|
-
- /weave craft [phaseId] -
|
|
186
|
-
- /weave status -
|
|
187
|
-
|
|
200
|
+
description: `Execute a slash command. Available commands include:
|
|
201
|
+
- /weave help - Weave workflow help
|
|
202
|
+
- /weave design [docs] - Analyze requirements and create plan
|
|
203
|
+
- /weave craft [phaseId] - Execute a phase
|
|
204
|
+
- /weave status - View progress
|
|
205
|
+
- /weave repair - Scan and auto-repair corrupted plan YAML files
|
|
206
|
+
|
|
188
207
|
Use command="list" to see all available commands.`,
|
|
189
208
|
args: {
|
|
190
209
|
command: z.string()
|
|
@@ -220,7 +239,7 @@ Use command="list" to see all available commands.`,
|
|
|
220
239
|
return helpCmd.content || 'Weave help content not available.';
|
|
221
240
|
}
|
|
222
241
|
}
|
|
223
|
-
else if (['status', 'design', 'craft', 'help'].includes(cmdName)) {
|
|
242
|
+
else if (['status', 'design', 'craft', 'help', 'repair'].includes(cmdName)) {
|
|
224
243
|
// Shorthand: "status" -> "weave-status"
|
|
225
244
|
const weaveCmd = commands.find(c => c.name === `weave-${cmdName}`);
|
|
226
245
|
if (weaveCmd) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashcommand.js","sourceRoot":"","sources":["../../../src/plugin/tools/slashcommand.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"slashcommand.js","sourceRoot":"","sources":["../../../src/plugin/tools/slashcommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
export declare function createWeaveTool(): {
|
|
8
8
|
description: string;
|
|
9
9
|
args: {
|
|
10
|
-
command: import("zod").ZodEnum<[string, string, string, string, string, string, string]>;
|
|
10
|
+
command: import("zod").ZodEnum<[string, string, string, string, string, string, string, string]>;
|
|
11
11
|
docsPath: import("zod").ZodOptional<import("zod").ZodString>;
|
|
12
12
|
phaseId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
13
13
|
projectName: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -17,7 +17,7 @@ export declare function createWeaveTool(): {
|
|
|
17
17
|
projectType: import("zod").ZodOptional<import("zod").ZodString>;
|
|
18
18
|
};
|
|
19
19
|
execute: (args: {
|
|
20
|
-
command: "design" | "craft" | "status" | "troubleshoot" | "record" | "approve" | "help";
|
|
20
|
+
command: "design" | "craft" | "status" | "troubleshoot" | "record" | "approve" | "help" | "repair";
|
|
21
21
|
docsPath?: string;
|
|
22
22
|
phaseId?: string;
|
|
23
23
|
projectName?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weave.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/weave.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,wBAAgB,eAAe;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"weave.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/weave.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,wBAAgB,eAAe;;;;;;;;;;;;oBAuCb;QACF,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;QACnG,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,WACQ;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAC9B,OAAO,CAAC,MAAM,CAAC;EAuCzB"}
|