# Backend·Frontend·Hangfire 구현 표준 ## Backend - FastEndpoints는 HTTP 계약·Auth·Validator·ProblemDetails만 담당한다. - Application은 멱등키, transaction, Context loading, orchestration을 담당한다. - Domain Policy는 순수 함수와 상태전이로 구현한다. - Dapper SQL은 명시 컬럼·명시 transaction·PIT cutoff를 사용한다. - Decision과 Outbox는 동일 transaction이다. - Inbox는 message id/version/consumer 기준 중복 side effect를 0으로 만든다. - 생산형 Command는 PositionLotId, AsOf, IdempotencyKey 등 최소 식별자만 받고 Evidence/VersionSet은 서버가 조회한다. ## v12.5 Scheduler 안전장치 - Dispatcher는 configuration에서 기본 OFF다. - OFF이면 recurring job을 제거한다. - ShadowEvaluation capability가 꺼져 있으면 Dispatcher를 활성화할 수 없다. - J10~J30은 평가·제안·훈련만 허용하며 모델/설정/코드·고객공개·주문을 변경하지 않는다. - 기존 schedule은 migration 후 재승인 전 disabled다. - default Hangfire blind retry를 제한하고 BusinessHold/Quarantine/Poison을 구분한다. - 시장캘린더와 source completeness 승인 전 J26을 활성화하지 않는다. ## Frontend | 상태 | 소유자 | 규칙 | |---|---|---| | Server state | TanStack Query | query-key registry, staleTime, invalidate, retry | | Session/Role/UI preference | Pinia | 도메인 서버데이터 복제 금지 | | Form | vee-validate + Zod | request/response runtime validation | | URL 공유상태 | vue-router | scope/cohort/window/filter deep link | | 대량 운영목록 | AG Grid | server-side model과 column-state contract | 고객 화면은 내부 운영 화면과 분리한다. 고객에게는 행동·비중·핵심근거·반대증거·비용·불확실성·유효기간·다음검토·재진입 계약을 제공한다. 운영자에게는 VersionSet, DQ, policy trace, approval, audit를 제공한다.