# 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에서 직접 근거를 확인했다. 1. AP1은 browser 환경에서 장기 client credential 기밀성과 trusted client authentication을 유지하기 어려운 public client다. 2. AP2는 server-side confidential client이며 이 프로젝트에서 client_secret_basic을 사용한다. 3. public/confidential client type과 browser token custody/API caller는 별도 축이다. 4. AP2는 Authorization Code confidential client까지 확인했고 현재 구현을 PKCE S256 예시라고 확정하지 않는다. 5. AP3의 SameSite와 CSRF는 서로 다른 방어선이며 raw XSRF-TOKEN/X-XSRF-TOKEN 검증 경로가 있다. 6. Google federation은 upstream IdP 경계이고 downstream issuer는 Keycloak이다. 7. 외부 identity key는 provider + upstream sub이며 email collision은 자동 병합하지 않는다. 8. mock provider 검증은 실제 Google account/public HTTPS callback/consent 검증을 의미하지 않는다. 9. Bearer JWT 검증은 signature/issuer·time/audience/role conversion을 분리한다. 10. multi-instance/session 문제는 현재 단일 인스턴스 검증 범위를 넘는 open question이다. ## 대조하지 못한 것 ### 1. exact source revisions Tree가 고정한 네 revision을 가진 checkout이 현재 머신에 없다. ~~~text AP1 64175266df05545f8f181fc91c1f0364bc47fce9 AP2 d019846f8725bdb0badde33043b020dc252e32ff AP3 934c5da5d6edc2429dfb558b773656e46f21d677 AP4 f4aea65dc6255eae07b20ebbe21e02fb6115e563 ~~~ 따라서: ~~~text 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에서는 다음은 확인했다. ~~~text 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를 발급하지 않는다.**