Files
reloop-v2/.qa/QA-6.md
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

3.3 KiB

QA-6 Report — Build & Deploy Readiness

Worker: Explore agent · Lead review: 승인

Summary

  • verdict: REQUEST_CHANGES
  • critical: 4, major: 3, minor: 4

Critical (배포 차단)

[critical] C1 Prisma migrations 디렉토리 비어있음

  • Location: backend/prisma/migrations/
  • Impact: prisma migrate deploy 가 적용할 SQL 이 없다. Dev VM 새 DB 에 스키마 생성 불가.
  • Suggested fix: 로컬에서 pnpm prisma migrate dev --name init 한 번 돌려서 migrations/ 생성 + commit. 프로덕션에서는 prisma migrate deploy 만.

[critical] C2 postinstall hook 부재 → Prisma Client 미생성

  • Location: backend/package.json
  • Evidence: scripts 에 postinstall 없음. Fresh pnpm install@prisma/client import 가 비어있는 기본 client 로 연결.
  • Suggested fix: "postinstall": "prisma generate" 추가. 또는 prisma:deploy 스크립트에서 generate 를 묶어 실행.

[critical] C3 Lockfile 부재

  • Location: repo 루트
  • Impact: pnpm install --frozen-lockfile 불가. 재현 빌드 불가, 버전 drift.
  • Suggested fix: 로컬에서 pnpm install 한 번 실행해서 pnpm-lock.yaml 생성 + commit. 또는 각 workspace 별로.

[critical] C4 PM2 ecosystem 설정 파일 부재

  • Location: repo 루트
  • Impact: 이전 세션에서 언급한 reloop-api / reloop-web 프로세스 정의가 없다. 수동 기동 가능하지만 restart 정책 / env 경로 / working directory 미기록.
  • Suggested fix: ecosystem.config.js 생성:
    module.exports = {
      apps: [
        { name: 'reloop-api', cwd: './backend', script: 'dist/main.js',
          env: { NODE_ENV: 'production' }, max_memory_restart: '512M' },
        { name: 'reloop-web', cwd: './frontend', script: 'node_modules/next/dist/bin/next',
          args: 'start -p 3000', env: { NODE_ENV: 'production' } },
      ],
    };
    

Major

[major] M1 frontend/next.config.jsoutput: 'standalone' 없음

  • Impact: .next/standalone/server.js 경로 사용 불가 → PM2 에서 next start 호출해야 하므로 node_modules 전체 동반 필요.
  • Suggested fix: nextConfig.output = 'standalone' 추가.

[major] M2 frontend/.env.example 부재

  • Impact: NEXT_PUBLIC_API_URL 이 build-time 변수라는 점이 문서화되지 않음.
  • Suggested fix: .env.example 생성해서 key 와 의미 설명.

[major] M3 root README.md + packageManager 필드 없음

  • Impact: 신규 환경 셋업 방법이 기록 안 됨. pnpm 버전 drift.
  • Suggested fix: README 에 bootstrap 순서 작성, "packageManager": "pnpm@9.0.0" pin.

Minor

  • backend/frontend .eslintrc.json 부재.
  • .env.exampleNODE_ENV 키가 있지만 런타임 미사용.
  • package.jsonengines.node 필드 부재.
  • frontend/next.config.jscompiler.styledComponents: true 만 있고 experimental 플래그 정비 안 됨.

PLAN.md Phase 5 교차 체크

Phase 5 item 상태
차트 (recharts ForgetCurveChart) DONE
PWA manifest PENDING
PM2 스왑 PENDING (C4 로 차단됨)
QA 진행 중 (본 실행)

Verdict

REQUEST_CHANGES — critical 4건 중 어느 하나라도 해결하지 않으면 Dev VM 배포 불가.