Files
trex-core/docs/srs/Interface/req-032_runtime-pause-resume-control.md
T
genichinandClaude Opus 4.8 6d7bca1460 feat(safety-sell): dcy-017 워치독 소유권 가시화 — snapshot 상태 + 발동 로깅 (BAT-021)
전략 이탈로 슬롯이 내부 청산 루틴(워치독) 소유로 넘어간 상태가 무성이라
운영자가 인지할 수 없던 문제(issue #12)를 가시화한다.

거버넌스: 전부 change-req (신규 REQ 없음, dcy-017 OQ-3; Redis 미채택).
- REQ-034/021: WatchdogStore.last_seen + snapshot RPC 응답에 holding 슬롯
  워치독 상태(expired/last_seen) read-only 동봉(best-effort)
- REQ-032: trex-core slots 가 expired 슬롯을 WATCHDOG-OWNED(전략 이탈) 표시
- REQ-037/038/039: safety-sell 워치독 소유 진입(WARN)/이탈(INFO) + 발동
  (forced_close·stop_loss=WARN, take_profit·market_close=INFO) 로그 +
  in-process 카운터(SafetySellService.counters), 구조화 필드(slot_id/
  portfolio_id/reason/phase/instance_key). per-tick 스킵은 카운터만
- REQ-042: runtime-flows/interface-contract 정합

best-effort 격리(NFR-1): 모든 가시화는 예외 격리 — 워치독 판정·청산 불변.
dcy-016 억제 읽기로 관측이 워치독을 리셋하지 않음(비침습).

검증: 단위 335 passed/34 skipped, 인프라 게이트(PG+RabbitMQ) 369 passed, ruff clean.
신규 test_safety_sell_visibility(6) + snapshot watchdog(1) + CLI(1). BAT-021 rc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 17:10:26 +09:00

7.2 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

  1. Given 운영자가 portfolio_id 를 pause, When 임의 view/strategy_key 로 스냅샷을 요청, Then 그 자산은 응답에서 마스킹된다.
  2. Given pause 상태에서 daemon 재시작 또는 일일 refresh 발생, When 이후 요청, Then pause 가 유지된다.
  3. Given 운영자가 resume, When 다음 요청, Then 그 자산이 응답에 다시 포함된다.
  4. 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). 인스턴스 라우팅(--config canonical/--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.

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-016 slots 확장. 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 표시 단위.