P01 지점 onboarding 실제 actor acceptance
이 페이지는 P01-branch-onboarding의 canonical 실제 actor 근거다. 증거 판정은
phaseAcceptancePassed: true, 전체 마이그레이션 판정은 completionClaim: false다.
나머지 12개 phase가 PASS하기 전에는 100% 마이그레이션 완료를 주장하지 않는다.
온라인 배포는 수행하지 않았다.
상위 결정은 ADR-030과 ADR-033이며, 저장 원자성의 세부 기준은 P01 Supabase 내구성 검증에 있다.
레거시 근거
Section titled “레거시 근거”| Anchor | 확인한 실제 동작 |
|---|---|
source-refs/sanmopia-admin/application/controllers/OfficeManagement.php:9-13 | 로그인만 확인하고 지점 생성용 HQ role을 강제하지 않는다. |
source-refs/sanmopia-admin/static/js/office_management/office_list.js:24-31 | 본사 목록에서 신규 지점 화면으로 이동한다. |
source-refs/sanmopia-admin/application/controllers/OfficeManagement.php:374-452 | 지점·대표·사업자번호·로그인·연락처·계좌·상태를 한 submit으로 저장한다. |
source-refs/sanmopia-admin/application/models/Branch_model.php:186-289 | 로그인 ID 중복 확인 뒤 지점, auth token, 당월 회비를 만든다. |
현대화 경계는 caller 입력을 권한으로 쓰지 않는다. 서버가 HQ actor를 해석하고, branch profile,
운영자 identity, 초대, 회비 정책, parent_hq/hq_admin/branch_operator 관계와 effect journal을
복구 가능한 한 onboarding 결과로 묶는다.
A→Z 실제 검증 절차
Section titled “A→Z 실제 검증 절차”-
A — immutable 입력 고정
assembly, contract, backend, frontend의 clean commit 네 개를 기록한다.
-
B — 실제 runtime 계약 확인
POST /admin/branches와 scoped current-resultGET이 실제 backend OpenAPI에 있는지 확인한다. -
C — 합성 actor 준비
HQ 관리자, 지점 운영자, 산모, 관리사와 경합용 네 HQ actor를 test-owned 자원으로 준비한다.
-
D — 실제 Supabase 세션 발급
각 actor가 실제 Auth 세션을 가지며 actor/session 원문은 증거에 남기지 않는다.
-
E — HQ 권한 확인
HQ actor의
branch:create권한과 server-resolved HQ scope를 확인한다. -
F — 비권한 actor 거부
지점 운영자, 산모, 관리사 요청이 각각 HTTP
403이고 상태 변화가 0인지 확인한다. -
G — 초대 이메일 검증
잘못된
managerInvitation.email이 exact field error와 HTTP422인지 확인한다. -
H — 사업자 식별자 필수 검증
누락된
businessIdentity가required와 HTTP422이고 mutation 0인지 확인한다. -
I — 사업자번호 형식 검증
malformed registration number가
invalid_format과 HTTP422인지 확인한다. -
J — HQ create 실행
합성 지점 요청을 제출하고 HTTP
201, completed outcome, scoped GET200을 확인한다. -
K — primary authority 확인
command 1, effect 5, audit 1, private receipt 1, branch 1, office 1, office revision 1, invitation 1, active membership 0, fee policy 1을 확인한다.
-
L — 관계 권위 확인
세 관계가 기록되고
branch_operatorrelation으로managepermission이 생기는지 확인한다. -
M — stale revision 충돌
stale organization revision이 typed HTTP
409이며 기존 authority가 변하지 않는지 확인한다. -
N — branch code 충돌
duplicate branch code가
business_identity_conflictHTTP409인지 확인한다. -
O — business identity 충돌
duplicate jurisdiction/registration number가 typed HTTP
409인지 확인한다. -
P — manager invitation 충돌
duplicate manager invitation이
manager_invitation_conflictHTTP409인지 확인한다. -
Q — exact replay
같은 actor/key/payload 재요청이 HTTP
200,idempotentReplay: true이고 중복 mutation 0인지 확인한다. -
R — reload resume
built UI reload 뒤 scoped GET 결과가 authority와 같고 mutation이 없는지 확인한다.
-
S — branch-code 동시 경합
서로 다른 HQ의 두 HTTP 요청이 waiter 2, winner 1, typed loser 1, loser partial 0인지 확인한다.
-
T — business-identity 동시 경합
두 번째 독립 axis도 waiter 2, winner 1, typed loser 1, loser partial 0인지 확인한다.
-
U — desktop 확인
1440px built UI의 completed projection과 모든 민감값 mask를 확인한다.
-
V — mobile 확인
390px 화면에서 같은 outcome과 responsive layout, mask를 확인한다.
-
W — 실제 전이 WebP 확인
네 프레임 WebP가 entry부터 completed 상태까지의 실제 UI 전이를 보여주는지 확인한다.
-
X — actor-run cleanup
세 accepted lineage의 operational/Auth/relationship/session 잔여가 0이고 audit 3, receipt 3만 남는지 확인한다.
-
Y — browser-run cleanup
browser lineage의 operational/Auth/relationship/session 잔여가 0이고 audit 1, receipt 1만 남는지 확인한다.
-
Z — privacy와 범위 판정
token, cookie, identifier, PII, request/response body, private topology가 없음을 검토하고 P01만 PASS로 판정한다.
여섯 acceptance case
Section titled “여섯 acceptance case”| Case | 실제 proof |
|---|---|
P01-happy-path | create 201, scoped GET 200, completed authority, exact ten-table count |
P01-authorization | branch manager, mother, caregiver 각각 403; mutation 0 |
P01-validation | 초대 이메일, 누락 business identity, malformed registration number 각각 422; mutation 0 |
P01-conflict | 직렬 네 variant 409; cross-HQ 두 axis 각각 waiter 2, winner 1, typed loser 1, partial 0 |
P01-exact-replay | HTTP 200, replay true, 중복 mutation 0; reload GET도 mutation 0 |
P01-cleanup | actor operational/Auth/relationship/session 0, audit/receipt 3/3; browser 0, 1/1 |
실제 UI 근거
Section titled “실제 UI 근거”


모든 business/contact/address/invitation/reason/result 값은 opaque mask로 덮었다. actor/resource ID, access/refresh token, cookie, idempotency key, request/response body, private topology는 manifest와 이미지에 없다.
고정 증거와 revision
Section titled “고정 증거와 revision”- 실제 actor source SHA-256:
984cd579bcd084ccbdd5c5c403ff6c67889d3e42580902ea16701aaf9dfbfa14 - assembly:
daec45376021c9df3fb7821c745e21766b32eae8 - contract:
e4534e41c0cd9b06d6193e8850088469f798d162 - backend:
f75548e76866ea10bf36c0f34824262850d0f8aa - frontend:
e429d59d31eadc046a2e1920ad29dc088fe15dba
Canonical machine evidence는 docs/evidence/p01-branch-onboarding/의 actual actor, API,
primary state, browser, cleanup manifest와 privacy review가 소유한다. public audit와 private
accepted-result receipt는 보존해야 하는 evidence authority이며 operational 잔여로 세지 않는다.