From 5330f32247d1f77db7c64825c5447d1ceb0fb26e Mon Sep 17 00:00:00 2001 From: Justin Ko Date: Wed, 10 Jun 2026 15:20:52 +0900 Subject: [PATCH] =?UTF-8?q?docs(batch):=20BAT-030=20verification=20?= =?UTF-8?q?=EC=8A=B9=EC=9D=B8=20+=20REQ-056~065=20Implemented=20(dcy-020?= =?UTF-8?q?=20delivery=20=EC=99=84=EB=A3=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit draft/confirm-batch-verification: BAT-030 AC 매핑(REQ-056·057·062·064·065) + evidence(단위 367/PG 29/MQ 21, cutover 리허설 8건, run-the-app e2e) 기록, Ready for Release: true → release-candidate 승격. BAT-027/028/029 의 보류 사유(dcy-020 전체 delivery 미완)가 BAT-030 완성으로 해소되어 함께 release-candidate 승격. confirm-req-implemented: REQ-056~065 전부 Approved → Implemented (각 REQ Change Log CHG-20260610-IMPL + srs index 갱신). 실 운영 cutover(REQ-064)는 REL 단계 운영자 실행으로 위임. Co-Authored-By: Claude Opus 4.8 --- .../index.md | 2 +- .../verification.md | 2 +- .../index.md | 2 +- .../verification.md | 2 +- .../index.md | 2 +- .../verification.md | 2 +- .../index.md | 2 +- .../verification.md | 59 +++++++++++++++++-- docs/batches/index.md | 8 +-- .../req-060_max-active-slots-config.md | 8 ++- .../req-056_asset-permanent-slot-schema.md | 8 ++- ...eq-065_asset-centric-baseline-alignment.md | 8 ++- ...q-058_universe-slot-reconcile-lifecycle.md | 8 ++- ...2_quantity-hub-authority-and-divergence.md | 8 ++- .../req-057_asset-slot-state-machine.md | 8 ++- .../req-059_active-capacity-admission.md | 8 ++- .../req-061_asset-keyed-intent-contract.md | 8 ++- .../req-063_unified-operator-slot-view.md | 8 ++- .../req-064_pool-to-permanent-slot-cutover.md | 8 ++- docs/srs/index.md | 21 +++---- 20 files changed, 147 insertions(+), 35 deletions(-) diff --git a/docs/batches/bat-027_20260610_asset-permanent-slot-foundation/index.md b/docs/batches/bat-027_20260610_asset-permanent-slot-foundation/index.md index c599582..f6bdb75 100644 --- a/docs/batches/bat-027_20260610_asset-permanent-slot-foundation/index.md +++ b/docs/batches/bat-027_20260610_asset-permanent-slot-foundation/index.md @@ -1,6 +1,6 @@ # BAT-027: 자산 영구 슬롯 토대 — 스키마 + 상태머신 재정의 (dcy-020 BAT-α) -- Status: planning +- Status: release-candidate - Profile: standard - Source Discovery: dcy-020 - Included REQ: REQ-056 (영구 슬롯 스키마+마이그레이션), REQ-057 (상태머신 재정의 + 인스턴스 스코프 advisory lock) diff --git a/docs/batches/bat-027_20260610_asset-permanent-slot-foundation/verification.md b/docs/batches/bat-027_20260610_asset-permanent-slot-foundation/verification.md index 69db641..f307791 100644 --- a/docs/batches/bat-027_20260610_asset-permanent-slot-foundation/verification.md +++ b/docs/batches/bat-027_20260610_asset-permanent-slot-foundation/verification.md @@ -34,5 +34,5 @@ - 따라서 **REQ-056/057 은 본 배치에서 Implemented 로 확정하지 않고 Approved 유지**(토대만 충족; 전체 AC 는 dcy-020 후속 배치 완료 시 confirm-req-implemented). ## Result -- Ready for Release: false (dcy-020 전체 delivery 미완 — 토대 배치) +- Ready for Release: true (BAT-030(δ) 완성·검증(2026-06-10)으로 'dcy-020 전체 delivery 미완' 보류 해소 — confirm-batch-verification 승격) - Blocking Issues: 없음(배치 범위 단위/PG green). 단, dcy-020 REQ 완전 충족은 BAT-β/γ/δ 필요. diff --git a/docs/batches/bat-028_20260610_universe-reconcile-and-active-admission/index.md b/docs/batches/bat-028_20260610_universe-reconcile-and-active-admission/index.md index f8c3e0c..1bd1fcd 100644 --- a/docs/batches/bat-028_20260610_universe-reconcile-and-active-admission/index.md +++ b/docs/batches/bat-028_20260610_universe-reconcile-and-active-admission/index.md @@ -1,6 +1,6 @@ # BAT-028: universe reconcile + 활성 capacity admission (dcy-020 BAT-β) -- Status: planning +- Status: release-candidate - 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) diff --git a/docs/batches/bat-028_20260610_universe-reconcile-and-active-admission/verification.md b/docs/batches/bat-028_20260610_universe-reconcile-and-active-admission/verification.md index 7c6ad11..961757a 100644 --- a/docs/batches/bat-028_20260610_universe-reconcile-and-active-admission/verification.md +++ b/docs/batches/bat-028_20260610_universe-reconcile-and-active-admission/verification.md @@ -40,5 +40,5 @@ - 따라서 REQ-058/059/060 은 본 배치에서 **Approved 유지**(자산 중심 경로 동작 검증; 전체 dcy-020 완성·default 전환은 후속). ## Result -- Ready for Release: false (dcy-020 전체 delivery 미완 — β 경로 도입 완료, default 는 legacy) +- Ready for Release: true (BAT-030(δ) 완성·검증(2026-06-10)으로 'dcy-020 전체 delivery 미완' 보류 해소 — confirm-batch-verification 승격) - Blocking Issues: 없음(단위 387 + PG 17 green, legacy 무파손). diff --git a/docs/batches/bat-029_20260610_asset-keyed-intent-and-divergence/index.md b/docs/batches/bat-029_20260610_asset-keyed-intent-and-divergence/index.md index 156511f..823a98a 100644 --- a/docs/batches/bat-029_20260610_asset-keyed-intent-and-divergence/index.md +++ b/docs/batches/bat-029_20260610_asset-keyed-intent-and-divergence/index.md @@ -1,6 +1,6 @@ # BAT-029: intent 자산 키 + 수량/불일치 해소 + 운영자 단일 뷰 (dcy-020 BAT-γ) -- Status: planning +- Status: release-candidate - Profile: standard - Source Discovery: dcy-020 - Included REQ: REQ-061 (intent 자산 키 통일), REQ-062 (수량 hub 정본+미러·불일치 해소), REQ-063 (운영자 slots 단일 뷰) diff --git a/docs/batches/bat-029_20260610_asset-keyed-intent-and-divergence/verification.md b/docs/batches/bat-029_20260610_asset-keyed-intent-and-divergence/verification.md index 4164ccf..7ef7dbf 100644 --- a/docs/batches/bat-029_20260610_asset-keyed-intent-and-divergence/verification.md +++ b/docs/batches/bat-029_20260610_asset-keyed-intent-and-divergence/verification.md @@ -39,5 +39,5 @@ - 따라서 REQ-061/062/063 은 본 배치에서 **Approved 유지**(경로 동작 검증; 전체 완성·default 전환은 BAT-δ). ## Result -- Ready for Release: false (dcy-020 전체 미완 — γ 경로 도입 완료, M2(b)·default 는 BAT-δ) +- Ready for Release: true (BAT-030(δ) 완성·검증(2026-06-10)으로 'dcy-020 전체 delivery 미완' 보류 해소 — confirm-batch-verification 승격) - Blocking Issues: 없음(단위 393 + PG 18 green, legacy 무파손). diff --git a/docs/batches/bat-030_20260610_asset-centric-cutover/index.md b/docs/batches/bat-030_20260610_asset-centric-cutover/index.md index 49e880b..19f4f5a 100644 --- a/docs/batches/bat-030_20260610_asset-centric-cutover/index.md +++ b/docs/batches/bat-030_20260610_asset-centric-cutover/index.md @@ -1,6 +1,6 @@ # BAT-030: 자산 중심 cutover — 라이브 전환·집행 정본·모델 완성 (dcy-020 BAT-δ) -- Status: in-delivery +- Status: release-candidate - 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 마감) diff --git a/docs/batches/bat-030_20260610_asset-centric-cutover/verification.md b/docs/batches/bat-030_20260610_asset-centric-cutover/verification.md index c4742f9..8faa29b 100644 --- a/docs/batches/bat-030_20260610_asset-centric-cutover/verification.md +++ b/docs/batches/bat-030_20260610_asset-centric-cutover/verification.md @@ -1,13 +1,64 @@ # BAT-030 Verification -- Status: not-started +- Status: approved (confirm-batch-verification, 2026-06-10) - Batch: BAT-030 +- 일자: 2026-06-10 +- 검증 환경: Python 3.12 / PostgreSQL `trex_core_test`(실 DB) / 실 RabbitMQ / paper broker ## Acceptance Mapping -- (draft-batch-verification / confirm-batch-verification 단계에서 작성) + +### REQ-056 (Data — 잔여: trading_date/entry_count drop, 스키마 마감) +| AC | 판정 | Evidence | +|---|---|---| +| AC-1 스키마: portfolio_id NOT NULL·instance_key·UNIQUE(instance_key,portfolio_id)·retired_at·trading_date/entry_count 부재 | **pass** (NOT NULL 은 promote 후) | 마이그레이션 009/010/011 + `test_promote_unique_sets_not_null`(cutover `--promote-unique` 로 NOT NULL 승격 — 공유 DB 전 인스턴스 cutover 후 적용하는 설계, BAT-027 결정); `test_daily_slot_columns_match_expected_contract`(drop 후 컬럼셋 일치) | +| AC-2 EXPECTED_SLOT_FIELDS ↔ information_schema 일치 | pass | `tests/adapters/persistence/test_migration_and_drift.py` 3건 PG 통과 | +| AC-3 (instance_key, portfolio_id) 중복 거부 | pass | partial UNIQUE(009) + `test_universe_reconcile_pg`(ON CONFLICT 멱등, created=0) | +| AC-4 인스턴스 간 행 미혼합 | pass | `test_dispatch_queue_instance_scoped`(집행 큐 격리) + `test_instance_isolation`(reconcile) + cutover `test_instance_isolation_other_instance_untouched` | + +### REQ-057 (Interface — 잔여: literal inactive + 별칭 제거) +| AC | 판정 | Evidence | +|---|---|---| +| AC-1 허용 전이 집합 정확 일치(12종) | pass | `tests/domain/slot/test_state.py`(5 members·alias ValueError·allowed/disallowed 파라미터라이즈·set size 12) | +| AC-2 매도 체결 → inactive 복귀(closed 없음)·점유 clear | pass | `test_sell_fill_returns_to_inactive_and_clears_position`, `test_full_lifecycle_returns_to_inactive_and_reuses`(PG), e2e 7단계(status=inactive, qty=None) | +| AC-3 인스턴스별 락 비차단 | pass | `slot_advisory_lock_id` 인스턴스 해시(BAT-027) + `test_slot_advisory_lock_id_is_instance_scoped` | +| AC-4 동일 슬롯 동시 전이 직렬화 | pass | `TestAdvisoryLockSerialization`(1 success/1 mismatch) | + +### REQ-062 (Integration — 잔여: M2(b) 매도 수량 브로커 정본) +| AC | 판정 | Evidence | +|---|---|---| +| AC-1 매도 수량 = 브로커 잔고(미러 stale 무관) | pass | `test_sell_qty_is_broker_balance_not_slot_mirror`(미러 7 vs 브로커 10 → 주문 10) + `test_sell_skipped_when_broker_flat`(브로커 0 → skip+카운터, 주문 0) + `test_skipped_sell_does_not_block_other_dispatches` | +| AC-2 core holding/브로커 0 → error 격리 | pass (BAT-029 기구현) | `tests/application/test_holding_divergence.py::test_A_*` — 본 배치에서 회귀 green 재확인 | +| AC-3 core flat/브로커 보유 → WARN·운영자 결정 | pass (BAT-029 기구현; 슬롯 부재로 '격리' 대신 unmanaged WARN — issue #15 무자동조치 결정) | `test_B_broker_holds_unmanaged_warns` | +| AC-4 수량 불일치 → 상태 전이 없음·warning 노출 | pass (BAT-029 기구현; 미러 자동 갱신 없이 WARN — 보수 구현) | `test_C_qty_mismatch_warns_no_state_change` | + +### REQ-064 (Migration — cutover + 롤백) +| AC | 판정 | Evidence | +|---|---|---| +| AC-1 보유 N개 → 영구 슬롯 holding 보존(수량 무유실) | **pass (리허설)** | `tests/runtime/test_cutover_rehearsal.py::test_full_rebuild_with_broker_carry_over` — 브로커 qty=12 정본 carry-over(미러 7 아님), 자산 바인딩 보존. ※ avg_price 는 잔고 API 미제공으로 NULL carry(+WARN) — implementation.md 잔여 리스크 | +| AC-2 cutover 후 데몬 회귀 없음(reconcile·admission·safety-sell) | pass | run-the-app e2e(아래) + 단위 367/PG 29 green | +| AC-3 실패 시 롤백 가능 | pass (계획+부분 검증) | 단일 트랜잭션(중단 시 무변경: `test_aborts_on_in_flight_pending`/`test_aborts_on_unmapped_broker_holding` DB 불변 단언) + `test_dry_run_rolls_back`; 전체 롤백 = 백업 복원 + 직전 리비전(design §롤백, 운영 절차) | +| AC-4 instance_key 태깅·스코프 쿼리 정확 | pass | cutover 가 instance_key 로 생성 + `test_instance_isolation_other_instance_untouched` | + +### REQ-065 (Documentation — baseline 마감) +| AC | 판정 | Evidence | +|---|---|---| +| AC-1 data-model.md 코드 일치 | pass | commit 7d72782 — 영구 슬롯 스키마·5-state·trading_date 강등(전이 로그/원장으로)·INACTIVE 리셋 규칙 반영 | +| AC-2 runtime-flows.md 일치 + preallocation 서술 제거 | pass | 데몬 7스레드·universe reconcile 흐름(preallocation 대체)·admission slot_id·매도 브로커 정본·transit 12전이 갱신 | +| AC-3 폐기 범위 명시(dcy-001/014/019·daily_symbol_entries) | pass | data-model Model Summary/Gaps + Change Log; project-structure·interface-contract 도 동기화(추가) | ## Evidence -- (대기) + +1. **단위 회귀**: `pytest tests` → **367 passed**, ruff `All checks passed` (commit 7d72782 시점). +2. **PG-gated**(실 PostgreSQL `trex_core_test`): **29 passed** — 마이그레이션 001~011 전체 재적용 멱등(`test_apply_migrations_is_idempotent`; 010 CHECK drop-and-add·011 DROP IF EXISTS·008 no-op 가 매 boot 재실행에 안전함을 모든 PG 테스트의 pg_clean 반복 적용으로 입증), 컬럼 드리프트 가드, reconcile/admission/lifecycle, dispatch 인스턴스 격리, ops_checks(transition_log 기반) 3건, **cutover 리허설 8건**. +3. **RabbitMQ-gated**(실 브로커): 21 passed — slot_id 계약 포함 intent RPC e2e dedup. +4. **run-the-app e2e**(test DB + 실 RabbitMQ + paper broker, instance=e2etest, M=1): boot reconcile created=2 → snapshot(slots=2 inactive, available=1) → buy by slot_id admitted → 중복 intent identical → 2번째 자산 capacity_full → fill→holding(available=0) → 동일 슬롯 already_active → sell→fill→**inactive**(qty=None·portfolio_id 보존·available=1) → 동일 영구 슬롯 재매수 admitted. DB 최종행·transition_log·ledger_outbox(completed×3) 일치, 데몬 로그 ERROR/Traceback 0, SIGTERM Normal shutdown. (전 과정 implementation.md 검증 실행 절 기록) +5. **baseline 동기화**(Architecture Impact 有): data-model/runtime-flows/project-structure/interface-contract 4문서 + run-trex-core-daemon 스킬 + instance.example.toml 갱신 — commit 7d72782 포함. + +## Blocking Issues + +- 없음 (코드/리허설 범위). 단, **실 운영 DB cutover 는 본 배치 산출물 범위 밖**(design D4) — release(REL) 단계에서 운영자가 백업→리허설→`trex-core-cutover --yes`→운영 TOML `max_active_slots` 설정 순으로 수행해야 하며, 그 운영 증거는 release 검증에 귀속된다. ## Result -- Ready for Release: false (구현 전) + +- 포함 REQ AC 전 항목 evidence 연결 완료(REQ-062 AC-3/4 는 issue #15 무자동조치 결정에 따른 보수 구현 — 의도된 편차로 기록). +- **Ready for Release: true** (배치 산출물 기준 — 코드·마이그레이션·cutover 도구·리허설·baseline. 실 cutover 실행은 REL 단계 운영자 작업으로 release 게이트에 위임) diff --git a/docs/batches/index.md b/docs/batches/index.md index 021eed0..fb99a51 100644 --- a/docs/batches/index.md +++ b/docs/batches/index.md @@ -34,7 +34,7 @@ | BAT-024 | batch-lite | release-candidate | REQ-032 (CHG-20260609-01) | dcy-016 (issue #17) | [bat-024](./bat-024_20260609_operator-enter-forced-close-at/) | | BAT-025 | standard | release-candidate | 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 | planning | REQ-056, REQ-057 | dcy-020 (BAT-α) | [bat-027](./bat-027_20260610_asset-permanent-slot-foundation/) | -| BAT-028 | standard | planning | REQ-058, REQ-059, REQ-060 | dcy-020 (BAT-β) | [bat-028](./bat-028_20260610_universe-reconcile-and-active-admission/) | -| BAT-029 | standard | planning | REQ-061, REQ-062, REQ-063 | dcy-020 (BAT-γ) | [bat-029](./bat-029_20260610_asset-keyed-intent-and-divergence/) | -| BAT-030 | standard | in-delivery | REQ-064, REQ-062, REQ-056·057·065(잔여) | dcy-020 (BAT-δ) | [bat-030](./bat-030_20260610_asset-centric-cutover/) | +| 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/) | diff --git a/docs/srs/Configuration/req-060_max-active-slots-config.md b/docs/srs/Configuration/req-060_max-active-slots-config.md index 5d6d49e..ea4f21d 100644 --- a/docs/srs/Configuration/req-060_max-active-slots-config.md +++ b/docs/srs/Configuration/req-060_max-active-slots-config.md @@ -1,6 +1,6 @@ # req-060: 동시 활성 최대치(max_active_slots) per-instance TOML 설정 -- Status: Approved +- Status: Implemented - Type: Configuration - Priority: High - Owner: project maintainers @@ -84,3 +84,9 @@ #### Validation Plan - 승인 후 batch planning 에서 본 REQ AC 를 검증 기준으로 사용. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-028(+BAT-030 M=용량 캡 의미 확정·e2e M=1) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/Data/req-056_asset-permanent-slot-schema.md b/docs/srs/Data/req-056_asset-permanent-slot-schema.md index a91e1c8..2f1c819 100644 --- a/docs/srs/Data/req-056_asset-permanent-slot-schema.md +++ b/docs/srs/Data/req-056_asset-permanent-slot-schema.md @@ -1,6 +1,6 @@ # req-056: 자산 영구 슬롯 스키마 재설계 + 마이그레이션 -- Status: Approved +- Status: Implemented - Type: Data - Priority: High - Owner: project maintainers @@ -87,3 +87,9 @@ #### Validation Plan - 승인 후 batch planning 에서 본 REQ AC 를 검증 기준으로 사용. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-027(토대)+BAT-030(컬럼 drop·promote-unique) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/Documentation/req-065_asset-centric-baseline-alignment.md b/docs/srs/Documentation/req-065_asset-centric-baseline-alignment.md index de40099..7a03b79 100644 --- a/docs/srs/Documentation/req-065_asset-centric-baseline-alignment.md +++ b/docs/srs/Documentation/req-065_asset-centric-baseline-alignment.md @@ -1,6 +1,6 @@ # req-065: 자산 중심 모델 baseline 문서 정합 + 풀 모델 폐기 명시 -- Status: Approved +- Status: Implemented - Type: Documentation - Priority: Medium - Owner: project maintainers @@ -84,3 +84,9 @@ #### Validation Plan - 승인 후 코드-문서 diff 대조로 검증. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-030(baseline 4문서 마감) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/Integration/req-058_universe-slot-reconcile-lifecycle.md b/docs/srs/Integration/req-058_universe-slot-reconcile-lifecycle.md index b0a0082..c94c02e 100644 --- a/docs/srs/Integration/req-058_universe-slot-reconcile-lifecycle.md +++ b/docs/srs/Integration/req-058_universe-slot-reconcile-lifecycle.md @@ -1,6 +1,6 @@ # req-058: universe 기반 슬롯 lifecycle reconcile (생성/soft-retire/tombstone) -- Status: Approved +- Status: Implemented - Type: Integration - Priority: High - Owner: project maintainers @@ -86,3 +86,9 @@ #### Validation Plan - 승인 후 batch planning 에서 본 REQ AC 를 검증 기준으로 사용. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-028(+BAT-030 default 단일 경로·e2e) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/Integration/req-062_quantity-hub-authority-and-divergence.md b/docs/srs/Integration/req-062_quantity-hub-authority-and-divergence.md index a8ac1ce..c1a8856 100644 --- a/docs/srs/Integration/req-062_quantity-hub-authority-and-divergence.md +++ b/docs/srs/Integration/req-062_quantity-hub-authority-and-divergence.md @@ -1,6 +1,6 @@ # req-062: 수량 hub 정본+로컬 미러 + holding↔broker/hub 불일치 해소 -- Status: Approved +- Status: Implemented - Type: Integration - Priority: High - Owner: project maintainers @@ -85,3 +85,9 @@ #### Validation Plan - 승인 후 batch planning 에서 본 REQ AC 를 검증 기준으로 사용. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-029(M2a 불일치 reconcile)+BAT-030(M2b 매도 수량 브로커 정본) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/Interface/req-057_asset-slot-state-machine.md b/docs/srs/Interface/req-057_asset-slot-state-machine.md index 6b16fa8..3b1f0b5 100644 --- a/docs/srs/Interface/req-057_asset-slot-state-machine.md +++ b/docs/srs/Interface/req-057_asset-slot-state-machine.md @@ -1,6 +1,6 @@ # req-057: 자산 영구 슬롯 상태머신 재정의 + 인스턴스 스코프 advisory lock -- Status: Approved +- Status: Implemented - Type: Interface - Priority: High - Owner: project maintainers @@ -87,3 +87,9 @@ #### Validation Plan - 승인 후 batch planning 에서 본 REQ AC 를 검증 기준으로 사용. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-027(토대)+BAT-030(literal inactive·별칭 제거) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/Interface/req-059_active-capacity-admission.md b/docs/srs/Interface/req-059_active-capacity-admission.md index 63e1a57..7dc9c9d 100644 --- a/docs/srs/Interface/req-059_active-capacity-admission.md +++ b/docs/srs/Interface/req-059_active-capacity-admission.md @@ -1,6 +1,6 @@ # req-059: 활성 capacity 제어 + 신호 기반 admission (FCFS·M캡·무치환·over-cap) -- Status: Approved +- Status: Implemented - Type: Interface - Priority: High - Owner: project maintainers @@ -86,3 +86,9 @@ #### Validation Plan - 승인 후 batch planning 에서 본 REQ AC 를 검증 기준으로 사용. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-028(+BAT-030 단일 경로·capacity_full e2e) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/Interface/req-061_asset-keyed-intent-contract.md b/docs/srs/Interface/req-061_asset-keyed-intent-contract.md index cb5987d..35fd84e 100644 --- a/docs/srs/Interface/req-061_asset-keyed-intent-contract.md +++ b/docs/srs/Interface/req-061_asset-keyed-intent-contract.md @@ -1,6 +1,6 @@ # req-061: intent 계약 자산(portfolio_id) 키 통일 + 중복/무효 규칙 -- Status: Approved +- Status: Implemented - Type: Interface - Priority: High - Owner: project maintainers @@ -120,3 +120,9 @@ #### Validation Plan - BAT-029: 매수 slot_id 활성화 / portfolio_id dual-accept / already_active / 매도 slot_id / 멱등 단위·통합. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-029(+BAT-030 trading_date 제거·e2e slot_id 매수) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/Interface/req-063_unified-operator-slot-view.md b/docs/srs/Interface/req-063_unified-operator-slot-view.md index eba51c9..ccdb3b5 100644 --- a/docs/srs/Interface/req-063_unified-operator-slot-view.md +++ b/docs/srs/Interface/req-063_unified-operator-slot-view.md @@ -1,6 +1,6 @@ # req-063: 운영자 표면 단일화 — slots = 자산 포지션 단일 뷰 -- Status: Approved +- Status: Implemented - Type: Interface - Priority: Medium - Owner: project maintainers @@ -84,3 +84,9 @@ #### Validation Plan - 승인 후 batch planning 에서 본 REQ AC 를 검증 기준으로 사용. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-029(+BAT-030 trading_date 키 제거·buyable=inactive 필터) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/Migration/req-064_pool-to-permanent-slot-cutover.md b/docs/srs/Migration/req-064_pool-to-permanent-slot-cutover.md index 8875e89..b1e0675 100644 --- a/docs/srs/Migration/req-064_pool-to-permanent-slot-cutover.md +++ b/docs/srs/Migration/req-064_pool-to-permanent-slot-cutover.md @@ -1,6 +1,6 @@ # req-064: 풀 모델 → 영구 자산 슬롯 cutover 마이그레이션 -- Status: Approved +- Status: Implemented - Type: Migration - Priority: High - Owner: project maintainers @@ -85,3 +85,9 @@ #### Validation Plan - 승인 후 cutover 배치 planning 에서 본 REQ AC 를 검증 기준으로 사용. + +### CHG-20260610-IMPL +- Date: 2026-06-10 +- Author: Justin Ko +- Type: status +- Summary: Approved → Implemented (confirm-req-implemented). 근거: BAT-030(cutover 도구+PG 리허설 8건; 실 cutover 는 REL 운영자) — 모든 AC 가 release-candidate 배치 verification 의 evidence 와 연결됨(단위 367/PG 29/MQ 21 passed + run-the-app 자산 중심 e2e). Blocking Issues 없음. diff --git a/docs/srs/index.md b/docs/srs/index.md index c37aea2..abecb8d 100644 --- a/docs/srs/index.md +++ b/docs/srs/index.md @@ -136,16 +136,16 @@ | REQ-053 | safety-sell 재시도 쿨다운 env 설정 2종 | Configuration | Implemented | Medium | project maintainers | [req-053](./Configuration/req-053_safety-sell-retry-cooldown-env.md) | | REQ-054 | safety-sell 쿨다운 runtime-flows 정합 | Documentation | Implemented | Low | project maintainers | [req-054](./Documentation/req-054_safety-sell-cooldown-baseline-alignment.md) | | REQ-055 | closed 슬롯 ↔ ledger_outbox 누락 운영 점검 쿼리 | Exception | Implemented | Medium | project maintainers | [req-055](./Exception/req-055_ledger-gap-ops-check.md) | -| REQ-056 | 자산 영구 슬롯 스키마 재설계 + 마이그레이션 | Data | Approved | High | project maintainers | [req-056](./Data/req-056_asset-permanent-slot-schema.md) | -| REQ-057 | 자산 영구 슬롯 상태머신 재정의 + 인스턴스 스코프 advisory lock | Interface | Approved | High | project maintainers | [req-057](./Interface/req-057_asset-slot-state-machine.md) | -| REQ-058 | universe 기반 슬롯 lifecycle reconcile (생성/soft-retire/tombstone) | Integration | Approved | High | project maintainers | [req-058](./Integration/req-058_universe-slot-reconcile-lifecycle.md) | -| REQ-059 | 활성 capacity 제어 + 신호 기반 admission (FCFS·M캡·무치환·over-cap) | Interface | Approved | High | project maintainers | [req-059](./Interface/req-059_active-capacity-admission.md) | -| REQ-060 | 동시 활성 최대치(max_active_slots) per-instance TOML 설정 | Configuration | Approved | High | project maintainers | [req-060](./Configuration/req-060_max-active-slots-config.md) | -| REQ-061 | intent 계약 자산(portfolio_id) 키 통일 + 중복/무효 규칙 | Interface | Approved | High | project maintainers | [req-061](./Interface/req-061_asset-keyed-intent-contract.md) | -| REQ-062 | 수량 hub 정본+로컬 미러 + holding↔broker/hub 불일치 해소 | Integration | Approved | High | project maintainers | [req-062](./Integration/req-062_quantity-hub-authority-and-divergence.md) | -| REQ-063 | 운영자 표면 단일화 — slots = 자산 포지션 단일 뷰 | Interface | Approved | Medium | project maintainers | [req-063](./Interface/req-063_unified-operator-slot-view.md) | -| REQ-064 | 풀 모델 → 영구 자산 슬롯 cutover 마이그레이션 | Migration | Approved | High | project maintainers | [req-064](./Migration/req-064_pool-to-permanent-slot-cutover.md) | -| REQ-065 | 자산 중심 모델 baseline 문서 정합 + 풀 모델 폐기 명시 | Documentation | Approved | Medium | project maintainers | [req-065](./Documentation/req-065_asset-centric-baseline-alignment.md) | +| REQ-056 | 자산 영구 슬롯 스키마 재설계 + 마이그레이션 | Data | Implemented | High | project maintainers | [req-056](./Data/req-056_asset-permanent-slot-schema.md) | +| REQ-057 | 자산 영구 슬롯 상태머신 재정의 + 인스턴스 스코프 advisory lock | Interface | Implemented | High | project maintainers | [req-057](./Interface/req-057_asset-slot-state-machine.md) | +| REQ-058 | universe 기반 슬롯 lifecycle reconcile (생성/soft-retire/tombstone) | Integration | Implemented | High | project maintainers | [req-058](./Integration/req-058_universe-slot-reconcile-lifecycle.md) | +| REQ-059 | 활성 capacity 제어 + 신호 기반 admission (FCFS·M캡·무치환·over-cap) | Interface | Implemented | High | project maintainers | [req-059](./Interface/req-059_active-capacity-admission.md) | +| REQ-060 | 동시 활성 최대치(max_active_slots) per-instance TOML 설정 | Configuration | Implemented | High | project maintainers | [req-060](./Configuration/req-060_max-active-slots-config.md) | +| REQ-061 | intent 계약 자산(portfolio_id) 키 통일 + 중복/무효 규칙 | Interface | Implemented | High | project maintainers | [req-061](./Interface/req-061_asset-keyed-intent-contract.md) | +| REQ-062 | 수량 hub 정본+로컬 미러 + holding↔broker/hub 불일치 해소 | Integration | Implemented | High | project maintainers | [req-062](./Integration/req-062_quantity-hub-authority-and-divergence.md) | +| REQ-063 | 운영자 표면 단일화 — slots = 자산 포지션 단일 뷰 | Interface | Implemented | Medium | project maintainers | [req-063](./Interface/req-063_unified-operator-slot-view.md) | +| REQ-064 | 풀 모델 → 영구 자산 슬롯 cutover 마이그레이션 | Migration | Implemented | High | project maintainers | [req-064](./Migration/req-064_pool-to-permanent-slot-cutover.md) | +| REQ-065 | 자산 중심 모델 baseline 문서 정합 + 풀 모델 폐기 명시 | Documentation | Implemented | Medium | project maintainers | [req-065](./Documentation/req-065_asset-centric-baseline-alignment.md) | ## Recent Change Log Summary @@ -154,3 +154,4 @@ - 2026-06-09 :: REQ-002/003/006/007/009 change-req (CHG-20260609-01, dcy-019/issue #18, BAT-025): slot-scoped `entry_count` 추가 + closed 슬롯 직접 재할당. daily_slot/`Slot` 에 `entry_count`(기본 0) 필드 + `EXPECTED_SLOT_FIELDS` + 멱등 마이그레이션 008(REQ-002/006), 상태 머신 `closed→pending_buy` 신규 전이(8→9 base, ALLOWED_TRANSITIONS 14→15)(REQ-002), `_apply_transition_fields` closed→pending_buy clean-slate + 모든 `→pending_buy` 시 entry_count +1(REQ-002), `find_allocatable_slot`(idle∪closed, `entry_count→updated_at→slot_id`) selector + in-memory 동등(REQ-006), `_admit_buy` find_idle_slot→find_allocatable_slot + from_state=slot.status(REQ-007), 테스트 계약 정합(REQ-003), baseline 2문서(data-model/runtime-flows) 정합(REQ-009). 기존 `daily_symbol_entries`(symbol-scoped) 무관·미변경. 전부 change-req(신규 REQ 없음, OQ-1/2/3). 단위 366 passed(+KIS sandbox 1건은 live .env URL 로 사전 환경 실패·무관), ruff clean. PG 게이트 마이그레이션/드리프트는 라이브 runtime DSN 미사용(파괴적 truncate 회피)·test DSN 자동 검증. 전부 **Implemented** 유지. (change-req) - 2026-06-09 :: REQ-032 change-req→Implemented (CHG-20260609-01/02, issue #17, BAT-024): `trex-core enter` 에 `--forced-close-at ` (절대시간) 옵션 추가 — 운영자가 매수 진입 명령 하나로 시간 기반 자동청산(forced_close) 시각 지정. CLI 가 buy intent payload 의 기존 `forced_close_at` 필드에 매핑(계약 REQ-007/021·도메인 REQ-066·forced-close 루프 REQ-037 이미 구현·불변, CLI 노출 갭만 보완). 잘못된 형식 제출 전 거부, 미지정 시 미포함(하위호환). 상대시간(`--hold-minutes`) 미채택. AC-5/6 신규. batch-lite(BAT-024) 단위 검증 → **Implemented**. 단위 353 passed, ruff clean. (change-req/confirm-req-implemented) - 2026-06-08 :: REQ-017/019/029 change-req + REQ-030 Approved→Implemented (dcy-018, BAT-023): ledger write 응답의 권위 cash/quantity 를 portfolio 스냅샷에 write-back(option D 활성화) — 매수/매도 직후 "수량 live·현금 stale" 비대칭 제거. `record_trade`→`LedgerWriteOutcome{result, *_after}`+어댑터 `cash_balance_after`/`asset_quantity_after` 파싱(new+duplicate)(REQ-017), `LedgerWriter` SnapshotStore write-back best-effort+`pending_cash_delta`(REQ-019), 추정 현금 오버레이(`cash_estimated` 라벨)+슬롯 오버레이 유지(REQ-029, OQ-1 B/OQ-4 i), option D 활성화로 REQ-030 Approved→Implemented. 전부 change-req(신규 REQ 없음, OQ-3 a). portfolio-hub#8(`*_after`) 동작 중. 단위 350 passed, 인프라 게이트 385 passed, ruff clean. (change-req/confirm-req-implemented) +- 2026-06-10 :: REQ-056~065 Approved → Implemented (confirm-req-implemented): dcy-020 자산 중심 슬롯 모델 4개 배치(BAT-027 α/BAT-028 β/BAT-029 γ/BAT-030 δ, 전부 release-candidate) verification evidence 기준. BAT-030 에서 literal inactive·컬럼 drop·매도 수량 브로커 정본·cutover 도구·baseline 마감 완성, run-the-app 자산 중심 e2e green. 실 운영 cutover(REQ-064)는 REL 단계 운영자 실행.