Files
document-haness/reviews/2026-09-20-keycloak-session-store-final-gap-review.md
T

9.2 KiB

keycloak-session-store 최종 검수 리뷰

  • 검토일: 2026-09-20
  • 대상: reviews/2026-09-20-keycloak-session-store-post-remediation-verification.md 반영 결과
  • 판정: 아직 더 봐야댐

1. 결론

이전 후속 리뷰에서 완료 차단으로 잡았던 핵심 항목은 대부분 제대로 반영됐다.

이번 검수에서 확인한 완료 항목:

  1. --repo evidence gate 우회 제거
  2. source repository 부재를 UNVERIFIABLE로 명시적으로 모델링
  3. run verifier가 잘못된 evidence gate를 실제 FAIL시키도록 보강
  4. 33개 command-bearing Record / 992 shell block의 현재 project-level audit 작성
  5. Tree / 문체 / command parser 개선 유지
  6. 전체 project gate PASS
  7. 전체 pipeline exit 0
  8. 전체 unittest 406 PASS / 14 skipped

따라서 검증 계약과 command audit 문제는 이번에는 제대로 닫혔다.

남은 것은 한 축뿐이다.

TechViz 7개의 주변 context snapshot warning이 아직 남아 있다.

그림이 직접 근거로 삼는 current_section은 31/31 최신 SSOT와 일치하므로 그림의 기술 내용이 틀렸다고 보지는 않는다. 하지만 이전 리뷰에서 최종 cleanup 대상으로 지정한 warning이 실제 verifier에 그대로 남아 있으므로 아직 완료로 넘기지는 않는다.


2. evidence gate — 반영 완료

새 schemaVersion 5 verification run 6개를 확인했다.

각 run의 S3/S5/S6 evidence gate는 실제로:

node .agents/skills/writing-tech-log-records/scripts/check_evidence.mjs keycloak-session-store --repo

를 실행하고 있다.

현재 머신에는 source repository가 없으므로 결과는:

exit: 3
status: UNVERIFIABLE
semanticId: evidence-repo
reason: source repository unavailable on current machine
acceptedByProjectReview: true

로 보존된다.

대상 6 run 모두:

verify-pipeline-run.py
→ PASS
→ live source UNVERIFIABLE=['S3', 'S5', 'S6']

이다.

즉 이전처럼 --repo를 빼고 exit 0을 만든 것이 아니다.

technicalEvidence도 일치

각 run의 qualityReviews.technicalEvidence에도:

liveSourceReconciliation: UNVERIFIABLE
liveSourceReason: source repository unavailable on current machine
acceptedByProjectReview: true

가 기록되어 stage gate 상태와 일치한다.

이 항목은 완료다.


3. run verifier blind spot — 반영 완료

verifier가 필드만 읽고 형식적으로 PASS하는지 확인하기 위해 실제 v5 run을 /tmp 사본으로 변조해 음성 테스트를 했다.

case 1 — --repo 삭제

변조:

check_evidence ... keycloak-session-store
exit 0
status PASS

결과:

PIPELINE RUN: FAIL
live source evidence gate에서 --repo가 빠졌다

case 2 — UNVERIFIABLE reason 삭제

결과:

PIPELINE RUN: FAIL
UNVERIFIABLE evidence gate에 이유가 없다

case 3 — semanticId 삭제

결과:

PIPELINE RUN: FAIL
필수 evidence semantic gate가 정확히 하나가 아니다

따라서 이전 verifier blind spot은 닫혔다.

이 항목은 완료다.


4. 33 Record / 992 command audit — 반영 완료

프로젝트 내부에 다음 current audit이 추가됐다.

docs/keycloak-session-store/reviews/
  2026-09-20-keycloak-session-store-command-audit.json
  2026-09-20-keycloak-session-store-command-audit.md

현재 JSON audit과 실제 파일을 다시 대조했다.

records     33
shellBlocks 992
findings     53
major         0
text-like    15
SHA mismatch  0
detail mismatch 0

33개 Record 전부 현재 파일 SHA256과 맞는다.

finding 상세도 현재 analyzer를 다시 실행한 결과와 정확히 일치한다.

남은 finding:

hidden-stderr          48
compound-remote-shell   5

은 모두 minor이고 audit에서 문맥 검토 후 허용 상태로 남겼다.

projectVerdict도:

PASS

다.

옛 run을 소급 수정하지 않고 현재 audit을 별도 artifact로 남긴 방식도 이전 리뷰의 요구와 맞는다.

이 항목은 완료다.


5. 문체 / Tree / Record — 정상

현재:

records=61
written=61
unwritten=0

prose 61/61 PASS
voice 61/61 PASS

Tree의 이전 미처분 절도:

KEEP_IN_SSOT
CONFIRMED

상태를 유지한다.

Required Content, SSOT Facts, Audit도 모두 PASS다.

추가 문체 수정 finding은 이번 검수에서 발견하지 못했다.


6. Figure gate — 내용은 정상

