--- id: kind: PROJECT_DECISION slug: record-the-evidence-first-choose-the-conclusion-later title: 증거를 먼저 기록하고 결론은 나중에 고른다 topic: commit-ambiguity-as-a-result topicName: 커밋 모호성 — 「모른다」를 결과로 유지하기 project: clean-architecture-backend-template status: 게시 전 studio: "" decisionStatus: ADOPTED source: - final/document.md#a19 - final/document.md#10-2 - final/document.md#3-3 - final/document.md#a19 §3.2 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 --- # 증거를 먼저 기록하고 결론은 나중에 고른다 실패를 관측한 즉시 성공·실패·재시도로 접지 않는다. 먼저 전송·커밋 단계를 증거로 남기고, 완료 판정은 그 증거를 입력으로 별도 단계에서 정한다. ## 근거 - **발행 증거와 완료 판정이 따로 있는 이유** 증거와 결론이 답하는 질문이 다르다. - **트랜잭션 결과 대수 — 다섯 변형이 각각 답하는 질문** 완료를 다섯 상태로 유지하는 타입 모델이 이미 있다. - **completion-unknown 은 자동으로도 수동으로도 재시도하지 않는다** 증거가 모호할 때 결론을 강하게 만들지 않는 후속 결정이다. ## 결정문 전송·커밋 진행 정도를 먼저 증거 값으로 기록한다. 성공·롤백·completion-unknown·재시도 가능 여부 같은 결론은 그 증거와 operation semantics를 읽는 후속 판정에서 정한다. ## 판단 이유 예외 타입 하나에는 “아무것도 전송되지 않았다”와 “요청은 전달됐지만 결과 응답을 잃었다”가 함께 들어갈 수 있다. 이 둘을 같은 실패로 접으면 재시도 정책이 관측 사실보다 강한 주장을 하게 된다. 증거를 먼저 기록하면 후속 정책이 바뀌어도 최초 관측은 보존된다. 특히 completion-unknown을 retryable로 동시에 표현하지 못하게 만든 생성자 제약은 이 순서를 코드에서 강제한다. ## 영향 감수하는 것 : 상태 타입과 판정 단계가 늘어나고 호출자는 단일 boolean보다 많은 경우를 처리해야 한다. 얻는 것 : 실패 원인과 완료 상태를 섞지 않으며, 결과를 모르는 작업을 자동 재실행하는 경로를 구조적으로 줄인다. 얻는 것 : 후속 reconciliation이 최초 관측을 다시 해석할 수 있다.