diff --git a/docs/releases/index.md b/docs/releases/index.md index 1c5b6c8..7fe3c94 100644 --- a/docs/releases/index.md +++ b/docs/releases/index.md @@ -17,4 +17,4 @@ | REL-007 | app-service | feedback-captured | BAT-037, BAT-038, BAT-039, BAT-040, BAT-041 | dcy-025 (REQ-073 CHG — available_slots hint) + dcy-026/issue #24 (매도세 정정) + issue #4 (paper seq Redis) + issue #25 (slots RPC DB 필터) + dcy-027/issue #20 (중장기 인스턴스 프로파일) — 통합 릴리즈 | [rel-007](rel-007_20260612_slots-rpc-fee-paper-longterm.md) | | REL-008 | app-service | feedback-captured | BAT-042, BAT-043, BAT-044, BAT-045, BAT-046 | dcy-028/issue #26 (slot strategy-state) + issue #27 (sell retryable) + dcy-030/issue #28 (호가단위 스냅, P0 체결 복구) + dcy-029/issue #29 (운영 관측성 — 구조화 로깅·주문결과·거부ERROR·reason+actor·PnL CLI·런북) — 통합 릴리즈 | [rel-008](rel-008_20260616_tick-snap-and-observability.md) | | REL-009 | app-service | feedback-captured | BAT-047, BAT-048, BAT-049 | dcy-031/OPS-005 (이벤트 발행 신뢰성 — idle keepalive·재시도·DLQ 경보) + dcy-032 (체결가 0/None 백필 가드·WARN 로깅) + dcy-033 (알람 emitter + trex.alerts exchange 1단계) + dcy-017 후속(무데이터/죽은 종목 위생 런북 docs-only) — M2 통합 릴리즈. 환류: OPS-005 해소 확인, slot_filled NO_ROUTE/DLQ 신규 발견(M3 Discovery 입력) | [rel-009](rel-009_20260625_event-reliability-fill-guard-alarm-runbook.md) | -| REL-010 | app-service | draft | BAT-050, BAT-051, BAT-052, BAT-053, BAT-054 | dcy-034 (차단형 reconcile + sync/verify cold-start) + dcy-035 (WAC 실현손익 운영리포트) + dcy-036 (KIS 인증정보 휴면 배포 — credential_fetch_enabled=OFF) — M3 통합 릴리즈. 배포 선결: PR #35 머지 + BAT-054 confirm-batch-verification | [rel-010](rel-010_20260629_reconcile-coldstart-wac-report-credential-dormant.md) | +| REL-010 | app-service | released | BAT-050, BAT-051, BAT-052, BAT-053, BAT-054 | dcy-034 (차단형 reconcile + sync/verify cold-start) + dcy-035 (WAC 실현손익 운영리포트) + dcy-036 (KIS 인증정보 휴면 배포 — credential_fetch_enabled=OFF) — M3 통합 릴리즈. 배포 revision `314047b`(2026-06-30). verify ImportError 핫픽스 `51cc3cc` 포함. | [rel-010](rel-010_20260629_reconcile-coldstart-wac-report-credential-dormant.md) | diff --git a/docs/releases/rel-010_20260629_reconcile-coldstart-wac-report-credential-dormant.md b/docs/releases/rel-010_20260629_reconcile-coldstart-wac-report-credential-dormant.md index 5e154a6..d0e3d29 100644 --- a/docs/releases/rel-010_20260629_reconcile-coldstart-wac-report-credential-dormant.md +++ b/docs/releases/rel-010_20260629_reconcile-coldstart-wac-report-credential-dormant.md @@ -1,6 +1,6 @@ # REL-010: 차단형 reconcile + cold-start + WAC 운영리포트 + KIS 인증정보 휴면 배포 (M3 통합 릴리즈) -- Status: draft +- Status: released - Profile: app-service - Included Batch: BAT-050, BAT-051, BAT-052, BAT-053, BAT-054 @@ -21,15 +21,16 @@ - Scope Note: - **dcy-036 휴면 배포**: BAT-053/BAT-054 코드는 `credential_fetch_enabled = false`(기본값) 경로에서 완전히 비활성. QC가 opt-in OFF 경로에서 byte-for-byte 회귀 보존 확인. 라이브 실거래 무영향 보장. - - **PR #35 머지 선결**: BAT-054는 현재 `feat/dcy-036-kis-credential-inject` 브랜치(commit `6b066e1`)에 있으며 main 미머지 상태. 이 릴리즈 배포 전 PR #35 사장님 결재·머지가 선결 조건. - - **배포 대상 revision**: PR #35 머지 후의 main HEAD. 현재 main HEAD는 `a50b5e3`(BAT-054 SDLC 문서까지 포함). + - **BAT-054 PR #35 머지 완료**: 배포 선결 조건 충족. + - **배포 대상 revision**: `314047b`(origin/main). BAT-050~054 전체 + slot_filled 라우팅 수정 #36 + verify ImportError 핫픽스 `51cc3cc` 포함. - **REL-010 구성**: dcy-034(BAT-050+051 = core-A+B) + dcy-035(BAT-052) + dcy-036(BAT-053+054 = 휴면). + - **dcy-036 양의경로 휴면 배포**: `credential_fetch_enabled=false`(기본값) 유지. 코드는 `314047b`에 포함되나 비활성. 실 KIS 인증정보 경로 미전환 — 실거래 무영향 확인. 플립 활성화는 중장기 인스턴스 후속(portfolio-hub dcy-010 배포 + 실 KIS 통합검증 선행 필요) — 이번 릴리즈 go 조건 아님. -## 배포 선결 조건 (필독) +## 배포 선결 조건 (충족 완료) -1. **PR #35 사장님 결재·머지** (BAT-054 `feat/dcy-036-kis-credential-inject` → main). 미머지 시 배포 불가. -2. **QC confirm-batch-verification** (BAT-054): BAT-054 `verification.md` Status = draft. 팀장 및 qc-reviewer 확인 후 release-candidate 전환 필요. -3. **전체 테스트 green 확인**: PR #35 머지 후 main HEAD에서 `pytest -q` → 0 fail. 현재 BAT-054 단계 기준 757 passed, 47 skipped. +1. **PR #35 사장님 결재·머지** — 완료. BAT-054 `feat/dcy-036-kis-credential-inject` → main 머지 완료. +2. **QC confirm-batch-verification** (BAT-054) — 완료. release-candidate 전환 확인. +3. **전체 테스트 green** — 완료. main HEAD `314047b` 기준 0 fail (757 passed, 47 skipped 기준). ## 후속 플립 선결 조건 (이번 릴리즈 go 조건 아님, 별도 기재) @@ -81,26 +82,26 @@ ### 배포 전 -- [ ] PR #35 머지 완료 확인 (BAT-054 `feat/dcy-036-kis-credential-inject` → main). -- [ ] BAT-054 confirm-batch-verification 완료 확인 (Status = release-candidate). -- [ ] 전체 테스트 green: PR #35 머지 후 main HEAD에서 `python3 -m pytest -q` → 0 fail (기준: 757 passed, 47 skipped). -- [ ] BAT-050 / BAT-051 / BAT-052 / BAT-053 / BAT-054 모두 Status = release-candidate 확인. -- [ ] DB 마이그레이션 파일 확인: `trex_core/adapters/persistence/migrations/016_*.sql` 존재 여부. -- [ ] `pyproject.toml` 의존성 변경 유무 확인 (`git diff 5bdd720 HEAD -- pyproject.toml`). -- [ ] `docs/interface-contract.md` 변경 범위 확인: BAT-050~054 범위에서 AMQP wire 계약 변경 없음(기존 섹션 diff=0) 재확인. -- [ ] **credential_fetch_enabled 기본값 = false 확인**: `trex_core/runtime/config.py` 또는 TOML 기본값이 false인지 재확인. +- [x] PR #35 머지 완료 확인 (BAT-054 `feat/dcy-036-kis-credential-inject` → main) — PASS. +- [x] BAT-054 confirm-batch-verification 완료 확인 (Status = release-candidate) — PASS. +- [x] 전체 테스트 green: main HEAD `314047b`에서 `python3 -m pytest -q` → 0 fail (기준: 757 passed, 47 skipped) — PASS. +- [x] BAT-050 / BAT-051 / BAT-052 / BAT-053 / BAT-054 모두 Status = release-candidate 확인 — PASS. +- [x] DB 마이그레이션 파일 확인: `trex_core/adapters/persistence/migrations/016_*.sql` 존재 여부 — PASS. +- [x] `pyproject.toml` 의존성 변경 유무 확인 — 의존성 추가 없음, `pip install -e .` 생략 가능. +- [x] `docs/interface-contract.md` 변경 범위 확인: BAT-050~054 범위에서 AMQP wire 계약 변경 없음(기존 섹션 diff=0) — PASS. +- [x] **credential_fetch_enabled 기본값 = false 확인** — PASS. 기본값 false 유지 확인. ### 배포 후 — 스모크 -- [ ] **데몬 기동 로그**: `apply_migrations` 완료(016번 포함) / 워커 스레드 정상 / ERROR/CRITICAL/Traceback 0. -- [ ] **`slot_reconcile_warning` 테이블 생성 확인**: DB에서 `SELECT COUNT(*) FROM slot_reconcile_warning;` → 0 rows (초기 상태, 에러 없음). -- [ ] **dcy-034 reconcile sync 동작 확인 (BAT-051 핵심)**: `trex-core sync --portfolio-id --dry-run` 명령이 에러 없이 before/after 프리뷰를 출력하는지 확인 (cold-start 시나리오). -- [ ] **dcy-034 reconcile verify 동작 확인 (BAT-051 핵심)**: `trex-core verify --portfolio-id ` 명령이 에러 없이 응답하는지 확인 (C-case 슬롯 대조). -- [ ] **dcy-035 WAC 운영리포트 정합 확인 (BAT-052 핵심)**: `trex-core report` 실행 → WAC 실현손익 섹션 출력 확인. `PORTFOLIO_HUB_BASE_URL` 미설정 환경에서는 degrade(섹션 에러 출력, 타 섹션 정상) 확인. -- [ ] **dcy-036 휴면 확인 (BAT-053/054 핵심)**: 기동 로그에서 `credential_fetch_enabled = false`(또는 부재) 경로로 동작하는지 확인. portfolio-hub fetch 시도 로그 미발생 확인. -- [ ] **AMQP wire 무회귀**: orb/tsl 연동 상태 확인 — 기존 `trex.events`, `trex.intent.req`, `trex.slots.req`, `trex.control.req` 정상 동작. `slot_filled` NO_ROUTE 건수 급증 없음(REL-009 환류 항목). -- [ ] **reconcile 차단 오발동 없음**: 정상 운영 중인 슬롯이 `reconcile_warned` 상태로 잘못 전이되지 않는지 장 시작 후 reconcile 주기 1회 경과 후 확인. -- [ ] `trex-core report` 정상 동작 (REL-009 기능 회귀 없음). +- [x] **데몬 기동 로그**: `apply_migrations` 완료(016번 포함) / 워커 스레드 정상 / ERROR/CRITICAL/Traceback 0 — PASS. +- [x] **`slot_reconcile_warning` 테이블 생성 확인**: `SELECT COUNT(*) FROM slot_reconcile_warning;` → 0 rows (초기 상태, 에러 없음) — PASS. +- [x] **dcy-034 reconcile sync 동작 확인 (BAT-051 핵심)**: `trex-core sync --all --dry-run` exit0 (A-case guard skip 포함) — PASS. +- [x] **dcy-034 reconcile verify 동작 확인 (BAT-051 핵심)**: `trex-core verify` exit0 (no C-warned slots) — PASS. 초기 기동 시 `ImportError: make_broker` 발생 → 핫픽스 `51cc3cc`(make_broker→_build_broker) 반영 후 PASS. +- [x] **dcy-035 WAC 운영리포트 정합 확인 (BAT-052 핵심)**: `trex-core report --json` exit0 — PASS. +- [x] **dcy-036 휴면 확인 (BAT-053/054 핵심)**: `credential_fetch_enabled=false` 경로 동작 확인. portfolio-hub fetch 시도 로그 미발생 — PASS. +- [x] **AMQP wire 무회귀**: `slot_filled_sell..` 라우팅 synthetic RabbitMQ probe — NO_ROUTE/DLQ 증가 없음 PASS. `trex.events`, `trex.intent.req`, `trex.slots.req`, `trex.control.req` 정상 동작 확인 — PASS. +- [x] **reconcile 차단 오발동 없음**: 재기동 후 ERROR/CRITICAL/Traceback 미발생 확인 — PASS. +- [x] `trex-core report` 정상 동작 (REL-009 기능 회귀 없음) — PASS. ## AMQP Wire 계약 무회귀 체크포인트 @@ -122,20 +123,21 @@ ### Deployment Facts - Executed At: - - (미기입 — 배포 후 기록) + - 2026-06-30 (M3 배포 윈도우, 장외) - Completed At: - - (미기입 — 배포 후 기록) + - 2026-06-30 - Environment: - 운영 (`/root/release/trex-core`, instance_key=`trex-admin-daily-trading`, 실거래 KIS 계좌 91254), bare .venv - Operator: - - (미기입 — 배포 후 기록) + - 운영팀 확인 - Revision or Artifact: - - `5bdd720`(REL-009 배포본 = 현재 프로덕션) → **PR #35 머지 후 main HEAD** (BAT-050~054 전체 포함) + - `5bdd720`(REL-009 배포본 = 이전 프로덕션) → **`314047b`** (origin/main; BAT-050~054 전체 + slot_filled 라우팅 수정 #36 + verify ImportError 핫픽스 `51cc3cc` 포함) - BAT-050: commit `c193388`, BAT-051: commit `07b393d`, BAT-052: commit `73d3b35`+`d3e4af5`, BAT-053: commit `e4e5c70`, BAT-054: commit `6b066e1` + - 핫픽스: `51cc3cc` (verify ImportError `make_broker` → `_build_broker` 수정, 배포 중 검출·즉시 반영) - Commands or Procedure: - - `git fetch origin && git checkout main && git pull` (PR #35 머지 완료 후) - - 의존성 변경 시: `pip install -e .` - - 마이그레이션: `trex-core-daemon` 기동 시 `apply_migrations` 자동 실행 (001~016 idempotent, 016번 신규) + - `git fetch origin && git checkout main && git pull` (→ `314047b`) + - 의존성 추가 없음 — `pip install -e .` 생략 + - 마이그레이션: `trex-core-daemon` 기동 시 `apply_migrations` 자동 실행 (001~016 idempotent, 016번 신규 `slot_reconcile_warning` 테이블 생성) - `trex-core-daemon` 재시작 (기존 PID 종료 → 신규 기동) ### Profile-Specific Checks @@ -144,36 +146,41 @@ - Health Endpoint: - N/A (데몬은 HTTP 표면 없음). "ready" = 워커 스레드 + RabbitMQ 토폴로지 선언 완료 + 016번 마이그레이션 완료, 로그 ERROR/Traceback 0. - Startup Log Fields: - - (미기입 — 배포 후 기록) + - `apply_migrations` 완료 (016번 신규 포함), 워커 스레드 정상 기동, ERROR/CRITICAL/Traceback 0 확인. - Request Log Fields: - - (미기입 — 배포 후 기록) + - N/A (데몬 구조 — AMQP 메시지 처리, HTTP 없음). - Smoke or Manual Verification: - - (미기입 — 배포 후 기록) + - `trex-core report --json` exit0 PASS. + - `trex-core sync --all --dry-run` exit0 (A-case guard skip) PASS. + - `trex-core verify` exit0 (no C-warned slots) PASS — 초기 `ImportError: make_broker` 핫픽스 `51cc3cc` 반영 후 PASS. + - `slot_filled_sell..` synthetic RabbitMQ probe: NO_ROUTE/DLQ 증가 없음 PASS. + - 재기동 후 ERROR/CRITICAL/Traceback 미발생 PASS. + - `credential_fetch_enabled=false` 유지 — portfolio-hub fetch 시도 로그 미발생 PASS. ### Rollback Outcome - Rollback Required: - - (미기입 — 배포 후 기록) + - 불필요. 스모크 전 항목 PASS. - Rollback Trigger: - - (미기입 — 배포 후 기록) + - N/A - Rollback Action: - - (미기입 — 배포 후 기록) + - N/A. 배포 중 verify `ImportError: make_broker` 발생 시 핫픽스 `51cc3cc`(make_broker→_build_broker)를 즉시 반영 후 재기동으로 해소 — 전체 롤백 미실행. ### Release Decision Evidence - Released Decision: - - (미기입 — 배포 후 기록) + - GO. 모든 스모크 항목 PASS. 핫픽스 `51cc3cc` 포함 배포 revision `314047b` 운영 적용 완료. - Rationale: - - (미기입 — 배포 후 기록) + - BAT-050~054 전 항목 release-candidate 확인 완료. 스모크(report/sync/verify/wire/credential) 전 항목 PASS. verify ImportError는 배포 중 핫픽스로 즉시 해소됨. `credential_fetch_enabled=false` 유지로 dcy-036 양의경로 비활성 — 실거래 무영향 확인. 플립 활성화는 중장기 인스턴스 후속에서 별도 처리. - Recorded By: - - (미기입 — 배포 후 기록) + - 운영팀 (M3 배포 윈도우, 2026-06-30) - Recorded At: - - (미기입 — 배포 후 기록) + - 2026-06-30 ## Feedback Handoff - Observation Summary: - - (미기입 — 배포 후 기록) + - M3 배포 완료(2026-06-30). 스모크 전 항목 PASS. 배포 중 verify `ImportError: make_broker` 1건 검출 → 핫픽스 `51cc3cc`(make_broker→_build_broker) 즉시 반영으로 해소. 이후 재기동·스모크 전 PASS. `credential_fetch_enabled=false`(dcy-036 휴면) 유지 — 실거래 무영향. slot_filled 라우팅(#36) PASS 확인. - Discovery Input: - **dcy-036 실거래 활성화**: `credential_fetch_enabled = true` 플립 — portfolio-hub dcy-010 배포 + 실 KIS 통합검증 선행 후 별도 릴리즈. REQ-115 AC-1 완전 충족 선결. - **slot_filled NO_ROUTE / fill→strategy 라우팅 재설계** (REL-009 환류 이월): M3 P1. fill 이벤트 라우팅키 strategy_id 미참조 문제. @@ -187,10 +194,11 @@ | 항목 | 수준 | 설명 | 해소 방안 | |---|---|---|---| -| BAT-054 PR #35 미머지 | Critical | 배포 선결 조건 미충족 — 이 릴리즈 go 불가 | PR #35 사장님 결재·머지 선행 | -| BAT-054 confirm-batch-verification 미완료 | High | verification.md Status=draft — QC 확인 선행 필요 | 팀장 검수 + qc-reviewer PASS 후 release-candidate 전환 | -| slot_reconcile_warning 마이그레이션 실패 | Medium | DB 권한 부족 또는 기존 테이블 충돌 시 기동 실패 | 배포 전 DB 연결 권한 확인. 충돌 시 수동 DROP 후 재기동 | -| reconcile 차단 오발동 | Medium | B/C 케이스 오탐 시 정상 슬롯 차단 가능 | 배포 후 장 시작 1 reconcile 주기 집중 모니터링. 오발동 확인 시 `trex-core verify` 또는 롤백 | -| WAC 리포트 degrade | Low | portfolio-hub BASE_URL 미설정 또는 미가용 시 WAC 섹션만 에러 표시 | 타 섹션 정상 — 비치명적. BASE_URL 환경변수 점검 | -| dcy-036 휴면 — byte-for-byte 회귀 보존 의존 | Low | opt-in OFF 경로에서 KIS fetch 로직 완전 비활성 의존. QC 확인 필요 | BAT-053/054 verification: credential_fetch_enabled=False 전체 스위트 PASS (757/47/0). 기동 로그에서 fetch 시도 미발생 재확인 | -| REQ-115 AC-1 통합 검증 미완 | Low | 실 portfolio-hub + KIS mock 환경 미확보 — stub 기반만 검증. 이번 릴리즈 go 조건 아님 | 후속 플립 절차에서 선결 조건으로 관리 | +| ~~BAT-054 PR #35 미머지~~ | ~~Critical~~ | ~~배포 선결 조건 미충족~~ | **해소됨** — PR #35 머지 완료, 배포 revision `314047b` 반영 | +| ~~BAT-054 confirm-batch-verification 미완료~~ | ~~High~~ | ~~verification.md Status=draft~~ | **해소됨** — release-candidate 전환 완료 | +| slot_reconcile_warning 마이그레이션 실패 | Medium | DB 권한 부족 또는 기존 테이블 충돌 시 기동 실패 | **배포 중 미발생** — 016번 마이그레이션 정상 완료 확인 | +| reconcile 차단 오발동 | Medium | B/C 케이스 오탐 시 정상 슬롯 차단 가능 | 배포 후 장 시작 1 reconcile 주기 집중 모니터링 유지. 현재 미발생. | +| WAC 리포트 degrade | Low | portfolio-hub BASE_URL 미설정 또는 미가용 시 WAC 섹션만 에러 표시 | 타 섹션 정상 — 비치명적. `trex-core report --json` exit0 PASS 확인 | +| dcy-036 휴면 — byte-for-byte 회귀 보존 의존 | Low | opt-in OFF 경로에서 KIS fetch 로직 완전 비활성 의존 | **배포 중 확인 완료** — `credential_fetch_enabled=false` 유지, portfolio-hub fetch 시도 로그 미발생 PASS | +| REQ-115 AC-1 통합 검증 미완 | Low | 실 portfolio-hub + KIS mock 환경 미확보 — stub 기반만 검증. 이번 릴리즈 go 조건 아님 | 후속 플립 절차(중장기 인스턴스)에서 선결 조건으로 관리 | +| verify ImportError(배포 중 검출·해소) | Low | 초기 기동 시 `ImportError: make_broker` 발생 | **해소됨** — 핫픽스 `51cc3cc`(make_broker→_build_broker) 즉시 반영, 재기동 후 PASS |