docs(keycloak-session-store): import the session-storage lab as a new project
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>
This commit is contained in:
co-authored by
Claude Opus 5
parent
43bccd08a8
commit
b2963105a8
+65
@@ -0,0 +1,65 @@
|
||||
# Tech Log 초안 리뷰 체크리스트 — cycle 2 재실행
|
||||
|
||||
실행일 : 2026-09-01 (cycle 2 downstream 재생성 후)
|
||||
대상 : clean-architecture-backend-template · 레코드 333건 (CONCEPT 21 · CASE 217 · REFERENCE 53 · QUESTION 17 · DECISION 25)
|
||||
근거 root tree : root-tree.md (노드 334 · 생성 차단 1)
|
||||
소스 리비전 : 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916
|
||||
|
||||
## 이번 실행이 이전 실행과 다른 점
|
||||
|
||||
첫 실행(같은 날, 레코드 326건)에서 유일하게 열려 있던 항목은 upstream 상태였다 —
|
||||
document-detail 이 cycle 2 재분석 중이라 analysisStatus 가 IN_PROGRESS 였고 downstream 셋이 NOT_STARTED 였다.
|
||||
그 항목이 닫혔다.
|
||||
|
||||
## Provenance
|
||||
|
||||
- [x] **upstream 전부 COMPLETE** — analysisStatus COMPLETE · 스코프 61 COMPLETE + 1 EXCLUDED ·
|
||||
crossScopeAnalysis / finalDocument / rootTree 전부 COMPLETE · reanalysis.completedAt 기록됨
|
||||
- [x] 23개 리프가 canonical SSOT 를 갖고 FULL_READ 로 전환됐다. STRUCTURAL_ONLY 잔여 0.
|
||||
- [x] 레코드 333건 전부 root tree 노드에 slug 로 대응. 미대응 0.
|
||||
- [x] readiness READY/OPEN 만 생성. NEEDS_DECISION 노드 1건은 decision-evidence 부재로 차단 유지.
|
||||
- [x] 레코드 sourceRevision 333건 전부 root tree 리비전과 일치.
|
||||
- [x] root tree 노드 334건 전부 source 앵커 보유. 참조 파일 290건 중 결측 0.
|
||||
- [x] 라인 앵커 전부 헤딩 착지. 어긋남 0.
|
||||
|
||||
## Record kind
|
||||
|
||||
- [x] kind ↔ 노드 kind 일치 333/333 · 디렉터리 배치 일치
|
||||
- [x] bodyMarkdown 은 CASE·CONCEPT 만 사용
|
||||
- [x] DECISION 25건 전부 근거 기록 보유 · OPEN QUESTION 17건 전부 미지수와 다음 검증 보유
|
||||
|
||||
## Facts / Body / Relations
|
||||
|
||||
- [x] 비본문 필드의 마크다운 문법 유입 0 · 제목 중복 0
|
||||
- [x] body-syntax 화이트리스트 위반 0
|
||||
- [x] 관계 설명 누락 0 · root tree 끊긴 relations 0
|
||||
|
||||
## downstream 재생성 요약
|
||||
|
||||
| 산출물 | 변경 |
|
||||
|---|---|
|
||||
| `analysis/99-cross-scope.md` | 306 → 428줄. §1.2(전수 통독) 신설 · §3.2·§3.5 확장 · §3.7(전송 계열 가정) 신설 · §4 6~9항 · §6 |
|
||||
| `final/document.md` | 1,680 → 1,765줄. §14.2 신설 · §5.5 확장 · §8.2 9~13항 · 헤더 표 |
|
||||
| `root-tree.md` | 4,097 → 4,174줄. 노드 327 → 334 |
|
||||
| `candidate-ledger.json` | 340/291 → 347/298 |
|
||||
| 레코드 | 326 → 333 |
|
||||
|
||||
## 새로 낸 노드 7건
|
||||
|
||||
| 노드 | Topic |
|
||||
|---|---|
|
||||
| `case:assigned-id-turns-claim-into-upsert` | state-ownership-and-concurrency |
|
||||
| `case:complete-drain-rolls-back-a-rotation` | 〃 |
|
||||
| `case:startup-validator-is-the-only-reader-of-four-keys` | runtime-reachability-and-composition |
|
||||
| `case:validator-declared-and-never-injected` | 〃 |
|
||||
| `reference:a-validator-is-enforced-by-injection` | 〃 |
|
||||
| `case:capability-constant-outlives-its-condition` | transport-and-provider-semantics |
|
||||
| `case:ipv4-only-mask-passes-every-other-form` | security-policy-enforcement |
|
||||
|
||||
통독의 새 finding 52건 중 노드로 낸 것은 7건이다. 나머지는 리프 SSOT §17 에 남는다 —
|
||||
기존 REFERENCE 가 이미 그 규칙을 갖고 있거나(예: `atomic-type-is-not-atomicity`),
|
||||
같은 사건의 다른 인스턴스여서 노드를 늘릴 이유가 없는 경우다.
|
||||
|
||||
## 미결
|
||||
|
||||
없다. 다음 단계는 `humanizing-korean-tech-writing` 편집 패스이며, 체크리스트가 별도 패스로 규정한 것이다.
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
# Tech Log 초안 리뷰 체크리스트 실행 결과
|
||||
|
||||
실행일 : 2026-09-01
|
||||
대상 : clean-architecture-backend-template · 레코드 326건 (CONCEPT 21 · CASE 211 · REFERENCE 52 · QUESTION 17 · DECISION 25)
|
||||
근거 root tree : /shared/document-detail/clean-architecture-backend-template/root-tree.md (노드 327 · 생성 차단 1)
|
||||
소스 리비전 : 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916
|
||||
|
||||
## Provenance
|
||||
|
||||
- [x] 레코드 326건 전부 root tree 노드에 slug 로 대응한다. 미대응 0.
|
||||
- [x] readiness 가 READY 또는 OPEN 인 노드만 생성됐다. NEEDS_DECISION 노드 1건(`widen-doc-contract-assertions`)은 decision-evidence 부재로 차단 유지.
|
||||
- [x] 레코드 sourceRevision 326건 전부 root tree 리비전과 일치.
|
||||
- [x] root tree 노드 327건 전부 source 앵커를 갖는다. 참조 파일 283건 중 결측 0 (codebase 경로 1건 포함 확인).
|
||||
- [x] 라인 앵커 155건 전부 헤딩에 정확히 착지. 어긋남 0.
|
||||
- [ ] **upstream 상태가 COMPLETE 가 아니다.** document-detail state.json 이 cycle 2 재분석 중이다 — analysisStatus IN_PROGRESS, 스코프 COMPLETE 38 / IN_PROGRESS 23 / EXCLUDED 1, crossScopeAnalysis·finalDocument·rootTree 는 NOT_STARTED(stale). 상세는 아래 "미결 항목".
|
||||
|
||||
## Record kind
|
||||
|
||||
- [x] 레코드 kind 가 root tree 노드 kind 와 326건 전부 일치.
|
||||
- [x] 디렉터리 배치가 kind 와 일치.
|
||||
- [x] bodyMarkdown 은 CASE·CONCEPT 만 사용. 다른 kind 의 body 참조 0.
|
||||
- [x] DECISION 25건 전부 근거 기록 1건 이상 보유.
|
||||
- [x] OPEN QUESTION 17건 전부 미지수와 다음 검증을 갖는다.
|
||||
|
||||
## Facts
|
||||
|
||||
- [x] 비본문 필드에 백틱·파이프 등 마크다운 문법 유입 0 (평문 규약 준수).
|
||||
- [x] 제목 중복 0.
|
||||
- [x] 각 레코드가 검증 환경·재현 조건·확인하지 못한 것을 분리해 적는다. 실행하지 않은 것은 실행하지 않았다고 적었다.
|
||||
|
||||
## Concept / Case body
|
||||
|
||||
- [x] body-syntax 화이트리스트 위반 0 — raw HTML·각주·체크박스·중첩 리스트·중첩 인용·취소선·링크 타이틀 모두 검출 0.
|
||||
- [x] body 파일 참조 결측 0.
|
||||
|
||||
## Relations
|
||||
|
||||
- [x] 관계 항목 전부가 제목 나열이 아니라 설명 줄을 동반한다. 설명 없는 관계 0.
|
||||
- [x] root tree 끊긴 relations 0.
|
||||
|
||||
## 이번 실행에서 고친 것
|
||||
|
||||
1. `a19-f022-messagingpublicsurfacecontracttest` — 레저 앵커가 §9.3(문서 계약 테스트 커버리지)에 착지해 §9.3 내용으로 초안이 작성됐다. 그 절은 이미 `doc-contract-test-boundary-predicted-the-drift` 가 담당한다. 노드 제목이 가리키는 §9.5(공개 표면 계약 테스트 위치)로 레코드를 다시 썼다.
|
||||
2. root tree 라인 앵커 4건 정정 — `analysis-finding-a19-f018` L911→L926, `analysis-finding-a19-f019` L960→L975, `a19-f020-messaging-admin-api` L982→L997, `a19-f022-...` L1099→L1114.
|
||||
|
||||
## 미결 항목 (편집 패스 전에 판단 필요)
|
||||
|
||||
document-detail 파이프라인이 cycle 2 재분석 중이다.
|
||||
|
||||
- 사유(state.json): 23개 리프의 production 구현이 cycle 1 에서 STRUCTURAL_ONLY 였고, full-read 게이트를 통과할 때까지 downstream 합성을 무효로 둔다.
|
||||
- 대상: messaging 5개(kafka·rabbit·pulsar-exp·nats-exp·spring-boot-starter), grpc 18개 전부.
|
||||
- 리비전은 그대로다 — baselineRevision == targetRevision, changedPaths 없음. 즉 코드가 바뀐 것이 아니라 읽기 깊이를 올리는 재분석이다.
|
||||
- 영향 범위: 이 23개 리프에서 나온 레코드는 가족 통합 문서 `analysis/19-messaging-platform.md`·`analysis/20-grpc-platform.md`(역할 INTEGRATION_ONLY)를 근거로 한다. 리프별 canonical SSOT(`analysis/messaging/*.md`·`analysis/grpc/*.md`)는 파일로 존재하지만 상태가 IN_PROGRESS 다.
|
||||
- 그 밖의 레코드(38개 COMPLETE 스코프 근거)는 이 항목의 영향을 받지 않는다.
|
||||
|
||||
체크리스트의 "owning registered leaf 가 자기 canonical module SSOT 를 갖고, 초안이 가족/최종 요약에만 근거하지 않는다" 항목은 이 23개 리프에 대해서는 재분석 완료 후 재확인이 필요하다.
|
||||
Reference in New Issue
Block a user