Resolve dcy-001 OQ-1: adopt trex_core.domain.slot namespace

Record the OQ-1 decision (trex_core.domain.slot over app.domain.slot) in
dcy-001 and propagate the planned package path app/ -> trex_core/ across
the structure baseline and bootstrap seed (dist name trex-core).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-03 12:57:52 +00:00
co-authored by Claude Opus 4.8
parent 431c1a7bd2
commit f44b84465a
3 changed files with 20 additions and 20 deletions
+3 -4
View File
@@ -69,11 +69,11 @@ interfaces:
current_gaps: current_gaps:
- 영속화 구현체(PostgreSQL)와 그에 딸린 SQL 스키마/마이그레이션은 이번 이관 범위 밖이며 향후 도입 예정. - 영속화 구현체(PostgreSQL)와 그에 딸린 SQL 스키마/마이그레이션은 이번 이관 범위 밖이며 향후 도입 예정.
- CLI / 설정(config) 표면은 아직 없음(trex-orbit 의 trex slot CLI 는 이식하지 않음). - CLI / 설정(config) 표면은 아직 없음(trex-orbit 의 trex slot CLI 는 이식하지 않음).
- 패키지 네임스페이스(app.domain.slot vs trex_core.domain.slot)는 첫 Discovery 에서 확정(plan.md OQ-1). - 패키지 네임스페이스는 trex_core.domain.slot 으로 확정(dcy-001 OQ-1, 배포명 trex-core).
structure: structure:
planned_top_level_areas: planned_top_level_areas:
- path: app/domain/slot/ - path: trex_core/domain/slot/
responsibility: 슬롯 생명주기 순수 도메인(state/models/errors/repository protocol/service/in-memory repo) responsibility: 슬롯 생명주기 순수 도메인(state/models/errors/repository protocol/service/in-memory repo)
- path: tests/domain/slot/ - path: tests/domain/slot/
responsibility: 슬롯 도메인 단위 테스트(상태머신/서비스) responsibility: 슬롯 도메인 단위 테스트(상태머신/서비스)
@@ -131,8 +131,7 @@ data_model:
notes: notes:
known_unknowns: known_unknowns:
- 패키지 네임스페이스 결정(app.domain.slot vs trex_core.domain.slot) — plan.md OQ-1 - SLOT_ADVISORY_LOCK_ID 의 소속(순수 도메인 잔류 vs 영속화 계층 이동)
- SLOT_ADVISORY_LOCK_ID 의 소속(순수 도메인 잔류 vs 영속화 계층 이동) — plan.md OQ-2
- 영속화 backend 선택 및 SQL 스키마 재구성 시점 - 영속화 backend 선택 및 SQL 스키마 재구성 시점
- trex-orbit 과의 향후 코드 수렴 여부(현재는 병행) - trex-orbit 과의 향후 코드 수렴 여부(현재는 병행)
@@ -18,7 +18,7 @@
- 관련 TODO/메모: 없음 (검토 초안 내용은 본 Discovery 본문과 부록 A 에 통합) - 관련 TODO/메모: 없음 (검토 초안 내용은 본 Discovery 본문과 부록 A 에 통합)
- 해석: - 해석:
- bootstrap-baseline 초기화가 끝난 빈 베이스(trex-core)에서 시작하는 첫 real Discovery이며, 입력은 trex-orbit slot 도메인 코드 분석과 운영자 확정 결정(신규 베이스 + 순수 도메인만)이다. - bootstrap-baseline 초기화가 끝난 빈 베이스(trex-core)에서 시작하는 첫 real Discovery이며, 입력은 trex-orbit slot 도메인 코드 분석과 운영자 확정 결정(신규 베이스 + 순수 도메인만)이다.
- 이번 Discovery는 "코어 베이스 부트스트랩 + slot 순수 도메인 이식 + 단위테스트 green"의 범위와 성공 기준을 확정하고, 네임스페이스/컬럼 계약 박제 같은 미결 결정을 드러내는 것이 핵심이다. - 이번 Discovery는 "코어 베이스 부트스트랩 + slot 순수 도메인 이식 + 단위테스트 green"의 범위와 성공 기준을 확정하고, 잔여 미결 결정(컬럼 계약 박제, OQ-2)을 드러내는 것이 핵심이다. 패키지 네임스페이스는 `trex_core.domain.slot` 으로 확정됨(OQ-1).
# 2. 요구사항 판정 결과 # 2. 요구사항 판정 결과
이번 요청이 기존 요구사항과 비교해 신규인지, 유사한지, 중복인지 판단하고 그 근거를 남긴다. 이번 요청이 기존 요구사항과 비교해 신규인지, 유사한지, 중복인지 판단하고 그 근거를 남긴다.
@@ -58,7 +58,7 @@
# 4. 이번에 정의할 변경 # 4. 이번에 정의할 변경
이번 Discovery에서 다루는 핵심 변경 항목을 목록으로 적는다. 기능, 구조, 규칙 변경을 함께 포함해도 된다. 이번 Discovery에서 다루는 핵심 변경 항목을 목록으로 적는다. 기능, 구조, 규칙 변경을 함께 포함해도 된다.
- trex-core Python 프로젝트 부트스트랩: `pyproject.toml` + 패키지 레이아웃(`app/`, `app/domain/`) + pytest/ruff 설정. - trex-core Python 프로젝트 부트스트랩: `pyproject.toml`(배포명 `trex-core`) + 패키지 레이아웃(`trex_core/`, `trex_core/domain/`) + pytest/ruff 설정.
- slot 순수 도메인 이식: 6개 모듈 + `__init__.py` 복사, 공개 API 확정(`__init__` docstring 을 순수 도메인 기준으로 정리, 인프라 export 없음 확인). - slot 순수 도메인 이식: 6개 모듈 + `__init__.py` 복사, 공개 API 확정(`__init__` docstring 을 순수 도메인 기준으로 정리, 인프라 export 없음 확인).
- 도메인 단위테스트 이식 및 green: `test_state.py`, `test_service.py`(InMemorySlotRepository 기반)을 trex-core 에서 통과. - 도메인 단위테스트 이식 및 green: `test_state.py`, `test_service.py`(InMemorySlotRepository 기반)을 trex-core 에서 통과.
- baseline 문서 정합: 이식 후 `docs/project-structure.md`·`docs/runtime-flows.md` 의 planned 표기를 실제 구조와 일치하도록 갱신. - baseline 문서 정합: 이식 후 `docs/project-structure.md`·`docs/runtime-flows.md` 의 planned 표기를 실제 구조와 일치하도록 갱신.
@@ -67,7 +67,7 @@
변경이 미칠 코드/문서/운영 범위를 명시해 REQ 정제와 batch planning에서 추정 누락을 줄인다. 변경이 미칠 코드/문서/운영 범위를 명시해 REQ 정제와 batch planning에서 추정 누락을 줄인다.
- 코드 영향: - 코드 영향:
- 신규 생성: `pyproject.toml`, `app/__init__.py`, `app/domain/__init__.py`, `app/domain/slot/*`(6 모듈 + `__init__`), `tests/domain/slot/*`. - 신규 생성: `pyproject.toml`, `trex_core/__init__.py`, `trex_core/domain/__init__.py`, `trex_core/domain/slot/*`(6 모듈 + `__init__`), `tests/domain/slot/*`.
- trex-orbit 코드: 무수정(병행). - trex-orbit 코드: 무수정(병행).
- 문서 영향: - 문서 영향:
- `docs/project-structure.md`, `docs/runtime-flows.md` 의 planned→실제 갱신. - `docs/project-structure.md`, `docs/runtime-flows.md` 의 planned→실제 갱신.
@@ -81,7 +81,7 @@
## 기능 요구사항 ## 기능 요구사항
- FR-1: trex-core 를 설치/테스트 가능한 Python 패키지로 부트스트랩한다(`pyproject.toml` + 패키지 레이아웃 + pytest/ruff 설정). `pip install -e .[dev]` 후 `pytest` 가 실행 가능해야 한다. - FR-1: trex-core 를 설치/테스트 가능한 Python 패키지로 부트스트랩한다(`pyproject.toml` + 패키지 레이아웃 + pytest/ruff 설정). `pip install -e .[dev]` 후 `pytest` 가 실행 가능해야 한다.
- FR-2: slot 순수 도메인 6개 모듈(`state`/`models`/`errors`/`repository`/`service`/`in_memory_repository`)과 `__init__.py` 를 trex-core 에 이식하고, 공개 API(`SlotState`/`Slot`/`SlotCapacity`/`SlotTransitionRecord`/`SlotRepository`/`SlotService`/예외/`is_allowed_transition`/`SLOT_ADVISORY_LOCK_ID`/`ALLOWED_TRANSITIONS`)를 인프라 심볼 없이 노출한다. - FR-2: slot 순수 도메인 6개 모듈(`state`/`models`/`errors`/`repository`/`service`/`in_memory_repository`)과 `__init__.py` 를 `trex_core.domain.slot` 네임스페이스(OQ-1 결정)로 이식하고, 모듈 간 import 경로를 `trex_core.domain.slot.*` 로 통일한다. 공개 API(`SlotState`/`Slot`/`SlotCapacity`/`SlotTransitionRecord`/`SlotRepository`/`SlotService`/예외/`is_allowed_transition`/`SLOT_ADVISORY_LOCK_ID`/`ALLOWED_TRANSITIONS`)를 인프라 심볼 없이 노출한다.
- FR-3: 이식된 도메인 단위테스트(`tests/domain/slot/test_state.py`, `test_service.py`)가 trex-core 에서 통과한다. - FR-3: 이식된 도메인 단위테스트(`tests/domain/slot/test_state.py`, `test_service.py`)가 trex-core 에서 통과한다.
- FR-4: 이식 완료 후 `docs/project-structure.md` 와 `docs/runtime-flows.md` 의 planned 표기를 실제 코드 구조와 일치하도록 갱신한다. - FR-4: 이식 완료 후 `docs/project-structure.md` 와 `docs/runtime-flows.md` 의 planned 표기를 실제 코드 구조와 일치하도록 갱신한다.
@@ -127,16 +127,16 @@
답을 아직 모르는 항목을 적는다. 추정으로 덮지 말고 REQ 초안 작성 이전에 확인할 질문으로 남긴다. 답을 아직 모르는 항목을 적는다. 추정으로 덮지 말고 REQ 초안 작성 이전에 확인할 질문으로 남긴다.
- OQ-1: 패키지 네임스페이스를 trex-orbit 과 동일한 `app.domain.slot` 으로 유지할지, trex-core 전용 `trex_core.domain.slot` 으로 출발할지. - OQ-1: 패키지 네임스페이스를 trex-orbit 과 동일한 `app.domain.slot` 으로 유지할지, trex-core 전용 `trex_core.domain.slot` 으로 출발할지.
- 상태: Open - 상태: Answered (2026-06-03)
- 처리 방안: 운영자가 신규 베이스 정체성(독립 패키지명) vs 향후 대조 용이성(파리티) 사이에서 결정. AskUser 로 확인 후 본문 FR-2/구조 표기에 반영. - 결정: `trex_core.domain.slot` 으로 출발(독립 베이스 네임스페이스). 근거: 재사용 코어 정체성·`app` top-level 패키지 충돌 회피·OQ-3(향후 수렴) 시 자연스러운 import 경로. 이식 시 import 라인 1회 기계적 치환 비용만 발생.
- 종료 조건: 네임스페이스가 확정되어 `# 5` FR-2 와 baseline 구조 표기의 import 경로가 단일 값으로 고정되면 Answered. - 반영 위치: `# 4`(코드 영향 신규 생성 경로), `# 5` FR-1(레이아웃)·FR-2(import 경로 통일). baseline 구조 표기(`docs/project-structure.md`·`docs/runtime-flows.md` 등)의 `app/` planned 표기는 FR-4 갱신 시 `trex_core/` 로 정정한다.
- OQ-2: `Slot` 컬럼 계약(본 문서 부록 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
- 처리 방안: 이번 반복 비범위. 영속화 재구성 이후 별도 Discovery 에서 다룬다. OQ-1 네임스페이스 결정이 이 질문의 선택지를 제약하므로 OQ-1 결과를 기록해 인계한다. - 처리 방안: 이번 반복 비범위. 영속화 재구성 이후 별도 Discovery 에서 다룬다. OQ-1 결과(`trex_core.domain.slot`)를 인계 — 수렴 시 trex-orbit 이 `trex_core.domain.slot` 을 역참조하는 경로가 자연스럽다.
- 종료 조건: 영속화 반복 종료 후 수렴 Discovery 가 생성되면 그 문서로 이관. - 종료 조건: 영속화 반복 종료 후 수렴 Discovery 가 생성되면 그 문서로 이관.
### 오픈 질문 처리 기준 ### 오픈 질문 처리 기준
@@ -172,7 +172,7 @@ REQ 초안 작성 단계로 넘기기 전에 무엇이 확정되어야 하는지
- [x] High 영향 리스크 우선순위 및 해소 책임자 지정 - [x] High 영향 리스크 우선순위 및 해소 책임자 지정
- 기준: High 등급 리스크 없음(R-1/R-2 Medium, R-3 Low) — 별도 책임자 지정 불요, 완화 방안 명시됨. - 기준: High 등급 리스크 없음(R-1/R-2 Medium, R-3 Low) — 별도 책임자 지정 불요, 완화 방안 명시됨.
- [ ] 모든 오픈 질문(OQ) `Open` 상태 없음 확인 - [ ] 모든 오픈 질문(OQ) `Open` 상태 없음 확인
- 기준: OQ 목록에 `Open` 상태 항목이 0개이거나, 잔여 항목 전부 `Deferred` 처리 완료 (현재 OQ-1, OQ-2 가 Open) - 기준: OQ 목록에 `Open` 상태 항목이 0개이거나, 잔여 항목 전부 `Deferred` 처리 완료 (OQ-1 Answered, OQ-3 Deferred. 현재 OQ-2 가 Open)
- [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정 - [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정
- 기준: 운영자가 confirm-discovery 시점에 CONFIRMED_BY 를 지정한다. - 기준: 운영자가 confirm-discovery 시점에 CONFIRMED_BY 를 지정한다.
@@ -190,8 +190,8 @@ REQ 초안 작성 단계로 넘기기 전에 무엇이 확정되어야 하는지
사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. 결정, 확인, 데이터 요청을 구분해서 적는다. 사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. 결정, 확인, 데이터 요청을 구분해서 적는다.
## DECIDE ## DECIDE
- {{DECIDE_PACKAGE_NAMESPACE}} — `app.domain.slot`(파리티) vs `trex_core.domain.slot`(독립 베이스) (OQ-1)
- {{DECIDE_COLUMN_CONTRACT_ANCHOR}} — `Slot` 컬럼 계약 박제 수단: 문서 고정 / 계약 테스트 / 스키마 placeholder 중 택 (OQ-2) - {{DECIDE_COLUMN_CONTRACT_ANCHOR}} — `Slot` 컬럼 계약 박제 수단: 문서 고정 / 계약 테스트 / 스키마 placeholder 중 택 (OQ-2)
- ~~패키지 네임스페이스~~ → 결정됨: `trex_core.domain.slot` (OQ-1, 2026-06-03)
## CONFIRM ## CONFIRM
- {{CONFIRM_SCOPE_BOUNDARY}} — 영속화·CLI·config·coordinator 연동을 이번 반복에서 제외하는 범위 경계 확정 - {{CONFIRM_SCOPE_BOUNDARY}} — 영속화·CLI·config·coordinator 연동을 이번 반복에서 제외하는 범위 경계 확정
@@ -212,7 +212,7 @@ REQ 초안 작성 인계 시점의 확정 플래그와 섹션 참조만 기록
## Freeze 플래그 ## Freeze 플래그
- Handoff Decision: 보류 - Handoff Decision: 보류
- Handoff Rationale: 초기 Discovery 초안 생성 완료. OQ-1(네임스페이스)·OQ-2(컬럼 계약 박제)가 Open 상태이며, confirm-discovery 에서 사용자 결정 후 REQ Drafting 으로 인계한다. - Handoff Rationale: 초기 Discovery 초안 생성 완료. OQ-1(네임스페이스)은 `trex_core.domain.slot` 으로 Answered. OQ-2(컬럼 계약 박제)가 Open 상태이며, confirm-discovery 에서 OQ-2 결정 후 REQ Drafting 으로 인계한다.
- Ready for REQ Drafting: false - Ready for REQ Drafting: false
- Confirmed By: TBD - Confirmed By: TBD
- Confirmed At (KST): TBD - Confirmed At (KST): TBD
+6 -5
View File
@@ -57,7 +57,7 @@
├── CLAUDE.md # SDLC governance instructions ├── CLAUDE.md # SDLC governance instructions
└── (planned) └── (planned)
├── pyproject.toml # 패키지 메타 + pytest/ruff 설정 ├── pyproject.toml # 패키지 메타 + pytest/ruff 설정
├── app/ ├── trex_core/
│ └── domain/ │ └── domain/
│ └── slot/ # 이식 대상 순수 도메인 │ └── slot/ # 이식 대상 순수 도메인
└── tests/ └── tests/
@@ -68,7 +68,7 @@
## Package / Module Responsibilities ## Package / Module Responsibilities
- `app/domain/slot/` (planned) - `trex_core/domain/slot/` (planned)
- 슬롯 생명주기 순수 도메인. 6 상태 머신(`state.py`), 데이터 모델(`models.py`), 예외(`errors.py`), 저장소 계약(`repository.py` Protocol), 도메인 서비스(`service.py`), 테스트용 in-memory 구현(`in_memory_repository.py`). - 슬롯 생명주기 순수 도메인. 6 상태 머신(`state.py`), 데이터 모델(`models.py`), 예외(`errors.py`), 저장소 계약(`repository.py` Protocol), 도메인 서비스(`service.py`), 테스트용 in-memory 구현(`in_memory_repository.py`).
- 외부 의존 0 — stdlib 와 패키지 내부 참조만 사용. - 외부 의존 0 — stdlib 와 패키지 내부 참조만 사용.
- `tests/domain/slot/` (planned) - `tests/domain/slot/` (planned)
@@ -80,7 +80,7 @@
## Dependency Rules ## Dependency Rules
- 순수 도메인(`app/domain/slot/`)은 저장소 구현, 브로커, 네트워크, CLI 등 인프라에 직접 의존하지 않는다. - 순수 도메인(`trex_core/domain/slot/`)은 저장소 구현, 브로커, 네트워크, CLI 등 인프라에 직접 의존하지 않는다.
- 저장소 접근은 오직 `SlotRepository` Protocol 을 통해서만 이뤄지고 구현체는 주입된다. - 저장소 접근은 오직 `SlotRepository` Protocol 을 통해서만 이뤄지고 구현체는 주입된다.
- 인프라(향후 PostgreSQL 구현, CLI, config)는 도메인을 의존할 수 있으나 그 역은 금지한다. - 인프라(향후 PostgreSQL 구현, CLI, config)는 도메인을 의존할 수 있으나 그 역은 금지한다.
@@ -93,8 +93,8 @@
- 영속화 구현체(PostgreSQL repository)와 SQL 스키마/마이그레이션은 이번 범위 밖 — 향후 도입. - 영속화 구현체(PostgreSQL repository)와 SQL 스키마/마이그레이션은 이번 범위 밖 — 향후 도입.
- CLI / 설정(config) 표면 없음(trex-orbit 의 `trex slot` CLI 미이식). - CLI / 설정(config) 표면 없음(trex-orbit 의 `trex slot` CLI 미이식).
- 패키지 네임스페이스(`app.domain.slot` vs `trex_core.domain.slot`)는 첫 Discovery 에서 확정(plan.md OQ-1). - 패키지 네임스페이스는 `trex_core.domain.slot` 으로 확정(dcy-001 OQ-1, 배포명 `trex-core`).
- `pyproject.toml` 및 `app/`, `tests/` 스캐폴딩은 이관 Batch 에서 생성 예정. - `pyproject.toml` 및 `trex_core/`, `tests/` 스캐폴딩은 이관 Batch 에서 생성 예정.
## Update Triggers ## Update Triggers
@@ -105,3 +105,4 @@
## Change Log ## Change Log
- 2026-06-03 :: bootstrap-baseline 으로 초기 구조 baseline 생성(mixed: trex-orbit 코드 관찰 + 이관 계획 선언). - 2026-06-03 :: bootstrap-baseline 으로 초기 구조 baseline 생성(mixed: trex-orbit 코드 관찰 + 이관 계획 선언).
- 2026-06-03 :: dcy-001 OQ-1 결정 반영 — planned 네임스페이스를 `app/` → `trex_core/` 로 정정(배포명 `trex-core`).