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"의 범위와 성공 기준을 확정하고, 네임스페이스/컬럼 계약 박제 같은 미결 결정을 드러내는 것이 핵심이다. - 이번 Discovery는 "코어 베이스 부트스트랩 + slot 순수 도메인 이식 + 단위테스트 green"의 범위와 성공 기준을 확정하고, 네임스페이스/컬럼 계약 박제 같은 미결 결정을 드러내는 것이 핵심이다.
# 2. 요구사항 판정 결과 # 2. 요구사항 판정 결과
@@ -53,7 +53,7 @@
- 개발자가 trex-core 를 clone 한 뒤 `pip install -e .[dev]` 와 `pytest` 로 slot 도메인 테스트가 통과하는 깨끗한 베이스를 확보한다. - 개발자가 trex-core 를 clone 한 뒤 `pip install -e .[dev]` 와 `pytest` 로 slot 도메인 테스트가 통과하는 깨끗한 베이스를 확보한다.
- 후속 도메인 작성자가 slot 도메인을 trex-core 의 "표준 도메인 작성 패턴(storage-agnostic + Protocol 저장소 경계)" 참조로 삼는다. - 후속 도메인 작성자가 slot 도메인을 trex-core 의 "표준 도메인 작성 패턴(storage-agnostic + Protocol 저장소 경계)" 참조로 삼는다.
- 다음 반복에서 영속화(PostgreSQL) 구현자가 이식된 `SlotRepository` Protocol 과 보존된 컬럼 계약(plan.md 부록 A)을 기준으로 저장소 구현을 붙인다. - 다음 반복에서 영속화(PostgreSQL) 구현자가 이식된 `SlotRepository` Protocol 과 보존된 컬럼 계약(본 문서 부록 A)을 기준으로 저장소 구현을 붙인다.
# 4. 이번에 정의할 변경 # 4. 이번에 정의할 변경
이번 Discovery에서 다루는 핵심 변경 항목을 목록으로 적는다. 기능, 구조, 규칙 변경을 함께 포함해도 된다. 이번 Discovery에서 다루는 핵심 변경 항목을 목록으로 적는다. 기능, 구조, 규칙 변경을 함께 포함해도 된다.
@@ -90,7 +90,7 @@
- NFR-1: 순수 도메인 경계 유지 — 이식된 도메인 코드는 stdlib 와 패키지 내부 참조 외 외부 의존(psycopg/네트워크/CLI/config)을 import 하지 않는다(정적 import 스윕으로 검증 가능). - NFR-1: 순수 도메인 경계 유지 — 이식된 도메인 코드는 stdlib 와 패키지 내부 참조 외 외부 의존(psycopg/네트워크/CLI/config)을 import 하지 않는다(정적 import 스윕으로 검증 가능).
- NFR-2: 도메인 불변식 보존 — 6 상태/8 전이, advisory-lock 직렬화, append-only 전이 로그, closed→idle 재진입 +1, lock 보유 중 외부 I/O 금지가 이식 후에도 동일하게 성립한다. - 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 재구성)까지 미실현된다. - R-1 (Medium): 영속화 부재로 trex-core 의 `SlotService` 는 in-memory repo 로만 구동되어, 단일 writer/advisory lock 의 실제 가치가 다음 반복(Postgres 재구성)까지 미실현된다.
- 완화 방안: 이번 반복 목표를 "도메인 코어 시드 + 테스트 green"으로 한정하고, 영속화는 별도 후속 Discovery 로 명시 인계한다. - 완화 방안: 이번 반복 목표를 "도메인 코어 시드 + 테스트 green"으로 한정하고, 영속화는 별도 후속 Discovery 로 명시 인계한다.
- R-2 (Medium): DDL 을 함께 가져오지 않으므로 향후 영속화 구현 시 `Slot` 필드와 스키마가 어긋나는 컬럼 계약 드리프트 위험이 있다. - 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 두 곳에 병존(이중 진실)해 로직 변경 시 동기화 부담이 생긴다. - R-3 (Low): slot 도메인이 trex-orbit·trex-core 두 곳에 병존(이중 진실)해 로직 변경 시 동기화 부담이 생긴다.
- 완화 방안: 신규 베이스 결정의 의도된 비용으로 수용하고, 수렴 시점은 별도 Discovery(OQ 처리)로 추적한다. - 완화 방안: 신규 베이스 결정의 의도된 비용으로 수용하고, 수렴 시점은 별도 Discovery(OQ 처리)로 추적한다.
@@ -130,9 +130,9 @@
- 상태: Open - 상태: Open
- 처리 방안: 운영자가 신규 베이스 정체성(독립 패키지명) vs 향후 대조 용이성(파리티) 사이에서 결정. AskUser 로 확인 후 본문 FR-2/구조 표기에 반영. - 처리 방안: 운영자가 신규 베이스 정체성(독립 패키지명) vs 향후 대조 용이성(파리티) 사이에서 결정. AskUser 로 확인 후 본문 FR-2/구조 표기에 반영.
- 종료 조건: 네임스페이스가 확정되어 `# 5` FR-2 와 baseline 구조 표기의 import 경로가 단일 값으로 고정되면 Answered. - 종료 조건: 네임스페이스가 확정되어 `# 5` FR-2 와 baseline 구조 표기의 import 경로가 단일 값으로 고정되면 Answered.
- OQ-2: `Slot` 컬럼 계약(plan.md 부록 A)을 영속화 미구현 상태에서 어떻게 드리프트 없이 박제할지(문서 고정 vs 계약 테스트 vs 스키마 placeholder). - OQ-2: `Slot` 컬럼 계약(본 문서 부록 A)을 영속화 미구현 상태에서 어떻게 드리프트 없이 박제할지(문서 고정 vs 계약 테스트 vs 스키마 placeholder).
- 상태: Open - 상태: Open
- 처리 방안: NFR-3 의 구체 수단을 운영자 확인 후 결정. 최소안은 `docs/data-model.md` + 부록 A 를 단일 계약 기준으로 선언하고 영속화 REQ 로 드리프트 테스트를 인계. - 처리 방안: NFR-3 의 구체 수단을 운영자 확인 후 결정. 최소안은 `docs/data-model.md` + 본 문서 부록 A 를 단일 계약 기준으로 선언하고 영속화 REQ 로 드리프트 테스트를 인계.
- 종료 조건: 계약 박제 수단이 정해져 NFR-3 의 검증 방식으로 연결되면 Answered. - 종료 조건: 계약 박제 수단이 정해져 NFR-3 의 검증 방식으로 연결되면 Answered.
- OQ-3: trex-orbit↔trex-core slot 도메인의 향후 수렴(역참조/단일화) 여부. - OQ-3: trex-orbit↔trex-core slot 도메인의 향후 수렴(역참조/단일화) 여부.
- 상태: Deferred - 상태: Deferred
@@ -182,7 +182,6 @@ REQ 초안 작성 단계로 넘기기 전에 무엇이 확정되어야 하는지
- 처리 결과: 생성 - 처리 결과: 생성
- 생성 경로: docs/discovery/dcy-001_20260603_slot-pure-domain-migration.md - 생성 경로: 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/project-structure.md, docs/runtime-flows.md (구조/런타임 baseline — 본 Discovery 가 갱신 요구)
- docs/interface-contract.md, docs/data-model.md (인터페이스/데이터 baseline — 컬럼 계약 기준) - docs/interface-contract.md, docs/data-model.md (인터페이스/데이터 baseline — 컬럼 계약 기준)
- stage-pilot/templates/project-structure.md, stage-pilot/templates/runtime-flows.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 - Ready for REQ Drafting: false
- Confirmed By: TBD - Confirmed By: TBD
- Confirmed At (KST): 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 은 가져오지 않는다.