Files
trex-core/.proofline/criteria/ac-0003.md
T

2.5 KiB

id, status
id status
ac-0003 active

후속 페이지 보유종목의 reconciliation 정합성

Criterion

KIS 잔고조회 후속 페이지에만 존재하는 양수 보유종목도 완전한 broker snapshot에 포함되어야 한다. 해당 종목의 portfolio-hub 수량과 holding 슬롯 수량이 broker 수량과 일치하면 reconcile_positions()는 case_code=C 경고를 만들지 않아야 하고 reconcile_core_holdings()는 broker flat으로 판단하거나 슬롯을 error로 전환하지 않아야 한다. 반대로 첫 페이지 성공 후 후속 페이지가 실패하면 두 소비자는 누적된 첫 페이지 수량으로 어떤 broker-derived decision도 만들지 않고 BrokerBalanceError를 전파해야 하며, B/C warning 생성·해제, broker-flat error 전이, unmanaged/managed-non-holding 분류 또는 slot/warning write가 발생해서는 안 된다. 성공과 실패 결과는 두 소비 경로에서 각각 독립적으로 충족해야 한다.

Verification

  • 성공 조건: 첫 페이지에는 없고 후속 페이지에만 있는 종목을 가진 synthetic KIS 응답과 그 수량에 일치하는 SnapshotStore 및 holding 슬롯을 구성했을 때 reconcile_positions() 결과가 정상이고 durable C warning이 없으며, 별도 독립 실행한 reconcile_core_holdings() 결과가 ok이고 슬롯이 holding을 유지해야 한다.
  • 실패 조건: 첫 페이지에 일부 보유수량이 있고 후속 페이지에서 HTTP, KIS 또는 pagination-contract 오류가 발생하는 fixture를 두 소비자에 각각 연결했을 때 BrokerBalanceError가 전파되고, 첫 페이지 수량을 사용한 decision map이나 warning/slot persistence side effect가 없어야 한다. 특히 case_code=B/C, warning set/clear, broker-flat error, unmanaged_position, managed_non_holding_divergence가 생성되지 않아야 한다.
  • 정책 보존 조건: 성공 fixture에서 후속 페이지 종목을 의도적으로 제거한 대조 조건은 기존 소비자 정책대로 불일치 또는 broker-flat 경로를 검출해야 하며, 이 Line이 warning 분류나 상태 전이 정책 자체를 완화해서 통과해서는 안 된다.
  • 검사 방법: adapter의 다중 페이지 결과와 중간 페이지 실패를 application reconciliation fixture에 연결한 repository-local 통합 테스트를 두 소비자별로 독립 실행하고 exception, decision map, warning store, slot write 기록 및 최종 슬롯 상태를 단언한다.