QA: SPRINT-004 review iteration 1 — FAILED (blocking 3)

This commit is contained in:
2026-04-04 12:17:12 +09:00
parent 033c142c0e
commit dcf5073693

View File

@@ -0,0 +1,51 @@
# SPRINT-004 QA Review — Iteration 1
- **검증일시:** 2026-04-04 03:16 UTC
- **검증자:** 다랑이 (Evaluator)
- **결과:** ❌ FAILED (blocking 3건)
## 검증 항목
| 항목 | 결과 |
|------|------|
| npm install | ✅ |
| prisma generate | ✅ |
| npm test (backend) | ✅ 22/22 pass |
| npm run build (backend) | ✅ |
| npm run build (frontend) | ✅ 11 routes |
## Sprint 003 non-blocking 수정 확인
| 항목 | 상태 |
|------|------|
| API Key Guard (passport-http-bearer) | ✅ |
| Helmet 적용 | ✅ |
| SisterNamePipe (name 검증) | ✅ |
| lib/sisters.ts 공통 함수 추출 | ✅ |
## 🔴 Blocking 이슈
### B1: UpdateHarnessDto class-validator 미적용
- **파일:** `admin/admin.controller.ts`
- **문제:** `@IsString() @IsNotEmpty()` 없음 → 빈 content로 하네스 파일 삭제 가능
- **수정:** `@IsString() @IsNotEmpty() @MaxLength(50000)` 추가
### B2: getSisterLogs lines 파라미터 상한 없음
- **파일:** `admin/admin.service.ts`
- **문제:** `lines=999999999` → journalctl/tail 메모리 폭발
- **수정:** `Math.min(Math.max(parseInt(lines, 10) || 100, 1), 500)` clamp
### B3: CORS methods에 PUT 누락
- **파일:** `main.ts`
- **문제:** `PUT /api/admin/harness/:name/:file`가 preflight 차단
- **수정:** methods 배열에 `'PUT'` 추가
## Non-blocking 이슈
| ID | 이슈 | 심각도 |
|----|------|--------|
| N1 | 셸 escape에서 null byte 미처리 | Medium |
| N2 | localStorage 평문 API Key | Medium |
| N3 | CORS 에러에 origin 노출 | Low |
| N4 | resetSisterSession catch에서 activity.log 누락 | Low |
| N5 | /api/sisters 비인증 노출 (config/sessions 포함) | Low |