P03 산모 계정·탈퇴 생명주기 완료 검증
P03-mother-account-profile은 P03 PASS다. 신규 무이력 산모의 6-case, 이력이 있는
산모의 검토·보존·파기 8-case, 인증된 HQ 검토자의 실제 Chromium 제출을 모두 통과했다.
phaseAcceptancePassed: true, 전체 마이그레이션 completionClaim: false이며 다음 현재
단계는 P04 RED다. 온라인 배포는 수행하지 않았다.
상위 결정은 ADR-034와
ADR-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, Restate | P03 기본 6-case PASS |
primary-state-manifest.json | profile/address/consent/withdrawal primary state | revision 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 + Chromium | UI 신규 신호 202, rail 88px, overflow·console·failed request 0 |
cleanup-manifest.json | Auth·DB·관계·컨테이너·프로세스·임시 파일 | 전 잔여 0 |
A→Z 실제 검증 절차
Section titled “A→Z 실제 검증 절차”-
A — 레거시 가입 기준 고정
signup.js,Account.php,User_model.php의 이메일 중복, 주소 분리 저장, 일반/소셜 completeness 차이를 P03 source anchor로 고정한다. -
B — DDD 경계 확인
domain ← application ← adapters/interfaces ← orchestration방향을 유지하고 source별 privacy 처리는 reservation, pricing/settlement, care-delivery port로 분리한다. -
C — clean four-repository pin
assembly
9367f44, contractc4b2488, frontend864c78e, backenda9dd6a7의 revision·tree·clean: true를 실행 전후 비교한다. -
D — 실제 local authority 기동
Supabase CLI Auth/PostgREST, disposable SpiceDB, disposable Restate, PGMQ dispatcher를 기동하고 health 및 Restate discovery를 확인한다.
-
E — 신규 산모 Auth 생성
확인된 email·phone을 가진 test-owned Supabase Auth 사용자를 만들고 증거에는 원문 credential·contact·actor id를 남기지 않는다.
-
F — 가입 validation·authorization
미인증 요청
401, 닫힌 schema 위반422가 primary state를 바꾸지 않음을 확인한다. -
G — 가입과 profile 완료
가입
201, profile 수정201, profile revision1 → 2, address revision[1] → [1,2], consent receipt2를 확인한다. -
H — 신규 계정 exact replay
가입·profile·탈퇴 동일 key replay가 각각
200이고 primary state와 effect count를 늘리지 않는지 확인한다. -
I — 신규 계정 conflict
같은 key의 다른 payload가 typed
409이며 accepted facts를 보존하는지 확인한다. -
J — owner relationship
SpiceDB mother-profile owner 적용과 탈퇴 후 삭제 receipt를 실제 permission check로 확인한다.
-
K — 역사 계정 source fixture
예약·바우처·결제·정산·제공기록을 가진 이력 산모, HQ 검토자, 관리사 세 actor를 만든다.
-
L — review-before-effects
탈퇴
202뒤 lifecycle이waiting_for_operator_review에 멈추고 irreversible source effect가 아직 0인지 확인한다. case:P03-history-waiting. -
M — actor 권한 거부
관리사 재개 요청은
403, actor/role을 body에 넣는 닫힌 schema 위반은422인지 확인한다. -
N — blocker conflict
열린 예약이 있으면 HQ라도
409 blocking_facts_remain이고 review revision과 state가 전진하지 않는지 확인한다. -
O — blocker 해소
source authority에서 예약을 완료 상태로 바꾼 뒤 동일 server-owned blocker facts를 다시 읽는다.
-
P — 인증 HQ 브라우저 준비
mode
0600test-only session handoff를 만들고 Astro 7.1.0 loopback dev server를 실제 backend runtime URL에 연결한다. -
Q — Material responsive ready 화면
실제 Chromium에서 desktop 1280px rail 88px와 mobile 390px app bar를 확인한다.
-
R — HQ UI 신규 신호 제출
화면에는 탈퇴 접수 번호와 expected review revision만 입력한다. UI action이 실제 backend로
202,idempotentReplay: false, 검토 revision1을 반환한다. -
S — UI 개인정보 치환
accepted-state 촬영 전에 입력값과 결과 receipt를
비공개로 치환한다. token, cookie, request/response body는 manifest에 기록하지 않는다. -
T — backend exact replay·conflict
브라우저가 사용한 동일 submission key를 backend가 재전송해
200replay와 같은 receipt를 확인하고 revision 변경 payload가409인지 확인한다. -
U — Restate atomic completion
PGMQ review signal을 dispatch하고 Restate가 source effect 뒤 signal 소비, lifecycle, withdrawal request, immutable completion receipt를 한 transaction으로 완료하는지 확인한다.
-
V — source separation
reservation_operations,pricing_settlement,care_delivery에서 총 6 source record를 분리하고 운영 예약 메모를 redaction하되 관리사 identity authority는 보존한다. -
W — retention expiry·purge
다섯 법정 category의 due date 이후 purge task 1건을 claim해 receipt 6건을 만들고, Restate exact replay가 추가 mutation을 만들지 않는지 확인한다.
-
X — 브라우저 반응형·진단
desktop/mobile horizontal overflow
0, console error/warning0, failed request0, route interceptionfalse를 manifest에 고정한다. -
Y — teardown
test-owned Auth, operational rows, relationships, SpiceDB/Restate containers, processes, handoff/session/temp files를 정리하고 각 잔여 count
0을 확인한다. -
Z — canonical 승격
JSON·WebP SHA-256, genuine WebP frame 수, Starlight page, ADR-034, actor-chain SSOT를 validator로 묶고 P03을 PASS, P04를 RED로 전진시킨다.
실제 HQ 관리자 화면
Section titled “실제 HQ 관리자 화면”Desktop ready
Section titled “Desktop ready”
Mobile ready
Section titled “Mobile ready”
Mobile accepted
Section titled “Mobile accepted”
Desktop accepted
Section titled “Desktop accepted”
실제 전환 WebP
Section titled “실제 전환 WebP”
case 판정
Section titled “case 판정”P03-happy-path,P03-authorization,P03-validation,P03-conflict,P03-exact-replay,P03-cleanup: PASSP03-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부터 계속)