QA: SPRINT-004 review iteration 1 — FAILED (blocking 3)
This commit is contained in:
51
.qa/SPRINT-004-review-1.md
Normal file
51
.qa/SPRINT-004-review-1.md
Normal 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 |
|
||||
Reference in New Issue
Block a user