Add dcy-002 Discovery (confirmed): slot-core daemon + HTTP intent API
Second iteration scope: promote the slot pure-domain core to a long-lived
daemon exposing a versioned HTTP API for buy/sell strategy daemons, backed
by durable single-writer PostgreSQL persistence.
All open questions resolved and operator-confirmed:
- OQ-1 durability: synchronous commit + intent_id idempotency + durable
intent_log seam; full async outbox deferred to the broker-execution
Discovery.
- OQ-2 framework: FastAPI + uvicorn.
- OQ-3 endpoints: /v1 set (healthz, intents/buy, intents/sell,
intents/{id}, slots, capacity); cancel/preallocate excluded.
- OQ-4 schema: trex-core-owned migrations keyed to dcy-001 Appendix A
(orbit-v2 DDL as reference), archive excluded, drift test realizes the
DB-side check dcy-001 OQ-2 deferred.
Scope defers broker execution, safety floor, and strategy daemons to a
follow-up Discovery. Confirmed By Justin.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,238 @@
|
||||
# 0. 문서 상태
|
||||
이 문서의 현재 상태와 식별 정보를 기록한다. 문서 추적과 승인 흐름에 필요한 최소 메타데이터를 적는다.
|
||||
|
||||
- 상태: confirmed
|
||||
- 문서 ID: dcy-002_20260603_slot-core-daemon-http-api
|
||||
- 이슈명: trex-core 슬롯 코어 데몬화 + HTTP intent API
|
||||
- 작성 시각(KST): 2026-06-03
|
||||
- 마지막 갱신 시각(KST): 2026-06-03
|
||||
- 대체됨: 없음
|
||||
- 후속 Discovery 참조: 없음
|
||||
- 생성된 REQ 참조: 없음
|
||||
|
||||
# 1. 계획 상태 요약
|
||||
현재 Discovery가 어떤 배경에서 작성되고 있는지, 연계 문서가 있는지, 지금 시점의 해석이 무엇인지 짧게 요약한다.
|
||||
|
||||
- 연계 문서 현황:
|
||||
- 관련 점수 파일: 미생성
|
||||
- 관련 TODO/메모: trex-orbit `orbit-v2_plan.md`(3-데몬 분리 설계안 — 슬롯 코어/매수·매도 결정 producer/ intent 핸드오프 사전 설계)
|
||||
- 해석:
|
||||
- dcy-001/BAT-001 로 trex-core 에 slot 순수 도메인(in-memory, 라이브러리)이 시드됐다. 이번 Discovery 는 그 코어를 **장기 실행 데몬**으로 승격하고, 매수·매도 전략이 **HTTP API 엔드포인트**로 intent 를 제출/조회하는 경계를 정의한다.
|
||||
- 운영자 결정: 전략↔코어 경계는 **네트워크 HTTP API**다(DB-only outbox 가 아니라 API 엔드포인트). 순수 도메인은 안쪽 코어로 유지하고 데몬·API·영속화를 바깥 레이어로 추가한다(onion).
|
||||
|
||||
# 2. 요구사항 판정 결과
|
||||
이번 요청이 기존 요구사항과 비교해 신규인지, 유사한지, 중복인지 판단하고 그 근거를 남긴다.
|
||||
|
||||
- 판정: 신규
|
||||
- 근거
|
||||
- dcy-001 은 "순수 도메인 이식(라이브러리)"이 문제 정의였고, 이번은 "데몬화 + API 경계 + 영속화"로 범위·구조가 다르다.
|
||||
- dcy-001 이 명시적으로 Out of Scope 로 둔 영속화/CLI/런타임을 정면으로 다루므로 기존 Discovery 갱신이 아니라 후속 독립 주기가 맞다.
|
||||
|
||||
# 3. 문제점의 요약
|
||||
문제의 현재 상태, 기대 상태, 관련 이해관계자, 제약사항을 정리한다. Discovery의 핵심 맥락을 가장 먼저 이해할 수 있어야 한다.
|
||||
|
||||
- 현재 상태
|
||||
- trex-core 는 `trex_core/domain/slot/` 순수 도메인만 보유(상태탐색 결과: server/api/daemon/http/psycopg 참조 0, console_scripts 0). `SlotService` 는 in-memory repo 로만 구동되고 장기 실행 프로세스·외부 호출 경계가 없다.
|
||||
- 영속화 구현체(PostgreSQL `SlotRepository`)·브로커·API·데몬 런타임이 모두 부재(dcy-001 에서 의도적으로 범위 밖이었음, dcy-001 R-1).
|
||||
- 설계 참고자료(`orbit-v2_plan.md`)는 이미 슬롯 코어 단일 writer(불변식 A)·단일 브로커 세션(불변식 B)·buy/sell intent 핸드오프·safety floor 를 정리해 둔 상태다.
|
||||
- 기대 상태
|
||||
- trex-core 가 데몬 프로세스로 떠서 slot 도메인을 **durable 단일 writer**로 소유한다.
|
||||
- 매수·매도 전략 데몬이 HTTP API 로 intent 를 제출하고(매수/매도), holding 슬롯 스냅샷을 read-only 로 조회한다.
|
||||
- 코어가 intent 를 심사(admission)해 슬롯 전이를 단독 수행한다(전략은 "제안", 코어가 "집행").
|
||||
- 이해관계자
|
||||
- 문서 작성자/구현자(AI agent)
|
||||
- 리뷰어/승인자(운영자, genichin@gmail.com)
|
||||
- 코어 API 소비자: 매수·매도 전략 데몬(별도 프로세스)
|
||||
- 제약사항
|
||||
- 불변식 A — `daily_slot` 단일 writer 는 코어뿐. 전략은 슬롯을 직접 쓰지 않는다.
|
||||
- 순수 도메인 경계 유지 — `trex_core.domain.slot` 은 웹 프레임워크/DB 드라이버에 의존하지 않는다(의존은 API·persistence 어댑터 레이어에만).
|
||||
- dcy-001 부록 A 의 `Slot` 컬럼 계약을 영속화 구현이 만족해야 한다.
|
||||
|
||||
## 주요 사용자 시나리오
|
||||
사용자 또는 운영자가 실제로 어떤 상황에서 이 변경을 필요로 하는지 대표 시나리오를 적는다.
|
||||
|
||||
- 매수 전략 데몬이 신호 발생 시 `POST /v1/intents/buy`(symbol/qty/...)를 호출하면, 코어가 admission 통과 시 idle→pending_buy 로 전이하고 결과를 응답한다.
|
||||
- 매도 전략 데몬이 `GET /v1/slots?status=holding` 로 보유 슬롯 스냅샷을 읽어 전략을 평가한 뒤 `POST /v1/intents/sell` 로 청산 intent 를 제출한다.
|
||||
- 운영자가 `GET /v1/capacity`·`GET /v1/healthz` 로 코어 데몬의 슬롯 가용성과 생존을 모니터링한다.
|
||||
|
||||
# 4. 이번에 정의할 변경
|
||||
이번 Discovery에서 다루는 핵심 변경 항목을 목록으로 적는다. 기능, 구조, 규칙 변경을 함께 포함해도 된다.
|
||||
|
||||
- 데몬 런타임: trex-core 를 장기 실행 프로세스로 기동하는 엔트리포인트 + lifecycle(start/shutdown/healthz).
|
||||
- HTTP API 경계: intent 제출(buy/sell) + holding 슬롯 read-only 스냅샷 + capacity/health 엔드포인트.
|
||||
- 영속화: `SlotRepository` 의 PostgreSQL 구현(단일 writer, advisory lock 실제화) + 스키마/마이그레이션. in-memory 는 테스트용으로 잔존.
|
||||
- 멱등 intent 처리(OQ-1 결정): `intent_id` 기반 dedup + 수락 시 **동기** 슬롯 전이 커밋(불변식 A 강제). 수락된 intent 는 같은 트랜잭션에서 `intent_log` 에 durable 기록(dedup 저장소 + audit + 향후 outbox 전구체). 완전 비동기 outbox 는 브로커 집행 Discovery 로 Deferred.
|
||||
- baseline 갱신: `docs/project-structure.md`·`docs/runtime-flows.md`·`docs/interface-contract.md` 에 데몬/API/영속화 레이어 반영.
|
||||
|
||||
## 영향 범위
|
||||
변경이 미칠 코드/문서/운영 범위를 명시해 REQ 정제와 batch planning에서 추정 누락을 줄인다.
|
||||
|
||||
- 코드 영향:
|
||||
- 신규 레이어: `trex_core/` 하위 API 어댑터(FastAPI+uvicorn, OQ-2 결정), persistence 어댑터(psycopg), 데몬 런타임/엔트리포인트.
|
||||
- `pyproject.toml`: FastAPI+uvicorn + psycopg 의존성 및 console_scripts 추가. 도메인 패키지는 무의존 유지.
|
||||
- 문서 영향:
|
||||
- `docs/interface-contract.md` 에 HTTP API 계약 추가, `docs/runtime-flows.md` 에 데몬/요청 흐름 추가, `docs/data-model.md`/`docs/project-structure.md` 갱신.
|
||||
- 운영 영향:
|
||||
- 신규 운영물: 장기 실행 데몬 프로세스 + PostgreSQL 의존 + API 포트/헬스체크. 배포·모니터링 절차 신설.
|
||||
|
||||
# 5. 요구사항 목록
|
||||
실제로 구현과 검증으로 이어질 요구사항을 기능/비기능으로 나누어 정리하고, 범위 경계를 명확히 적는다.
|
||||
|
||||
## 기능 요구사항
|
||||
- FR-1: trex-core 를 데몬으로 기동하는 엔트리포인트와 lifecycle(기동/정상종료/`GET /v1/healthz`)을 제공한다. 거래일 슬롯 사전할당(preallocate)은 공개 엔드포인트가 아니라 데몬 lifecycle 내부(기동/스케줄) 책임으로 둔다(OQ-3 결정).
|
||||
- FR-2: HTTP API 로 매수 intent(`POST /v1/intents/buy`)와 매도 intent(`POST /v1/intents/sell`)를 수락하고, 코어가 admission/검증 후 슬롯 전이(idle→pending_buy / holding→pending_sell)를 단독 수행한다. API 는 `/v1` 버전 프리픽스를 사용한다(OQ-3 결정).
|
||||
- FR-3: HTTP API 로 holding 슬롯 스냅샷(`GET /v1/slots?status=holding`)과 capacity(`GET /v1/capacity`)를 read-only 로 제공한다.
|
||||
- FR-4: intent 는 `intent_id` 멱등키로 dedup 하여 동일 intent 재전송이 슬롯을 중복 전이시키지 않는다. 수락 시 admission+슬롯 전이를 **동기**로 커밋해 호출자에게 admit/reject 를 응답하고(OQ-1 결정), 수락된 intent 를 `intent_log`(intent_id, payload, decision, ts) 에 같은 트랜잭션으로 durable 기록한다. `GET /v1/intents/{intent_id}` 로 결정을 재조회할 수 있어(응답 유실 시) 멱등 재시도를 지원한다. 완전 비동기 outbox 는 브로커 Discovery 로 Deferred.
|
||||
- FR-5: `SlotRepository` 의 PostgreSQL 구현을 추가해 코어가 `daily_slot` 단일 writer 로 durable 하게 동작한다(advisory lock 실제화). 스키마는 **trex-core 소유의 신규 마이그레이션**으로 작성하되 dcy-001 부록 A 를 단일 기준으로 하고 orbit-v2 DDL 을 참조 구현으로만 쓴다(OQ-4 결정). 슬라이스 1 테이블: `daily_slot`(부록 A 16컬럼)·`daily_symbol_entries`·`slot_transition_log` + `intent_log`(OQ-1). `daily_slot_archive`/prune 는 범위 밖. `EXPECTED_SLOT_FIELDS` ↔ `daily_slot` 실제 컬럼(information_schema) 드리프트 테스트를 동반해 dcy-001 OQ-2 가 인계한 DB-side 검사를 실현한다.
|
||||
- FR-6: `docs/interface-contract.md`·`docs/runtime-flows.md`·`docs/project-structure.md`·`docs/data-model.md` 를 데몬/API/영속화 레이어에 맞게 갱신한다.
|
||||
|
||||
## 비기능 요구사항
|
||||
성능, 운영성, 일관성, 자동화 안정성 등 기능 외 요구사항을 적는다.
|
||||
|
||||
- NFR-1: 도메인 순수성 유지 — `trex_core.domain.slot` 은 웹 프레임워크/psycopg 에 의존하지 않는다(의존은 API·persistence 어댑터 레이어에 격리; import 스윕으로 검증).
|
||||
- NFR-2: 단일 writer 불변식 — `daily_slot`/`SlotService.transit_slot` 쓰기는 코어 경로에서만 일어난다(API 핸들러가 advisory lock 으로 직렬화).
|
||||
- NFR-3: 멱등/내구성 — 수락된 intent 의 슬롯 전이는 at-least-once 재전송에도 1회만 반영된다(`intent_id` dedup via `intent_log`). "수락 == 커밋"이라 수락-후-미처리 유실 창이 없다.
|
||||
|
||||
## 범위 경계
|
||||
이번 반복에서 반드시 포함할 범위와 명시적으로 제외할 범위를 구분한다.
|
||||
|
||||
- In Scope
|
||||
- 데몬 런타임 + HTTP API(intent 제출 + holding/capacity 조회 + health).
|
||||
- PostgreSQL `SlotRepository` 영속화(단일 writer) + 멱등 intent 처리.
|
||||
- baseline 문서 갱신.
|
||||
- Out of Scope (후속 Discovery)
|
||||
- 완전 비동기 durable outbox(intent 상태머신 + 소비 루프) — 브로커 집행 Discovery 에서 `intent_log` 를 승격(OQ-1 Deferred 부분).
|
||||
- 브로커 단일 세션/실제 주문 집행(불변식 B, order execution).
|
||||
- safety floor(forced_close/EOD/손절 backstop, liveness 게이팅) 및 sell_evaluation_log.
|
||||
- 매수·매도 전략 데몬 자체 구현(코어의 소비자이며 별 repo/프로세스).
|
||||
- 인증/인가 고도화, 멀티테넌시, 수평 확장.
|
||||
|
||||
# 6. 리스크/가정 목록
|
||||
불확실성과 전제 조건을 분리해서 적는다. 리스크는 영향과 완화 방안을, 가정은 현재 판단의 전제를 기록한다.
|
||||
|
||||
## 리스크
|
||||
- R-1 (High): 브로커 집행 없이 코어만 만들면 intent→슬롯 전이까지만 동작해 "거래"는 미완성. 부분 가치만 실현.
|
||||
- 완화 방안: 이번 반복을 "durable 단일 writer 슬롯 코어 + API 경계"로 한정하고, 브로커/ safety floor 를 후속 Discovery 로 명시 인계(범위 경계에 박음).
|
||||
- R-2 (Medium): HTTP 는 at-least-once 를 보장하지 않아 intent 중복/유실 가능.
|
||||
- 완화 방안(OQ-1 결정): `intent_id` 멱등키(FR-4) + 수락 시 동기 커밋 + `intent_log` durable 기록. 브로커 집행이 들어오는 후속 Discovery 에서 `intent_log` 에 status+소비 루프를 얹어 outbox 로 점진 승격(API 계약 무변경).
|
||||
- R-3 (Medium): 웹 프레임워크/psycopg 의존이 도메인 순수성을 오염시킬 위험.
|
||||
- 완화 방안: 레이어 분리(domain/ application/ adapters) + import 스윕 가드(NFR-1, dcy-001 의 계약 테스트 패턴 확장).
|
||||
- R-4 (Medium): orbit-v2 SQL 스키마와 trex-core `Slot` 컬럼 계약(부록 A) 불일치 위험.
|
||||
- 완화 방안: 부록 A 를 기준으로 스키마 작성 + 드리프트 테스트(dcy-001 이 인계한 DB-side 검사 여기서 실현).
|
||||
|
||||
## 가정
|
||||
아직 확정되지 않았지만 현재 문서 작성의 기반이 되는 전제를 적는다.
|
||||
|
||||
- A-1: 매수·매도 전략은 별도 프로세스이며 코어 API 의 클라이언트다(코어는 전략 로직을 포함하지 않는다).
|
||||
- A-2: 단일 코어 인스턴스가 `daily_slot` 단일 writer 다(슬라이스 1 은 수평 확장 비대상).
|
||||
- A-3: 영속화는 PostgreSQL 을 사용하며 dcy-001 부록 A 컬럼 계약을 만족한다.
|
||||
|
||||
## 오픈 질문
|
||||
답을 아직 모르는 항목을 적는다. 추정으로 덮지 말고 REQ 초안 작성 이전에 확인할 질문으로 남긴다.
|
||||
|
||||
- OQ-1: intent 내구성 — 수락 시 동기 admission+커밋(슬라이스 1 기본) vs 내부 durable outbox 적재 후 비동기 소비.
|
||||
- 상태: Answered (2026-06-03)
|
||||
- 결정: **동기 커밋 + `intent_id` 멱등 + durable `intent_log` 이음매**. 수락 시 admission+슬롯 전이를 동기 커밋하고 admit/reject 를 즉시 응답, 수락 intent 를 같은 트랜잭션에서 `intent_log` 에 기록. 완전 비동기 outbox 는 가치(느린 브로커 집행 디커플링)가 실현되는 **브로커 집행 Discovery 로 Deferred** 하며, 그때 `intent_log` 에 status+소비 루프를 얹어 API 계약 변경 없이 승격한다. 근거: 이번 범위엔 intent 뒤 느린 다운스트림이 없어 outbox 이득 미실현 + 동기 응답이 매수 admit/reject UX 에 유리 + "수락==커밋"이 유실 창 제거.
|
||||
- 반영 위치: `# 4`(멱등 처리 항목), `# 5` FR-4·NFR-3, `# 6` R-2 완화, `# 5` Out of Scope(완전 outbox Deferred).
|
||||
- OQ-2: API 프레임워크/스택 — FastAPI+uvicorn(기본 권장) vs Flask vs stdlib http. Python >=3.12.
|
||||
- 상태: Answered (2026-06-03)
|
||||
- 결정: **FastAPI + uvicorn** 채택. 근거: 타입 기반 요청/응답 검증(pydantic), async, OpenAPI 자동 문서. Python >=3.12.
|
||||
- 반영 위치: `# 4` 코드 영향(API 어댑터·pyproject 의존성). REQ 단계에서 부트스트랩(REQ-A 계열)에 의존성·버전 고정.
|
||||
- OQ-3: 엔드포인트 1차 범위 — `/intents/buy`,`/intents/sell`,`/slots`,`/capacity`,`/healthz` 로 충분한지, admission 결과 조회/취소 엔드포인트가 필요한지.
|
||||
- 상태: Answered (2026-06-03)
|
||||
- 결정: 아래 6개로 1차 고정(`/v1` 버전 프리픽스). 모두 단일 코어 데몬이 노출.
|
||||
- `GET /v1/healthz` — liveness/readiness.
|
||||
- `POST /v1/intents/buy` — 매수 intent 수락, 동기 admit/reject 응답(+ slot_id).
|
||||
- `POST /v1/intents/sell` — 매도 intent 수락, 동기 admit/reject 응답.
|
||||
- `GET /v1/intents/{intent_id}` — 멱등 재조회/audit(POST 응답 유실 시 결정 재확인; FR-4 보강).
|
||||
- `GET /v1/slots?status=holding` — holding 슬롯 스냅샷 read-only(status/trading_date 필터).
|
||||
- `GET /v1/capacity` — idle/holding/pending + scarcity_ratio.
|
||||
- 제외(슬라이스 1): intent 취소/admission 취소 엔드포인트(브로커·rollback 경로와 함께 후속), 슬롯 사전할당 엔드포인트(데몬 lifecycle 내부 처리, FR-1).
|
||||
- 반영 위치: `# 5` FR-1/FR-2/FR-3/FR-4, `# 4` HTTP API 경계. interface-contract 초안은 REQ/Batch design 에서 고정.
|
||||
- OQ-4: 영속화 스키마 출처 — orbit-v2 의 slot SQL 을 가져와 정합 vs 부록 A 기준으로 신규 작성.
|
||||
- 상태: Answered (2026-06-03)
|
||||
- 결정: **부록 A 를 단일 기준으로 trex-core 소유의 신규 마이그레이션을 작성**하고 orbit-v2 DDL 은 참조 구현으로만 사용. 슬라이스 1 테이블 = `daily_slot`·`daily_symbol_entries`·`slot_transition_log`·`intent_log`(archive/prune 제외). `EXPECTED_SLOT_FIELDS`↔information_schema 드리프트 테스트로 dcy-001 OQ-2 의 DB-side 검사 실현. 근거: 신규 베이스가 자기 스키마 lineage 를 소유(OQ-1 독립 결정과 일관) + 검증된 orbit DDL 재사용(재발명 회피).
|
||||
- 반영 위치: `# 5` FR-5, `# 6` R-4 완화.
|
||||
|
||||
### 오픈 질문 처리 기준
|
||||
- `Open`: 아직 답이 없고 다음 단계 진행에 영향이 있는 상태다. 문서에 유지한다.
|
||||
- `Answered`: 답이 확정된 상태다. 관련 본문/요구사항에 반영한 뒤 오픈 질문 목록에서는 제거하거나 resolved 기록으로 이동한다.
|
||||
- `Deferred`: 지금 단계에서 결정하지 않고 다음 단계 또는 후속 이슈로 넘기는 상태다. 넘길 대상과 이유를 반드시 적는다.
|
||||
- `Dropped`: 더 이상 유효하지 않은 질문이다. 삭제 사유를 짧게 남기고 목록에서 제거한다.
|
||||
- 처리 원칙 1: 질문만 남기지 말고 반드시 `상태`, `처리 방안`, `종료 조건`을 함께 적는다.
|
||||
- 처리 원칙 2: 답이 나온 질문은 본문 반영 없이 단순 삭제하지 않는다. 반영 위치를 먼저 갱신한다.
|
||||
- 처리 원칙 3: High 영향 질문은 `Deferred` 처리 후 처리 방안에 REQ 인계 추적 방식을 명시한다.
|
||||
|
||||
# 7. 초기 성공 기준
|
||||
이 변경이 성공했다고 판단할 기준을 측정 가능하게 정의한다. 가능하면 데이터 출처까지 연결한다.
|
||||
|
||||
- S-1: 코어 데몬을 기동하고 `GET /v1/healthz` 가 200 을 반환한다.
|
||||
- S-2: `POST /v1/intents/buy` 호출 시 idle 슬롯이 pending_buy 로 전이되고, 동일 `intent_id` 재전송이 중복 전이를 만들지 않는다(멱등).
|
||||
- S-3: `GET /v1/slots?status=holding` 가 holding 슬롯 스냅샷을 read-only 로 반환한다.
|
||||
- S-4: PostgreSQL repo 로 코어를 구동했을 때 도메인 단위테스트/통합테스트가 통과하고, `daily_slot` 쓰기가 코어 경로로만 발생한다(단일 writer).
|
||||
- S-5: 도메인 패키지 import 스윕에서 웹 프레임워크/psycopg 의존이 0 으로 유지된다(레이어 격리).
|
||||
|
||||
## 측정 방식 및 데이터 출처
|
||||
각 성공 기준을 어떻게 측정할지와 어떤 데이터나 문서를 근거로 쓸지 적는다.
|
||||
|
||||
- S-1 측정 방식: 데몬 기동 후 healthz 호출 / 데이터 출처: 통합테스트 또는 수동 curl 로그.
|
||||
- S-2 측정 방식: API 통합테스트(정상 1회 + 중복 재전송) / 데이터 출처: 테스트 결과, 슬롯 상태·transition_log.
|
||||
- S-3 측정 방식: holding 슬롯 조성 후 GET 응답 검증 / 데이터 출처: API 통합테스트.
|
||||
- S-4 측정 방식: PostgreSQL 백엔드 통합테스트(가능 시) + 쓰기 경로 정적 검토 / 데이터 출처: 테스트 결과, 코드 리뷰.
|
||||
- S-5 측정 방식: 정적 import 스윕 / 데이터 출처: `trex_core/domain/slot` import 목록.
|
||||
|
||||
# 8. REQ로 넘기기 전 확인 체크
|
||||
REQ 초안 작성 단계로 넘기기 전에 무엇이 확정되어야 하는지 확인한다. 미완료 항목은 후속 결정이 필요함을 뜻한다.
|
||||
|
||||
- [x] 범위(In Scope/Out of Scope) 확정 — 특히 브로커/safety floor 제외
|
||||
- 기준: 운영자가 슬라이스 1 경계를 확인했다. → confirm-discovery 에서 문서대로 확정(2026-06-03).
|
||||
- [x] 성공 지표의 측정 방식/데이터 출처 확정
|
||||
- 기준: S-1~S-5 측정 방식·출처 명시(본 문서 # 7).
|
||||
- [x] High 영향 리스크(R-1) 처리 방침 확정
|
||||
- 기준: R-1(브로커 미포함) 을 후속 Discovery 인계로 수용. → 범위 경계 확정과 함께 수용(2026-06-03).
|
||||
- [x] 모든 오픈 질문(OQ) `Open` 상태 없음 확인
|
||||
- 기준: OQ 목록에 `Open` 0개 또는 잔여 전부 `Deferred` (OQ-1~OQ-4 전부 Answered → `Open` 0개)
|
||||
- [x] Freeze 확정 담당자(CONFIRMED_BY) 지정
|
||||
- 기준: 운영자가 confirm-discovery 시점에 CONFIRMED_BY 를 지정한다. → Confirmed By: Justin.
|
||||
|
||||
# 9. 파일 처리 결과
|
||||
이 Discovery 문서 생성/갱신 결과와 참조 문서를 기록한다. 이후 추적과 리뷰 시 근거로 사용한다.
|
||||
|
||||
- 처리 결과: 생성
|
||||
- 생성 경로: docs/discovery/dcy-002_20260603_slot-core-daemon-http-api.md
|
||||
- 참조 문서:
|
||||
- docs/discovery/dcy-001_20260603_slot-pure-domain-migration.md (순수 도메인 코어 + 부록 A 컬럼 계약)
|
||||
- docs/project-structure.md, docs/runtime-flows.md, docs/interface-contract.md, docs/data-model.md (baseline — 본 Discovery 가 갱신 요구)
|
||||
- trex-orbit `orbit-v2_plan.md` (3-데몬 설계 참고자료)
|
||||
|
||||
# 10. 사용자 결정 필요 항목 요약
|
||||
사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. 결정, 확인, 데이터 요청을 구분해서 적는다.
|
||||
|
||||
## DECIDE
|
||||
- ~~intent 내구성~~ → 결정됨: 동기 커밋 + `intent_id` 멱등 + durable `intent_log`, 완전 outbox 는 브로커 Discovery 로 Deferred (OQ-1, 2026-06-03)
|
||||
- ~~영속화 스키마 출처~~ → 결정됨: 부록 A 기준 trex-core 소유 신규 마이그레이션(orbit-v2 DDL 참조), archive 제외, 드리프트 테스트 동반 (OQ-4, 2026-06-03)
|
||||
|
||||
## CONFIRM
|
||||
- ~~API 프레임워크~~ → 결정됨: FastAPI + uvicorn (OQ-2, 2026-06-03)
|
||||
- ~~1차 엔드포인트 집합~~ → 결정됨: `/v1`(healthz, intents/buy, intents/sell, intents/{id}, slots, capacity); 취소·preallocate 엔드포인트 제외 (OQ-3, 2026-06-03)
|
||||
- ~~범위 경계(브로커 deferral)~~ → 확정됨: 브로커 집행·safety floor·완전 outbox·전략 데몬을 후속 Discovery 로 미루고 슬라이스 1(데몬+API+영속화+멱등) 승인 (confirm-discovery, 2026-06-03)
|
||||
|
||||
## DATA
|
||||
- 없음 (별도 외부 데이터 요청 없음)
|
||||
|
||||
# 11. Discovery Freeze
|
||||
REQ 초안 작성 인계 시점의 확정 플래그와 섹션 참조만 기록한다. 내용 재작성 없이 원본 섹션을 링크로 대신한다.
|
||||
|
||||
## 섹션 참조
|
||||
- 범위: [# 5. 요구사항 목록 > 범위 경계](#5-요구사항-목록)
|
||||
- 리스크/오픈 질문: [# 6. 리스크/가정 목록](#6-리스크가정-목록)
|
||||
- 성공 기준: [# 7. 초기 성공 기준](#7-초기-성공-기준)
|
||||
- 인계 전 확인: [# 8. REQ로 넘기기 전 확인 체크](#8-req로-넘기기-전-확인-체크)
|
||||
- 사용자 결정 필요: [# 10. 사용자 결정 필요 항목 요약](#10-사용자-결정-필요-항목-요약)
|
||||
|
||||
## Freeze 플래그
|
||||
- Handoff Decision: 승인
|
||||
- Handoff Rationale: OQ-1~OQ-4 전부 Answered(내구성=동기+intent_log / 프레임워크=FastAPI / 엔드포인트=/v1 6종 / 스키마=부록 A 기준 신규). 범위 경계(브로커·safety floor·outbox·전략 데몬 후속 Deferred)와 R-1 처리 방침을 confirm-discovery 에서 확정, CONFIRMED_BY 지정 완료. REQ Drafting 으로 인계 가능.
|
||||
- Ready for REQ Drafting: true
|
||||
- Confirmed By: Justin
|
||||
- Confirmed At (KST): 2026-06-03
|
||||
@@ -6,4 +6,5 @@
|
||||
|
||||
| ID | 날짜 | 이슈명 | 문서 | 상태 |
|
||||
|---|---|---|---|---|
|
||||
| dcy-001_20260603_slot-pure-domain-migration | 20260603 | trex-core 베이스 수립 및 slot 순수 도메인 이식 | [Discovery](./dcy-001_20260603_slot-pure-domain-migration.md) | confirmed |
|
||||
| dcy-001_20260603_slot-pure-domain-migration | 20260603 | trex-core 베이스 수립 및 slot 순수 도메인 이식 | [Discovery](./dcy-001_20260603_slot-pure-domain-migration.md) | confirmed |
|
||||
| dcy-002_20260603_slot-core-daemon-http-api | 20260603 | trex-core 슬롯 코어 데몬화 + HTTP intent API | [Discovery](./dcy-002_20260603_slot-core-daemon-http-api.md) | confirmed |
|
||||
Reference in New Issue
Block a user