Files
reloop-v2/.claude/state/contracts/QA-4.sprint-contract.json
reloop 40232af429 qa: breezing audit — 6 tasks, 10 critical + 9 major findings
- 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)
2026-04-11 23:58:37 +09:00

30 lines
1.2 KiB
JSON

{
"task_id": "QA-4",
"title": "Frontend runtime bug scan",
"goal": "Next.js page/컴포넌트의 런타임 버그, 타입 위반, UX 결함 전수 검증",
"checks": [
"13개 page.tsx 각각: null/undefined 처리, loading state, error state, empty state",
"useEffect 의존성 배열 누락 (exhaustive-deps)",
"styled-components prop transient ($) 일관성",
"api 호출 타입 (api.get<T>) 와 백엔드 응답 실제 shape 매칭",
"route 간 Link href 유효성 (/dashboard, /review, /study, /stats 등)",
"AppShell requireOnboarding 플래그 동작",
"onboarding wizard → dashboard 리다이렉트 플로우",
"mobile breakpoint 반응형 (@media max-width)",
"SideNav/BottomNav 활성화 상태, 라우트 매칭",
"recharts ForgetCurveChart data shape",
"confirm()/alert() 브라우저 API 사용 위치",
"server component boundary: 'use client' 누락 여부"
],
"non_goals": [
"새 컴포넌트 작성",
"디자인 재설계",
"i18n"
],
"runtime_validation": [],
"browser_validation": [],
"risk_flags": ["ux-regression"],
"reviewer_profile": "static",
"deliverable": ".qa/QA-4.md"
}