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

2.9 KiB

id, status
id status
ac-0031 active

Broker balance failure lifecycle observability and worker-isolated retry

Criterion

trex-core는 broker balance snapshot을 사용하는 worker(execution, position_reconciliation, core_holding_reconciliation)별로 독립 상태를 유지해야 한다. 상태는 최소 state(ok|unavailable|stale), last_success_at, consecutive_failures, sanitized failure_code, next_retry_at를 포함해야 하며, 한 worker의 성공/실패가 다른 worker의 상태를 덮어쓰면 안 된다.

balance read failure는 timeout, http_5xx, transport_failed, authentication_failed, token_issuance_failed(credential failure), authorization_failed, malformed_response, broker_rejected, ownership_mismatch를 구분해야 하며, validated empty success([])는 failure로 취급하면 안 된다. live read transient failure 뒤 snapshot fallback이 stale/expired여도 downstream 상태에는 transient failure 분류가 보존되어야 한다.

daily snapshot cadence와 balance-worker retry cadence는 분리되어야 한다. daily refresh가 이미 수행된 날짜에도 failure worker는 next_retry_at 이후에만 재시도되어야 하며(backoff 중 broker read 금지), 성공 시 lifecycle recovery와 정상 cadence로 자동 복귀해야 한다. fail-closed 경계는 유지되어 unavailable/stale snapshot에서 신규 주문/경고 해제 경로가 정상 snapshot으로 해석되어서는 안 된다.

health tracker의 상태는 process-local로 유지되며 daemon restart 시 초기화된다. restart 이후 첫 failure는 새 lifecycle detected로 다시 기록되어야 한다.

operator-visible status surface는 instance+worker별 상태를 노출해야 하며 account/token/credential/raw broker payload/예외 원문을 포함해서는 안 된다.

Verification

  • worker isolation: execution/position/core-holding 중 하나만 실패시켜도 다른 worker의 상태가 변경되지 않음을 검증한다.
  • retry cadence: production scheduler path(run_forever/_maybe_tick)에서 daily refresh 여부와 무관하게 due worker만 backoff deadline 이후 재시도되는지 검증한다.
  • backoff/lifecycle: 장기 outage에서 backoff가 cap에 고정되고, detected/ongoing/recovered lifecycle이 중복 경고 없이 전이되는지 검증한다.
  • classification/fail-closed: empty success, timeout, HTTP 5xx, auth/credential(authentication_failed, token_issuance_failed), malformed, pagination-middle failure를 구분하고 각 worker의 fail-closed 결과와 health state를 검증한다.
  • restart semantics: daemon restart(새 tracker 인스턴스) 후 이전 health/backoff가 초기화되고 첫 failure가 detected로 재발행되는지 검증한다.
  • sanitization/visibility: operator status 응답에 instance+worker 상태 필드는 노출되지만 민감정보/원시 payload/예외 문자열은 노출되지 않음을 검증한다.