- 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)
30 lines
1.2 KiB
JSON
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"
|
|
}
|