--- kind: CONCEPT slug: adapter-outbound-cache-redis-c11 title: R4인데 BLOCKED이 아닌 정책 파일은 읽히지 않는다 topic: schema-and-wire-models project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:adapter-outbound-cache-redis-c11 evidenceCapturedOn: 2026-09-01 assets: - key: adapter-outbound-cache-redis-c11 file: ../../../final/evidence/rendered/adapter-outbound-cache-redis-c11.svg evidence: - ../../../final/evidence/raw/adapter-outbound-cache-redis-c11.txt source: - 원본 분석 절은 final/document.md#a10#L579 이다. module: adapter-outbound-cache-redis --- # R4인데 BLOCKED이 아닌 정책 파일은 읽히지 않는다 `RedisCommandPolicyLoader`가 일반 YAML 파서를 쓰지 않고, 교차 필드 불변식이 로딩 시점에 적용된다. ## 본문 `RedisCommandPolicyLoader`의 javadoc이 일반 YAML 파서를 쓰지 않는 이유를 적는다. 파서는 그만큼 좁다 — 탭 금지, 들여쓰기 0/2/4만 허용, `commands:` 루트 정확히 하나, 명령 블록 중복 금지, 필드 이름 allowlist(12종) 밖이면 거부, 빈 값 거부, 필드 중복 거부. test가 `rejectsUnknownFieldsEnumsAndDuplicates`로 잡는다. ## RedisCommandPolicyLoader 참조 위치 :::evidence key="adapter-outbound-cache-redis-c11" alt="코드베이스에서 RedisCommandPolicyLoader 를 검색한 출력 6줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="RedisCommandPolicyLoader 코드베이스 검색 — 6줄 · exit 0" zoom="true" ::: ## 모순된 정책 파일은 읽히지 않는다 `RedisCommandPolicy`/`RedisCommandDescriptor`의 교차 필드 불변식(§24)이 로딩 시점에 적용되므로, "R4인데 BLOCKED이 아닌" 정책 파일은 **읽히지 않는다**. ## 집합을 고정하는 테스트 `everyDestructiveCommandIsBlockedAndUnreachable`·`deprecatedCommandNamesAreNotReachable`·`arbitraryScriptSourceExecutionIsBlocked`·`theCatalogFailsClosedForAnUnclassifiedCommand`.