7.9 KiB
7.9 KiB
req-025: HTTP /v1 API 완전 제거 (healthz 포함, HTTP 표면 0)
- Status: Implemented
- Type: Interface
- Priority: High
- Owner: project maintainers
Intent
- RabbitMQ 단일 transport 결정(dcy-006 OQ-1)에 따라 trex-core 의 HTTP
/v1API 표면을 0 으로 만든다. 전략-facing 엔드포인트뿐 아니라GET /v1/healthz같은 앱 레벨 헬스 표면까지 제거하고(OQ-7), liveness 는 프로세스 감독(systemd/supervisor/docker restart)이 담당한다. 이중 transport 병행을 두지 않는다.
Requirement
- 아래 HTTP 엔드포인트와 그 어댑터를 trex-core 코드와 baseline 에서 제거한다.
POST /v1/intents/buy,POST /v1/intents/sellGET /v1/intents/{intent_id}GET /v1/slots,GET /v1/capacityGET /v1/healthz- dcy-005 가 HTTP 로 가정한 스냅샷 read 엔드포인트(아직 미구현인 경우 가정 자체 갱신)
trex_core/adapters/api/HTTP 어댑터 패키지를 제거하고, FastAPI/uvicorn/Starlette 직접 의존을 코어 런타임에서 제거한다(테스트 전용 보조 import 도 마찬가지).pyproject.toml의fastapi/uvicorn의존성을 정리한다.TREX_API_HOST/TREX_API_PORTenv 와 그 로딩 코드를 폐기한다(DaemonConfig/.env.example정리).- 데몬 기동 후 HTTP 리스너가 어떤 포트에도 바인딩되어 있지 않아야 한다(HTTP 표면 0). 앱 레벨 헬스/관측성은 로그·메트릭으로 대체한다.
- dcy-002 의 HTTP intent API 가정과 dcy-005 의 HTTP pull 가정(FR-1/A-3)을 cross-reference 로 갱신한다.
Acceptance Criteria
- Given 새 트리, When
find trex_core -path '*/adapters/api/*'또는grep -r "fastapi\|uvicorn" trex_core/, Then 결과가 비어 있다(HTTP 어댑터 잔존 0). - Given trex-core daemon, When 기동 후 포트 스캔, Then 어떤 TCP 포트에도 HTTP 리스너가 열려 있지 않다(HTTP 표면 0, dcy-006 S-6).
- Given
DaemonConfig.from_env(), When 환경 변수 로딩, ThenTREX_API_HOST/TREX_API_PORT를 더 이상 참조하지 않고, 누락되어도 기동에 영향이 없다. - Given
pyproject.toml, When 의존성 목록을 점검, Thenfastapi/uvicorn/starlette가 코어 runtime 의존성에서 제거되어 있다. - Given dcy-002·dcy-005 의 HTTP 가정 본문, When 본 변경 완료 시점에 cross-reference 갱신을 확인, Then 두 Discovery 의 HTTP 가정이 "transport 는 RabbitMQ(dcy-006)" 로 일관되게 안내된다.
- Given liveness 확인 시나리오, When 프로세스 감독(systemd/supervisor/docker restart)이 프로세스 죽음을 감지, Then 재시작이 broker 가용성과 무관하게 동작한다(broker 장애가 재시작 루프 유발 금지).
Impacted Area
- Docs: docs/interface-contract.md(HTTP
/v1섹션 제거), docs/runtime-flows.md(HTTP 흐름 제거), docs/project-structure.md(adapters/api 제거), docs/discovery/dcy-002·dcy-005 cross-reference 갱신 — REQ-026 에서 정합. - Modules:
- 제거
trex_core/adapters/api/전체(app.py,schemas.py) - 변경
trex_core/runtime/daemon.py(uvicorn import/실행 제거; REQ-022 의 sync+thread 런타임으로 교체) - 변경
trex_core/runtime/config.py(TREX_API_HOST/TREX_API_PORT폐기) - 변경
pyproject.toml(fastapi/uvicorn 제거; httpx 는 ledger 어댑터 사용처가 있으므로 유지) - 변경
.env.example(API_HOST/PORT 제거,TREX_RABBITMQ_URL추가는 REQ-022 책임)
- 제거
- Tests:
- 제거
tests/adapters/api/전체(또는 messaging 등가 테스트로 이관) - 추가 daemon HTTP-표면-0 회귀 가드(포트 스캔 또는 import 가드)
- 제거
Notes
- 출처: dcy-006 FR-5, OQ-1, OQ-7.
- 본 REQ 의 검증은 transport 가 RabbitMQ 로 대체 가능한 상태(REQ-021/REQ-022/REQ-023 구현)에 의존한다. 동일 batch 또는 직후 batch 에서 함께 deliver 해야 통신 단절 위험(R-5)을 피할 수 있다.
- httpx 는 본 REQ 가 제거 대상에서 제외한다(portfolio-hub ledger 어댑터가 사용).
- 외부 운영 가시성(메트릭/로그) 표준화는 본 REQ 범위 밖이며 후속 운영 트랙으로 추적한다.
Change Log
CHG-20260605-01
- Date: 2026-06-05
- Author: Justin Ko
Change Summary
- dcy-006 FR-5/OQ-1/OQ-7 로부터 최초 생성(Proposed). HTTP
/v1API + healthz + adapters/api + API_HOST/PORT env + fastapi/uvicorn 의존 전부 제거 backlog 정규화.
Intent
- 이중 transport 병행 없이 HTTP 표면 0 을 달성하고 dcy-002·dcy-005 의 HTTP 가정을 갱신.
Acceptance Criteria Delta
- Added:
- HTTP 어댑터 잔존 0, HTTP 리스너 0, env 폐기, 의존성 제거, cross-reference 갱신, 프로세스 감독 liveness (총 6개 기준)
- Updated:
- 없음
- Removed:
- 없음
Impacted Area Delta
- Docs:
- docs/interface-contract.md, docs/runtime-flows.md, docs/project-structure.md, dcy-002/dcy-005 cross-reference
- Modules:
- adapters/api 제거, runtime/daemon.py, runtime/config.py, pyproject.toml, .env.example
- Tests:
- adapters/api 테스트 제거 또는 이관, daemon HTTP-표면-0 회귀 가드
Delivery Trace Delta
- Batches:
- none
- Releases:
- none
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: yes (BAT-002 HTTP API 관련 구현 일부가 RabbitMQ 로 대체)
- Status Recommendation: keep-current
- Follow-up Action: confirm-req 후 REQ-021~023 과 동일 batch 편성(통신 단절 R-5 회피).
Validation Plan
- 코드 grep + 포트 스캔 + env 누락 기동 + pyproject 의존성 검사 + cross-reference 리뷰 + 프로세스 감독 시나리오로 검증.
CHG-20260605-02
- Date: 2026-06-05
- Author: Justin Ko
Change Summary
- Status 변경: Proposed -> Approved. confirm-req 승인 게이트 통과.
Intent
- HTTP
/v1API 완전 제거(healthz 포함, HTTP 표면 0)와 fastapi/uvicorn 의존 정리를 delivery input 으로 승인.
Acceptance Criteria Delta
- Added/Updated/Removed: 없음
Impacted Area Delta
- Docs/Modules/Tests: 없음
Delivery Trace Delta
- Batches:
- none
- Releases:
- none
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: yes (BAT-002 HTTP API 관련 구현 일부 RabbitMQ 로 대체)
- Status Recommendation: Approved
- Follow-up Action: REQ-021/022/023 과 반드시 동일 batch 로 deliver(big-bang 마이그레이션 R-5 회피)
Validation Plan
- 기존 Acceptance Criteria 로 batch delivery 에서 검증.
CHG-20260605-03
- Date: 2026-06-05
- Author: Justin Ko
Change Summary
- Status 변경: Approved -> Implemented. BAT-007 release-candidate verification evidence 기반.
Intent
- HTTP
/v1API + healthz + adapters/api + fastapi/uvicorn 의존 + TREX_API_HOST/PORT 폐기를 구현 완료 상태로 동기화.
Acceptance Criteria Delta
- Added/Updated/Removed: 없음
Impacted Area Delta
- Docs/Modules/Tests: 없음
Delivery Trace Delta
- Batches:
- BAT-007 (release-candidate)
- Releases:
- none
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: yes (BAT-002 HTTP API 관련 구현/테스트 일부 RabbitMQ 로 대체됨; tests/adapters/api/ 제거)
- Status Recommendation: Implemented
- Follow-up Action: release 단계에서 전략 모듈 cut-over 순서 합의.
Validation Plan
- AC-1: tests/runtime/test_daemon_no_http_surface.py::test_adapters_api_tree_does_not_exist + test_no_fastapi_or_uvicorn_in_trex_core_source.
- AC-2: tests/runtime/test_daemon_no_http_surface.py::test_daemon_module_has_no_fastapi_or_uvicorn_import.
- AC-3: tests/runtime/test_daemon_no_http_surface.py::test_config_env_no_longer_references_api_host_or_port.
- AC-4: tests/runtime/test_daemon_no_http_surface.py::test_pyproject_dependencies_have_no_fastapi_or_uvicorn.
- AC-5: docs/discovery/dcy-002_…md 헤더 supersede 메모 + dcy-005 cross-reference 보유.
- AC-6: Daemon.run 의 signal handler + 포트 바인딩 0 코드 review.