docs(rel-006/bat-026~036): confirm-release 상태 반영 — released 전환

REL-006 confirm-release 스킬 실행 결과 BAT-026~036 상태를 released로 갱신하고
rel-006 배포 근거를 보완한 변경 사항을 커밋.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 22:45:45 +09:00
co-authored by Claude Sonnet 4.6
parent b1ce06ca3b
commit 1f59322f52
13 changed files with 57 additions and 45 deletions
@@ -1,6 +1,6 @@
# BAT-026: config 디렉터리 기반 설정 관리 — `--config-path`/`--env-file` + config-dir `.env` 공용화 (trex-orb-v1 정합)
- Status: release-candidate
- Status: released
- Profile: batch-lite
- Source Discovery: 없음 (trex-orb-v1 설정 관리 정합 — change-req 주도)
- Included REQ: REQ-048 (CHG-20260609-01), REQ-010 (CHG-20260609-01)
@@ -1,6 +1,6 @@
# BAT-027: 자산 영구 슬롯 토대 — 스키마 + 상태머신 재정의 (dcy-020 BAT-α)
- Status: release-candidate
- Status: released
- Profile: standard
- Source Discovery: dcy-020
- Included REQ: REQ-056 (영구 슬롯 스키마+마이그레이션), REQ-057 (상태머신 재정의 + 인스턴스 스코프 advisory lock)
@@ -1,6 +1,6 @@
# BAT-028: universe reconcile + 활성 capacity admission (dcy-020 BAT-β)
- Status: release-candidate
- Status: released
- Profile: standard
- Source Discovery: dcy-020
- Included REQ: REQ-058 (universe reconcile lifecycle), REQ-059 (활성 capacity admission FCFS·M·over-cap), REQ-060 (max_active_slots per-instance TOML)
@@ -1,6 +1,6 @@
# BAT-029: intent 자산 키 + 수량/불일치 해소 + 운영자 단일 뷰 (dcy-020 BAT-γ)
- Status: release-candidate
- Status: released
- Profile: standard
- Source Discovery: dcy-020
- Included REQ: REQ-061 (intent 자산 키 통일), REQ-062 (수량 hub 정본+미러·불일치 해소), REQ-063 (운영자 slots 단일 뷰)
@@ -1,6 +1,6 @@
# BAT-030: 자산 중심 cutover — 라이브 전환·집행 정본·모델 완성 (dcy-020 BAT-δ)
- Status: release-candidate
- Status: released
- Profile: standard
- Source Discovery: dcy-020
- Included REQ: REQ-064 (풀→영구 cutover), REQ-062 (잔여: 청산 수량 브로커 정본), REQ-056/057/065 (잔여: entry_count/trading_date drop·literal inactive·baseline 마감)
@@ -1,6 +1,6 @@
# BAT-031: 보유 자산 포지션 사이징 (dcy-021)
- Status: release-candidate
- Status: released
- Profile: standard
- Source Discovery: dcy-021
- Included REQ: REQ-066 (사이징 도메인·end-to-end), REQ-067 (baseline 정합), REQ-057 (CHG-03 상태머신 holding→pending_buy), REQ-061 (CHG-04 사이징 intent), REQ-062 (CHG-03 부분 매도 집행)
@@ -1,6 +1,6 @@
# BAT-032: 주문 실행 정책 — timeout·slippage·운영자 cancel (dcy-022)
- Status: release-candidate
- Status: released
- Profile: standard
- Source Discovery: dcy-022
- Included REQ: REQ-068 (실행 정책 계약), REQ-069 (timeout 집행·race), REQ-070 (slippage dispatch), REQ-071 (운영자 cancel 백스톱), REQ-072 (baseline 정합), REQ-061 (CHG-05), REQ-013 (CHG-03)
@@ -1,6 +1,6 @@
# BAT-033: enter --qty 필수 검증 (issue #23)
- Status: release-candidate
- Status: released
- Profile: batch-lite
- Source Discovery: REQ-032 change-req (issue #23)
- Included REQ: REQ-032 (CHG-20260610-06, AC-7)
@@ -1,6 +1,6 @@
# BAT-034: allocated_capital 죽은 필드 제거 — CLI·intent·도메인·영속·snapshot 정리 (dcy-023)
- Status: release-candidate
- Status: released
- Profile: standard
- Source Discovery: dcy-023 (issue #22)
- Included REQ: REQ-002 (CHG-20260610-02), REQ-006 (CHG-20260610-02), REQ-007 (CHG-20260610-02), REQ-028 (CHG-20260610-01), REQ-032 (CHG-20260610-07)
@@ -1,6 +1,6 @@
# BAT-035: 전략 read 표면 재설계 — trex.slots.req + 슬롯 단일 행 스키마 (dcy-025)
- Status: release-candidate
- Status: released
- Profile: standard
- Source Discovery: dcy-025
- Included REQ: REQ-073, REQ-074, REQ-075, REQ-021 (CHG-20260611-01), REQ-034 (CHG-20260611-01), REQ-063 (CHG-20260611-01)
@@ -1,6 +1,6 @@
# BAT-036: safety_sell_enabled TOML 설정 + 조건부 데몬 워커 기동 (dcy-024)
- Status: release-candidate
- Status: released
- Profile: standard
- Source Discovery: dcy-024
- Included REQ: REQ-048 (CHG-20260611-01), REQ-005 (CHG-20260611-01)
+11 -11
View File
@@ -33,17 +33,17 @@
| BAT-023 | standard | released | REQ-017 (CHG-20260608-02), REQ-019 (CHG-20260608-02), REQ-029 (CHG-20260608-01), REQ-030 (CHG-20260608-01, Approved→Implemented) | dcy-018 | [bat-023](./bat-023_20260608_ledger-cash-position-writeback-option-d/) |
| BAT-024 | batch-lite | released | REQ-032 (CHG-20260609-01) | dcy-016 (issue #17) | [bat-024](./bat-024_20260609_operator-enter-forced-close-at/) |
| BAT-025 | standard | released | REQ-002 (CHG-20260609-01), REQ-003 (CHG-20260609-01), REQ-006 (CHG-20260609-01), REQ-007 (CHG-20260609-01), REQ-009 (CHG-20260609-01) | dcy-019 (issue #18) | [bat-025](./bat-025_20260609_slot-entry-count-and-closed-reallocation/) |
| BAT-026 | batch-lite | release-candidate | REQ-048 (CHG-20260609-01), REQ-010 (CHG-20260609-01) | 없음 (trex-orb-v1 정합) | [bat-026](./bat-026_20260609_config-dir-env-and-config-path/) |
| BAT-027 | standard | release-candidate | REQ-056, REQ-057 | dcy-020 (BAT-α) | [bat-027](./bat-027_20260610_asset-permanent-slot-foundation/) |
| BAT-028 | standard | release-candidate | REQ-058, REQ-059, REQ-060 | dcy-020 (BAT-β) | [bat-028](./bat-028_20260610_universe-reconcile-and-active-admission/) |
| BAT-029 | standard | release-candidate | REQ-061, REQ-062, REQ-063 | dcy-020 (BAT-γ) | [bat-029](./bat-029_20260610_asset-keyed-intent-and-divergence/) |
| BAT-030 | standard | release-candidate | REQ-064, REQ-062, REQ-056·057·065(잔여) | dcy-020 (BAT-δ) | [bat-030](./bat-030_20260610_asset-centric-cutover/) |
| BAT-031 | standard | release-candidate | REQ-066, REQ-067, REQ-057·061·062(CHG) | dcy-021 | [bat-031](./bat-031_20260610_position-sizing/) |
| BAT-032 | standard | release-candidate | REQ-068, REQ-069, REQ-070, REQ-071, REQ-072, REQ-061(CHG-05), REQ-013(CHG-03) | dcy-022 | [bat-032](./bat-032_20260610_execution-policy/) |
| BAT-033 | batch-lite | release-candidate | REQ-032 (CHG-20260610-06) | REQ-032 change-req (issue #23) | [bat-033](./bat-033_20260610_enter-qty-validation/) |
| BAT-034 | standard | release-candidate | REQ-002 (CHG-20260610-02), REQ-006 (CHG-20260610-02), REQ-007 (CHG-20260610-02), REQ-028 (CHG-20260610-01), REQ-032 (CHG-20260610-07) | dcy-023 (issue #22) | [bat-034](./bat-034_20260610_drop-allocated-capital/) |
| BAT-035 | standard | confirmed | REQ-073, REQ-074, REQ-075, REQ-021 (CHG-20260611-01), REQ-034 (CHG-20260611-01), REQ-063 (CHG-20260611-01) | dcy-025 | [bat-035](./bat-035_20260611_strategy-read-surface-slots-req/) |
| BAT-036 | standard | confirmed | REQ-048 (CHG-20260611-01), REQ-005 (CHG-20260611-01) | dcy-024 | [bat-036](./bat-036_20260611_safety-sell-disable-mode/) |
| BAT-026 | batch-lite | released | REQ-048 (CHG-20260609-01), REQ-010 (CHG-20260609-01) | 없음 (trex-orb-v1 정합) | [bat-026](./bat-026_20260609_config-dir-env-and-config-path/) |
| BAT-027 | standard | released | REQ-056, REQ-057 | dcy-020 (BAT-α) | [bat-027](./bat-027_20260610_asset-permanent-slot-foundation/) |
| BAT-028 | standard | released | REQ-058, REQ-059, REQ-060 | dcy-020 (BAT-β) | [bat-028](./bat-028_20260610_universe-reconcile-and-active-admission/) |
| BAT-029 | standard | released | REQ-061, REQ-062, REQ-063 | dcy-020 (BAT-γ) | [bat-029](./bat-029_20260610_asset-keyed-intent-and-divergence/) |
| BAT-030 | standard | released | REQ-064, REQ-062, REQ-056·057·065(잔여) | dcy-020 (BAT-δ) | [bat-030](./bat-030_20260610_asset-centric-cutover/) |
| BAT-031 | standard | released | REQ-066, REQ-067, REQ-057·061·062(CHG) | dcy-021 | [bat-031](./bat-031_20260610_position-sizing/) |
| BAT-032 | standard | released | REQ-068, REQ-069, REQ-070, REQ-071, REQ-072, REQ-061(CHG-05), REQ-013(CHG-03) | dcy-022 | [bat-032](./bat-032_20260610_execution-policy/) |
| BAT-033 | batch-lite | released | REQ-032 (CHG-20260610-06) | REQ-032 change-req (issue #23) | [bat-033](./bat-033_20260610_enter-qty-validation/) |
| BAT-034 | standard | released | REQ-002 (CHG-20260610-02), REQ-006 (CHG-20260610-02), REQ-007 (CHG-20260610-02), REQ-028 (CHG-20260610-01), REQ-032 (CHG-20260610-07) | dcy-023 (issue #22) | [bat-034](./bat-034_20260610_drop-allocated-capital/) |
| BAT-035 | standard | released | REQ-073, REQ-074, REQ-075, REQ-021 (CHG-20260611-01), REQ-034 (CHG-20260611-01), REQ-063 (CHG-20260611-01) | dcy-025 | [bat-035](./bat-035_20260611_strategy-read-surface-slots-req/) |
| BAT-036 | standard | released | REQ-048 (CHG-20260611-01), REQ-005 (CHG-20260611-01) | dcy-024 | [bat-036](./bat-036_20260611_safety-sell-disable-mode/) |
| BAT-037 | standard | release-candidate | REQ-073 (CHG-20260612-01) | dcy-025 (REQ-073 change-req) | [bat-037](./bat-037_20260612_slots-rpc-available-slots/) |
| BAT-038 | standard | release-candidate | REQ-018 (CHG-20260612-01) | dcy-026 (issue #24) | [bat-038](./bat-038_20260612_sell-transaction-tax-fee/) |
| BAT-039 | standard | release-candidate | REQ-011 (CHG-20260612-01) | 없음 (issue #4) | [bat-039](./bat-039_20260612_paper-seq-redis-persistence/) |
@@ -1,6 +1,6 @@
# REL-006: 자산 중심 영구 슬롯 cutover + 포지션 사이징 + 실행 정책 + 운영 정리 통합 릴리즈
- Status: confirmed
- Status: feedback-captured
- Profile: app-service
- Included Batch: BAT-026, BAT-027, BAT-028, BAT-029, BAT-030, BAT-031, BAT-032, BAT-033, BAT-034, BAT-035, BAT-036
@@ -88,53 +88,65 @@ confirm-release 전 run-the-app 증거 (2026-06-11, `run-trex-core-daemon` 프
### Deployment Facts
- Executed At:
- <배포 시작 시각>
- 2026-06-11 (최초 배포 `002340e`)
- Completed At:
- <배포 완료 시각>
- 2026-06-12 (긴급패치 포함 최종 `808a851`)
- Environment:
- <배포 대상 환경>
- 운영 — 인스턴스 `trex-admin-daily-trading` (KIS LIVE 브로커 + 운영 PostgreSQL `trex_core` + RabbitMQ + portfolio-hub)
- Operator:
- <배포 수행자>
- Justin Ko
- Revision or Artifact:
- <커밋 SHA — 배포 전 main 커밋으로 확정>
- 최초 배포 `002340e` → 긴급패치 후 최종 **`808a851`** (계획 SHA `f0ad377` 이후 main 진행분 포함 배포)
- Commands or Procedure:
- <실행 명령 또는 배포 절차 요약>
- 데몬 중단 → `git pull` → `pip install -e .` → 데몬 재기동. `apply_migrations` 009~013 자동 적용(멱등).
#### Hotfix 경위 (배포 중 결함 → 무롤백 패치)
- 최초 배포(`002340e`) 후 재기동 시 **슬롯 symbol 전부 `None`** 로딩 — universe reconcile 이 슬롯 생성 시 symbol 미저장 결함.
- `221a163` fix(smoke): topology API 변경 반영(snapshot_queue→slots_queue) / `24a6017` **fix(reconcile): symbol 저장 + NULL backfill** / `808a851` docs(req-058): CHG-20260611-01 반영.
- 패치 후 재기동: **45/45 슬롯 symbol 정상 로딩** 확인.
### Profile-Specific Checks
- app-service:
- Health Endpoint:
- <snapshot RPC degraded=false 확인 결과와 시각>
- PASS — 데몬 RUNNING(PID 가동, RabbitMQ 3연결 OPEN), portfolio-hub HTTP 200, KIS inquire-balance HTTP 200, slots RPC degraded=None (2026-06-12)
- Startup Log Fields:
- <마이그레이션 009~013 적용 + universe reconcile 슬롯 생성 로그>
- PASS — 마이그레이션 009~013 적용(운영 DB information_schema 직접 확인: `trading_date`/`entry_count`/`allocated_capital` 부재, `instance_key` 존재, `ledger_outbox` 미완료 0건). universe reconcile 영구 슬롯 45개 생성(daily preallocation 부재 정상), universe_detached 0건.
- Request Log Fields:
- <buy/sizing intent admission·집행·timeout/slippage·cancel 전이 로그>
- PASS — 실거래 e2e 전이 로그: ①장외 enter(2026-06-11 19:31): admitted → `inactive→pending_buy` → KIS order-cash 200 → 거부(장운영시간 아님) rollback `pending_buy→inactive`. ②장중 full e2e(2026-06-12, 005930 1주): 09:32 buy intent `inactive→pending_buy` → 09:32 체결 `pending_buy→holding`(qty=1, avg 334,000) → 14:37 **safety-sell stop_loss 자동 발화** `holding→pending_sell` → 14:37 체결 `pending_sell→inactive`. ledger buy/sell 2건 completed. slot qty(1.0)==hub asset_quantity(1.0) divergence 없음.
- Smoke or Manual Verification:
- <Rollout 5~6 단계 스모크 결과>
- PASS — BAT-035: `slots`(count=45, slots[] 형식·assets[] 부재)/`--status holding·buyable` 서버 필터/`universe`(slots.req 큐, spy=true)/JSON 스키마(allocated_capital 부재·watchdog·asset_quantity 포함). BAT-033: `--qty` 누락 즉시 오류 rc=1. BAT-034: `--capital` argparse 거부 rc=2 + 45개 전수 allocated_capital 부재. BAT-032: `cancel` dry-run rc=0. BAT-036: TOML 미설정 → default true 워커 기동 확인.
### Rollback Outcome
- Rollback Required:
- <yes 또는 no>
- no
- Rollback Trigger:
- <발생 시 원인, 없으면 none>
- none
- Rollback Action:
- <수행한 조치, 없으면 none>
- none — 최초 배포의 symbol 누락 결함은 롤백 없이 긴급패치(`24a6017`)로 해소(REQ-058 CHG-20260611-01 로 문서 정합 완료).
### Release Decision Evidence
- Released Decision:
- <released 전환 여부>
- **released 전환** — 운영팀 배포 근거 종합 판정 전 항목 PASS(마이그레이션/기동·cutover/심볼 로딩/BAT-031~036 스모크/실거래 full e2e), 롤백 불요.
- Rationale:
- <released 전환 판단 근거>
- 운영 실거래(005930 매수→보유→stop_loss 자동 청산)로 자산 중심 슬롯 lifecycle·포지션 사이징·safety-sell·ledger 전 경로 무결 검증. 손익 −7,099.15원(−2.13%)은 손절 청산 결과이며 시스템 동작 관점 PASS.
- Recorded By:
- <기록자>
- Justin Ko (운영팀 배포 근거) / 기록 정리: stage-pilot capture
- Recorded At:
- <기록 시각>
- 2026-06-12
## Feedback Handoff
- Observation Summary:
- <운영 관찰 사실 요약 또는 없음>
- Observation Summary (2026-06-12, 운영팀 배포 근거 §8 + 실거래 데이터):
- **배포 중 결함 1건(긴급패치 해소)**: universe reconcile 슬롯 생성 시 symbol 미저장 → 재기동 후 45슬롯 전부 symbol=None. `24a6017` 패치(생성 시 저장 + NULL backfill) 후 45/45 정상. REQ-058 CHG-20260611-01 로 AC-5 추가 완료 — 회귀 방지 테스트는 기존 reconcile 테스트(symbol 포함 시그니처)로 커버됨.
- **실거래 full e2e 검증**: 005930 매수(09:32)→보유→stop_loss 자동 청산(14:37) 완주. 포지션 사이징(avg_price/qty 반영, 브로커 잔고 기준 청산), safety-sell 자동 발화, slot↔hub 수량 일치(divergence 0), ledger buy/sell completed.
- **잔존 관찰 1 — watchdog_expired 상시**: 전략 모듈(trex-orb-v1) 미연결 상태라 watchdog expired 가 일상 — 전략 연결 시 해소. 수동 주문은 forced_close_at 기반 관리로 영향 없음. (중장기 인스턴스의 동일 문제는 dcy-027/BAT-041 `watchdog_timeout_sec` per-instance TOML 로 별도 해소됨 — 차기 릴리즈)
- **잔존 관찰 2 — 매도세 tax=0 왜곡 지속**: 본 릴리즈 리비전(`808a851`)은 BAT-038(매도 증권거래세, dcy-026/issue #24) 이전 — 2026-06-12 매도 체결도 `세금 0` 으로 기록됨(수수료 49.05 만). 수정은 BAT-038(release-candidate)에 있으며 **차기 릴리즈 배포 전까지 신규 매도 ledger 의 tax=0 왜곡이 계속됨**. 과거 행 소급 보정은 안 함(dcy-026 OQ-3).
- **운영 메모**: `trex-admin-daily-trading` 은 계좌 전체 cash 공유 모델(portfolio-hub 는 자산별 PnL 만 기록) — 슬롯 cash_balance 음수는 정상.
- Discovery Input:
- <후속 discovery 후보 — 후보 백로그: 자율 청산 OFF 모드(issue #15), 중장기 전략 슬롯(issue #20)>
- 없음 (자율 청산 OFF 모드 issue #15 → dcy-024 완료, 중장기 전략 슬롯 issue #20 → dcy-027 완료. watchdog 소유권 진입 외부 알림(슬랙·이메일)은 dcy-027 OQ-3 주석으로 이미 후속 Discovery 백로그에 등재)
- REQ Input:
- <후속 req 후보>
- 없음 — 신규 요구사항 후보 없음(잔존 관찰은 전부 기존 트랙으로 커버)
- Change Request Input:
- `daily_symbol_entries` 잔재 제거(REL-005 환류 승계 — REQ-002/006 change-req 트랙), paper 브로커 order seq Redis 영속화(issue #4 — REQ-011 change-req 트랙)
- `daily_symbol_entries` 잔재 제거(REL-005 환류 승계 — REQ-002/006 change-req 트랙, 미착수)
- ~~paper 브로커 order seq Redis 영속화(issue #4)~~ — **완료**(REQ-011 CHG-20260612-01, BAT-039 release-candidate)
- `default_order_timeout_sec` TOML 전파 누락(BAT-041 구현 중 발견 pre-existing — `from_toml` 파싱되나 `from_config` 미전파로 런타임 무시. REQ-048/068 change-req 트랙, 미착수)
- 차기 릴리즈 입력: BAT-037~041 5건 release-candidate 대기(REL-007 후보) — **BAT-038 매도세 수정 포함이므로 조기 배포 권장**(위 잔존 관찰 2).