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>
97 lines
6.5 KiB
Plaintext
97 lines
6.5 KiB
Plaintext
EVD-333 재검증 범위 확정 — 기존 18개 문서의 소스 드리프트 측정
|
|
측정일 2026-08-31 · workmachine
|
|
|
|
────────────────────────────────────────────────────────────────────────
|
|
1. 문서가 기록한 revision
|
|
────────────────────────────────────────────────────────────────────────
|
|
01-domain-core.md … 18-app-bootstrap.md 전부 동일:
|
|
a24ece9cf797f7ea647e33bf846b115208ed1ba5
|
|
|
|
현재 HEAD:
|
|
21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 "feat: grpc 기능 deep 구현"
|
|
|
|
git log --oneline -5
|
|
21234e38 feat: grpc 기능 deep 구현
|
|
a24ece9c feat: web, websocket 어댑터 추가 구현
|
|
01372634 refactor: 각 어댑터터별 리펙토링 진행
|
|
e98b56eb feat: jpa, messaging, notification, mongo, graphql 어댑터터 리펙토링
|
|
2f5d2fc2 feat: jpa, messaging, notification, mongo, graphql 어댑터터 구현체 추가
|
|
(총 37 commit)
|
|
|
|
문서 기준점과 HEAD 사이는 정확히 커밋 1개다.
|
|
|
|
────────────────────────────────────────────────────────────────────────
|
|
2. 18개 리프 경로별 변경 파일 수 — a24ece9c..21234e38
|
|
────────────────────────────────────────────────────────────────────────
|
|
$ git diff --name-only a24ece9c 21234e38 -- <path> | wc -l
|
|
|
|
src/domain-core 0
|
|
src/shared-contract 0
|
|
src/application-core 0
|
|
src/adapter/outbound/support 0
|
|
src/adapter/outbound/persistence-jpa 0
|
|
src/adapter/outbound/persistence-mongo 0
|
|
src/adapter/outbound/identifier 0
|
|
src/adapter/outbound/fileserver 0
|
|
src/adapter/outbound/objectstorage 0
|
|
src/adapter/outbound/cache-redis 0
|
|
src/adapter/outbound/httpclient 0
|
|
src/adapter/outbound/messaging 0
|
|
src/adapter/outbound/notification 0
|
|
src/adapter/inbound/web 0
|
|
src/adapter/inbound/grpc 0
|
|
src/adapter/inbound/graphql 0
|
|
src/adapter/inbound/websocket 0
|
|
src/app-bootstrap 0
|
|
|
|
18개 전부 0. 커밋이 건드린 곳의 분포:
|
|
82 src/grpc/grpc-policy 41 src/grpc/grpc-core-api
|
|
36 src/grpc/grpc-testkit 25 src/grpc-advanced/grpc-advanced-compat
|
|
24 src/grpc/grpc-server 23 src/grpc-advanced/grpc-advanced-resilience
|
|
20 src/grpc-advanced/grpc-advanced-streaming 19 src/grpc/grpc-client
|
|
19 src/grpc/grpc-admin 16 src/grpc/grpc-codegen
|
|
13 src/grpc-advanced/grpc-advanced-bootstrap 11 src/grpc/grpc-proto-contract
|
|
11 src/grpc/grpc-discovery 11 src/grpc-advanced/grpc-advanced-edition
|
|
8 src/grpc/grpc-spring-boot-starter 8 src/grpc-advanced/grpc-advanced-diagnostics
|
|
7 src/grpc/grpc-operation-ledger-jpa 7 src/grpc/grpc-observability
|
|
1 src/grpc/CLAUDE.md 1 src/grpc-advanced/CLAUDE.md
|
|
1 src/config/architecture 1 src/build.gradle
|
|
1 docs/runbooks/grpc-platform-operations.md 외 docs 2
|
|
|
|
────────────────────────────────────────────────────────────────────────
|
|
3. 리프 밖 공통 파일 2개가 18개에 영향을 주는지
|
|
────────────────────────────────────────────────────────────────────────
|
|
(a) src/build.gradle — 변경은 한 곳, plain-JUnit 테스트 클래스패스 조건의 확장뿐이다.
|
|
|
|
- if (project.path in [':domain-core', ':application-core', ':shared-contract'] ||
|
|
- project.path.startsWith(':messaging:')) {
|
|
+ if (project.path in [':domain-core', ':application-core', ':shared-contract'] ||
|
|
+ project.path.startsWith(':messaging:') ||
|
|
+ project.path.startsWith(':grpc:') ||
|
|
+ project.path.startsWith(':grpc-advanced:')) {
|
|
|
|
18개 중 :domain-core·:application-core·:shared-contract 는 조건이 그대로이고,
|
|
나머지 15개는 이전과 동일하게 else 분기다. 영향 없음.
|
|
|
|
(b) src/config/architecture/modules.json — 197 insertions(+), 0 deletions(-).
|
|
diff 의 추가·삭제 줄에서 18개 리프 id
|
|
("domain-core" "shared-contract" "application-core" "adapter-*" "app-bootstrap")
|
|
가 등장한 횟수: 0. grpc 항목의 순수 추가다. 영향 없음.
|
|
|
|
────────────────────────────────────────────────────────────────────────
|
|
4. 판정 — 재검증이 실제로 해야 할 일
|
|
────────────────────────────────────────────────────────────────────────
|
|
18개 문서의 소스 기준 서술은 HEAD 에서도 유효하다. 재작성 대상이 아니다.
|
|
따라서 재검증의 실질은 다음 넷이며, 소스를 다시 읽는 일이 아니다.
|
|
|
|
① SSOT 게이트 준수 — §0 SSOT identity 블록(등록 leaf id ↔ canonical analysisFile),
|
|
registry allowed_dependencies / runtime_memberships 명시
|
|
② EVD 연결 — 18개 문서 모두 EVD 참조 0건, Source anchors 0건인 상태를 해소
|
|
③ lane 재실행 — 문서가 기록한 lane 결과를 HEAD 에서 다시 재현
|
|
④ 기록된 주장 중 재현되지 않거나 진단이 틀린 것 교정
|
|
(첫 사례: 11번 문서 §51 의 P1 진단 — EVD-332 가 반증)
|
|
|
|
주의: "소스 변경 0" 은 문서의 결론이 옳다는 뜻이 아니다. 대상이 움직이지 않았다는 뜻이며,
|
|
검증은 여전히 문서의 주장을 코드에 대고 다시 확인해야 한다. EVD-332 가 바로 그 경우다 —
|
|
소스는 한 줄도 안 바뀌었는데 문서의 진단은 틀렸다.
|