Files
DongHyeonkaandClaude Fable 5.1 b25357c48a docs(clean-architecture-backend-template): fold analysis into final and re-select one topic
- analysis/·source-index·state.json 을 final/document.md 제2부·제3부로 접었다. SSOT 는 하나다
- 파일럿 — commit-ambiguity-as-a-result 를 새 기준으로 재선별. 후보 14 → 글감 5
  (PROMOTE 5 · MERGE_INTO 3 · KEEP_IN_SSOT 4 · 보류 2). 기록 5건을 다시 썼고 그림 1개를
  techviz 로 만들었다
- 재선별이 잡은 것: 제1부 §6.2·§11.1 이 자기 §13.2 와 어긋나 있었다(레인을 안 돌렸다 vs
  돌렸다) — 정정. 이미 답이 나와 있던 Question 을 HEAD 재실행 질문으로 다시 세웠다.
  Concept 이 인용한 코드가 SSOT 에 없어 뺐다
- candidateScope·sourceRepository 기록. 나머지 43개 주제는 재선별 대기(PENDING 905)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 12:39:20 +09:00

3.2 KiB

id, kind, slug, title, topic, topicName, project, status, studio, source, sourceRevision
id kind slug title topic topicName project status studio source sourceRevision
REFERENCE unknown-is-a-third-result 모르는 것은 성공도 실패도 아닌 세 번째 결과여야 한다 commit-ambiguity-as-a-result 커밋 모호성 — 「모른다」를 결과로 유지하기 clean-architecture-backend-template 게시 전
final/document.md#9
final/document.md#3-3
21234e38cdb9a926cbc92bb97a2aee2e4a7d2916

모르는 것은 성공도 실패도 아닌 세 번째 결과여야 한다

완료 여부를 알 수 없는 상태를 성공이나 실패로 접으면 그 정보가 영원히 사라진다. 결과 타입에 세 번째 변형을 두고, 그 변형이 조정에 필요한 것을 함께 들고 다니게 한다.

관계

  • pg_terminate_backend 가 57P01 로 도착하고 커밋 레코드는 이미 WAL 에 있었다 세 번째 결과가 필요한 대표 사례다.
  • completion-unknown 은 자동으로도 수동으로도 재시도하지 않는다 이 규칙을 정책으로 옮긴 결정이다.

목적

모르는 것을 실패로 접으면 재시도가 일어나고, 커밋됐을 수도 있는 쓰기가 중복된다. 성공으로 접으면 확인되지 않은 작업이 확인된 것으로 하류에 흘러간다. 어느 쪽도 나중에 되돌릴 수 없다.

규칙

1. 결과 타입에 세 번째 변형을 둔다

호출자가 재시도와 조정을 구별하려면 그 구별을 담을 값이 필요하다. boolean 하나나 예외 하나로는 표현되지 않는다.

2. 세 번째 변형은 조정 정보를 함께 들고 다닌다

상태 이름만으로는 부족하다. 마지막으로 관측된 단계와 조정에 쓸 안정적인 식별자가 값 안에 있어야 조정이 대상을 지목한다.

3. 판정 조건을 좁게 유지한다

조정 큐가 커지면 운영자가 읽지 않고 비우는 습관을 배우고, 중요했던 한 건이 나머지와 같이 지워진다.

적용 조건

관측이 결과를 확정하지 못할 수 있는 경계 : 커밋, 발행, 전달, 복제 지연 조회

이 저장소의 구현은 다섯이다.

재시도 처분 : RetryDisposition.RECONCILE 트랜잭션 결과 : TransactionResult.Indeterminate 쓰기 처분 : WriteDisposition.UNDETERMINED 발행 완료 : PublishCompletion.AMBIGUOUS 복제 지연 : ReplicaLagMonitor.replayedThrough 의 Optional 반환

예외

아무것도 프로세스를 떠나지 않은 실패는 확정이다. 발행 경로에서 access 가 거부되거나 encode 가 실패하면 결과는 REJECTED 이고 ambiguous 가 아니다.

어떤 브로커도 보지 못한 메시지를 모호하다고 보고하면, 호출자는 확인할 것이 없는 조정으로 보내진다.

준비 중에 데드라인이 소진된 경우도 같다. 아직 전송 전이므로 확정 거부다.

예시

커밋 증거 열거형은 UNKNOWN 을 실제 상태로 두고, 드라이버가 커밋도 롤백도 확인해 주지 못한 경우를 어느 쪽으로도 접지 않는다.

발행 경로는 transport 단계에서 실패하거나 데드라인이 지나면 AMBIGUOUS 로 보고한다. 요청이 wire 위에 있었으므로 브로커가 들고 있을 수 있기 때문이다.