batch drift 정합 — REL-001(BAT-001~016)·REL-002(BAT-017) released에 맞춰 batches/index 및 개별 index 상태를 release-candidate→released 동기화(17건). README: bootstrap 문구 제거, dcy-007 엔드포인트(GET /trades·/pnl/realized) 추가, planned-next 현행화. 코드 무변경. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
2.2 KiB
2.2 KiB
BAT-014: PortfolioItem symbol 응답 계약 보강 (REQ-025, REQ-026, REQ-027, REQ-028, REQ-032)
- Status: released
- Profile: batch-lite
- Source Discovery: dcy-003
- Included REQ: REQ-025, REQ-026, REQ-027, REQ-028, REQ-032
- Excluded REQ: REQ-029, REQ-030, REQ-031
Summary
- trex-orbit 팀 이슈(
docs/issues/20260524_portfolio-hub-ticket-symbol-in-portfolios.md) 후속으로,PortfolioItem기반 v1 portfolio 응답 계약에symbol필드를 추가한다. - 특히
GET /v1/portfolios는 클라이언트 캐시 복원이 아니라portfolios JOIN assets결과를 그대로 응답해야 하며,symbol은 linked asset row의assets.symbol이어야 한다. - POST/PATCH/DELETE
/v1/portfolios응답도 동일한PortfolioItemcontract를 따르도록 정합성을 맞추고, baseline 문서(docs/interface-contract.md)에 이를 반영한다.
Scope
- In Scope:
app/schemas/v1.py—PortfolioItem.symbol: str | None = None추가app/api/v1_portfolios.py—_portfolio_to_item()에symbol=portfolio.symbol반영app/repositories/postgres.py— GET/list/create/update/delete 응답이 asset join 결과를 유지하는지 검증tests/test_v1_portfolios_list.py— GET/v1/portfolios응답symbol검증 추가tests/test_v1_portfolios_crud.py— POST/PATCH/DELETE 응답symbol검증 추가docs/interface-contract.md—PortfolioItem응답 예시/설명에symbol및 GET join 기반 응답 설명 추가
- Out of Scope:
- portfolio write semantics 변경 (ownership, soft delete, disabled 보호 정책 자체는 불변)
/v1/portfolios/{id}/ledger/trades,/tags,/comments계약 변경- assets catalog schema 또는 DB migration
Documents
- Planning: planning.md
Notes
- profile 선정 근거: follow-up change는 기존 Implemented REQ의 응답 contract augmentation이며 범위가 좁고 additive 성격이 강해
batch-lite로 시작한다. - 다만
docs/interface-contract.md갱신은 필수이므로 문서 정합성까지 한 배치에서 닫는다. - BAT-009 / BAT-010 verification evidence는 본 batch 완료 후 superseded 표기가 필요할 수 있다.