From 7e3b34287f2848101861081306b2cc8aa1d38f77 Mon Sep 17 00:00:00 2001 From: Justin Ko Date: Sun, 28 Jun 2026 07:49:17 +0900 Subject: [PATCH] =?UTF-8?q?docs(dcy-010):=20confirm-req-implemented=20?= =?UTF-8?q?=E2=80=94=20REQ-046/048/049/050/051=20Implemented,=20REQ-047=20?= =?UTF-8?q?Approved=20=EC=9C=A0=EC=A7=80(Step2=20=EA=B2=B0=EC=9E=AC?= =?UTF-8?q?=EB=8C=80=EA=B8=B0),=20BAT-020=20release-candidate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5 --- .../index.md | 16 +++++++--- ...q-046_broker-credential-daemon-id-field.md | 32 ++++++++++++++++++- ...user-info-daemon-scoped-broker-delivery.md | 32 ++++++++++++++++++- ...req-050_credential-cli-daemon-id-option.md | 32 ++++++++++++++++++- ...-credentials-daemon-scoped-pk-migration.md | 30 +++++++++++++++++ ...8_broker-credentials-daemon-id-backfill.md | 32 ++++++++++++++++++- ...51_broker-credential-security-isolation.md | 32 ++++++++++++++++++- docs/srs/index.md | 14 ++++---- 8 files changed, 202 insertions(+), 18 deletions(-) diff --git a/docs/batches/bat-020_20260628_daemon-scoped-broker-credential/index.md b/docs/batches/bat-020_20260628_daemon-scoped-broker-credential/index.md index 4be71bc..bab8899 100644 --- a/docs/batches/bat-020_20260628_daemon-scoped-broker-credential/index.md +++ b/docs/batches/bat-020_20260628_daemon-scoped-broker-credential/index.md @@ -2,7 +2,7 @@ - Batch ID: BAT-020 - Profile: standard -- Status: in-progress +- Status: release-candidate - Discovery: dcy-010 - Included REQ: REQ-046, REQ-047, REQ-048, REQ-049, REQ-050, REQ-051 - Folder: docs/batches/bat-020_20260628_daemon-scoped-broker-credential/ @@ -30,10 +30,16 @@ BrokerCredential 도메인 모델에 daemon_id 필드 추가, broker_credentials - [x] design 위임 2건 식별 완료(REQ-048 구현방식, REQ-050 --daemon-id 입력 타입·과도기 정책) ## DoD (완료 조건) -- [ ] REQ-046~051 전 AC 테스트 통과 -- [ ] alembic revision Step1/Step2 작성 완료(dev DB 검증) -- [ ] 기존 테스트 회귀 없음 -- [ ] draft-batch-verification 문서에 evidence 기록 +- [x] REQ-046~051 전 AC 테스트 통과 +- [x] alembic revision Step1/Step2 작성 완료(dev DB 검증) +- [x] 기존 테스트 회귀 없음 +- [x] draft-batch-verification 문서에 evidence 기록 ## 비가역 결재 게이트 REQ-047 Step2(PK 전환) 실DB 적용은 사장님 결재 대상. 이 batch에서는 revision 코드 작성 + dev/test DB 검증까지만 수행. + +## Notes +- 머지 완료: PR #17, mergeCommit d4acfd4 (2026-06-28) +- QC: PASS-WITH-NOTES (opus, blocker 0) +- confirm-req-implemented: REQ-046/048/049/050/051 → Implemented. REQ-047은 Approved 유지. +- REQ-047 잔여: 실 운영 DB Step1/Step2 적용은 사장님 결재 게이트 대기. 적용 시 ensure_schema()·upsert ON CONFLICT를 (daemon_id, broker)로 갱신 필요. diff --git a/docs/srs/Data/req-046_broker-credential-daemon-id-field.md b/docs/srs/Data/req-046_broker-credential-daemon-id-field.md index d25244b..1e3b98e 100644 --- a/docs/srs/Data/req-046_broker-credential-daemon-id-field.md +++ b/docs/srs/Data/req-046_broker-credential-daemon-id-field.md @@ -1,6 +1,6 @@ # REQ-046: BrokerCredential 도메인 모델 daemon_id 필드 추가 -- Status: Approved +- Status: Implemented - Type: Data - Priority: High - Owner: Justin Ko @@ -86,3 +86,33 @@ - Date: 2026-06-28 - Author: 팀장(Claude) - confirm-req: `Proposed` → `Approved`. dcy-010 FR-1 추적 확인, AC testable, 하위호환(AC-4) 적절. REQ-047 선행 의존 명시됨. blocker 없음. + +### CHG-20260628-03 +- Date: 2026-06-28 +- Author: 팀장(Claude) + +#### Change Summary +- confirm-req-implemented: `Approved` → `Implemented`. PR #17 머지(mergeCommit d4acfd4), BAT-020, QC PASS-WITH-NOTES(blocker 0), 테스트 통과. + +#### Intent +- BAT-020 delivery(PR #17 머지)에서 AC-1~6 전 항목 구현 및 테스트 통과가 확인되어 Implemented로 전환한다. + +#### Acceptance Criteria Delta +- Added: 없음 +- Updated: 없음 +- Removed: 없음 + +#### Impacted Area Delta +- 없음 (상태 전환만) + +#### Delivery Trace Delta +- Batches: BAT-020 (PR #17, mergeCommit d4acfd4) +- Releases: 미정 + +#### Revalidation Impact +- Reverification Needed: no +- Existing Implementation Invalidated: no +- Status Recommendation: implemented + +#### Validation Plan +- BAT-020 verification 문서 및 QC PASS-WITH-NOTES 결과(blocker 0)로 AC-1~6 근거 확보됨. diff --git a/docs/srs/Interface/req-049_user-info-daemon-scoped-broker-delivery.md b/docs/srs/Interface/req-049_user-info-daemon-scoped-broker-delivery.md index d0608a9..51d1dd4 100644 --- a/docs/srs/Interface/req-049_user-info-daemon-scoped-broker-delivery.md +++ b/docs/srs/Interface/req-049_user-info-daemon-scoped-broker-delivery.md @@ -1,6 +1,6 @@ # REQ-049: GET /v1/user_info daemon-scoped 단일 broker 전달로 확장 -- Status: Approved +- Status: Implemented - Type: Interface - Priority: High - Owner: Justin Ko @@ -92,3 +92,33 @@ - Date: 2026-06-28 - Author: 팀장(Claude) - confirm-req: `Proposed` → `Approved`. dcy-010 FR-2/OQ-2/A-2/NFR-3 추적. brokers→단일 broker reshape, daemon_id 없음 403, 2데몬 격리(AC-4/5), graceful degrade(AC-2) 적절. 구현 전 trex-core 소비자 재확인 권고(Notes) 유효. blocker 없음. + +### CHG-20260628-03 +- Date: 2026-06-28 +- Author: 팀장(Claude) + +#### Change Summary +- confirm-req-implemented: `Approved` → `Implemented`. PR #17 머지(mergeCommit d4acfd4), BAT-020, QC PASS-WITH-NOTES(blocker 0), 테스트 통과. + +#### Intent +- BAT-020 delivery(PR #17 머지)에서 GET /v1/user_info daemon-scoped 단일 broker 전달 구현 및 AC-1~9 테스트 통과가 확인되어 Implemented로 전환한다. + +#### Acceptance Criteria Delta +- Added: 없음 +- Updated: 없음 +- Removed: 없음 + +#### Impacted Area Delta +- 없음 (상태 전환만) + +#### Delivery Trace Delta +- Batches: BAT-020 (PR #17, mergeCommit d4acfd4) +- Releases: 미정 + +#### Revalidation Impact +- Reverification Needed: no +- Existing Implementation Invalidated: no +- Status Recommendation: implemented + +#### Validation Plan +- BAT-020 verification 문서 및 QC PASS-WITH-NOTES 결과(blocker 0)로 AC-1~9 근거 확보됨. diff --git a/docs/srs/Interface/req-050_credential-cli-daemon-id-option.md b/docs/srs/Interface/req-050_credential-cli-daemon-id-option.md index df324df..75f314a 100644 --- a/docs/srs/Interface/req-050_credential-cli-daemon-id-option.md +++ b/docs/srs/Interface/req-050_credential-cli-daemon-id-option.md @@ -1,6 +1,6 @@ # REQ-050: credential CLI --daemon-id 옵션 추가 -- Status: Approved +- Status: Implemented - Type: Interface - Priority: High - Owner: Justin Ko @@ -88,3 +88,33 @@ - Date: 2026-06-28 - Author: 팀장(Claude) - confirm-req: `Proposed` → `Approved`. dcy-010 FR-3 추적. set/list/remove --daemon-id 적절. slug vs UUID 해석 + REQ-047 과도기(daemon_id nullable 구간) --daemon-id 필수/선택 정책은 batch design 위임 — AC 무효화 아님(비차단). + +### CHG-20260628-03 +- Date: 2026-06-28 +- Author: 팀장(Claude) + +#### Change Summary +- confirm-req-implemented: `Approved` → `Implemented`. PR #17 머지(mergeCommit d4acfd4), BAT-020, QC PASS-WITH-NOTES(blocker 0), 테스트 통과. + +#### Intent +- BAT-020 delivery(PR #17 머지)에서 credential CLI --daemon-id 옵션(set/list/remove) 구현 및 AC-1~7 테스트 통과가 확인되어 Implemented로 전환한다. + +#### Acceptance Criteria Delta +- Added: 없음 +- Updated: 없음 +- Removed: 없음 + +#### Impacted Area Delta +- 없음 (상태 전환만) + +#### Delivery Trace Delta +- Batches: BAT-020 (PR #17, mergeCommit d4acfd4) +- Releases: 미정 + +#### Revalidation Impact +- Reverification Needed: no +- Existing Implementation Invalidated: no +- Status Recommendation: implemented + +#### Validation Plan +- BAT-020 verification 문서 및 QC PASS-WITH-NOTES 결과(blocker 0)로 AC-1~7 근거 확보됨. diff --git a/docs/srs/Migration/req-047_broker-credentials-daemon-scoped-pk-migration.md b/docs/srs/Migration/req-047_broker-credentials-daemon-scoped-pk-migration.md index 50e8708..3e73700 100644 --- a/docs/srs/Migration/req-047_broker-credentials-daemon-scoped-pk-migration.md +++ b/docs/srs/Migration/req-047_broker-credentials-daemon-scoped-pk-migration.md @@ -93,3 +93,33 @@ - Date: 2026-06-28 - Author: 팀장(Claude) - confirm-req: `Proposed` → `Approved`. dcy-010 FR-1/R-1 추적. Step1/Step2 분리 + REQ-048 백필 사이 순서 정합. **Step2 PK 전환(실DB 적용)은 비가역 → 사장님 결재 게이트 대상**(Notes 명시 확인). blocker 없음. + +### CHG-20260628-03 +- Date: 2026-06-28 +- Author: 팀장(Claude) + +#### Change Summary +- BAT-020 PR #17 머지(mergeCommit d4acfd4) — Step1/Step2 마이그레이션 revision 코드가 포함됨. 그러나 **실 운영 DB 적용 및 실 PostgreSQL 통합검증이 비가역 사장님 결재 게이트로 미완** → Implemented 보류, `Approved` 상태 유지. + +#### Intent +- AC-3/4/5(Step2 적용 후 schema)는 real-DB evidence 대기 중. 결재·적용 시 동반수정 TODO: `ensure_schema()`·upsert ON CONFLICT를 (daemon_id, broker)로 갱신. Implemented 전환은 실 DB 적용 결재 이후 별도 수행. + +#### Acceptance Criteria Delta +- Added: 없음 +- Updated: 없음 +- Removed: 없음 + +#### Impacted Area Delta +- 없음 (상태 전환 보류 기록) + +#### Delivery Trace Delta +- Batches: BAT-020 (PR #17, mergeCommit d4acfd4) — revision 코드 머지됨 +- Releases: 미정 (Step2 실DB 적용은 사장님 결재 후) + +#### Revalidation Impact +- Reverification Needed: yes — Step2 실DB 적용 후 AC-3/4/5 re-evidence 필요 +- Existing Implementation Invalidated: no +- Status Recommendation: keep-approved (Implemented 보류) + +#### Validation Plan +- 사장님 결재 → Step1 실DB 적용 → REQ-048 백필 → Step2 실DB 적용 → AC-1~7 전건 real-DB evidence 확보 후 Implemented 전환. diff --git a/docs/srs/Migration/req-048_broker-credentials-daemon-id-backfill.md b/docs/srs/Migration/req-048_broker-credentials-daemon-id-backfill.md index a06193c..6cb1570 100644 --- a/docs/srs/Migration/req-048_broker-credentials-daemon-id-backfill.md +++ b/docs/srs/Migration/req-048_broker-credentials-daemon-id-backfill.md @@ -1,6 +1,6 @@ # REQ-048: 기존 user-scoped 인증정보 daemon_id 백필 -- Status: Approved +- Status: Implemented - Type: Migration - Priority: High - Owner: Justin Ko @@ -89,3 +89,33 @@ - Date: 2026-06-28 - Author: 팀장(Claude) - confirm-req: `Proposed` → `Approved`. dcy-010 FR-4 추적. dry-run/verify·암호화 payload 불변(AC-4) 적절. 구현방식(CLI subcommand vs alembic data revision)은 batch design 위임 — AC 무효화 아님(비차단). + +### CHG-20260628-03 +- Date: 2026-06-28 +- Author: 팀장(Claude) + +#### Change Summary +- confirm-req-implemented: `Approved` → `Implemented`. PR #17 머지(mergeCommit d4acfd4), BAT-020, QC PASS-WITH-NOTES(blocker 0), 테스트 통과. + +#### Intent +- BAT-020 delivery(PR #17 머지)에서 백필 CLI(backfill-daemon-id) 구현 및 AC-1~7 테스트 통과가 확인되어 Implemented로 전환한다. + +#### Acceptance Criteria Delta +- Added: 없음 +- Updated: 없음 +- Removed: 없음 + +#### Impacted Area Delta +- 없음 (상태 전환만) + +#### Delivery Trace Delta +- Batches: BAT-020 (PR #17, mergeCommit d4acfd4) +- Releases: 미정 + +#### Revalidation Impact +- Reverification Needed: no +- Existing Implementation Invalidated: no +- Status Recommendation: implemented + +#### Validation Plan +- BAT-020 verification 문서 및 QC PASS-WITH-NOTES 결과(blocker 0)로 AC-1~7 근거 확보됨. diff --git a/docs/srs/Non-Functional/req-051_broker-credential-security-isolation.md b/docs/srs/Non-Functional/req-051_broker-credential-security-isolation.md index b9d6e60..7c72e4b 100644 --- a/docs/srs/Non-Functional/req-051_broker-credential-security-isolation.md +++ b/docs/srs/Non-Functional/req-051_broker-credential-security-isolation.md @@ -1,6 +1,6 @@ # REQ-051: 브로커 인증정보 보안 격리 — service-token 전용·web 토큰 차단 -- Status: Approved +- Status: Implemented - Type: Non-Functional - Priority: High - Owner: Justin Ko @@ -94,3 +94,33 @@ - Date: 2026-06-28 - Author: 팀장(Claude) - confirm-req: `Proposed` → `Approved`. dcy-010 NFR-1/2/3 흡수 적절(동일 엔드포인트 보안속성). service-token 전용·web 토큰 차단·타 엔드포인트 credential 미노출(AC-5)·로그 비노출(AC-8)·degrade(AC-6/7) testable. REQ-049와 동일 batch 권고. blocker 없음. + +### CHG-20260628-03 +- Date: 2026-06-28 +- Author: 팀장(Claude) + +#### Change Summary +- confirm-req-implemented: `Approved` → `Implemented`. PR #17 머지(mergeCommit d4acfd4), BAT-020, QC PASS-WITH-NOTES(blocker 0), 테스트 통과. + +#### Intent +- BAT-020 delivery(PR #17 머지)에서 보안 격리(service-token 전용, web 토큰 차단, 타 엔드포인트 credential 미노출, graceful degrade) 구현 및 AC-1~8 테스트 통과가 확인되어 Implemented로 전환한다. + +#### Acceptance Criteria Delta +- Added: 없음 +- Updated: 없음 +- Removed: 없음 + +#### Impacted Area Delta +- 없음 (상태 전환만) + +#### Delivery Trace Delta +- Batches: BAT-020 (PR #17, mergeCommit d4acfd4) +- Releases: 미정 + +#### Revalidation Impact +- Reverification Needed: no +- Existing Implementation Invalidated: no +- Status Recommendation: implemented + +#### Validation Plan +- BAT-020 verification 문서 및 QC PASS-WITH-NOTES 결과(blocker 0)로 AC-1~8 근거 확보됨. diff --git a/docs/srs/index.md b/docs/srs/index.md index 0e247fd..39e6a7a 100644 --- a/docs/srs/index.md +++ b/docs/srs/index.md @@ -126,19 +126,17 @@ | REQ-043 | GET /v1/portfolios/{id}/holdings/cost-basis 현재 보유 평단(WAC) read 엔드포인트 신설 | Interface | Implemented | High | Justin Ko | [req-043](./Interface/req-043_holdings-cost-basis-read-endpoint.md) | | REQ-044 | GET /v1/assets 권한 완화 — require_admin → require_read | Interface | Implemented | High | Justin Ko | [req-044](./Interface/req-044_get-v1-assets-require-read-relaxation.md) | | REQ-045 | 사용자 가용 데몬 목록 read 엔드포인트 신설 | Interface | Implemented | High | Justin Ko | [req-045](./Interface/req-045_user-daemon-list-endpoint.md) | -| REQ-046 | BrokerCredential 도메인 모델 daemon_id 필드 추가 | Data | Approved | High | Justin Ko | [req-046](./Data/req-046_broker-credential-daemon-id-field.md) | +| REQ-046 | BrokerCredential 도메인 모델 daemon_id 필드 추가 | Data | Implemented | High | Justin Ko | [req-046](./Data/req-046_broker-credential-daemon-id-field.md) | | REQ-047 | broker_credentials 테이블 daemon-scoped PK 전환 마이그레이션 | Migration | Approved | High | Justin Ko | [req-047](./Migration/req-047_broker-credentials-daemon-scoped-pk-migration.md) | -| REQ-048 | 기존 user-scoped 인증정보 daemon_id 백필 | Migration | Approved | High | Justin Ko | [req-048](./Migration/req-048_broker-credentials-daemon-id-backfill.md) | -| REQ-049 | GET /v1/user_info daemon-scoped 단일 broker 전달로 확장 | Interface | Approved | High | Justin Ko | [req-049](./Interface/req-049_user-info-daemon-scoped-broker-delivery.md) | -| REQ-050 | credential CLI --daemon-id 옵션 추가 | Interface | Approved | High | Justin Ko | [req-050](./Interface/req-050_credential-cli-daemon-id-option.md) | -| REQ-051 | 브로커 인증정보 보안 격리 — service-token 전용·web 토큰 차단 | Non-Functional | Approved | High | Justin Ko | [req-051](./Non-Functional/req-051_broker-credential-security-isolation.md) | +| REQ-048 | 기존 user-scoped 인증정보 daemon_id 백필 | Migration | Implemented | High | Justin Ko | [req-048](./Migration/req-048_broker-credentials-daemon-id-backfill.md) | +| REQ-049 | GET /v1/user_info daemon-scoped 단일 broker 전달로 확장 | Interface | Implemented | High | Justin Ko | [req-049](./Interface/req-049_user-info-daemon-scoped-broker-delivery.md) | +| REQ-050 | credential CLI --daemon-id 옵션 추가 | Interface | Implemented | High | Justin Ko | [req-050](./Interface/req-050_credential-cli-daemon-id-option.md) | +| REQ-051 | 브로커 인증정보 보안 격리 — service-token 전용·web 토큰 차단 | Non-Functional | Implemented | High | Justin Ko | [req-051](./Non-Functional/req-051_broker-credential-security-isolation.md) | ## Recent Change Log Summary +- 2026-06-28: REQ-046/048/049/050/051 `Approved` → `Implemented` (confirm-req-implemented) — BAT-020 PR #17 머지(d4acfd4), QC PASS-WITH-NOTES(blocker 0), 테스트 통과. REQ-047은 실 운영 DB 적용·실 PostgreSQL 통합검증이 비가역 사장님 결재 게이트 미완 → Approved 유지. AC-3/4/5(Step2 적용 후 schema) real-DB evidence 대기. 결재·적용 시 TODO: ensure_schema()·upsert ON CONFLICT를 (daemon_id,broker)로 갱신. - 2026-06-28: REQ-046~051 `Proposed` → `Approved` (confirm-req 팀장 승인) — dcy-010 daemon-scoped broker credential. 전건 dcy-010 FR/NFR 추적·AC testable·blocker 0 확인. 단계적 마이그레이션(REQ-047 Step1/2)·**REQ-047 Step2 PK 전환은 비가역 결재 게이트**·2데몬 격리(REQ-049 AC-4/5)·보안 격리(REQ-051) 반영. 비차단 design 위임 2건(REQ-048 구현방식, REQ-050 slug/UUID·과도기 정책). -- 2026-06-28: REQ-046~051 신규 (Proposed) — dcy-010 confirmed Discovery(daemon-scoped broker credential provisioning) draft-req. REQ-046(Data: 도메인 모델 daemon_id 필드), REQ-047(Migration: PK 전환 Step1/2), REQ-048(Migration: daemon_id 백필 CLI), REQ-049(Interface: GET /v1/user_info daemon-scoped 단일 broker 전달), REQ-050(Interface: credential CLI --daemon-id 옵션), REQ-051(Non-Functional: 보안 격리). - 2026-06-27: REQ-025 name 검증 완화(CHG-20260627-03) — `_PORTFOLIO_NAME_RE` 한글(가-힣)+공백 허용(`^[a-zA-Z0-9가-힣 ._:\-]{1,100}$`). minor-change. 기존 AC 유지, 테스트 3개 추가. - 2026-06-27: REQ-044/045 `Approved` → `Implemented` — BAT-019 PR #16 main 머지(`7f15c6b`) QC PASS. 472 passed/0 failed. REQ-045 env토큰(user_id=None) 처리 Notes 정정: "HTTP 403" → "빈 목록 [] HTTP 200"(change-req CHG-20260627-02). - 2026-06-27: REQ-044/045 신규 (Proposed) — dcy-009 FR-1(GET /v1/assets require_read 완화)·FR-2(사용자 가용 데몬 목록 엔드포인트 신설) REQ 초안 작성. 엔드포인트 경로·스키마(OQ-2) 및 가용 데몬 의미(OQ-3)는 design Deferred. -- 2026-06-26: REQ-041 WAC 공식 change-req(CHG-20260626-01) — 매수 수수료 cost basis 편입(사장님 결정). 신 공식: `running_wac = (running_wac*qty + price*qty + buy_fee) / new_total_qty`. `calculate_realized_pnl`과 `calculate_current_wac` 양 함수 적용. AC-9/AC-10 추가. 신규 테스트 9개 포함 456 passed / 0 failed. REQ-040/REQ-043 Notes 참조 갱신. -- 2026-06-25: REQ-043 `Proposed` → `Approved` (confirm-req 팀장 승인) — dcy-008 근거 Discovery 양방향 링크 확정. OQ-1(service token 소유권 blocker) 해소: cold-start는 `managed_by_daemon_id=daemon` 포트폴리오만 조회하므로 null 케이스 blocker 아님, daemon scope 소유권 정책(REQ-029 선례) 유지 확정. OQ-2(domain 함수) 구현 단계 재량 위임. AC-1~11 유지.