Files
trex-core/.proofline/lines/line-0009/req-0009.md
T

5.6 KiB

id, status, discovery, criteria
id status discovery criteria
req-0009 approved dcy-0009
create update retire satisfy
ac-0026
ac-0027
ac-0028

Persistent strategy-instance state lifecycle and identity

Objective

trex-core의 opaque strategy state를 slot occupancy lifecycle과 strategy_id namespace에서 분리한다. 상태를 슬롯별 strategy_instance_id entry로 영속화하여 close와 재점유 뒤에도 같은 instance가 기존 state와 version을 이어 쓰게 하고, 서로 다른 instance의 state와 CAS를 격리한다. 전략용 slots.req에는 요청한 instance의 state 하나만 제공하고 operator spy=true 조회에는 슬롯의 전체 instance map을 제공하되, 각 경로의 identity 검증·watchdog·가시성 계약을 명확히 유지한다.

Scope

  • 어떤 경로로 slot이 INACTIVE가 되어도 일반 lifecycle hook이 해당 슬롯의 strategy-state map이나 entry를 자동 삭제하지 않으며, inactive 및 재점유 뒤에도 state와 version을 보존한다.
  • Strategy-state persistence, application model, store protocol, read filtering, write RPC와 CAS에서 occupancy_seq 및 expected_occupancy_seq를 제거한다. Slot 자체의 occupancy_seq와 증가 규칙은 유지한다.
  • 슬롯별 strategy-state를 data[strategy_instance_id] = {version, data, updated_at} 형태의 map으로 저장한다. Entry에는 strategy_id를 중복 저장하지 않으며 inner data만 core가 해석하지 않는 opaque string이다.
  • strategy_state.set 입력을 {slot_id, strategy_instance_id, expected_version, data}로 정의한다. 해당 instance entry의 version만 CAS하고, 서로 다른 instance의 성공한 동시 write를 모두 보존한다.
  • spy=false 전략용 slots.req는 required non-empty string strategy_instance_id를 받고, 각 slot에서 요청 ID와 정확히 일치하는 entry 하나만 strategy_state: {version, data, updated_at}로 반환한다. 해당 entry가 없으면 strategy_state를 생략한다.
  • 누락·비문자열·빈 strategy_instance_id를 받은 전략용 slots.req는 기존 response envelope에서 slots=[], available_slots=null, degraded=false, reason="bad_request:strategy_instance_id", message="strategy_instance_id must be a non-empty string"을 반환한다. 같은 malformed ID의 state write는 저장 없이 non-retryable bad_request로 거부한다.
  • spy=true operator slots.req는 strategy_instance_id를 요구하지 않고 기존 filter·slot 조회와 watchdog 비갱신 동작을 유지한다. 각 slot row에는 전체 strategy-state map을 strategy_instance_id별 entry로 반환하며, 요청에 ID가 있어도 특정 entry로 제한하지 않는다.
  • Persistence와 RPC 변경을 InMemory/PostgreSQL parity, production daemon wiring 및 repository-local automated tests로 검증한다.

Constraints

  • State write는 active slot 검사, inner opaque data size limit 및 해당 entry의 expected_version CAS를 모두 통과해야 한다. Entry가 없을 때만 expected_version=0이며 성공할 때 해당 entry의 version만 1 증가한다.
  • version_conflict는 write를 적용하지 않으며 다른 entry를 변경하지 않는다. Consumer는 추정 version으로 재전송하지 않고 다음 slots.req에서 자기 state를 다시 읽어 재계산한다.
  • occupancy_changed는 strategy-state reject reason에서 제거한다. slot_inactive, state_too_large, bad_request:*는 write를 적용하지 않고 RPC correlation_id를 저장 멱등성 key로 사용하지 않는다.
  • Core는 opaque state의 session 의미, 만료, 초기화 또는 merge를 판단하지 않으며 core-side strategy-instance registry, instance_key ↔ strategy_instance_id 목록 및 caller 인증을 도입하지 않는다.
  • 기존 state에 대한 strategy_id → strategy_instance_id mapping, backfill 또는 instance 귀속 정책을 도입하지 않고 신규 persistence contract를 그대로 적용한다.
  • 같은 strategy_instance_id는 재시작 뒤에도 같은 논리적 전략 instance가 사용하는 안정적 identity다. Consumer 통합은 각 consumer repository가 소유하며 required non-empty string 설정, startup fail-closed, 불변 사용 및 요청별 override 금지를 전제한다.
  • AC-0023의 reconciliation warning 판정·slot 제외·intent blocking·clear 권한과 AC-0022의 strategy-facing broker quantity 계약을 변경하지 않는다.
  • Legacy Discovery와 REQ는 업데이트하지 않는다. 새 AC 승인 뒤 현재 docs/runtime-flows.md와 docs/interface-contract.md의 strategy-state baseline 문구만 approved change에 맞게 정합화한다.
  • Normative Design Documents: 없음. 이 REQ와 AC-0026~AC-0028이 이번 specification의 normative behavior를 소유한다.

Non-Goals

  • profit_buffer, portfolio 공통 모델, slot occupancy state machine 또는 Slot 자체의 occupancy_seq와 증가 규칙 변경
  • TVR-v2 reserve·cost basis·processed execution, TSL peak/session 또는 다른 전략의 opaque data schema 정의
  • Core가 strategy state의 session 만료·occupancy 귀속·초기화 여부를 판단하는 기능
  • Core-side instance registry, strategy 목록 저장, caller 인증, AMQP producer 권한 또는 queue topology 변경
  • 별도 operator/diagnostic strategy-state API 신설
  • Strategy-state history, audit/event store, exactly-once write 또는 multi-writer merge
  • Strategy consumer repository의 구현·배포 및 production rollout
  • 기존 파괴적 전체 DB reset 제거 또는 변경
  • Legacy Discovery·REQ 및 AC-0023~AC-0025의 lifecycle·본문 변경