Files
document-haness/docs/clean-architecture-backend-template/tech-log-studio/schema-and-data-contracts/case/case-grpc-proto-contract-f04.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

3.4 KiB

kind, slug, title, topic, project, status, sourceRevision, rootTreeNode, evidenceCapturedOn, assets, evidence, source, module, priority
kind slug title topic project status sourceRevision rootTreeNode evidenceCapturedOn assets evidence source module priority
CASE grpc-proto-contract-f04 열거형 안의 reserved 는 수집되지 않는다 schema-and-data-contracts clean-architecture-backend-template 게시 전 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 case:grpc-proto-contract-f04 2026-09-01
key file
grpc-proto-contract-f04 ../../../final/evidence/rendered/grpc-proto-contract-f04.svg
../../../final/evidence/raw/grpc-proto-contract-f04.txt
원본 분석 절은 final/document.md#a20-grpc-proto-contract#L265 이다.
grpc-proto-contract P3

열거형 안의 reserved 는 수집되지 않는다

scan 은 스코프 종류로 갈라진다. reserved 수집은 scanMessageMember 안에만 있다.

문제

scan 은 스코프 종류로 갈라진다.

reserved 수집은 scanMessageMember 안에만 있다.

결론

proto3 는 열거형에도 reserved 2, 15; 와 reserved "OLD_VALUE"; 를 허용하고, 열거형 값을 지울 때 번호를 예약하는 것은 필드와 같은 이유로 필요하다 — 예약하지 않고 재사용하면 옛 클라이언트가 보낸 정수가 다른 뜻으로 해석된다.

지금 SchemaHistory 에 열거형 이름으로 삭제 이력을 넣으면, 스키마가 정확히 예약했더라도 scan.reservedNumbers 에 그 이름이 없으므로 RESERVED_HISTORY 오탐이 난다.

§17.1 의 범위 문법 문제와 같은 방향(fail-closed)이고 같은 자리에서 고칠 수 있다.

reserved 수집을 스코프 종류와 무관하게 먼저 시도한 뒤 나머지 판정을 갈래로 보낸다.

검증 환경

OpenJDK : 21.0.12 java -version 으로 확인 Gradle : 9.0.0 src/gradle/wrapper/gradle-wrapper.properties 의 distributionUrl 로 확인 확인 방식 : SchemaHistory 참조 10건 검색과 scan 의 스코프 분기별 reserved 수집 위치 확인 소스 수정 : x

재현 조건

원문은 final/document.md#a20-grpc-proto-contract#L265 에 있다.

본문

scan 은 스코프 종류로 갈라진다. reserved 수집은 scanMessageMember 안에만 있다.

SchemaHistory 참조 위치

:::evidence key="grpc-proto-contract-f04" alt="코드베이스에서 SchemaHistory 를 검색한 출력 10줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="SchemaHistory 코드베이스 검색 — 10줄 · exit 0" zoom="true" :::

proto3 는 열거형에도 reserved 를 허용한다

reserved 2, 15;reserved "OLD_VALUE"; 다. 열거형 값을 지울 때 번호를 예약하는 것은 필드와 같은 이유로 필요하다 — 예약하지 않고 재사용하면 옛 클라이언트가 보낸 정수가 다른 뜻으로 해석된다.

그래서 오탐이 난다

SchemaHistory 에 열거형 이름으로 삭제 이력을 넣으면, 스키마가 정확히 예약했더라도 scan.reservedNumbers 에 그 이름이 없으므로 RESERVED_HISTORY 오탐이 난다.

같은 자리에서 고칠 수 있다

§17.1 의 범위 문법 문제와 같은 방향(fail-closed)이다. reserved 수집을 스코프 종류와 무관하게 먼저 시도한 뒤 나머지 판정을 갈래로 보낸다.

확인하지 못한 것

열거형 reserved 오탐을 실행으로 재현하지 않았다. 스코프 분기 코드로 판정했다. 블록 주석 안의 선언이 스캔되는지도 확인하지 않았다.