현재:

Figure Text       PASS 31/31
Figure Overlap    PASS 31/31
Figure Provenance PASS 31/31

그리고 각 TechViz가 직접 근거로 삼는:

current_section exact match = 31 / 31

이다.

따라서 그림의 직접 기술 근거는 현재 SSOT와 맞는다.


7. 유일한 잔여 finding — stale surrounding context 7개

verify-project-layout.py keycloak-session-store에는 아직 다음 경고가 남는다.

SSOT 문맥이 바뀐 뒤 그림을 다시 보지 않았다: 7

정확한 대상과 mismatch:

1. a1-transport-vs-discovery

previous_section STALE — A층 — Keycloak 자체가 깨질 때
current_section  MATCH — A-1 · JGroups 전송(TCP 7800) 차단
next_section     MATCH — A-2 · A-3 — DB 가 멈출 때와 죽을 때

2. d2-upgrade-direction

previous_section STALE — D층 — 운영
current_section  MATCH — D-1 · D-2 — 백업과 업그레이드
next_section     MATCH — D-3 · 비밀

3. lab-topology

previous_section STALE — 문제를 어렵게 만든 제약
current_section  MATCH — 실험대
next_section     MATCH — 게스트와 호스트의 sudo 가 다르다

4. measurement-control

previous_section STALE — 결정이 지켜지는지 확인하는 방법
current_section  MATCH — 측정이 거짓말할 때
next_section     MATCH — 재현 가능성을 어떻게 보장했나

5. observation-points

previous_section STALE — 검토한 선택지와 막힌 지점
current_section  MATCH — 관측을 어디에 둘 것인가
next_section     MATCH — 스크립트를 쓰지 않는다

6. open-questions-answered

previous_section STALE — 얻은 것, 잃은 것, 적용하지 않을 때
current_section  MATCH — 열린 질문 네 개에 대한 답
next_section     MATCH — 이 기록이 적용되지 않는 조건

7. wrong-predictions

previous_section MATCH — 얻은 것, 잃은 것, 적용하지 않을 때
current_section  MATCH — 결국 지키려던 것은 무엇이었나
next_section     STALE — 자료

판단

이 7개는 그림의 직접 source section mismatch가 아니다.

여섯 개는 parent/previous section이 이후 child section 변경까지 포함하면서 stale이 되었고, 하나는 뒤의 자료 section이 변경된 경우다.

즉 semantic node/edge를 다시 설계해야 한다는 evidence는 현재 없다.

하지만 현재 canonical verifier가 stale context로 잡고 있고 이전 리뷰에서 이 warning을 마지막에 닫으라고 명시했으므로 최종 cleanup이 아직 남아 있다.


8. 필요한 마지막 작업

SVG를 손으로 수정하지 않는다.

7개에 대해서만 canonical TechViz 흐름으로:

  1. 현재 final/document.md에서 context 재생성
  2. 기존 spec의 semantic node/edge가 여전히 맞는지 확인
  3. 의미 변경이 없으면 context/evidence hash만 최신화
  4. 필요한 canonical render 실행
  5. Figure Text / Overlap / Provenance
  6. preview 눈 확인
  7. verify-project-layout.py keycloak-session-store

를 다시 실행한다.

목표:

SSOT 문맥이 바뀐 뒤 그림을 다시 보지 않았다 = 0

이다.

parent/neighbor section 전체를 snapshot으로 잡는 현재 context 모델 때문에 재생성 후에도 같은 경고가 반복된다면, 그때는 억지로 context를 고치지 말고 verify-project-layout.py의 context 비교 모델을 수정하고 regression test를 추가한다.


9. 현재 전체 검증

프로젝트:

verify-tech-log-tree       PASS
verify-project-layout      PASS (stale-context warn 7 포함)
audit-records              PASS
check-figure-text          PASS 31/31
check-figure-overlap       PASS 31/31
check-figure-provenance    PASS 31/31
check-required-content     PASS 61
check-ssot-facts           PASS
git diff --check           PASS

prose                     PASS 61/61
voice                     PASS 61/61

v5 evidence runs:

6 / 6 PASS
UNVERIFIABLE 상태 정상 보존

전체 pipeline:

verify-pipeline.py
exit 0

전체 tests:

Ran 406 tests
OK
skipped=14

10. 최종 판정

이전 리뷰의 핵심 문제였던:

  • evidence --repo 우회
  • UNVERIFIABLE 모델 부재
  • run verifier blind spot
  • 33 Record command audit 부재

는 이번에는 제대로 수정됐다.

문서 내용, command audit, 검증 계약도 현재 정상이다.

그러나 이전 리뷰에서 마지막 cleanup으로 요구한 TechViz stale surrounding-context warning 7개가 아직 남아 있다.

따라서 현재 판정은:

keycloak-session-store = 아직 더 봐야댐

7개 context warning만 닫고 다시 project gate → 전체 pipeline → unittest를 순차 실행하면 된다.