Files
trex-core/docs/srs/Data/req-056_asset-permanent-slot-schema.md
T
genichinandClaude Opus 4.8 e2a71e50e2 docs(req): dcy-020 confirm + 추가 사양(FR-6~8/NFR-4~5/OQ-8) + draft-req REQ-056~065
dcy-020(자산 중심 영구 슬롯 모델) Requirements phase.

- 추가 사양: FR-6(상태머신 재정의), FR-7(intent 자산 키), FR-8(운영자 단일뷰),
  NFR-4(전략 계약 호환), NFR-5(불일치 감지 주기), OQ-8(over-cap=신규 차단·기존 유지),
  dcy-019 산출물 제거 명시. review-discovery 정리 반영.
- confirm-discovery: 상태 draft→confirmed, Handoff 승인, Ready=true,
  Confirmed By=Justin Ko, 2026-06-10. index 행 confirmed.
- draft-req: 신규 REQ-056~065(전부 Proposed) 생성
  - 056 영구 슬롯 스키마 / 057 상태머신+인스턴스 lock / 058 universe reconcile
  - 059 capacity·admission / 060 max_active_slots TOML / 061 intent 자산 키
  - 062 수량 hub 정본+불일치 해소 / 063 slots 단일뷰 / 064 cutover / 065 baseline
  - srs/index Next ID→066, Register 10행, Recent Change Log 갱신
  - dcy-020 생성된 REQ 참조 갱신

기존 REQ-002/003/005/006/007/048 폐기·재정의 change-req 는 후속(문서 단계).

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

3.7 KiB

req-056: 자산 영구 슬롯 스키마 재설계 + 마이그레이션

  • Status: Proposed
  • Type: Data
  • Priority: High
  • Owner: project maintainers

Intent

  • 익명 슬롯 풀(daily_slot 일일 익명 행)을 portfolio-hub universe 자산과 1:1 대응하는 영구 슬롯으로 전환하기 위해, daily_slot 스키마를 자산 키·인스턴스 스코프·영속 모델로 재설계한다. (dcy-020 FR-1/OQ-3/OQ-7)

Requirement

  • daily_slot 을 영구 슬롯으로 재설계한다: portfolio_id 를 NOT NULL 영구 키로, instance_key 컬럼 추가, UNIQUE(instance_key, portfolio_id), 은퇴 마커 retired_at(또는 universe_detached) 추가. trading_date(슬롯 정체성)·entry_count(dcy-019) 컬럼은 제거하고, trading_date 는 이벤트/원장/정책의 시간 속성으로만 둔다. 멱등 마이그레이션(009) + EXPECTED_SLOT_FIELDS 계약 + persistence flat 매핑 + data-model.md 를 같은 변경 묶음으로 정합한다. slot-scoped 테이블(slot_transition_log/intent_log/ledger_outbox/snapshot_pause/killswitch_exclusion)도 instance_key 스코프화한다.

Acceptance Criteria

  1. Given 마이그레이션 적용, When daily_slot 스키마를 확인, Then portfolio_id NOT NULL, instance_key 존재, UNIQUE(instance_key, portfolio_id), retired_at 존재, 슬롯 정체성 trading_date·entry_count 부재.
  2. Given EXPECTED_SLOT_FIELDS 계약 가드, When 도메인 필드셋과 information_schema 를 비교, Then 영구 슬롯 필드셋과 일치한다.
  3. Given 같은 (instance_key, portfolio_id) 행 중복 삽입, When insert, Then UNIQUE 제약으로 거부된다.
  4. Given slot-scoped 테이블, When 스키마 확인, Then 각 테이블이 instance_key 로 스코프되어 인스턴스 간 행이 섞이지 않는다.

Impacted Area

  • Docs: docs/data-model.md (daily_slot 재설계), dcy-020
  • Modules: trex_core/adapters/persistence/sql/009_*.sql(신규), trex_core/adapters/persistence/postgresql.py, trex_core/domain/slot/models.py
  • Tests: tests/domain/slot/test_contract.py, tests/adapters/persistence/test_migration_and_drift.py

Notes

  • 기존 REQ 영향(change-req 동반): REQ-002(Slot 필드/EXPECTED_SLOT_FIELDS 재정의), REQ-006(persistence 스키마), REQ-003(계약 가드). dcy-019 entry_count·dcy-014 trading_date 슬롯키 제거는 그 REQ들의 change-req 로 함께 처리.
  • 라이브 데이터 일일행→영구행 전환은 REQ-064(cutover)에서 다룬다(본 REQ 는 목표 스키마 정의).
  • 출처: dcy-020 FR-1, OQ-3, OQ-7.

Change Log

CHG-20260610-01

  • Date: 2026-06-10
  • Author: Justin Ko

Change Summary

  • dcy-020 FR-1/OQ-3/OQ-7 로부터 최초 생성(Proposed). 영구 슬롯 스키마(자산 키·instance_key·UNIQUE 복합·retired_at, trading_date/entry_count 제거).

Intent

  • 익명 풀 daily_slot → 자산 1:1 영구 슬롯 스키마 전환을 backlog 로 정규화.

Acceptance Criteria Delta

  • Added:
    • 영구 슬롯 스키마/UNIQUE(instance_key, portfolio_id)/계약 가드/slot-scoped 테이블 instance 스코프 4개 기준
  • Updated: 없음
  • Removed: 없음

Impacted Area Delta

  • Docs: docs/data-model.md
  • Modules: sql/009_*, postgresql.py, domain/slot/models.py
  • Tests: test_contract.py, test_migration_and_drift.py

Delivery Trace Delta

  • Batches: none (batch 편성 전)
  • Releases: none

Revalidation Impact

  • Reverification Needed: no
  • Existing Implementation Invalidated: no (목표 스키마 정의; 실데이터 전환은 REQ-064)
  • Status Recommendation: keep-current
  • Follow-up Action: confirm-req → suggest-batch-reqs/draft-batch. REQ-002/003/006 change-req 동반.

Validation Plan

  • 마이그레이션 적용 후 스키마/UNIQUE/계약 가드 + drift 테스트 green.