Skip to content

P01 지점 onboarding 실제 actor acceptance

이 페이지는 P01-branch-onboarding의 canonical 실제 actor 근거다. 증거 판정은 phaseAcceptancePassed: true, 전체 마이그레이션 판정은 completionClaim: false다. 나머지 12개 phase가 PASS하기 전에는 100% 마이그레이션 완료를 주장하지 않는다. 온라인 배포는 수행하지 않았다.

상위 결정은 ADR-030ADR-033이며, 저장 원자성의 세부 기준은 P01 Supabase 내구성 검증에 있다.

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 결과로 묶는다.

  1. A — immutable 입력 고정

    assembly, contract, backend, frontend의 clean commit 네 개를 기록한다.

  2. B — 실제 runtime 계약 확인

    POST /admin/branches와 scoped current-result GET이 실제 backend OpenAPI에 있는지 확인한다.

  3. C — 합성 actor 준비

    HQ 관리자, 지점 운영자, 산모, 관리사와 경합용 네 HQ actor를 test-owned 자원으로 준비한다.

  4. D — 실제 Supabase 세션 발급

    각 actor가 실제 Auth 세션을 가지며 actor/session 원문은 증거에 남기지 않는다.

  5. E — HQ 권한 확인

    HQ actor의 branch:create 권한과 server-resolved HQ scope를 확인한다.

  6. F — 비권한 actor 거부

    지점 운영자, 산모, 관리사 요청이 각각 HTTP 403이고 상태 변화가 0인지 확인한다.

  7. G — 초대 이메일 검증

    잘못된 managerInvitation.email이 exact field error와 HTTP 422인지 확인한다.

  8. H — 사업자 식별자 필수 검증

    누락된 businessIdentityrequired와 HTTP 422이고 mutation 0인지 확인한다.

  9. I — 사업자번호 형식 검증

    malformed registration number가 invalid_format과 HTTP 422인지 확인한다.

  10. J — HQ create 실행

    합성 지점 요청을 제출하고 HTTP 201, completed outcome, scoped GET 200을 확인한다.

  11. 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을 확인한다.

  12. L — 관계 권위 확인

    세 관계가 기록되고 branch_operator relation으로 manage permission이 생기는지 확인한다.

  13. M — stale revision 충돌

    stale organization revision이 typed HTTP 409이며 기존 authority가 변하지 않는지 확인한다.

  14. N — branch code 충돌

    duplicate branch code가 business_identity_conflict HTTP 409인지 확인한다.

  15. O — business identity 충돌

    duplicate jurisdiction/registration number가 typed HTTP 409인지 확인한다.

  16. P — manager invitation 충돌

    duplicate manager invitation이 manager_invitation_conflict HTTP 409인지 확인한다.

  17. Q — exact replay

    같은 actor/key/payload 재요청이 HTTP 200, idempotentReplay: true이고 중복 mutation 0인지 확인한다.

  18. R — reload resume

    built UI reload 뒤 scoped GET 결과가 authority와 같고 mutation이 없는지 확인한다.

  19. S — branch-code 동시 경합

    서로 다른 HQ의 두 HTTP 요청이 waiter 2, winner 1, typed loser 1, loser partial 0인지 확인한다.

  20. T — business-identity 동시 경합

    두 번째 독립 axis도 waiter 2, winner 1, typed loser 1, loser partial 0인지 확인한다.

  21. U — desktop 확인

    1440px built UI의 completed projection과 모든 민감값 mask를 확인한다.

  22. V — mobile 확인

    390px 화면에서 같은 outcome과 responsive layout, mask를 확인한다.

  23. W — 실제 전이 WebP 확인

    네 프레임 WebP가 entry부터 completed 상태까지의 실제 UI 전이를 보여주는지 확인한다.

  24. X — actor-run cleanup

    세 accepted lineage의 operational/Auth/relationship/session 잔여가 0이고 audit 3, receipt 3만 남는지 확인한다.

  25. Y — browser-run cleanup

    browser lineage의 operational/Auth/relationship/session 잔여가 0이고 audit 1, receipt 1만 남는지 확인한다.

  26. Z — privacy와 범위 판정

    token, cookie, identifier, PII, request/response body, private topology가 없음을 검토하고 P01만 PASS로 판정한다.

Case실제 proof
P01-happy-pathcreate 201, scoped GET 200, completed authority, exact ten-table count
P01-authorizationbranch 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-replayHTTP 200, replay true, 중복 mutation 0; reload GET도 mutation 0
P01-cleanupactor operational/Auth/relationship/session 0, audit/receipt 3/3; browser 0, 1/1
HQ 관리자가 신규 지점 정보를 입력하고 completed 결과를 확인하는 네 프레임 실제 UI 전이
실제 built Astro UI 전이 · animated WebP 4 frames · redaction reviewed
민감한 합성 지점 값이 가려진 desktop completed 화면
Desktop · 1440px · completed
민감한 합성 지점 값이 가려진 mobile completed 화면
Mobile · 390px · completed

모든 business/contact/address/invitation/reason/result 값은 opaque mask로 덮었다. actor/resource ID, access/refresh token, cookie, idempotency key, request/response body, private topology는 manifest와 이미지에 없다.

  • 실제 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 잔여로 세지 않는다.