Commit Graph
2 Commits
Author SHA1 Message Date
genichinandClaude Opus 4.8 017b8185e0 feat(slot): BAT-027 M2/M3 — 상태머신 inactive 재정의 + 인스턴스 스코프 advisory lock (dcy-020/REQ-057)
안 B 점진의 2/3단계. runtime 무변경(idle/closed 별칭 흡수)으로 cascade 통제.

- state.py: SlotState.INACTIVE 추가 + idle/closed 별칭 normalize_state(); 전이 집합
  inactive 기준 재정의(inactive↔pending_buy↔holding↔pending_sell), closed→idle 제거;
  is_allowed_transition 양쪽 정규화; slot_advisory_lock_id(instance_key) 헬퍼
- service.py: SlotService(instance_key) + advisory lock 인스턴스 스코프(self._lock_id)
- __init__: normalize_state/slot_advisory_lock_id export; daemon: instance_key 전달
- 테스트 갱신: test_state(전이/멤버7/락/size12), test_service(closed→idle 제거→reallocation),
  test_slot_entry_count, test_postgresql_repository(closed→idle 거부+reallocation)

검증: 단위 375 passed / 35 skipped, PG-gated(trex_core_test) 8 passed
(마이그레이션 009 드리프트 + lifecycle/reallocation), ruff clean.

REQ-056/057 은 토대만 충족 → Approved 유지(entry_count/trading_date drop·literal
inactive 전면 전환은 BAT-δ; confirm-req-implemented 는 dcy-020 후속 배치 완료 후).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 10:53:39 +09:00
genichinandClaude Opus 4.8 4e92134c28 docs(batch): draft-batch BAT-027 (dcy-020 BAT-α 자산 영구 슬롯 토대) + design 확정(안 B)
REQ-056(영구 슬롯 스키마)+REQ-057(상태머신 재정의+인스턴스 lock) 토대 배치.
- planning: delivery plan/Design Gate(R-cascade)/milestones/risks
- design: R-cascade 실측(idle·closed/entry_count/전역 lock/trading_date 소비처) +
  접근안 A/B/C → 안 B(점진/additive-first) 확정:
  * additive 스키마(instance_key·retired_at, entry_count/trading_date 유지→BAT-δ drop)
  * inactive 표준 + idle/closed 별칭(closed→idle 제거)
  * advisory lock 인스턴스 스코프화
  * 부분 UNIQUE(instance_key, portfolio_id) WHERE portfolio_id NOT NULL
  * instance_key NOT NULL DEFAULT 'default'
- batches/index BAT-027(standard, planning) 등록

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 10:39:33 +09:00