--- kind: CASE slug: a07-f006-claude title: 사라진 가드가 문서에만 남았고 그 부재는 이미 승인된 결정이다 topic: identity-and-identifier project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: case:a07-f006-claude evidenceCapturedOn: 2026-09-02 assets: - key: a07-f006-claude file: ../../../final/evidence/rendered/a07-f006-claude.svg evidence: - ../../../final/evidence/raw/a07-f006-claude.txt source: - 원본 분석 절은 analysis/07-adapter-outbound-identifier.md#L160 이다. 등급은 P3 이다. 아키텍처 규칙이 실재한다는 확인, 훅 파일과 그 디렉터리가 추적되지 않는다는 판정, `.claude/` 에 로컬 설정 파일 하나뿐이라는 관측, 그리고 복제본에서는 그 서술이 성립하지 않는다는 결론이 그 절에 있다. - 이 기록이 더한 것은 넷이다. 무시 목록이 그 디렉터리를 덮고 전 이력에서 추적된 적이 없다는 것, 문서가 특정한 규칙 번호가 해석되지 않는다는 것, 남은 규칙이 같은 줄의 Spring Web 을 덮지 않는다는 것, 그리고 그 훅을 고치겠다던 계획이 폐기되고 대체 문서가 하네스 부재를 목표에 적었다는 것이다. --- # 사라진 가드가 문서에만 남았고 그 부재는 이미 승인된 결정이다 리프 지침 문서가 금지 사항의 근거로 가드 둘을 든다. 아키텍처 규칙 쪽은 실재하고 CI 에서 돈다. 훅 스크립트 쪽은 이 저장소에 없고, 없는 이유가 다른 문서에 결정으로 적혀 있다. ## 관계 - **문서가 선언됐다는 둘은 없고, 선언된 하나는 그 문장에 없다** 같은 문서의 다른 오류다. - **산문이 선언한 게이트는 빌드에 있는 게이트가 아니다** 이 사례가 그 규칙의 형태다. - **release gate가 실제로 차단하는 것은 hermetic test 3개이고, mongo용 CI workflow는 없다** 릴리스 게이트가 실제로 무엇을 막는지 센 문서다. ## 문제 지침 문서가 이 리프에 금지된 것을 나열한다. 첫 항목은 퍼시스턴스와 웹 기술이고, 거기에 강제 근거가 둘 붙는다. 아키텍처 규칙 이름 하나와, 훅 스크립트의 규칙 번호 하나다. ## 결론 아키텍처 규칙은 실재하고 실제로 돈다. 시험 상수에 애너테이션이 붙어 있고 클래스 단위 분석 대상이 저장소 전체이며, 조립 루트가 이 리프를 물고 있어 검사 대상이 비어 있지 않다. CI 품질 게이트가 그 검사를 포함한 태스크를 돌린다. 다만 그 규칙이 막는 이름 목록에 Spring Web 이 없다. 같은 줄이 함께 금지한 기술이고, 사라진 쪽 가드가 덮기로 돼 있던 것이다. 그 기술들을 이 리프 밖에 두는 첫 방어선은 규칙이 아니다. 잠금 파일이 컴파일과 런타임 클래스패스가 비어 있다고 적는다. 컴파일에서 이미 불가능하고, 아키텍처 규칙은 그 뒤에 선다. 훅 스크립트 쪽은 저장소에 없다. 그 디렉터리 아래 추적되는 파일이 0 이고, 전 이력에서도 추적된 적이 없다. 무시 목록 셋째 줄이 그 디렉터리를 덮는다. 작업 트리에 남아 있는 것은 로컬 설정 파일 하나이고 훅 디렉터리는 만들어진 적이 없다. 규칙 번호 쪽도 해석되는 대상이 없다. 그 번호를 쓰는 곳은 자기 자신 말고 없다. 없는 이유는 무시 목록이 아니라 다른 문서에 있다. 그 스크립트를 고치겠다던 계획은 첫 줄에 폐기가 적혀 있고, 그것을 대체한 개정안의 목표 문장이 부재한 개발 하네스를 되살리지 않은 채 Gradle 과 아키텍처 규칙으로만 의존성 강제를 복구하겠다고 적는다. 계획이 약속한 디렉터리 역시 존재하지 않는다. 그러니 이것은 빠뜨린 파일이 아니라 이미 내려진 결정이다. 그 결정 이전의 문장을 그대로 들고 있는 것이 리프 지침 문서다. 판정은 P3 다. ## 검증 환경 확인 방식 : 지침 문서와 저장소 추적 목록·전 이력·무시 규칙·계획 문서 대조 소스 수정 : x ## 재현 조건 1. 리프 지침 문서의 금지 절과 첫 항목에 붙은 근거 둘을 읽는다. 2. 아키텍처 규칙의 선언과 그것이 막는 이름 목록을 읽는다. 3. 그 규칙이 실행되는 경로와 검사 대상이 비어 있지 않은지 확인한다. 4. 리프 잠금 파일의 빈 구성 표기를 읽는다. 5. 훅이 있다는 디렉터리의 추적 파일 수와 전 이력 추적 여부와 무시 규칙을 확인한다. 6. 문서가 특정한 규칙 번호가 저장소에서 해석되는지 센다. 7. 그 훅을 고치겠다던 계획 문서의 첫 줄과 그것을 대체한 문서의 목표를 읽는다. ## 본문 지침 문서가 금지 사항 첫 항목에 강제 근거를 둘 붙인다. ## 금지 절과 근거 두 줄 :::evidence key="a07-f006-claude" alt="리프 지침 문서의 금지 절과 첫 항목에 붙은 근거 둘. 아키텍처 규칙의 선언과 그것이 막는 이름 목록, 그 규칙의 실행 경로와 검사 대상, 리프 잠금 파일의 빈 구성 표기. 훅이 있다는 디렉터리의 추적 파일 수와 전 이력 추적 여부, 작업 트리 내용, 무시 규칙 확인 결과. 문서가 특정한 규칙 번호가 저장소에 나오는 곳. 그리고 그 훅을 고치겠다던 계획 문서의 폐기 배너와 그것을 대체한 문서의 목표 문장을 출력한 터미널 기록." caption="아키텍처 규칙은 실재하고 CI 의 check 로 돌지만 막는 목록에 Spring Web 이 없음 · 리프의 컴파일·런타임 클래스패스는 잠긴 채 비어 있음 · 훅 디렉터리는 추적 0, 전 이력 0, 무시 목록에 포함 · 규칙 번호는 이 문장에만 나옴 · 그 훅을 고치겠다던 계획은 폐기됐고 대체 문서가 하네스 부재를 목표에 적음 — 54줄 · exit 0" zoom="true" ::: ```text ## Forbidden - Persistence or web technology (JPA/Hibernate/Spring Data/Spring Web) — ArchUnit `identifier_adapter_does_not_depend_on_other_adapters_or_bootstrap`; `.claude/hooks/ca_import_gate.py` G4 가 쓰기 시점에 차단. ``` ## 아키텍처 규칙은 있고 CI 에서 돈다 ```java @ArchTest static final ArchRule IDENTIFIER_ADAPTER_DOES_NOT_DEPEND_ON_OTHER_ADAPTERS_OR_BOOTSTRAP = ``` 선언만으로는 돈다고 말할 수 없어 실행 경로도 봤다. 클래스에 `@AnalyzeClasses(packages = "dev.caskeleton")` 가 붙어 있고, 조립 루트가 이 리프를 `implementation` 으로 물고 있어 검사 대상이 비어 있지 않으며, CI 품질 게이트가 `./gradlew check` 를 돌린다. ## 남은 규칙이 덮지 않는 것 ```java "..adapter.inbound.web..", "..adapter.outbound.persistence..", "..bootstrap..", "org.springframework.data.repository..", "org.springframework.data.jpa.repository..", "jakarta.persistence..", "javax.persistence..", "org.hibernate.." ``` 금지 줄이 함께 든 Spring Web 이 이 목록에 없다. 사라진 가드가 덮기로 돼 있던 것 중 하나를 남은 가드가 덮지 않는다. 그리고 이 리프에 그 기술들이 들어오지 못하게 하는 첫 줄은 규칙이 아니다. ```text 154:empty=compileClasspath,runtimeClasspath ``` 프로덕션 클래스패스가 잠긴 채 비어 있으므로 컴파일에서 이미 불가능하다. 아키텍처 규칙은 그 뒤에 선 둘째 줄이다. ## 훅이 있다는 디렉터리 ```text # git ls-files .claude : 0 # 전 이력에서 .claude 아래 추적된 적 : 0 # 작업 트리 : settings.local.json .gitignore:3:.claude/ .claude/hooks/ca_import_gate.py ``` 추적된 적이 한 번도 없고, 무시 목록이 그 디렉터리를 덮는다. 작업 트리에도 로컬 설정 파일 하나뿐이고 훅 하위 디렉터리 자체가 없다. 문서가 특정한 규칙 번호도 해석되지 않는다. ```text src/adapter/outbound/identifier/CLAUDE.md:39: `.claude/hooks/ca_import_gate.py` G4 가 쓰기 시점에 차단. ``` `G4` 가 임포트 게이트의 규칙 번호로 쓰인 곳은 이 문장 자신뿐이다. 없는 파일 안의, 정의되지 않은 번호를 특정한다. ## 없는 이유는 이미 적혀 있다 ```text > **SUPERSEDED — HISTORICAL PROVENANCE ONLY (2026-07-25):** The user-approved harness-free > Mode B amendment supersedes this plan. … **Goal:** Restore Gradle bootstrap and Clean Architecture dependency enforcement without recreating the absent development harness. ``` 그 훅을 고치겠다던 계획은 폐기됐고, 대체한 개정안의 목표 문장이 부재한 개발 하네스를 되살리지 않겠다고 적는다. 그 계획이 만들겠다던 디렉터리도 없다. 무시 목록은 그 파일이 배포되지 않는 경로를 말할 뿐이다. 왜 없는지는 이 개정안이 말한다. 빠뜨린 파일이 아니라 승인된 결정이고, 그 결정 이전의 문장을 그대로 들고 있는 것이 리프 지침 문서다. ## 확인하지 못한 것 다른 개발자 머신에 그 스크립트가 있는지는 확인하지 않았다. 다만 여기서 본 것은 새 복제본이 아니라 로컬 브랜치와 작업 트리 이력을 가진 실제 작업 저장소이고, 그 한 대에도 훅은 없었다.