Nougat DevPay Roadmap Progress
Reading guide
This is a dated roadmap and hardening-session snapshot. Older phase statuses may be superseded by work on the current branch.
Use it to trace decisions, and read newer implementation evidence for present progress.
기준 Commit: aa884e73 → 재평가+하드닝 세션 진행 중 docs/architecture-audit.md (P0/P1/P2 전수 감사) 참조.
| Phase | Status | Implemented | Tests | Blocker | Next |
|---|---|---|---|---|---|
| 0 Audit | COMPLETE | architecture-audit.md | - | - | 1 |
| 1 Docker | TESTED | prod/dev compose 분리, internal network, same-origin /api/v1 프록시(Nitro), graceful shutdown, FE Dockerfile 교정 | 로컬 데몬 미기동 — CI docker-smoke job 추가(빌드+compose+프록시health+401) | 러너에서 실제 실행 확인 필요 | 2 |
| 2 FE Sync | PARTIAL | pullAll 원자적 스냅샷+세대가드, api 모드 LocalStorage 격리, 신규 API 스키마 | vue-tsc PASS + E2E 21/21 | 오프라인/부분실패 E2E 미작성 | 3 |
| 3 API Completion | PARTIAL | subscriptions event, licenses issue/patch/verify/activations, settings, settlements, payments/:id, products DELETE, checkout 구독 생성, fbpay 멱등키+문맥바인딩 | cargo 23/23 + E2E 21/21 | 유료피드백 브라우저 플로우 E2E | 4 |
| 4 Migration | COMPLETE(테스트 범위) | 008 + tx 원자성 + checksum drift panic + 전버전 backfill | migration 5/5 (백업→복원 정합성·FK·버전 검증 포함) | 중단 복구는 수동 시나리오만 | 5 |
| 5 DB Port | PARTIAL (코드 구현·과거 contract test PASS / 현재 미연결) | RepoOps trait<Store::tx(&dyn RepoOps)+audit/ledger 멤버>, pg_store.rs(771줄) PgStore/PgRepo 구현(postgres crate), contract test 양어댑터 공용 | store 4/4 + PG contract 실서버(postgres:16) PASS, 29/29 전체 — 해당 SHA 시점 | 현재 HEAD는 미연결: main.rs:8-12 비-sqlite panic, build_state(lib.rs:121-124) SqliteStore 하드코딩, pg_schema.sql은 users/login_attempts(010/011)·display_name/token_version(011)·integrations/donations(012)까지 커버 — 실제 누락은 counters+outbox.delivered_at/lease_owner(009)와 seller_memberships(011)뿐. 실데이터 이관·wiring·재검증 필요 | 6 |
| 6 Codec | PARTIAL | proto 파일 drift 수정(payment_id/actor_role/seller_id 등+신규 메시지), 3코덱 유지, BE codegen 도입(be/build.rs protox+prost-build → models.rs re-export) | codec 13/13 (이전) | FE ES codegen 미연결(buf.gen.yaml dead config) | 7 |
| 7 Origin 004 | PARTIAL→완료(테스트범위) | useOverlayShell immediate 수정(복원시 ESC/scroll-lock 미부착 회귀 수정), payload 누수 수정 | overlay-nav.spec 5/5 — invalid action/payload fallback·ephemeral Forward 차단·중첩 back 복원·reload+ESC | iframe 외부위젯 없음(N/A) | 8 |
| 8 Audit | PARTIAL | SHA-256(+HMAC 옵션) 체인, verify_audit_chain, detail 최소화(ad()) | security_test audit_chain_integrity — 해시 재계산 일치 | 외부 checkpoint export 미구현 | 9 |
| 9 Ledger | PARTIAL | ledger_kind/direction/asset/quantity/ref_id/idem_key 구조화 | security_test ledger_consistency — captured−refunded=paid합, 멱등키 중복0 | 게임재화 합계 테스트 추가 여지 | 10 |
| 10 Outbox | COMPLETE(테스트범위) | claim/lease/backoff/recover_stale/spawn_blocking + poison 회수 | outbox 5/5 — 다중디스패처 단일claim·stale회수·백오프경과 | consumer 타임아웃 한계 문서화 | 11 |
| 11 Observability | PARTIAL | route 정규화 + TelemetryMode(console/none/otlp계약) + W3C traceparent 전파 | - | OTLP 실전송 미구현(opentelemetry-otlp 필요) | 12 |
| 12 AuthZ | PARTIAL | JWT HS256(iss/aud/exp) prod, seller_id 소유권 스코프(전체 리소스), seller2 dev | security_test — IDOR 목록/직접접근/수정/삭제 차단, buyer scope, prod fail-closed 5/5 | JWKS·세션 폐기 미구현 | 13 |
| 13 Perf | PARTIAL | perf-baseline.mjs + docs/perf-baseline.md (50동시300요청: protobuf p50 15ms vs json 30ms, 쓰기 p50 186ms=SQLite 단일writer 상한) | 실행 완료 | 컨테이너·장애 시나리오 미측정 | 14 |
| 14 CI | PARTIAL | docker-smoke job 추가(build+compose+프록시health+401fail-closed+teardown) | - | 러너 실행 결과 미확인, contract lint job 없음 | - |
| Phase | Status | Implemented | Tests | Blocker | Next |
|---|
실측 검증 (최근)
cargo test17/17 — api 8 + migration 4 + outbox 4 + store 1npx playwright test21/21 — 프로젝트·상품 생성→서버ID→새로고침, Order.payment_id, 유료피드백, 인증, O4 오버레이, codec 3×3 교차(13)vue-tsc0 에러, Rate limit 5rpm→429 실증, BE 재시작 후 데이터 유지- 성능: 50동시 GET /projects p50=27.1ms p95=28.6 p99=50.2, payload json 5236B/msgpack 4338B/protobuf 2988B
미구현 (P2+)
buf lint/breaking CI(proto-check job; 로컬 buf 없음, CI 검증 예정), 핸들러→Store 포트 이전, OTLP 실컬렉터 수출·traceparent 계보 VERIFIED, PG 어댑터 wiring(구현 코드·contract test 존재, 미연결 — Phase 5 참조), 다중 seller 소유권, Docker 빌드·compose 실행 VERIFIED, 중첩 오버레이, Audit Retention·Ledger 분리, Docker 빌드 검증, DB Lock·메모리 측정
Cloudflare 배포 로드맵 (writing-block.md — 2026-10-30)
| Phase | Status | Evidence |
|---|---|---|
| 0 URL env 일원화 | COMPLETE | siteUrl/mcpUrl runtimeConfig, placeholder 제거 |
| 1 FE/BE 결함 | COMPLETE | read_of 오류 표면화, prod seed 차단 |
| 2 CI 비용 | COMPLETE | workflow_dispatch+PR+concurrency |
| 3 Pages FE | DEPLOYED | staging.nougat-devpay.pages.dev 200 |
| 4 Workers+D1 PoC | VERIFIED | api.staging+api.devpay live, 7 GET 200 |
| 5 D1 schema | VERIFIED | 001~008+ALTER 적용, 원자 batch 쓰기 |
| 6 API 이식 | PARTIAL | checkout/refund/purchase/sub_event/feedback/ff_retry 검증 |
| 7 audit/ledger/outbox | VERIFIED | cron */5 consumed 확인, batch 원자 |
| 8 인증·도메인 | PARTIAL | Bearer secret+401 경계+2 도메인 live |
| 9 staging E2E | VERIFIED | FE→api.staging→D1 실요청 통과 |
| 10 배포 스크립트 | PARTIAL | deploy-fe/be/all.ps1 |
| 11 베타 게이트 | PARTIAL | 무료한도 적합, 미해결 P0 없음 |
잔여: 실사용자 auth(JWT), prod FE 배포(auth 대기), settlement/product CRUD/donation/widget/admin 이식, sqlite→D1 데이터 이관, outbox 실패재시도 경로, MCP.