dcy-003/004 기반 v1 API surface 완성 및 BAT-008~011 구현·검증 완료:
- BAT-008 (REQ-019~021,024): 토큰 surface baseline 문서 갱신
- BAT-009 (REQ-025~028): POST/PATCH/DELETE/GET /v1/portfolios CRUD 신설
- _require_write_token, _get_portfolio_or_404, soft delete, daemon-scoped list
- BAT-010 (REQ-030~032): portfolio tag/comment 서브 라우트 신설 + baseline 갱신
- GET/POST/DELETE /v1/portfolios/{id}/tags
- POST/GET/PATCH/DELETE /v1/portfolios/{id}/comments
- BAT-011 (REQ-029): ledger path migration
- POST /v1/assets/{asset_id}/ledger/trades → /v1/portfolios/{portfolio_id}/ledger/trades
- v1_ledger.py 제거, disabled 차단(409) 추가
- test_v1.py / test_daemon_assignment.py 구 path 갱신
- 신규 tests: test_v1_portfolios_crud.py, test_v1_portfolios_list.py,
test_v1_portfolios_tags_comments.py, test_v1_portfolios_ledger.py
- 전체 suite: 340 passed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
BAT-008 Design
- Status: confirmed
- Batch: BAT-008
Architecture Summary
- 코드 변경 없이 baseline 4종 문서(
docs/interface-contract.md,docs/runtime-flows.md,docs/data-model.md,docs/project-structure.md)를 편집한다. - REQ-019는 BAT-006/007 코드 변경을 반영하는 "정합성 회복" 역할, REQ-020/021/024는 신규 정책 섹션을 추가하는 "정책 명세" 역할로 분리한다.
Changed Areas
- Docs:
docs/data-model.md— auth_tokens 인덱스 조건 갱신, client token 제거docs/interface-contract.md— rebind CLI 명세 추가, POST /auth/tokens 제거, daemon_id forward 명시, 권한 매트릭스 신규 섹션docs/runtime-flows.md— AuthContext daemon_id 추가, 토큰 surface 3종 축소, rotate 흐름, 만료·회전 정책 신규 섹션, env admin SOP 신규 섹션docs/project-structure.md— migrate-null-daemon CLI 서브커맨드, revoke_tokens_by_daemon_id 추가 반영 (필요 시)
- Modules: 없음 (코드 변경 없음)
- Interfaces: 없음
Key Decisions
-
파일별 REQ 담당 분리 (충돌 방지)
docs/data-model.md: REQ-019 단독 담당 (인덱스 변경, client 타입 제거)docs/interface-contract.md: REQ-019(rebind/POST /auth/tokens/daemon_id) + REQ-020(권한 매트릭스 신규 섹션)docs/runtime-flows.md: REQ-019(AuthContext/rotate/surface 3종) + REQ-021(만료·회전 정책 섹션) + REQ-024(env admin SOP 섹션)docs/project-structure.md: REQ-019(선택 — CLI/메서드 추가 반영)
-
권한 매트릭스 구조 (REQ-020)
- 차원: token type(session/service/env) × 동사(issue/rotate/rebind/revoke/list) × 발급자 권한(admin/trade-write/read)
- client token 제외 (REQ-016 폐지 반영)
- admin 자기 발급 허용 + 최소 권한 권장 주석 포함 (dcy-004 OQ-4)
- 매트릭스 위반 → HTTP 403 fail-closed (dcy-004 NFR-4)
-
만료·회전 정책 섹션 위치 (REQ-021)
docs/runtime-flows.md에 "토큰 만료·회전 정책" 섹션 신규 추가- type별 TTL: session=settings.session_token_ttl_hours, service=365일 default, env=만료 없음
- no_expiry 허용 범위: service 한정, session 거부 시 ValueError/HTTP 422
-
env admin SOP 위치 (REQ-024)
docs/runtime-flows.md에 "env admin token 운영 SOP" 섹션 추가 (README.md 링크 선택)- 7단계 회전 절차 + rollback + token 강도 가이드 + 권장 회전 주기(분기)
-
POST /auth/tokens 처리 방식 (REQ-019 AC-2)
- 명세 항목 완전 제거 (또는 "Deprecated: REQ-016에서 폐지" 표시로 잔존)
- 구현 편의상 "Deprecated" 주석 표시 후 섹션 삭제하는 방식으로 진행
-
project-structure.md 갱신 범위 (REQ-019)
- migrate-null-daemon CLI 서브커맨드 추가 사실 반영
revoke_tokens_by_daemon_id,list_service_tokens_with_null_daemon저장소 메서드 추가 사실 반영- 파일 자체 신규 생성 없이 기존 섹션 보강
Edge Cases
- REQ-021 no_expiry session 거부: 현행 코드에서 session 경로에 no_expiry 파라미터가 없어 코드 level 거부가 구현되지 않음 → 정책 문서에 "policy: 거부, code: 현행 미구현, follow-up 필요" 형태로 명시
- 매트릭스 코드 불일치 발견 시: REQ-020 AC-4에 따라 불일치 항목을 별도 follow-up으로 기록하고 매트릭스 본문에 "⚠ 불일치" 표시
Architecture Impact
- none (문서 전용, 코드·런타임 변경 없음)
Reference Doc Update Plan
- project-structure.md: CLI 서브커맨드·저장소 메서드 추가 사실 반영 (소규모 갱신)
- runtime-flows.md: 신규 정책 섹션 2개 추가 + AuthContext 갱신 + rotate 흐름 보강