Skip to content

P04 본사 대여용품 카탈로그 실제 actor 증거

대여용품 명칭·비목·요금·지점 확인 여부·배송비는 UI 상수가 아니라 Pricing Settlement의 append-only immutable revision으로 발행한다. 브라우저는 cookie-derived same-origin server boundary만 사용하고 bearer token이나 service-role credential을 받지 않는다.

  1. A · 격리 Supabase 구성

    pinned Supabase CLI 2.109.1로 GoTrue·Storage 선행 스키마와 repository migration 315/315를 disposable PostgreSQL에 적용하고 PostgREST를 연결한다.

  2. B · 실제 actor 생성

    실제 GoTrue에 HQ actor와 비권한 actor를 각각 만들고 로그인한다. 브라우저에는 HQ session cookie만 전달한다.

  3. C · 권한 관계 생성

    disposable SpiceDB에 production schema를 쓰고 HQ actor에만 hq_settlement:price_catalog_management#manage 관계를 부여한다.

  4. D · 현재 revision 조회

    Astro production UI가 same-origin GET을 통해 현재 승인 revision과 대여용품 5개를 읽는다. 화면은 응답 행으로 초기화하며 상품을 코드 상수로 만들지 않는다.

  5. E · 새 revision 편집

    현재 revision을 draft로 복제하고 아기 체중계를 여섯 번째 stable entry로 추가한다. 표시명, legacy source code, 장비료, 지점 확인 여부, 순서, 발효 기간, source anchor와 SHA-256, repository revision, 승인 근거를 실제 UI에서 입력한다.

  6. F · immutable 발행과 재조회

    실제 POST가 HQ identity와 SpiceDB 권한을 검증한 뒤 service-role publication RPC를 호출한다. UI는 receipt를 표시하고 current catalog를 다시 읽어 5 → 6을 확인한다.

  7. G · idempotency와 conflict

    같은 idempotency key·같은 payload의 exact replay는 같은 결과를 반환한다. 같은 key의 변경된 payload는 503으로 거절되고 직접 SQL로 revision·entry 수가 변하지 않았음을 확인한다.

  8. H · 비권한 actor 차단

    비권한 GoTrue actor의 GET과 POST는 모두 403이다. HQ actor나 service-role 정보를 client payload로 위조할 수 없다.

  9. I · 직접 DB 계보 검증

    PostgreSQL에서 revision 2, supersession 1, current published entry 6, source evidence 1, 최초 publisher 보존을 assertion한다.

  10. J · 데스크톱 반응형 검증

    1440px에서 Material navigation rail 88px, TanStack desktop table 표시, 수평 overflow 0, console warning/error 0, failed request 0을 확인한다.

  11. K · 모바일 카드 치환

    390px에서는 표를 줄이지 않고 별도 세로 카드 DOM으로 치환한다. 발행된 카드 6장, 수평 overflow 0을 확인한다.

  12. Z · cleanup

    SpiceDB 관계와 두 GoTrue actor를 삭제하고 Auth row 0을 확인한다. PostgreSQL, PostgREST, GoTrue, SpiceDB, Astro process·container·network·임시 디렉터리 제거가 성공한 뒤에만 manifest에 cleanup PASS를 기록한다.

실제 HQ actor가 현재 대여용품 다섯 개를 조회하고 새 용품과 source evidence를 편집한 뒤 immutable revision을 발행하는 데스크톱 흐름

실제 HQ actor가 승인 revision과 대여용품 다섯 개를 조회한 데스크톱 화면

새 용품과 revision metadata 및 source evidence를 입력한 실제 draft 화면

immutable 발행 receipt와 여섯 개 current entry를 표시한 실제 화면

실제 HQ actor의 데스크톱 표가 390픽셀에서 여섯 개 세로 카드로 치환되는 반응형 발행 결과

390픽셀에서 발행된 대여용품 여섯 개를 별도 세로 카드로 표시한 실제 화면

Gate실제 결과위상
Actor/authreal GoTrue HQ + unauthorized actorGREEN
Authorizationreal SpiceDB HQ allow, unauthorized GET/POST 403GREEN
Backend/APIproduction adapters/composition, current GET, immutable POSTGREEN
Replay/conflictexact replay PASS, altered replay 503, DB unchangedGREEN
Database lineagerevisions 2, supersession 1, entries 6, evidence 1GREEN
Browser layoutdesktop overflow 0, mobile overflow 0, rail 88px, cards 6GREEN
Browser diagnosticsconsole warning/error 0, failed request 0GREEN
CleanupAuth actor·SpiceDB relation·runtime resource 제거 PASSGREEN
Backend downstream rental contractselection → quote → handoff → booking workflow → finalized chargeGREEN · code gate
Backend regression7,079 passed, Ruff/Tach/Vulture PASS코드 gate
Frontend regression95 files / 591 tests, lint, Astro check/build PASS코드 gate
P04 전체산모 browser·실제 workflow·payment/정산/문서·법무·final confirm 미완RED/partial
Online deployment실행하지 않음제외

Backend 7f51408b9f5ba81452ec8923307fc43c251eeccf는 관리 화면이 발행한 catalog revision을 예약에서 다시 해석하는 후속 경계를 구현했다.

  • 선택 항목은 effective catalog의 stable key·label·장비료·왕복 배송비·지점 확인 flag로 ReservationRentalSelectionRevision에 동결한다.
  • catalog 밖 key, 중복 key, 지점 확인이 필요한 항목의 미확인은 fail-closed다.
  • 배송비는 선택 개수와 무관하게 reservation_level_max_once로 한 줄만 계산한다.
  • 최종 검토 quote의 rental item/delivery line, payable, charge handoff pricing revision, internal booking mapping이 같은 selection/catalog revision을 사용한다.
  • 승인 handoff 번역은 final-review 선택, quote line, offering, pricing revision 중 하나라도 달라지면 booking command를 만들지 않는다.
  • Restate workflow input이 selection revision과 line별 policyVersionLabel을 보존하고, finalized charge snapshot의 rental line도 catalog revision을 그대로 보존한다.

집중 회귀 153 passed, 전체 Python 7,079 passed, Ruff PASS, Tach dependency/interface/ exact/external diagnostic 0이다. Vulture confidence-100에서 새 contract/query 후보는 0; 넓은 경로 후보 12건은 호출되는 Protocol 인자로 확인해 삭제하지 않았다. 이 gate는 backend 계약 증거다. 새 actor/browser/WebP 또는 실제 Supabase booking 실행을 주장하지 않는다.

Asset SHA-256·크기·frame 수·privacy 판정은 actual evidence manifest이 소유한다. 직접 SQL 결과는 database verification에 고정했다. Manifest는 classification: actual-actor-browser-backend-database-acceptance, evidenceStatus: passed, routeInterception: false, authenticatedActor: true, completionClaim: false를 명시한다.

Frontend 4996253d의 route-intercepted pack은 레이아웃 구현 당시의 회귀 자료로 남긴다. provisional manifest는 실제 actor/backend 근거가 아니며 위 actual pack을 덮지 않는다.