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

3.6 KiB

kind, slug, title, topic, project, status, sourceRevision, rootTreeNode, verifiedOn
kind slug title topic project status sourceRevision rootTreeNode verifiedOn
REFERENCE a-gate-declared-in-prose-is-not-in-the-build 산문이 선언한 게이트는 빌드에 있는 게이트가 아니다 what-a-gate-does-not-prove clean-architecture-backend-template 게시 전 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 reference:a-gate-declared-in-prose-is-not-in-the-build

산문이 선언한 게이트는 빌드에 있는 게이트가 아니다

목적

주석이나 문서가 검사의 실행을 단언할 때 그것을 관찰로 읽지 않게 한다. 게이트가 도는지를 묻기 전에 게이트가 존재한다는 문장이 무엇에 근거하는지 묻는다.

규칙

  1. 실행을 단언하는 문장을 먼저 찾는다 빌드를 실패시킨다, 기동 시점에 거부한다, 다른 방식으로 조립된 런타임도 확인한다 같은 현재 시제 문장이 대상이다.

  2. 그 문장이 지목한 심볼 이름으로 빌드 스크립트와 CI 정의를 검색한다 나오지 않으면 그 문장은 지금 사실이 아니다.

  3. 실행하는 것이 테스트뿐이면 그 테스트의 대상 집합을 확인한다 목록이 하드코딩되어 있으면 게이트의 범위는 그 목록이지 저장소가 아니다.

  4. 미래를 서술하는 선언과 구분한다 아직 돌지 않는다고 시제로 밝힌 선언은 이 규칙의 대상이 아니다.

적용 조건

주석 밀도가 높은 저장소의 모든 검증 코드. 근거를 문장으로 남기는 관행이 자산인 만큼, 그 문장이 실행을 단언할 때 비용도 같이 커진다. 읽는 사람이 게이트의 존재를 근거 있게 믿기 때문이다.

예외

의도적으로 미래를 서술하는 선언은 문제가 아니다. 다만 시제가 달라야 한다. 코드 생성 매니페스트가 좋은 예다. 이 빌드에서는 아직 돌지 않는다고 적고, 왜 돌지 않는지를 결정 기록으로 지목하며, 이 매니페스트는 그것을 켜기로 하는 미래의 결정이 대체가 아니라 만족시켜야 할 선언이라고 적는다.

예시

이 저장소에서 다섯 곳이 걸렸다.

스키마 규칙 엔진은 두 파일이 빌드를 실패시킨다고 적는데 빌드 스크립트에 이름이 없다.

스키마 거버넌스 정책의 네 수명주기 태스크 이름은 어떤 빌드 파일에도 없고, 그 javadoc 은 이름을 정책에 두면 단계가 사라질 때 테스트가 실패한다고 적는다.

고급 모듈 가드의 런타임 확인 메서드는 팻 자와 셰이드 산출물과 테스트 하네스도 확인한다고 적는데 호출자가 없다.

두 실험 어댑터의 프로파일 검증기는 전송 javadoc 이 기동 시점 거부를 단언하는데, 한쪽은 흔적이 javadoc 링크 한 줄이고 다른 쪽은 자기 선언 말고 아무 데도 없다.

관계

  • 두 파일이 같은 검증기를 빌드를 실패시키는 것이라 적고 어떤 빌드도 그것을 부르지 않는다 이 규칙을 만든 사례다.
  • 아무도 돌리지 않는 레인의 게이트는 마지막으로 돌린 사람이 본 것을 보고한다 이 규칙의 다음 단계다. 게이트가 존재한 뒤에 무엇이 그것을 주기적으로 돌리는가를 묻는다.
  • 시작 검증기가 네 설정 키의 유일한 소비자인데 시작 시 실행되지 않는다 같은 형태가 구성 경계에서 나타난 사례다.
  • 검증기는 발행이 아니라 주입이 강제다 실행 경로를 묻는 같은 계열의 규칙이다.