Skip to content

P03 산모 계정·탈퇴 생명주기 완료 검증

P03-mother-account-profileP03 PASS다. 신규 무이력 산모의 6-case, 이력이 있는 산모의 검토·보존·파기 8-case, 인증된 HQ 검토자의 실제 Chromium 제출을 모두 통과했다. phaseAcceptancePassed: true, 전체 마이그레이션 completionClaim: false이며 다음 현재 단계는 P04 RED다. 온라인 배포는 수행하지 않았다.

상위 결정은 ADR-034ADR-033이다. canonical 기계 근거는 docs/evidence/p03-mother-account-profile-complete/, WebP는 apps/docs/src/assets/evidence/p03-mother-account-profile-complete/가 소유한다.

근거실제 경계결과
actual-actor-run.json신규 산모, local Auth/PostgREST, SpiceDB, RestateP03 기본 6-case PASS
primary-state-manifest.jsonprofile/address/consent/withdrawal primary staterevision 1 → 2 → 3, replay 무변경 PASS
actual-historical-actor-run.json산모·HQ·관리사, PGMQ, source owner 3개역사 계정 8-case, 보존 6건, 파기 receipt 6건 PASS
actual-admin-review-browser-run.json인증 HQ, 실제 Astro 7 + ChromiumUI 신규 신호 202, rail 88px, overflow·console·failed request 0
cleanup-manifest.jsonAuth·DB·관계·컨테이너·프로세스·임시 파일전 잔여 0
  1. A — 레거시 가입 기준 고정

    signup.js, Account.php, User_model.php의 이메일 중복, 주소 분리 저장, 일반/소셜 completeness 차이를 P03 source anchor로 고정한다.

  2. B — DDD 경계 확인

    domain ← application ← adapters/interfaces ← orchestration 방향을 유지하고 source별 privacy 처리는 reservation, pricing/settlement, care-delivery port로 분리한다.

  3. C — clean four-repository pin

    assembly 9367f44, contract c4b2488, frontend 864c78e, backend a9dd6a7의 revision·tree·clean: true를 실행 전후 비교한다.

  4. D — 실제 local authority 기동

    Supabase CLI Auth/PostgREST, disposable SpiceDB, disposable Restate, PGMQ dispatcher를 기동하고 health 및 Restate discovery를 확인한다.

  5. E — 신규 산모 Auth 생성

    확인된 email·phone을 가진 test-owned Supabase Auth 사용자를 만들고 증거에는 원문 credential·contact·actor id를 남기지 않는다.

  6. F — 가입 validation·authorization

    미인증 요청 401, 닫힌 schema 위반 422가 primary state를 바꾸지 않음을 확인한다.

  7. G — 가입과 profile 완료

    가입 201, profile 수정 201, profile revision 1 → 2, address revision [1] → [1,2], consent receipt 2를 확인한다.

  8. H — 신규 계정 exact replay

    가입·profile·탈퇴 동일 key replay가 각각 200이고 primary state와 effect count를 늘리지 않는지 확인한다.

  9. I — 신규 계정 conflict

    같은 key의 다른 payload가 typed 409이며 accepted facts를 보존하는지 확인한다.

  10. J — owner relationship

    SpiceDB mother-profile owner 적용과 탈퇴 후 삭제 receipt를 실제 permission check로 확인한다.

  11. K — 역사 계정 source fixture

    예약·바우처·결제·정산·제공기록을 가진 이력 산모, HQ 검토자, 관리사 세 actor를 만든다.

  12. L — review-before-effects

    탈퇴 202 뒤 lifecycle이 waiting_for_operator_review에 멈추고 irreversible source effect가 아직 0인지 확인한다. case: P03-history-waiting.

  13. M — actor 권한 거부

    관리사 재개 요청은 403, actor/role을 body에 넣는 닫힌 schema 위반은 422인지 확인한다.

  14. N — blocker conflict

    열린 예약이 있으면 HQ라도 409 blocking_facts_remain이고 review revision과 state가 전진하지 않는지 확인한다.

  15. O — blocker 해소

    source authority에서 예약을 완료 상태로 바꾼 뒤 동일 server-owned blocker facts를 다시 읽는다.

  16. P — 인증 HQ 브라우저 준비

    mode 0600 test-only session handoff를 만들고 Astro 7.1.0 loopback dev server를 실제 backend runtime URL에 연결한다.

  17. Q — Material responsive ready 화면

    실제 Chromium에서 desktop 1280px rail 88px와 mobile 390px app bar를 확인한다.

  18. R — HQ UI 신규 신호 제출

    화면에는 탈퇴 접수 번호와 expected review revision만 입력한다. UI action이 실제 backend로 202, idempotentReplay: false, 검토 revision 1을 반환한다.

  19. S — UI 개인정보 치환

    accepted-state 촬영 전에 입력값과 결과 receipt를 비공개로 치환한다. token, cookie, request/response body는 manifest에 기록하지 않는다.

  20. T — backend exact replay·conflict

    브라우저가 사용한 동일 submission key를 backend가 재전송해 200 replay와 같은 receipt를 확인하고 revision 변경 payload가 409인지 확인한다.

  21. U — Restate atomic completion

    PGMQ review signal을 dispatch하고 Restate가 source effect 뒤 signal 소비, lifecycle, withdrawal request, immutable completion receipt를 한 transaction으로 완료하는지 확인한다.

  22. V — source separation

    reservation_operations, pricing_settlement, care_delivery에서 총 6 source record를 분리하고 운영 예약 메모를 redaction하되 관리사 identity authority는 보존한다.

  23. W — retention expiry·purge

    다섯 법정 category의 due date 이후 purge task 1건을 claim해 receipt 6건을 만들고, Restate exact replay가 추가 mutation을 만들지 않는지 확인한다.

  24. X — 브라우저 반응형·진단

    desktop/mobile horizontal overflow 0, console error/warning 0, failed request 0, route interception false를 manifest에 고정한다.

  25. Y — teardown

    test-owned Auth, operational rows, relationships, SpiceDB/Restate containers, processes, handoff/session/temp files를 정리하고 각 잔여 count 0을 확인한다.

  26. Z — canonical 승격

    JSON·WebP SHA-256, genuine WebP frame 수, Starlight page, ADR-034, actor-chain SSOT를 validator로 묶고 P03을 PASS, P04를 RED로 전진시킨다.

P03 인증 HQ 관리자 desktop 검토 준비 화면 P03 인증 HQ 관리자 mobile 검토 준비 화면 P03 인증 HQ 관리자 mobile 검토 신규 신호 접수 화면 P03 인증 HQ 관리자 desktop 검토 신규 신호 접수 화면 P03 인증 HQ 관리자 검토 준비부터 접수까지 실제 WebP 전환
  • P03-happy-path, P03-authorization, P03-validation, P03-conflict, P03-exact-replay, P03-cleanup: PASS
  • P03-history-waiting, P03-history-authorization, P03-history-validation, P03-history-blocker-conflict, P03-history-review-resumption, P03-history-exact-replay, P03-source-retention-erasure, P03-retained-record-expiry-purge: PASS
  • P03 gaps: []
  • 전체 마이그레이션: 미완료 (P04부터 계속)