aiag-cli 2.2.1 → 2.2.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializerAgent.d.ts","sourceRoot":"","sources":["../../src/utils/initializerAgent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CA2D5B;
|
|
1
|
+
{"version":3,"file":"initializerAgent.d.ts","sourceRoot":"","sources":["../../src/utils/initializerAgent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CA2D5B;AA6PD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjF"}
|
|
@@ -105,11 +105,29 @@ ${prdContent}
|
|
|
105
105
|
**기능 분해 요구사항:**
|
|
106
106
|
- 30-100개의 테스트 가능한 기능으로 분해
|
|
107
107
|
- 각 기능은 30분-2시간 내 구현 가능한 크기
|
|
108
|
-
- 명확한 acceptanceCriteria 포함
|
|
109
|
-
-
|
|
108
|
+
- 명확한 acceptanceCriteria 포함 (testCommand로 검증 가능해야 함!)
|
|
109
|
+
- **자동화 가능한 testCommand 필수** (아래 규칙 참조)
|
|
110
110
|
- 모든 passes는 false로 설정
|
|
111
111
|
- priority는 의존성을 고려하여 설정 (critical > high > medium > low)
|
|
112
112
|
|
|
113
|
+
**testCommand 작성 규칙 (CRITICAL):**
|
|
114
|
+
|
|
115
|
+
✅ 사용해야 하는 패턴:
|
|
116
|
+
- 파일 존재: \`[ -f README.md ]\`
|
|
117
|
+
- 내용 검색: \`grep -q 'pattern' file.txt\`
|
|
118
|
+
- 복합 조건: \`grep -q 'A' file && grep -q 'B' file\`
|
|
119
|
+
- 부정 검사: \`! grep -q 'pattern' file.txt\`
|
|
120
|
+
- 테스트 실행: \`npm test\`, \`bun test\`, \`pytest\`
|
|
121
|
+
|
|
122
|
+
❌ 절대 사용 금지:
|
|
123
|
+
- \`echo '수동 검증...'\` → 항상 성공하므로 무의미
|
|
124
|
+
- \`... || echo '...'\` → 실패를 숨김
|
|
125
|
+
- 자동화 불가능한 기준 (예: "브라우저에서 정상 표시", "읽기 쉬운 크기")
|
|
126
|
+
|
|
127
|
+
**acceptanceCriteria와 testCommand 일치:**
|
|
128
|
+
- 모든 acceptanceCriteria는 testCommand로 검증 가능해야 함
|
|
129
|
+
- 자동화 불가능한 요구사항은 feature_list에서 제외하고 notes/README에 문서화
|
|
130
|
+
|
|
113
131
|
#### 2. CLAUDE.md
|
|
114
132
|
프로젝트 루트에 다음 내용을 포함한 문서 생성:
|
|
115
133
|
- 프로젝트 개요 (PRD에서 추출한 핵심 목표)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializerAgent.js","sourceRoot":"","sources":["../../src/utils/initializerAgent.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"initializerAgent.js","sourceRoot":"","sources":["../../src/utils/initializerAgent.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/templates/initializer.md
CHANGED
|
@@ -102,6 +102,99 @@ git commit -m "feat: initialize AIAG harness structure"
|
|
|
102
102
|
- Avoid overlapping features
|
|
103
103
|
- Include both functional and non-functional requirements
|
|
104
104
|
|
|
105
|
+
## testCommand Guidelines (CRITICAL)
|
|
106
|
+
|
|
107
|
+
**Every testCommand MUST be fully automatable.** The `aiag auto` command runs these commands to verify feature completion.
|
|
108
|
+
|
|
109
|
+
### ✅ GOOD testCommand Patterns
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# File existence check
|
|
113
|
+
[ -f README.md ]
|
|
114
|
+
[ -d .git ]
|
|
115
|
+
|
|
116
|
+
# Content search (grep -q returns exit code only)
|
|
117
|
+
grep -q '<meta charset="UTF-8">' index.html
|
|
118
|
+
grep -qE '<html[^>]+lang="[a-z]{2}"' index.html
|
|
119
|
+
|
|
120
|
+
# Multiple conditions (all must pass)
|
|
121
|
+
grep -q '<head>' index.html && grep -q '<body>' index.html
|
|
122
|
+
|
|
123
|
+
# Negative check (must NOT contain)
|
|
124
|
+
! grep -q '<script' index.html
|
|
125
|
+
! grep -qE '(innerHTML|eval)' index.html
|
|
126
|
+
|
|
127
|
+
# Conditional check (if X exists, then Y must exist)
|
|
128
|
+
! grep -q '<img' index.html || grep -q 'alt=' index.html
|
|
129
|
+
|
|
130
|
+
# File size check
|
|
131
|
+
[ $(wc -c < index.html) -lt 2048 ]
|
|
132
|
+
|
|
133
|
+
# Test runner
|
|
134
|
+
npm test
|
|
135
|
+
bun test -- --grep 'feature name'
|
|
136
|
+
pytest tests/test_feature.py
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### ❌ BAD testCommand Patterns (NEVER USE)
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# NEVER use echo - always succeeds, meaningless
|
|
143
|
+
echo '수동 검증 필요'
|
|
144
|
+
echo 'Manual verification required'
|
|
145
|
+
|
|
146
|
+
# NEVER use || echo - hides failures
|
|
147
|
+
grep -q 'pattern' file.txt || echo 'not found'
|
|
148
|
+
command -v tool || echo 'not installed'
|
|
149
|
+
|
|
150
|
+
# NEVER use subjective/visual criteria that can't be automated
|
|
151
|
+
# BAD: "텍스트가 읽기 쉬운 크기로 표시됨"
|
|
152
|
+
# BAD: "브라우저에서 정상 표시"
|
|
153
|
+
# BAD: "Lighthouse 성능 점수 90 이상"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### acceptanceCriteria and testCommand Alignment
|
|
157
|
+
|
|
158
|
+
**CRITICAL:** Every acceptanceCriteria item MUST be verifiable by the testCommand.
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
// ✅ GOOD - criteria matches testCommand
|
|
162
|
+
{
|
|
163
|
+
"acceptanceCriteria": [
|
|
164
|
+
"<meta charset=\"UTF-8\"> 태그가 존재"
|
|
165
|
+
],
|
|
166
|
+
"testCommand": "grep -q '<meta charset=\"UTF-8\">' index.html"
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// ❌ BAD - criteria cannot be verified by testCommand
|
|
170
|
+
{
|
|
171
|
+
"acceptanceCriteria": [
|
|
172
|
+
"<meta charset=\"UTF-8\"> 태그가 존재",
|
|
173
|
+
"한글 텍스트가 올바르게 표시됨" // ← Cannot be automated!
|
|
174
|
+
],
|
|
175
|
+
"testCommand": "grep -q '<meta charset=\"UTF-8\">' index.html"
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Handling Non-Automatable Requirements
|
|
180
|
+
|
|
181
|
+
If a requirement cannot be automated (e.g., visual testing, browser compatibility):
|
|
182
|
+
|
|
183
|
+
1. **Split into automatable parts** - Extract what CAN be tested
|
|
184
|
+
2. **Use proxy tests** - Test prerequisites instead
|
|
185
|
+
3. **Exclude from feature_list** - Document in notes/README instead
|
|
186
|
+
|
|
187
|
+
```json
|
|
188
|
+
// Instead of "브라우저에서 정상 표시", use:
|
|
189
|
+
{
|
|
190
|
+
"acceptanceCriteria": [
|
|
191
|
+
"index.html이 유효한 HTML5 문법을 따름"
|
|
192
|
+
],
|
|
193
|
+
"testCommand": "command -v tidy > /dev/null && tidy -q -e index.html 2>&1 | grep -qv 'Error' || [ ! -x \"$(command -v tidy)\" ]",
|
|
194
|
+
"notes": "tidy 미설치 시 스킵"
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
105
198
|
## feature_list.json Schema
|
|
106
199
|
|
|
107
200
|
**IMPORTANT:** The file MUST follow this exact structure with `project` (not `meta`) as the top-level node:
|