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.6 KiB
2.6 KiB
kind, slug, title, topic, project, status, sourceRevision, rootTreeNode, verifiedOn
| kind | slug | title | topic | project | status | sourceRevision | rootTreeNode | verifiedOn |
|---|---|---|---|---|---|---|---|---|
| REFERENCE | beginning-a-transition-and-the-set-it-covers-are-one-operation | 전이를 시작하는 쓰기와 그 전이가 덮는 집합은 한 연산이어야 한다 | non-atomic-check-then-act | clean-architecture-backend-template | 게시 전 | 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 | reference:beginning-a-transition-and-the-set-it-covers-are-one-operation |
전이를 시작하는 쓰기와 그 전이가 덮는 집합은 한 연산이어야 한다
목적
이제부터 다르게 동작한다고 선언하는 전이에서, 선언과 그 선언이 지배하는 대상의 갱신 사이에 끼어드는 쓰기를 막는다.
규칙
-
전이를 두 단계로 나눴는지 본다 플래그를 세우는 쓰기와 그 플래그가 덮는 대상을 갱신하는 쓰기가 따로 있으면 해당한다.
-
그 플래그를 읽는 가드를 전부 찾는다 가드를 통과한 뒤 쓰는 코드가 문제의 후보다.
-
가드 통과와 쓰기 사이에 다른 스레드가 낄 수 있는지 본다 낄 수 있으면 두 단계를 하나로 합치거나 그 구간을 락으로 닫는다.
-
전이 이후의 쓰기가 무해한지 확인한다 무해하면 두 단계로 나눠도 된다. 다만 무해함은 전이가 덮는 대상 전체에 대해 성립해야 한다.
적용 조건
배수, 종료, 회전, 차단처럼 상태 전이로 동작 규칙이 바뀌는 모든 자리.
예외
전이 이후에 도착한 쓰기가 결과를 바꾸지 않는 경우. 집합에 다시 넣어도 결과가 같은 종류의 갱신이 그렇다. 대상이 늘어나면 그 무해함을 다시 확인해야 한다.
예시
헬스 레지스트리의 배수 시작이 플래그를 쓰고 상태 맵을 바꾸는 두 단계다. 그 사이에 서빙 갱신이 끼면 전역 상태가 서빙으로 되돌아간다.
자격증명 회전에서 배수 완료가 자기가 읽은 값으로 상태를 다시 써서 진행 중인 회전을 되돌린다.
채널 세대 교체가 읽고 판단한 뒤 조건 없이 쓴다.
관계
- 원자 타입 위의 검사 후 실행과 비교 후 교체 루프 이 규칙이 나온 구조다.
- 배수를 시작한 뒤에도 한 서비스가 다시 SERVING 이 될 수 있다 이 규칙을 만든 사례다.
- 배수 완료가 자기가 읽은 값으로 상태를 다시 써서 진행 중인 자격증명 회전을 되돌린다 같은 규칙을 어긴 다른 리프의 사례다.