Files
trex-core/docs/srs/Interface/req-025_http-api-complete-removal.md
T

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 /v1 API 표면을 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/sell
    • GET /v1/intents/{intent_id}
    • GET /v1/slots, GET /v1/capacity
    • GET /v1/healthz
    • dcy-005 가 HTTP 로 가정한 스냅샷 read 엔드포인트(아직 미구현인 경우 가정 자체 갱신)
  • trex_core/adapters/api/ HTTP 어댑터 패키지를 제거하고, FastAPI/uvicorn/Starlette 직접 의존을 코어 런타임에서 제거한다(테스트 전용 보조 import 도 마찬가지). pyproject.toml 의 fastapi/uvicorn 의존성을 정리한다.
  • TREX_API_HOST / TREX_API_PORT env 와 그 로딩 코드를 폐기한다(DaemonConfig/.env.example 정리).
  • 데몬 기동 후 HTTP 리스너가 어떤 포트에도 바인딩되어 있지 않아야 한다(HTTP 표면 0). 앱 레벨 헬스/관측성은 로그·메트릭으로 대체한다.
  • dcy-002 의 HTTP intent API 가정과 dcy-005 의 HTTP pull 가정(FR-1/A-3)을 cross-reference 로 갱신한다.

Acceptance Criteria

  1. Given 새 트리, When find trex_core -path '*/adapters/api/*' 또는 grep -r "fastapi\|uvicorn" trex_core/, Then 결과가 비어 있다(HTTP 어댑터 잔존 0).
  2. Given trex-core daemon, When 기동 후 포트 스캔, Then 어떤 TCP 포트에도 HTTP 리스너가 열려 있지 않다(HTTP 표면 0, dcy-006 S-6).
  3. Given DaemonConfig.from_env(), When 환경 변수 로딩, Then TREX_API_HOST/TREX_API_PORT 를 더 이상 참조하지 않고, 누락되어도 기동에 영향이 없다.
  4. Given pyproject.toml, When 의존성 목록을 점검, Then fastapi/uvicorn/starlette 가 코어 runtime 의존성에서 제거되어 있다.
  5. Given dcy-002·dcy-005 의 HTTP 가정 본문, When 본 변경 완료 시점에 cross-reference 갱신을 확인, Then 두 Discovery 의 HTTP 가정이 "transport 는 RabbitMQ(dcy-006)" 로 일관되게 안내된다.
  6. 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 /v1 API + 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 /v1 API 완전 제거(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 /v1 API + 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.