`trex-core slots` 가 snapshot RPC 의 universe `assets`(portfolio)를 슬롯 상태로 오인 표시하던 갭 정정. snapshot envelope 이 슬롯 상태를 운반하지 않아 발생 (10개 슬롯인데 universe 1개·status 없음 — BAT-007 HTTP 슬롯 read 제거 후 슬롯 상태 read 표면 부재가 근인). - REQ-028 (CHG-20260608-01): snapshot envelope 에 read-only per-slot `slots[]` additive 추가(AC-4). strategy `assets[]`(universe, no-price) 불변. - REQ-032 (CHG-20260608-03): `_cmd_slots` 가 envelope `slots[]`(실제 슬롯 상태) 표시 + `--status` 를 슬롯 status 기준 client-side 필터 + watchdog 결합. `universe` 는 `assets[]` 유지. `universe --json` 도 universe 데이터로 scope. - canonical `portfolio.slot_to_dict` 단일화 — BAT-007 stub / BAT-008 envelope 두 경로가 동일 슬롯 스키마(외부명 `entry_price` 유지, dcy-012 호환). - interface-contract 에 `slots[]` 계약 + `assets[]` vs `slots[]` 구분 반영. 검증: 단위 338 passed + ruff clean + 신규 코드 데몬으로 실 PostgreSQL/RabbitMQ 운영 재현 PASS(slots=10·status·DB 일치·universe 분리·비침습). REQ-028/032 Implemented, BAT-022 release-candidate. pytest 인프라 게이트는 Human Approval Memo 수용(운영 재현이 실 경로 커버). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
10 KiB
10 KiB
req-032: 런타임 pause/resume 제어
- Status: Implemented
- Type: Interface
- Priority: Medium
- Owner: project maintainers
Intent
- 운영자가 특정 자산을 런타임에 매매에서 제외(pause)하거나 다시 포함(resume)할 수 있게 한다. 프로그램 이상·이벤트 시 안전 통제를 위한 수동 overlay 다.
Requirement
- pause/resume 단위는
portfolio_id(= asset_id)다. - 제어는 CLI 와 dcy-006 RPC 제어 메시지 둘 다로 가능하며, 둘은 동일한 pause 상태를 변경한다. config 리로드 방식은 채택하지 않는다.
- pause 상태는 Postgres 에 영속(portfolio_id 키)하며 daemon 재시작 후에도, 일일 스냅샷 refresh 후에도 유지된다(refresh 는 universe/포지션만 갱신, pause overlay 불변).
- 적용 범위는 전역 — pause 된 자산은 모든 view/전략 요청에서 마스킹된다.
- pause 는 request-time mask 이므로 resume 시 다음 요청부터 즉시 응답에 복귀한다.
Acceptance Criteria
- Given 운영자가
portfolio_id를 pause, When 임의view/strategy_key로 스냅샷을 요청, Then 그 자산은 응답에서 마스킹된다. - Given pause 상태에서 daemon 재시작 또는 일일 refresh 발생, When 이후 요청, Then pause 가 유지된다.
- Given 운영자가 resume, When 다음 요청, Then 그 자산이 응답에 다시 포함된다.
- Given CLI 로 pause 후 RPC 제어로 조회(또는 그 반대), Then 동일한 pause 상태가 보인다.
Impacted Area
- Docs: docs/discovery/dcy-005_20260604_portfolio-hub-asset-snapshot-api.md
- Modules: pause 상태 store(Postgres), CLI 제어, dcy-006 RPC 제어 메시지 핸들러, 응답 산출 시 pause 마스킹
- Tests: pause→호출→resume→호출 시퀀스, 재시작/refresh 후 영속
Notes
- pause(수동·영속) vs warning(자동·일시, REQ-031)은 독립 overlay 이며 OR 합성(둘 중 하나라도면 마스킹).
- OQ-10 반영.
Change Log
CHG-20260606-01
- Date: 2026-06-06
- Author: project maintainers
Change Summary
- dcy-005 FR-9 + OQ-10 분해로 최초 생성(Proposed).
Intent
- 런타임 pause/resume 제어(단위·제어 표면·영속·범위) 정의.
Acceptance Criteria Delta
- Added:
- AC-1~4 신규
- Updated:
- none
- Removed:
- none
Impacted Area Delta
- Docs:
- dcy-005
- Modules:
- pause store, CLI, RPC 제어, 마스킹
- Tests:
- pause/resume 시퀀스, 영속
Delivery Trace Delta
- Batches:
- none
- Releases:
- none
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: no
- Status Recommendation: keep-current
- Follow-up Action: confirm-req
Validation Plan
- pause→호출→resume→호출 + 재시작 영속 테스트로 AC 검증.
CHG-20260606-02
- Date: 2026-06-06
- Author: project maintainers
Change Summary
- 승인 게이트 통과 → Proposed → Approved.
Acceptance Criteria Delta
- Added: none
- Updated: none
- Removed: none
Impacted Area Delta
- 변경 없음
Delivery Trace Delta
- Batches: none
- Releases: none
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: no
- Status Recommendation: keep-current
- Follow-up Action: suggest-batch-reqs / draft-batch
Validation Plan
- 승인 기록. 구현 전 재검증 불필요.
CHG-20260606-03
- Date: 2026-06-06
- Author: Justin Ko
Change Summary
- Status 변경: Approved → Implemented. BAT-008 release-candidate verification evidence 기반.
Intent
- pause/resume CLI + RPC 제어 + Postgres 영속 구현 완료 상태로 동기화.
Acceptance Criteria Delta
- Added/Updated/Removed: 없음
Impacted Area Delta
- Docs/Modules/Tests: 없음
Delivery Trace Delta
- Batches:
- BAT-008 (release-candidate)
- Releases:
- none
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: no
- Status Recommendation: Implemented
- Follow-up Action: release 단계는 별도 진행
Validation Plan
- AC-1: tests/application/test_pause_handler.py::test_pause_then_list + test_snapshot_selection.py::test_pause_overlay_masks_asset.
- AC-2: tests/adapters/portfolio/test_postgresql_pause_store.py::test_durability_simulated_via_fresh_store_instance.
- AC-3: tests/application/test_pause_handler.py::test_resume_clears_pause.
- AC-4: tests/application/test_pause_handler.py::test_cli_pause_visible_to_rpc_list_via_shared_store + 실 daemon RPC 운영 검증.
CHG-20260608-01
- Date: 2026-06-08
- Author: Justin Ko
Change Summary
- (change-req, dcy-016) 운영자 CLI 확장:
universe/slots/enter/exit서브커맨드 추가(전부 데몬 RabbitMQ RPC). 인스턴스 라우팅(--configcanonical/--instance단축/default), enter/exit 안전장치(확인 프롬프트 기본 ON +--yes(paper)/--yes --live(live 이중 ack)/--dry-run), 전 명령--json. pause/resume/paused 는 기존 direct-DB 유지(OQ-3). BAT-020 재구현·재검증 완료 → Implemented 유지.
Intent
- 운영자가 조회·매수(enter)·매도(exit)·일시정지를 CLI 로 수행하되, 매매는 데몬 admission(단일 writer)을 거쳐 불변식·portfolio_id 검증을 보존(DB 직접 쓰기 없음, NFR-1).
Acceptance Criteria Delta
- Added:
- universe/slots(snapshot RPC)·enter(buy intent RPC)·exit(sell intent RPC) CLI + 인스턴스 라우팅 + enter/exit 안전장치 +
--json.
- universe/slots(snapshot RPC)·enter(buy intent RPC)·exit(sell intent RPC) CLI + 인스턴스 라우팅 + enter/exit 안전장치 +
Impacted Area Delta
- Modules:
trex_core/runtime/cli.py(서브커맨드/가드/라우팅/RPC 클라이언트) - Docs:
docs/interface-contract.md,docs/runtime-flows.md - Tests: tests/runtime/test_cli_operator.py
Delivery Trace Delta
- Batches: BAT-020
- Releases: none
Revalidation Impact
- Reverification Needed: yes (BAT-020 에서 완료)
- Existing Implementation Invalidated: no (pause/resume 불변, 명령 추가)
- Status Recommendation: Implemented (change-req → BAT-020 재검증)
- Follow-up Action: confirm-req-implemented(BAT-020).
Validation Plan
- BAT-020: CLI universe/slots/enter/exit RPC payload·안전장치·라우팅·--json 단위.
CHG-20260608-02
- Date: 2026-06-08
- Author: Justin Ko
Change Summary
- (change-req, dcy-017)
trex-core slots가 snapshot 응답의watchdog필드를 읽어expired=true슬롯을 WATCHDOG-OWNED(전략 이탈) 로 표시(+watchdog_owned카운트). dcy-016slots확장. BAT-021 재구현·재검증 완료 → Implemented 유지.
Intent
- 운영자가 CLI 로 워치독 소유(전략 이탈) 슬롯을 즉시 인지.
Acceptance Criteria Delta
- Updated:
slots출력에 워치독 소유 표시(snapshot watchdog 필드 기반).
Impacted Area Delta
- Modules:
trex_core/runtime/cli.py(_cmd_slots watchdog 표시) - Tests: tests/runtime/test_cli_operator.py::test_slots_marks_watchdog_owned
Delivery Trace Delta
- Batches: BAT-021
- Releases: none
Revalidation Impact
- Reverification Needed: yes (BAT-021 에서 완료)
- Existing Implementation Invalidated: no (표시 추가)
- Status Recommendation: Implemented (change-req → BAT-021 재검증)
- Follow-up Action: confirm-req-implemented(BAT-021).
Validation Plan
- BAT-021: slots watchdog-owned 표시 단위.
CHG-20260608-03
- Date: 2026-06-08
- Author: project maintainers
Change Summary
- (change-req, dcy-016 후속)
trex-core slots가 universeassets[](portfolio: asset_id/symbol/asset_quantity)를 슬롯 상태로 오인 표시하던 갭 정정(운영 관측: 10개 슬롯인데 universe 1개·status 없음). snapshot envelope 의 신규 read-onlyslots[](REQ-028 CHG-20260608-01, AC-4)를 읽어 실제 슬롯 상태(slot_id·status(idle/holding/pending_buy/pending_sell)·symbol·qty·limit_price·avg_price) 를 표시한다.universe명령은assets[](universe) 유지로 둘을 명확히 분리. watchdog-owned 표시(CHG-20260608-02)는slots[]항목과 결합.
Intent
- 운영자가
trex-core slots로 데몬의 실제 슬롯 상태(idle/holding/pending_*)를 관측하게 한다.universe(거래 대상 portfolio)와slots(데몬 슬롯 할당 상태)를 표면상 명확히 구분.
Acceptance Criteria Delta
- Updated:
slots출력은 universeassets[]가 아니라 envelopeslots[](슬롯 상태,status포함)를 표시한다.--status held/holding/...필터는 슬롯 상태 기준으로 적용된다.
- Added: none
- Removed: none
Impacted Area Delta
- Modules:
trex_core/runtime/cli.py(_cmd_slots→resp["slots"]읽기). 전제: REQ-028 envelopeslots[](CHG-20260608-01). - Tests:
slots가 universe 가 아닌 실제 슬롯 상태(status 포함)를 표시, universe 와 구분.
Delivery Trace Delta
- Batches: BAT-020 (
slots최초 구현 — 갭 발생). 정정은 신규 BAT-022 (REQ-028 AC-4 와 함께). - Releases: none
Revalidation Impact
- Reverification Needed: yes
- Existing Implementation Invalidated: yes (
slots가 universe assets 를 표시하던 부분이 슬롯 상태 의도와 불일치) - Status Recommendation: Implemented → Approved (REQ-028
slots[]의존, BAT-022 재구현/재검증) - Follow-up Action: REQ-028 AC-4 구현 후 draft-batch(BAT-022) → 구현/검증
Validation Plan
- BAT-022:
trex-core slots가 envelopeslots[]의 실제 슬롯 상태(status enum 포함)를 표시하고 universe(assets[])와 구분됨을 단위/통합 검증.
CHG-20260608-04
- Date: 2026-06-08
- Author: Justin Ko
Change Summary
- Status 변경: Approved → Implemented. BAT-022 release-candidate verification evidence 기반(
slots가 envelopeslots[]표시, CHG-20260608-03).
Intent
trex-core slots가 실제 슬롯 상태(status)를 표시하는 정정 구현 완료 동기화.
Acceptance Criteria Delta
- Added/Updated/Removed: 없음
Impacted Area Delta
- Docs/Modules/Tests: 없음
Delivery Trace Delta
- Batches:
- BAT-022 (release-candidate)
- Releases:
- none
Revalidation Impact
- Reverification Needed: no (BAT-022 에서 완료)
- Existing Implementation Invalidated: no
- Status Recommendation: Implemented
- Follow-up Action: release 단계 별도 진행
Validation Plan
- tests/runtime/test_cli_operator.py::test_slots_shows_real_slot_state_not_universe / ::test_slots_status_filters_by_slot_status / ::test_slots_marks_watchdog_owned. 운영 재현(BAT-022): 신규 코드 데몬 + 실 인프라
trex-core slots→ slots=10 status·--status holding=0·universe(assets=1) 분리·비침습. pytest 인프라 게이트는 Human Approval Memo 수용 잔여.