feat(core-B): 운영자 sync/verify CLI + cold-start onboarding (BAT-051, REQ-105/106, PR #32)
dcy-034 마지막 조각. sync(슬롯 qty←브로커+warning해제+OQ-A 전이엣지+FR-7 평단seed)/verify(C 재대조·강제해제없음). core-A QC minor 2건 정리 동봉. QC(opus) PASS, 683 passed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
This commit is contained in:
@@ -47,3 +47,20 @@ class IntentRecord:
|
||||
status: str
|
||||
slot_id: Optional[UUID]
|
||||
reason: Optional[str]
|
||||
|
||||
|
||||
class PortfolioHubCostBasisPort(Protocol):
|
||||
"""FR-7 (dcy-034 / REQ-105): portfolio-hub WAC (weighted average cost) read port.
|
||||
|
||||
Wraps `GET /v1/portfolios/{id}/holdings/cost-basis` from portfolio-hub REQ-043.
|
||||
When unavailable or when the portfolio has no holding, implementations return None.
|
||||
sync() degrades gracefully: None => skip avg_price seed + WARN log.
|
||||
"""
|
||||
|
||||
def get_cost_basis(self, portfolio_id: str) -> Optional[float]:
|
||||
"""Return the weighted average cost (WAC) for the portfolio's current holding.
|
||||
|
||||
Returns None when the portfolio has no holding, the endpoint is unavailable,
|
||||
or any error occurs. The caller must handle None as a graceful-degrade signal.
|
||||
"""
|
||||
...
|
||||
|
||||
Reference in New Issue
Block a user