Files
reloop-v2/.claude/state/contracts/QA-5.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

27 lines
1.1 KiB
JSON

{
"task_id": "QA-5",
"title": "Prisma schema & transaction integrity",
"goal": "데이터 모델 제약, cascade, 동시성 경합 가능성 검증",
"checks": [
"schema.prisma의 모든 model: PK, FK, unique, index, default",
"ReviewSchedule status enum 전이 가능성 (pending → done/skipped/expired)",
"SkillSnapshot @@unique([userId, tagId]) 활용",
"onDelete 규칙 (User 삭제 시 cascade, Subject 삭제 시 StudyLog/tag 처리)",
"study-logs.service.ts create() transaction: log → snapshot upsert → schedule — 모두 tx 안인지",
"reviews.service.ts submit() transaction: snapshot upsert가 tx 바깥(race 가능성)",
"seed.ts가 idempotent한지 (reset 후 재실행 안전성)",
"StudyResult enum / Persona / ReviewIntensity가 Prisma와 frontend 모두 일치",
"ReviewSchedule iteration 증가 규칙",
"baseCorrectRate null 처리 일관성"
],
"non_goals": [
"DB 엔진 교체",
"마이그레이션 히스토리 재작성"
],
"runtime_validation": [],
"browser_validation": [],
"risk_flags": ["needs-spike"],
"reviewer_profile": "static",
"deliverable": ".qa/QA-5.md"
}