Files
document-haness/docs/clean-architecture-backend-template/tech-log-studio/identity-and-identifier/case/case-a07-f006-claude.md
T
DongHyeonkaandClaude Fable 5.1 b25357c48a docs(clean-architecture-backend-template): fold analysis into final and re-select one topic
- analysis/·source-index·state.json 을 final/document.md 제2부·제3부로 접었다. SSOT 는 하나다
- 파일럿 — commit-ambiguity-as-a-result 를 새 기준으로 재선별. 후보 14 → 글감 5
  (PROMOTE 5 · MERGE_INTO 3 · KEEP_IN_SSOT 4 · 보류 2). 기록 5건을 다시 썼고 그림 1개를
  techviz 로 만들었다
- 재선별이 잡은 것: 제1부 §6.2·§11.1 이 자기 §13.2 와 어긋나 있었다(레인을 안 돌렸다 vs
  돌렸다) — 정정. 이미 답이 나와 있던 Question 을 HEAD 재실행 질문으로 다시 세웠다.
  Concept 이 인용한 코드가 SSOT 에 없어 뺐다
- candidateScope·sourceRepository 기록. 나머지 43개 주제는 재선별 대기(PENDING 905)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 12:39:20 +09:00

158 lines
9.2 KiB
Markdown

---
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:
- 원본 분석 절은 final/document.md#a07#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. 그 훅을 고치겠다던 계획 문서의 첫 줄과 그것을 대체한 문서의 목표를 읽는다.
## 본문
<!-- body:start -->
지침 문서가 금지 사항 첫 항목에 강제 근거를 둘 붙인다.
## 금지 절과 근거 두 줄
:::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.
```
그 훅을 고치겠다던 계획은 폐기됐고, 대체한 개정안의 목표 문장이 부재한 개발 하네스를 되살리지 않겠다고 적는다. 그 계획이 만들겠다던 디렉터리도 없다.
무시 목록은 그 파일이 배포되지 않는 경로를 말할 뿐이다. 왜 없는지는 이 개정안이 말한다. 빠뜨린 파일이 아니라 승인된 결정이고, 그 결정 이전의 문장을 그대로 들고 있는 것이 리프 지침 문서다.
## 확인하지 못한 것
다른 개발자 머신에 그 스크립트가 있는지는 확인하지 않았다. 다만 여기서 본 것은 새 복제본이 아니라 로컬 브랜치와 작업 트리 이력을 가진 실제 작업 저장소이고, 그 한 대에도 훅은 없었다.
<!-- body:end -->