docs(dcy-010): confirm-req-implemented — REQ-046/048/049/050/051 Implemented, REQ-047 Approved 유지(Step2 결재대기), BAT-020 release-candidate

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
This commit is contained in:
2026-06-28 07:49:17 +09:00
co-authored by Claude Opus 4.8
parent d4acfd4a12
commit 7e3b34287f
8 changed files with 202 additions and 18 deletions
@@ -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)로 갱신 필요.
@@ -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 근거 확보됨.
@@ -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 근거 확보됨.
@@ -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 근거 확보됨.
@@ -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 전환.
@@ -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 근거 확보됨.
@@ -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 근거 확보됨.
+6 -8
View File
@@ -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 유지.