의사결정 재실행이란?
의사결정 재실행(Decision Replay)은 trace ID로 특정한 실제 과거 실행을 가져와, 당시의 입력 팩트 그대로 후보 버전에 재평가합니다. 저장된 결정이 기준(baseline)이며 절대 재평가하지 않습니다. 후보만 실행되고, 웹훅·알림·이벤트 같은 외부 효과는 전부 mock으로 차단되므로 무엇도 두 번 발화하지 않습니다. 결과는 결정 diff입니다. 결정이 바뀌었는지, 양쪽에서 어떤 룰이 발화했는지, 결과 효과가 어떻게 달라지는지를 담습니다.드라이런 vs 변경 영향 시뮬레이션 vs 의사결정 재실행: 드라이런은 직접 입력한 팩트를 평가합니다. 변경 영향 시뮬레이션은 데이터셋이나 실행 이력 구간을 대량으로 돌려 집계 통계를 냅니다. 의사결정 재실행은 셋 중 가장 구체적인 질문에 답합니다. 바로 이 프로덕션 결정이 새 버전에서는 어떻게 나왔을까?
언제 사용하나
- 수정 배포 전: 지난 화요일 어느 고객의 가격이 잘못 매겨졌습니다. 그 trace를 수정된 버전으로 재실행해서 이번에는 결정이 옳게 나오는지 확인합니다.
- 사고 분석: 의사결정 출처(Decision Provenance)로 결정이 왜 그렇게 났는지 먼저 파악하고, 재실행으로 수정을 검증합니다.
- 롤아웃 전 블라스트 반경(blast radius) 측정: 날짜 구간 전체를 후보 버전으로 재실행해서 과거 결정 중 몇 건이 바뀌는지 셉니다.
두 가지 모드
단건 결정 재실행
콘솔
콘솔에서 의사결정 재실행을 열고, 과거 실행과 후보 버전을 선택해 실행합니다. diff 화면이 발화 룰과 효과 변화를 나란히 보여줍니다.CLI
API
응답
decisionChanged입니다. baselineFired와 candidateFired는 양쪽에서 발화한 룰 목록이고, effectChanges는 결과 효과의 차이를 담습니다. determinism은 후보 버전 자체의 속성으로, 동일한 입력에 항상 동일한 결정이 보장되는지를 나타냅니다.
trace를 원래 실행됐던 버전 그대로 재실행하면 반드시
decisionChanged: false가 나와야 합니다. 그렇지 않다면 그 버전은 비결정적이며, 그 버전이 만든 diff를 신뢰하기 전에 알아야 할 사실입니다.윈도우 재실행: 블라스트 반경
윈도우 재실행은 날짜 구간의 모든 실행을 후보 버전으로 재평가해서, 결정이 몇 건 바뀌는지 측정합니다.제출
폴링
RUNNING인 동안 progress가 100까지 올라갑니다. COMPLETED가 되면 응답에 결정이 몇 건 바뀌었는지의 summary와 검토용 changedSamples가 담깁니다. 구간의 실행 수가 maxRecords를 넘으면 capped가 true로 표시됩니다. 이때의 결과는 전체가 아니라 표본입니다.
lexq replay list는 job 이력을 보여주고, lexq replay cancel --id <jobId>는 PENDING·RUNNING 상태의 job을 협조적으로 취소합니다.
다음 단계
의사결정 출처
결정 뒤의 룰을 누가 작성하고 발행하고 배포했는지 추적합니다.
변경 영향 시뮬레이션
배포 전에 집계 통계 기반으로 대량 what-if 분석을 수행합니다.

