# BAT-028: universe reconcile + 활성 capacity admission (dcy-020 BAT-β) - Status: release-candidate - Profile: standard - Source Discovery: dcy-020 - Included REQ: REQ-058 (universe reconcile lifecycle), REQ-059 (활성 capacity admission FCFS·M·over-cap), REQ-060 (max_active_slots per-instance TOML) ## Summary - dcy-020 의 **2번째 구현 배치(BAT-β)**. 슬롯 lifecycle 을 일일 preallocation 에서 **universe reconcile**(자산 1:1 생성/soft-retire/tombstone)로, buy admission 을 pool(find_allocatable_slot)에서 **자산 중심 FCFS + 동시 활성 M 캡**으로 전환한다. M 은 per-instance TOML(`max_active_slots`). - **안 B 핵심(라이브 안전)**: 자산 중심 경로를 **config 게이트(`max_active_slots` 설정 시 활성)**로 도입하고, 미설정 시 기존 pool 동작 유지. 운영 데몬은 cutover(BAT-δ) 전까지 pool 모드로 무중단 — 신규 경로는 테스트/단계 전환용. ## Scope - In Scope: - REQ-060: `DaemonInstanceConfig.max_active_slots`(per-instance TOML) — config 게이트 신호 - REQ-058: `reconcile_slots(universe)` — 자산 1:1 생성(멱등)·비활성 soft-retire·보유/pending tombstone·degrade/대량소멸 보류. 스냅샷 refresh 경로에 결합 - REQ-059: 자산 중심 admission — 자산 슬롯 활성화(inactive→pending_buy), 활성(holding+pending) M 캡·`capacity_full` 거부·무치환·over-cap·already_active, 인스턴스 스코프 lock 경합 - runtime-flows.md 부분 갱신(REQ-065 부분) - Out of Scope: - 기존 pool 경로 제거(legacy 유지 — 제거는 BAT-δ cutover) - intent 자산 키 통일·sell-by-portfolio_id (REQ-061 → BAT-γ) - 수량/불일치(REQ-062), 운영자 뷰(REQ-063) → BAT-γ - 라이브 cutover·컬럼 drop·literal inactive 전면화 (REQ-064 → BAT-δ) ## Documents - Planning: [planning.md](./planning.md) - Design: [design.md](./design.md) - Implementation: [implementation.md](./implementation.md) - Verification: [verification.md](./verification.md) ## Notes - Source discovery 단일(dcy-020). BAT-027(토대) 후속, BAT-γ/δ 선행. - **핵심 리스크**: admission/슬롯 생성은 **라이브 데몬 동작**이라, config 게이트로 pool 모드 기본 유지(운영 무중단)하고 자산 중심은 신규 경로로 도입 — design 에서 게이트 경계 확정 후 구현(design 체크포인트).