5.9 KiB
5.9 KiB
req-044: kill-switch day-scoped 제외 store + 테이블 + 마이그레이션
- Status: Implemented
- Type: Data
- Priority: High
- Owner: project maintainers
Intent
kill-switch 발동 시 대상 범위(portfolio/전역)를 당일(day-scoped) 전략 실행에서 제외하는 상태를 데몬 재시작 후에도 유지하기 위해 영속화한다. 기존 snapshot_pause(portfolio_id PK, resume 전까지 영구, 날짜 없음)와 의미가 다르므로(당일만, trading_date 키), 별도 테이블 + 전용 store 어댑터를 신설한다(dcy-008 OQ-2 Answered). 다음 거래일 부팅 시 자동 무효된다.
Requirement
- 신규 테이블(예:
killswitch_exclusion)을 추가하는 additive 마이그레이션을 작성한다. 최소 컬럼:portfolio_id(전역 제외 표현 포함),trading_date,actor,created_at.- 전역(global) 제외 표현 방식(예:
portfolio_id = '*'sentinel 또는 별도 scope 컬럼)은 구현 시 결정한다(Notes). - PK 또는 unique 제약은
(portfolio_id, trading_date)로 동일 거래일 중복 제외를 멱등 처리한다.
- 전역(global) 제외 표현 방식(예:
- 전용 store 어댑터(예:
PostgreSQLKillSwitchStore)가 아래를 제공한다:exclude(portfolio_id|global, trading_date, actor),clear(portfolio_id|global, trading_date)(수동 해제, REQ-046),list_excluded(trading_date) -> set. list_excluded(trading_date)는 해당 거래일 의 제외 항목만 반환한다. 다른 날짜 row 는 자동으로 결과에서 제외된다(day-scoped). 과거 row 정리(삭제)는 선택이며 조회가 trading_date 로 필터링되므로 정합에 영향 없다.- 기존
snapshot_pause/PostgreSQLPauseStore는 변경하지 않는다(관심사 분리).
Acceptance Criteria
- Given 마이그레이션 적용, When 스키마를 확인하면, Then
killswitch_exclusion테이블이(portfolio_id, trading_date, actor, created_at)컬럼과(portfolio_id, trading_date)멱등 제약으로 존재한다. - Given 마이그레이션을 2회 적용, When 재적용하면, Then
IF NOT EXISTS패턴으로 오류 없이 멱등하다(기존 데이터 보존). - Given
exclude("pf-A", D), Whenlist_excluded(D), Then{"pf-A"}를 포함한다. - Given
exclude("pf-A", D), Whenlist_excluded(D+1)(다음 거래일), Thenpf-A가 포함되지 않는다(day-scoped 자동 무효). - Given 같은
(pf-A, D)로exclude2회, When 호출하면, Then 멱등(중복 row 없음, 오류 없음). - Given
exclude("pf-A", D)후clear("pf-A", D), Whenlist_excluded(D), Thenpf-A가 더 이상 포함되지 않는다(수동 해제, REQ-046). - Given 전역 제외, When
exclude후list_excluded(D), Then 전역 sentinel 이 결과에 포함되어 호출자가 전체 제외로 해석할 수 있다.
Impacted Area
- Docs:
docs/project-structure.md— 신규 테이블/store 모듈 반영 (REQ-047 처리)
- Modules:
trex_core/adapters/persistence/sql/005_create_killswitch_exclusion.sql(신규, additive)trex_core/adapters/portfolio/killswitch_store.py또는 동등 위치 —PostgreSQLKillSwitchStore
- Tests:
- store CRUD + day-scoped 조회 + 멱등 + 전역 sentinel 단위/통합 테스트(PG 게이트)
Notes
- dcy-008 OQ-2 Answered: 별도 테이블/store 신설(snapshot_pause 와 분리).
- 전역 제외 표현(
portfolio_id='*'vs scope enum 컬럼)은 구현 결정 — masking 소비처(REQ-046)와 계약 일치만 보장하면 됨. trading_date기준: dcy-008 의 day-scoped 의미 = "발동 거래일". 거래일 경계(UTC vs KST)는 데몬의 기존 trading_date 관례(UTC date)를 따르되 REQ-045/046 와 일치시킨다.- BAT-010 R-2(마이그레이션 실 PG round-trip) 선례에 따라 verification 에서 실 PG 적용 확인.
Change Log
CHG-20260607-01
- Date: 2026-06-07
- Author: Justin Ko
Change Summary
- dcy-008(confirmed) → REQ-044 초안 생성.
Intent
- 당일 제외 영속(OQ-2 Answered: 별도 테이블)을 Data REQ 로 정규화.
Acceptance Criteria Delta
- Added: AC-1~7 전체
Impacted Area Delta
- Docs: project-structure.md (REQ-047)
- Modules: sql/005_create_killswitch_exclusion.sql, killswitch_store.py
- Tests: store CRUD + day-scoped + 멱등
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 로 승인.
CHG-20260607-02
- Date: 2026-06-07
- Author: Justin Ko
Change Summary
- Proposed → Approved (confirm-req).
Intent
- 승인 게이트 통과: 필수 필드·구체 AC·Impacted Area·Change Log 완비. dcy-008(confirmed) OQ-2 결정(별도 테이블) 반영. 전역 sentinel 표현은 구현 결정으로 승인 blocker 아님.
Acceptance Criteria Delta
- (변경 없음)
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 로 delivery 편성.
CHG-20260607-03
- Date: 2026-06-07
- Author: Justin Ko
Change Summary
- Status Approved → Implemented (confirm-req-implemented, 근거 batch BAT-012 release-candidate).
Intent
- BAT-012 verification 의 AC↔evidence(store in-mem 5 + PG 5: 스키마/멱등/day-scoped/clear/전역 sentinel; 마이그레이션 005 실 PG round-trip 인프라 게이트 290 passed)로 AC-1~7 충족.
Acceptance Criteria Delta
- (변경 없음)
Impacted Area Delta
- (변경 없음)
Delivery Trace Delta
- Batches: BAT-012 (release-candidate)
- Releases: none
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: no
- Status Recommendation: keep-current (Implemented)
- Follow-up Action: draft-release 로 BAT-012 배포 편성.