3.7 KiB
fact-reviewer 역할 재검토
VERDICT: FAIL
이 FAIL은 “현재 문서에서 틀린 사실을 발견했다”는 뜻이 아니다. fact-reviewer 계약이 요구하는 최종 source/evidence 역대조를 exact revision까지 완료하지 못했다는 뜻이다.
읽은 계약
- .claude/agents/fact-reviewer.md
- Record의 source가 가리키는 docs/keycloak/final/document.md
- 현재 수정된 17개 Record diff
- local evidence checker 결과
- source repository contract (tech-log-tree.json)
현재 직접 대조한 핵심 주장
다음은 현재 SSOT에서 직접 근거를 확인했다.
- AP1은 browser 환경에서 장기 client credential 기밀성과 trusted client authentication을 유지하기 어려운 public client다.
- AP2는 server-side confidential client이며 이 프로젝트에서 client_secret_basic을 사용한다.
- public/confidential client type과 browser token custody/API caller는 별도 축이다.
- AP2는 Authorization Code confidential client까지 확인했고 현재 구현을 PKCE S256 예시라고 확정하지 않는다.
- AP3의 SameSite와 CSRF는 서로 다른 방어선이며 raw XSRF-TOKEN/X-XSRF-TOKEN 검증 경로가 있다.
- Google federation은 upstream IdP 경계이고 downstream issuer는 Keycloak이다.
- 외부 identity key는 provider + upstream sub이며 email collision은 자동 병합하지 않는다.
- mock provider 검증은 실제 Google account/public HTTPS callback/consent 검증을 의미하지 않는다.
- Bearer JWT 검증은 signature/issuer·time/audience/role conversion을 분리한다.
- multi-instance/session 문제는 현재 단일 인스턴스 검증 범위를 넘는 open question이다.
대조하지 못한 것
1. exact source revisions
Tree가 고정한 네 revision을 가진 checkout이 현재 머신에 없다.
AP1 64175266df05545f8f181fc91c1f0364bc47fce9
AP2 d019846f8725bdb0badde33043b020dc252e32ff
AP3 934c5da5d6edc2429dfb558b773656e46f21d677
AP4 f4aea65dc6255eae07b20ebbe21e02fb6115e563
따라서:
check_evidence.mjs keycloak --repo
exit 3
mismatch 0
unverifiable 1
2. refreshTokenMaxReuse 설명의 exact revision provenance
현재 Record는 refreshTokenMaxReuse를 동일 refresh token의 최대 재사용 횟수로 설명하고 lifespan과 분리한다.
현재 final/document.md에는 이 identifier/설명이 직접 없다.
과거 Library의 실제 Keycloak source snapshot에서는 다음은 확인했다.
revokeRefreshToken == true
refreshTokenMaxReuse == 0
validator message = "refresh token max reuse must be 0"
하지만 그 snapshot에는 Tree의 exact AP1 revision SHA가 없다. 따라서 source content의 보조 확인은 가능하지만 revision-proven reconciliation은 아니다.
3. Referrer-Policy 일반 규칙
현재 Record는 referrer에 전달되는 범위가 Referrer-Policy와 same-origin/cross-origin 관계에 따라 달라진다고 좁혔다. 이전의 “query가 항상 referrer에 남는다”보다 범위를 제한하는 수정이지만, 현재 SSOT에는 Referrer-Policy 자체가 직접 기록돼 있지 않다.
이 항목 역시 현재 local SSOT만으로는 source-derived claim으로 완결되지 않는다.
대조했는데 맞은 것
- 위 핵심 주장 10개 그룹: current SSOT와 일치하거나 현재 SSOT가 명시한 미검증 범위를 유지함.
- local evidence checker: mismatch 0.
대조하지 못한 것
- live/exact revision source reconciliation: 1 source repository class.
- 그 영향으로 exact source provenance를 요구하는 변경 주장 일부는 최종 확정하지 않음.
결론: 문서 내용이 틀렸다고 판정한 것은 아니며, source repository가 복구되기 전에는 fact-reviewer 최종 PASS를 발급하지 않는다.