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

73 lines
3.3 KiB
Markdown

# 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` 생성:
```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.js` 에 `output: '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.example` 에 `NODE_ENV` 키가 있지만 런타임 미사용.
- `package.json` 에 `engines.node` 필드 부재.
- `frontend/next.config.js` 에 `compiler.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 배포 불가.