- QA-1 Backend API contract: APPROVE (minor type contract 2) - QA-2 Persona forget algorithm: APPROVE (math verified) - QA-3 Auth & security: REQUEST_CHANGES - email normalize missing / JWT revalidate / secret fallback / whitelist - QA-4 Frontend runtime: REQUEST_CHANGES - review double-submit race / subjects/[id] NaN / history error states / native alerts - QA-5 Prisma & transactions: REQUEST_CHANGES - reviews.submit snapshot outside tx / tag cascade data loss / iteration race - QA-6 Build & deploy: REQUEST_CHANGES - missing migrations, postinstall, lockfile, PM2 ecosystem Follow-up fix proposals saved to .claude/state/pending-fix-proposals.jsonl (18 tickets)
3.0 KiB
3.0 KiB
ReLoop v2 — QA Plan
Harness v3 Breezing 모드로 전체 QA를 실행한다. 구현 자체는 이전 세션에서 완료됐고, 이 Plans.md는 검증 태스크만 다룬다. 각 QA 태스크는 정적 분석/리포트 작성이며 파일 수정은 원칙적으로 하지 않는다 (findings 수집 단계). Critical/major finding은 Phase C에서 별도 fix 태스크로 재티켓화한다.
Context
- Repo:
/home/erang/reloop-v2(backend: NestJS+Prisma, frontend: Next.js 14 + styled-components) - Plan 원본:
/home/erang/reloop-v2-plan/PLAN.md - Deploy target:
reloop.nabomhalang.co.kr/reloop-api.nabomhalang.co.kr(Dev VM PM2) - Persona forgetting curve:
S(t)=S₀·exp(-λt),P=σ(k(S(t)−D)), λ∈{0.1,0.2,0.4,0.6} - Node modules 미설치 — runtime 검증은 Phase C에서 Dev VM에서만 가능
Tasks
| Task | 내용 | DoD | Depends | Status |
|---|---|---|---|---|
| QA-1 | Backend API contract audit — 모든 Nest controller의 라우트/DTO를 frontend src/lib/api.ts 및 각 page.tsx 호출부와 대조. URL/메서드/payload/응답 타입 불일치를 전부 목록화 |
findings JSON 반환 (critical/major/minor/recommendation 분류). verdict 결론 | - | cc:완료 |
| QA-2 | Persona forget algorithm verification — persona-forget.service.ts의 수식/경계조건(s0=0, D≥s0, D≤0, 극한 λ), schedule() 역함수 유도, spec 파일 커버리지 검증 |
수학적 정합성 검증 리포트, 커버리지 gap 목록, verdict | - | cc:완료 |
| QA-3 | Auth & security review — JWT 발급/검증, bcrypt 라운드, CORS origin env, helmet, global ValidationPipe, public vs. guarded routes, 토큰 localStorage 취급, 401 rebound | OWASP 상위 10 중 관련 항목 체크 + verdict | - | cc:완료 |
| QA-4 | Frontend runtime bug scan — 13개 page.tsx + AppShell/SideNav/BottomNav의 null 처리, useEffect 의존성, 타입 위반, 깨진 링크/라우트, 모바일 레이아웃 | page별 findings + verdict | - | cc:완료 |
| QA-5 | Prisma schema & transaction integrity — schema.prisma 제약/인덱스/cascade, study-logs·reviews service의 트랜잭션 경계, 동시성 경합 가능성, seed 정합성 | 스키마 + 트랜잭션 findings + verdict | - | cc:완료 |
| QA-6 | Build & deploy readiness — backend/frontend package.json scripts, 환경변수 목록, CORS origin, PM2 process 명, main.ts bootstrap, 누락 파일, reloop-v2-plan의 Phase 5 항목 교차 검증 | 배포 체크리스트 + verdict | - | cc:완료 |
Execution
Mode: Breezing (명시 플래그 --breezing)
Lead: 본 세션 (claude-opus-4-6[1m])
Workers: claude-code-harness:task-worker (read-only 모드, 리포트만 반환) — isolation=worktree 비적용 (QA는 정적 분석)
Reviewer: claude-code-harness:code-reviewer — 각 findings 리포트를 재검증
수정 루프: QA 태스크는 finding 수집이 DoD이므로 "REQUEST_CHANGES = 리포트 누락/근거 부족". 실제 코드 수정은 Phase C에서 fix 태스크로 별도 생성.