Inline slot column contract in dcy-001, drop temp/plan.md references

Remove all references to the gitignored temp/plan.md draft and embed the
Slot column contract it depended on as Appendix A, so the Discovery stays
self-contained after temp/ is deleted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-03 12:48:01 +00:00
co-authored by Claude Opus 4.8
parent 0c29a32487
commit 431c1a7bd2
@@ -15,9 +15,9 @@
- 연계 문서 현황:
- 관련 점수 파일: 미생성
- 관련 TODO/메모: temp/plan.md (slot 순수 도메인 이관 계획서, gitignored 초안)
- 관련 TODO/메모: 없음 (검토 초안 내용은 본 Discovery 본문과 부록 A 에 통합)
- 해석:
- bootstrap-baseline 초기화가 끝난 빈 베이스(trex-core)에서 시작하는 첫 real Discovery이며, 입력은 temp/plan.md 와 운영자 확정 결정(신규 베이스 + 순수 도메인만)이다.
- bootstrap-baseline 초기화가 끝난 빈 베이스(trex-core)에서 시작하는 첫 real Discovery이며, 입력은 trex-orbit slot 도메인 코드 분석과 운영자 확정 결정(신규 베이스 + 순수 도메인만)이다.
- 이번 Discovery는 "코어 베이스 부트스트랩 + slot 순수 도메인 이식 + 단위테스트 green"의 범위와 성공 기준을 확정하고, 네임스페이스/컬럼 계약 박제 같은 미결 결정을 드러내는 것이 핵심이다.
# 2. 요구사항 판정 결과
@@ -53,7 +53,7 @@
- 개발자가 trex-core 를 clone 한 뒤 `pip install -e .[dev]` 와 `pytest` 로 slot 도메인 테스트가 통과하는 깨끗한 베이스를 확보한다.
- 후속 도메인 작성자가 slot 도메인을 trex-core 의 "표준 도메인 작성 패턴(storage-agnostic + Protocol 저장소 경계)" 참조로 삼는다.
- 다음 반복에서 영속화(PostgreSQL) 구현자가 이식된 `SlotRepository` Protocol 과 보존된 컬럼 계약(plan.md 부록 A)을 기준으로 저장소 구현을 붙인다.
- 다음 반복에서 영속화(PostgreSQL) 구현자가 이식된 `SlotRepository` Protocol 과 보존된 컬럼 계약(본 문서 부록 A)을 기준으로 저장소 구현을 붙인다.
# 4. 이번에 정의할 변경
이번 Discovery에서 다루는 핵심 변경 항목을 목록으로 적는다. 기능, 구조, 규칙 변경을 함께 포함해도 된다.
@@ -90,7 +90,7 @@
- NFR-1: 순수 도메인 경계 유지 — 이식된 도메인 코드는 stdlib 와 패키지 내부 참조 외 외부 의존(psycopg/네트워크/CLI/config)을 import 하지 않는다(정적 import 스윕으로 검증 가능).
- NFR-2: 도메인 불변식 보존 — 6 상태/8 전이, advisory-lock 직렬화, append-only 전이 로그, closed→idle 재진입 +1, lock 보유 중 외부 I/O 금지가 이식 후에도 동일하게 성립한다.
- NFR-3: 컬럼 계약 보존 — `Slot` 데이터클래스 필드 계약(plan.md 부록 A)이 변형 없이 유지되어, 다음 반복의 영속화 구현이 동일 계약을 기준으로 삼을 수 있다.
- NFR-3: 컬럼 계약 보존 — `Slot` 데이터클래스 필드 계약(본 문서 부록 A)이 변형 없이 유지되어, 다음 반복의 영속화 구현이 동일 계약을 기준으로 삼을 수 있다.
## 범위 경계
이번 반복에서 반드시 포함할 범위와 명시적으로 제외할 범위를 구분한다.
@@ -112,7 +112,7 @@
- R-1 (Medium): 영속화 부재로 trex-core 의 `SlotService` 는 in-memory repo 로만 구동되어, 단일 writer/advisory lock 의 실제 가치가 다음 반복(Postgres 재구성)까지 미실현된다.
- 완화 방안: 이번 반복 목표를 "도메인 코어 시드 + 테스트 green"으로 한정하고, 영속화는 별도 후속 Discovery 로 명시 인계한다.
- R-2 (Medium): DDL 을 함께 가져오지 않으므로 향후 영속화 구현 시 `Slot` 필드와 스키마가 어긋나는 컬럼 계약 드리프트 위험이 있다.
- 완화 방안: plan.md 부록 A 와 `docs/data-model.md` 를 계약 기준으로 고정(NFR-3)하고, 영속화 REQ 에서 드리프트 테스트를 동반하도록 인계한다.
- 완화 방안: 본 문서 부록 A 와 `docs/data-model.md` 를 계약 기준으로 고정(NFR-3)하고, 영속화 REQ 에서 드리프트 테스트를 동반하도록 인계한다.
- R-3 (Low): slot 도메인이 trex-orbit·trex-core 두 곳에 병존(이중 진실)해 로직 변경 시 동기화 부담이 생긴다.
- 완화 방안: 신규 베이스 결정의 의도된 비용으로 수용하고, 수렴 시점은 별도 Discovery(OQ 처리)로 추적한다.
@@ -130,9 +130,9 @@
- 상태: Open
- 처리 방안: 운영자가 신규 베이스 정체성(독립 패키지명) vs 향후 대조 용이성(파리티) 사이에서 결정. AskUser 로 확인 후 본문 FR-2/구조 표기에 반영.
- 종료 조건: 네임스페이스가 확정되어 `# 5` FR-2 와 baseline 구조 표기의 import 경로가 단일 값으로 고정되면 Answered.
- OQ-2: `Slot` 컬럼 계약(plan.md 부록 A)을 영속화 미구현 상태에서 어떻게 드리프트 없이 박제할지(문서 고정 vs 계약 테스트 vs 스키마 placeholder).
- OQ-2: `Slot` 컬럼 계약(본 문서 부록 A)을 영속화 미구현 상태에서 어떻게 드리프트 없이 박제할지(문서 고정 vs 계약 테스트 vs 스키마 placeholder).
- 상태: Open
- 처리 방안: NFR-3 의 구체 수단을 운영자 확인 후 결정. 최소안은 `docs/data-model.md` + 부록 A 를 단일 계약 기준으로 선언하고 영속화 REQ 로 드리프트 테스트를 인계.
- 처리 방안: NFR-3 의 구체 수단을 운영자 확인 후 결정. 최소안은 `docs/data-model.md` + 본 문서 부록 A 를 단일 계약 기준으로 선언하고 영속화 REQ 로 드리프트 테스트를 인계.
- 종료 조건: 계약 박제 수단이 정해져 NFR-3 의 검증 방식으로 연결되면 Answered.
- OQ-3: trex-orbit↔trex-core slot 도메인의 향후 수렴(역참조/단일화) 여부.
- 상태: Deferred
@@ -182,7 +182,6 @@ REQ 초안 작성 단계로 넘기기 전에 무엇이 확정되어야 하는지
- 처리 결과: 생성
- 생성 경로: docs/discovery/dcy-001_20260603_slot-pure-domain-migration.md
- 참조 문서:
- temp/plan.md (slot 순수 도메인 이관 계획서)
- docs/project-structure.md, docs/runtime-flows.md (구조/런타임 baseline — 본 Discovery 가 갱신 요구)
- docs/interface-contract.md, docs/data-model.md (인터페이스/데이터 baseline — 컬럼 계약 기준)
- stage-pilot/templates/project-structure.md, stage-pilot/templates/runtime-flows.md (baseline 갱신 시 논리 템플릿 참조)
@@ -217,3 +216,26 @@ REQ 초안 작성 인계 시점의 확정 플래그와 섹션 참조만 기록
- Ready for REQ Drafting: false
- Confirmed By: TBD
- Confirmed At (KST): TBD
# 부록 A. `Slot` 데이터클래스 ↔ `daily_slot` 컬럼 계약 (이식 보존 대상)
NFR-3 과 OQ-2 가 참조하는 컬럼 계약이다. 순수 도메인의 `Slot` 데이터클래스는 trex-orbit `daily_slot` 스키마 컬럼 계약을 암묵 전제하므로, trex-core 가 다음 반복에서 영속화 계층을 새로 구성할 때 이 계약을 반드시 만족시켜야 도메인이 정상 동작한다. (`docs/data-model.md` 와 동일 기준)
| 필드 | 타입(도메인) | 원본 DDL 타입 | 비고 |
|---|---|---|---|
| `slot_id` | UUID | UUID PK | |
| `trading_date` | date | DATE NOT NULL | |
| `status` | SlotState | TEXT CHECK(6값) | idle/pending_buy/holding/pending_sell/closed/error |
| `symbol` | str? | TEXT | |
| `qty` | float? | NUMERIC(18,4) | |
| `avg_price` | float? | NUMERIC(18,4) | |
| `entry_price` | float? | NUMERIC(18,4) | 가격 잠금 |
| `allocated_capital` | float? | NUMERIC(18,2) | |
| `order_id` | str? | TEXT | 자유 주석 |
| `strategy_id` | str? | TEXT | 진입 전략 |
| `broker_order_id` | str? | TEXT | 브로커 식별자 |
| `portfolio_id` | str? | TEXT | |
| `sell_strategy_id` | str? | TEXT | 청산 전략 |
| `forced_close_at` | datetime? | TIMESTAMPTZ | 강제청산 마감선 |
| `created_at` / `updated_at` | datetime? | TIMESTAMPTZ | |
부속 테이블 계약(영속화 재구성 시 함께 필요): `daily_symbol_entries`(재진입 카운터 — PK `(trading_date, symbol)`), `slot_transition_log`(append-only 감사 로그). 본 이관(순수 도메인)에서는 계약만 보존하고 DDL 은 가져오지 않는다.