Files

2.1 KiB

id, status
id status
ac-0038 active

SELL event owner 보존과 lifecycle 일관성

Criterion

SELL admission은 non-empty SellIntent.sell_strategy_id, slot에 보존된 non-empty sell_strategy_id, non-empty strategy_id 순서로 event owner를 확정하여 durable sell_strategy_id에 저장해야 한다. Full fill과 partial fill 후 external cancel은 terminal 처리 직전의 이 canonical field를 routing hint로 캡처하여, 이후 INACTIVE 전이가 ownership field를 지우더라도 같은 owner를 사용해야 한다. Dispatch 전 daemon 재시작·재조회 후에도 owner가 같아야 한다. Zero-fill cancel/reject는 fill event 없이 HOLDING으로 rollback하면서 owner를 보존하고, 이후 명시적 새 owner가 없는 SELL admission은 보존 owner를 재사용하며 명시적 새 owner만 이를 교체해야 한다. Whitespace-only 값은 owner로 인정하지 않는다.

Verification

  • 성공 조건: BUY owner A와 명시적 SELL owner B가 다른 주문의 full fill 및 partial fill 후 external cancel event가 모두 slot_filled_sell.B.<symbol>로 발행된다. 별도 SELL owner가 없는 safety/kill-switch sell은 보존된 SELL owner가 있으면 이를, 없으면 A를 사용한다. Zero-fill cancel 뒤 owner B가 HOLDING에 남고, owner를 생략한 재매도가 B를 사용하며, admission 뒤 durable row를 새 service/repository instance에서 다시 읽어 처리해도 owner가 같다.
  • 실패·경계 조건: fill 뒤 clear된 field에서 owner를 재추측하거나, sell_strategy_id=B인데 strategy_id=A로 route하거나, zero-fill cancel/reject가 fill event를 만들거나 owner를 지우거나, owner 생략 재매도가 보존된 sell_strategy_id를 무시하면 FAIL이다. 공백 문자열은 owner로 인정하지 않는다.
  • 검사 방법: IntentService admission과 ExecutionService 단위·통합 테스트로 owner 우선순위, full/partial/zero-fill, safety sell, cancel→재매도, repository reload/restart simulation을 검증하고 disposable PostgreSQL 경로에서 sell_strategy_id 영속 round-trip을 확인한다.