feat: add messaging transport rollout

This commit is contained in:
2026-06-06 00:02:52 +09:00
parent 4b91343ee8
commit 6c7a1cf6f6
383 changed files with 99045 additions and 487 deletions
@@ -0,0 +1,157 @@
# 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.