Final Release Gate — Nougat DevPay Public Beta
과거 기록 안내
이 문서는 과거 릴리스 Gate 판정과 이후 정정 결과를 함께 보존합니다. 앞부분의 READY 문구는 현재 출시 승인 증거가 아닙니다.
최종 정정 판정과 기준 날짜·SHA·환경을 확인하고 최신 브랜치 상태와 비교하세요.
HEAD: post-Wave-4 (staging+prod deployed, all P0/P1 verified)
Gate A — Identity & Security
- [x] 실제 회원가입·로그인 (signup→JWT, login→JWT)
- [x] 표준 JWT (HS256, iss/aud/exp/iat/tv — Axum 계약)
- [x] Password Hash (PBKDF2 WebCrypto + legacy sha256 호환)
- [x] 비활성 계정 차단 (status + token_version)
- [x] Buyer/Seller/Admin 분리 (verify_token_db role)
- [x] Seller 격리 (list_scope — seller scoped, admin all, buyer 403)
- [x] 고정 판매자 fallback 제거 (seller_nougat → 403)
- [x] 관리자 Bootstrap (bootstrap-admin.ps1 real hash)
- [x] Rate Limit (login_attempts — 5 fails → 429)
Gate B — Database
- [x] Fresh D1 Migration (001 dup 제거, 009-011 등록)
- [x] 기존 DB Upgrade (staging+prod ALTER 적용)
- [x] Seed 멱등성 (INSERT OR IGNORE)
- [x] Local/Staging/Prod 격리 (별도 D1)
- [x] Prod Demo Seed 차단 (NOUGAT_SEED opt-in + 스크립트 거부)
- [x] Seller 무결성 (memberships + seller body)
Gate C — Business
- [x] 상품·프로젝트 CRUD (endpoints_impl)
- [x] 공개 스토어 (widget-config public)
- [x] 무료 피드백 (feedback INSERT + payment_id UNIQUE)
- [x] Sandbox Checkout (PAYMENT_MODE=staging simulate)
- [x] Refund/License/Subscription (소유권+ledger+payment)
- [x] Ledger Verify (refund 차감 반영)
- [x] Audit Verify (chain)
- [x] Outbox (claim→lease→consume→retry→dead-letter, 실제 전달만 consumed)
- [x] Prod Mock 결제 차단 (PAYMENT_MODE=prod → NOT_LIVE_PAYMENT)
Gate D — Frontend
- [x] FE↔Workers 필수 API (26 endpoints wired)
- [x] Mock/API 분리 (apiMode emptyDb)
- [x] 사용자 상태 격리 (logout clearAuth)
- [x] 로그인 보호 화면
- [x] 판매자 온보딩 (실 API)
- [~] Browser E2E (미완 — Playwright 미실행)
Gate E — Operations
- [x] 로컬 FE/BE 빌드 (nuxi + worker-build)
- [x] Staging 배포 (api.staging verified)
- [x] 실제 URL Smoke (auth/scoping/payment verified)
- [x] CORS (PATCH/DELETE + origin allowlist)
- [x] 롤백 (wrangler rollback verified)
- [x] D1 백업·복구 (export→restore verified)
- [x] Prod 배포 (api.devpay verified)
Gate F — Public Launch
- [~] 개인정보/약관 실제 주체 검토 (문서만, 주체 미검증)
- [ ] 고객 문의 채널
- [ ] 계정 복구/삭제 절차 (deactivate만 구현)
- [x] 공개 vs Sandbox 구분 (PAYMENT_MODE)
- [x] 보안 설정·Secret 검증
- [~] 장애 대응 절차
- [ ] 외부 공개 범위 확정
v7.0 잔여 결함 해소
- A-2 audit_verify → admin-only (공유 secret ≠ admin) — VERIFIED
- A-5 DEV_AUTH staging 제거 — 공개 staging JWT-only — VERIFIED (X-Dev-User→401)
- B-2 feedback_payment → prod NOT_LIVE_PAYMENT — VERIFIED
- B-4 issue_license → APPROVED seller/admin only — VERIFIED
- C-1/2 public storefront — anonymous /public/stores/:slug + slug-조회 FE — VERIFIED
- D-3 settle seller_scope_db — VERIFIED
- 잔여: SPA deep-link 404-status (Pages quirk — shell은 렌더링됨), A-4 email ownership (email 미검증 — invite-based 필요), fresh-D1 full test
판정: PUBLIC_BETA_READY_WITH_LIMITATIONS
핵심 보안·데이터·운영 Gate 통과. 미완: Browser E2E, 고객 채널, 계정 복구, 개인정보 주체 검토, DEV_AUTH 스테이징 dev-path (sandbox 의도). 실결제는 prod에서 명시 비활성(402) — PG 연동 전 Preview 모드.
v8.0 상태 정정 (NOT_VERIFIED 원칙)
실제 라이브 검증이 끝난 것만 TESTED로 표시. 나머지는 NOT_VERIFIED.
| 항목 | 상태 | 증거 |
|---|---|---|
| PBKDF2 signup→logout→login→/me | VERIFIED | staging 실테스트 — signup→relogin JWT→/me 200, wrong→401 |
| spec의 "PBKDF2 delimiter 누락" | 오보 | pbkdf2$50000$salt$hash — 구분자 3개 정상 |
| JWT·revocation·rate-limit·scoping | VERIFIED (v6/v7) | staging/prod 라이브 검증 |
| Public storefront | TESTED | anonymous /public/stores/nougat 200, unpublished→404 |
| Email ownership | NOT_VERIFIED | 이메일 검증 메커니즘 없음 — 초대기반 정책 필요 |
| Browser E2E | NOT_VERIFIED | Playwright 등 실브라우저 미실행 |
| 계정 복구/삭제 | PARTIAL | deactivate만 구현 |
| 고객 문의 채널 | MISSING | 구현 없음 |
| 개인정보 주체 검토 | NOT_VERIFIED | 문서만, 실제 운영 주체 미검증 |
판정 정정
이전 PUBLIC_BETA_READY_WITH_LIMITATIONS → READY_WITH_LIMITATIONS, 단 실제 브라우저 E2E + 이메일 소유권 확인 전까지 완전 PUBLIC_BETA_READY는 아님. 핵심 보안·데이터·운영은 라이브 검증 통과.