The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.
Follows the import procedure in README.md.
source/ the originating repository verbatim — 78 documents, 28 SVGs,
8 manifests, plus .source-revision recording the commit
final/ the SSOT
document.md 729 lines written from the 29 experiment documents, not
concatenated: what was predicted, what was measured, and
where the measurement itself was wrong
evidence/raw 125 outputs, flattened to <experiment>__<file> because
the originals collided (01-baseline.txt appeared three
times) and the audit only globs the top level
evidence/meta one per raw file; command and exitCode are null and the
README says why rather than inventing them
evidence/browser 22 captures
assets/ three diagrams through techviz
.techviz/ their VizSpecs
A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.
Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.
verify-pipeline.py passes. audit-records.py reports no issues.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2.3 KiB
2.3 KiB
kind, slug, title, topic, project, status, sourceRevision, rootTreeNode, verifiedOn
| kind | slug | title | topic | project | status | sourceRevision | rootTreeNode | verifiedOn |
|---|---|---|---|---|---|---|---|---|
| REFERENCE | this-generations-circumstance-is-not-a-permanent-failure | 이 세대의 사정은 업무의 영구 실패가 아니다 | failure-category-across-adapters | clean-architecture-backend-template | 게시 전 | 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 | reference:this-generations-circumstance-is-not-a-permanent-failure |
이 세대의 사정은 업무의 영구 실패가 아니다
목적
프로세스나 연결 세대의 상태 때문에 생긴 거절을 요청 자체의 성질과 구분한다.
규칙
-
다음 세대에서 같은 요청이 성공하는지 묻는다 성공하면 그것은 일시적 실패다.
-
영구 실패는 요청 자체의 성질이어야 한다 적재물 초과, 스키마 불일치, 업무 규칙 거절이 그렇다.
-
거절 헬퍼가 범주를 고정으로 들면 호출자마다 이 질문을 다시 한다 세대 사정과 요청 성질이 한 헬퍼를 공유하는 경우가 흔하다.
-
전송 증거는 범주와 독립으로 유지한다 범주가 틀렸다고 전송되지 않았다는 증거까지 바꾸면 안 된다.
적용 조건
로컬에서 만들어지는 모든 거절. 전송 종료, 승인 거부, 자격증명 회전 중 거절.
예외
세대가 다시 만들어지지 않는 구조라면 그 사정은 영구적이다. 다만 그런 구조인지는 배포가 정하므로 코드에서 단정할 수 없다.
예시
두 실험 어댑터의 로컬 거절 헬퍼가 전송 종료에 영구 업무 실패를 붙인다. 종료 중이라는 것은 이 세대의 사정이고, 다음 세대에서 같은 메시지는 정상 발행된다.
같은 헬퍼의 다른 호출자인 적재물 초과는 영구 업무 실패가 맞다. 같은 메시지를 다시 보내도 같은 상한에 걸린다.
관계
- 종료 중이라는 사정이 업무의 영구 실패로 분류된다 이 규칙을 만든 사례다.
- 실패 범주는 재시도·DLQ·대시보드 사이의 계약이다 범주 선택의 상위 규칙이다.
- 전송·업무·스트림 증거는 세 축이고 서로를 함의하지 않는다 범주와 증거를 독립으로 두는 근거다.