Files
document-haness/docs/clean-architecture-backend-template/tech-log-studio/what-a-gate-does-not-prove/reference/reference-a-gate-declared-in-prose-is-not-in-the-build.md
T
DongHyeonkaandClaude Opus 5 b2963105a8 docs(keycloak-session-store): import the session-storage lab as a new project
The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.

Follows the import procedure in README.md.

  source/     the originating repository verbatim — 78 documents, 28 SVGs,
              8 manifests, plus .source-revision recording the commit
  final/      the SSOT
    document.md   729 lines written from the 29 experiment documents, not
                  concatenated: what was predicted, what was measured, and
                  where the measurement itself was wrong
    evidence/raw    125 outputs, flattened to <experiment>__<file> because
                    the originals collided (01-baseline.txt appeared three
                    times) and the audit only globs the top level
    evidence/meta   one per raw file; command and exitCode are null and the
                    README says why rather than inventing them
    evidence/browser  22 captures
    assets/       three diagrams through techviz
    .techviz/     their VizSpecs

A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.

Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.

verify-pipeline.py passes. audit-records.py reports no issues.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 22:51:59 +09:00

64 lines
3.6 KiB
Markdown

---
kind: REFERENCE
slug: a-gate-declared-in-prose-is-not-in-the-build
title: 산문이 선언한 게이트는 빌드에 있는 게이트가 아니다
topic: what-a-gate-does-not-prove
project: clean-architecture-backend-template
status: 게시 전
sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916
rootTreeNode: reference:a-gate-declared-in-prose-is-not-in-the-build
verifiedOn: # 이 기록은 이번 회차에 실행 확인을 하지 않았다
---
# 산문이 선언한 게이트는 빌드에 있는 게이트가 아니다
## 목적
주석이나 문서가 검사의 실행을 단언할 때 그것을 관찰로 읽지 않게 한다. 게이트가 도는지를 묻기 전에 게이트가 존재한다는 문장이 무엇에 근거하는지 묻는다.
## 규칙
1. 실행을 단언하는 문장을 먼저 찾는다
빌드를 실패시킨다, 기동 시점에 거부한다, 다른 방식으로 조립된 런타임도 확인한다 같은 현재 시제 문장이 대상이다.
2. 그 문장이 지목한 심볼 이름으로 빌드 스크립트와 CI 정의를 검색한다
나오지 않으면 그 문장은 지금 사실이 아니다.
3. 실행하는 것이 테스트뿐이면 그 테스트의 대상 집합을 확인한다
목록이 하드코딩되어 있으면 게이트의 범위는 그 목록이지 저장소가 아니다.
4. 미래를 서술하는 선언과 구분한다
아직 돌지 않는다고 시제로 밝힌 선언은 이 규칙의 대상이 아니다.
## 적용 조건
주석 밀도가 높은 저장소의 모든 검증 코드. 근거를 문장으로 남기는 관행이 자산인 만큼, 그 문장이 실행을 단언할 때 비용도 같이 커진다. 읽는 사람이 게이트의 존재를 근거 있게 믿기 때문이다.
## 예외
의도적으로 미래를 서술하는 선언은 문제가 아니다. 다만 시제가 달라야 한다. 코드 생성 매니페스트가 좋은 예다. 이 빌드에서는 아직 돌지 않는다고 적고, 왜 돌지 않는지를 결정 기록으로 지목하며, 이 매니페스트는 그것을 켜기로 하는 미래의 결정이 대체가 아니라 만족시켜야 할 선언이라고 적는다.
## 예시
이 저장소에서 다섯 곳이 걸렸다.
스키마 규칙 엔진은 두 파일이 빌드를 실패시킨다고 적는데 빌드 스크립트에 이름이 없다.
스키마 거버넌스 정책의 네 수명주기 태스크 이름은 어떤 빌드 파일에도 없고, 그 javadoc 은 이름을 정책에 두면 단계가 사라질 때 테스트가 실패한다고 적는다.
고급 모듈 가드의 런타임 확인 메서드는 팻 자와 셰이드 산출물과 테스트 하네스도 확인한다고 적는데 호출자가 없다.
두 실험 어댑터의 프로파일 검증기는 전송 javadoc 이 기동 시점 거부를 단언하는데, 한쪽은 흔적이 javadoc 링크 한 줄이고 다른 쪽은 자기 선언 말고 아무 데도 없다.
## 관계
- **두 파일이 같은 검증기를 빌드를 실패시키는 것이라 적고 어떤 빌드도 그것을 부르지 않는다**
이 규칙을 만든 사례다.
- **아무도 돌리지 않는 레인의 게이트는 마지막으로 돌린 사람이 본 것을 보고한다**
이 규칙의 다음 단계다. 게이트가 존재한 뒤에 무엇이 그것을 주기적으로 돌리는가를 묻는다.
- **시작 검증기가 네 설정 키의 유일한 소비자인데 시작 시 실행되지 않는다**
같은 형태가 구성 경계에서 나타난 사례다.
- **검증기는 발행이 아니라 주입이 강제다**
실행 경로를 묻는 같은 계열의 규칙이다.