67 lines
3.2 KiB
Markdown
67 lines
3.2 KiB
Markdown
---
|
|
kind: PROJECT_DECISION
|
|
slug: capability-grade-is-declared-not-inferred
|
|
title: 지원 등급은 추론이 아니라 선언이고 증거 없이는 올라가지 않는다
|
|
topic: drift-direction
|
|
project: clean-architecture-backend-template
|
|
status: 게시 전
|
|
sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916
|
|
rootTreeNode: decision:capability-grade-is-declared-not-inferred
|
|
decisionStatus: ADOPTED
|
|
decidedOn: 2026-08-30
|
|
source:
|
|
- src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/api/capability/CapabilitySupport.java
|
|
- src/gradle/jpa-evidence.gradle
|
|
- src/messaging/messaging-testkit/src/test/java/dev/caskeleton/messaging/testkit/MessagingDocumentationContractTest.java
|
|
- final/document.md#a05
|
|
- final/document.md#a19
|
|
- final/document.md#a20
|
|
- final/document.md#10-5
|
|
---
|
|
|
|
# 지원 등급은 추론이 아니라 선언이고 증거 없이는 올라가지 않는다
|
|
|
|
## 결정문
|
|
|
|
능력의 지원 등급은 코드가 존재한다는 사실에서 추론하지 않고 명시적으로 선언하며, 승격은 정해진 증거를 요구한다.
|
|
|
|
## 판단 이유
|
|
|
|
코드가 있다는 것과 그 능력이 지원된다는 것은 다르다. 이 저장소에는 그 차이가 실제로 벌어진 사례가 여럿 있다. 조립되지 않은 능력, 소비자가 없는 코디네이터, 적용 지점이 없는 검증기가 그렇다.
|
|
|
|
등급을 추론하면 그 사례들이 전부 지원으로 보고된다. 코드가 있기 때문이다.
|
|
|
|
그래서 등급을 값으로 둔다. 능력 선언 레코드가 능력과 등급과 제약 목록을 담고, 그 값이 리포트로 공개된다.
|
|
|
|
승격에는 증거가 붙는다. 증거에는 등급이 있고, 높은 등급은 결과의 내용뿐 아니라 출처까지 요구한다. 어떤 프로파일에서 돌았는지, 워크트리가 깨끗했는지, 실제 CI 잡이었는지, 산출물이 외부에 보존되었는지다.
|
|
|
|
그리고 실험 등급이 안정으로 적히지 않는지를 문서 계약 테스트가 확인한다.
|
|
|
|
## 영향
|
|
|
|
감수하는 것
|
|
|
|
능력이 실제로 동작하는데 선언이 없으면 지원되지 않는 것으로 보고된다. 과소 진술 방향의 드리프트가 생길 수 있다.
|
|
|
|
증거 조건을 만족시키려면 CI 를 거쳐야 한다. 로컬에서 승격할 수 없다.
|
|
|
|
선언과 코드가 어긋날 수 있다. 능력 표의 한 칸이 코드와 반대를 적은 사례가 실제로 있었고, 그것을 잡는 단언은 아직 없다.
|
|
|
|
얻는 것
|
|
|
|
조립되지 않은 코드가 지원으로 보고되지 않는다.
|
|
|
|
등급이 값이므로 리포트로 공개할 수 있고 기계로 검증할 수 있다.
|
|
|
|
## 근거
|
|
|
|
- **증거 등급과 provenance — R1과 R2를 가르는 것**
|
|
승격이 요구하는 증거 체계다.
|
|
- **후보 증거는 통과해도 R1에 머무르고 R2는 별도 게이트가 판정한다**
|
|
같은 체계의 승격 규칙이다.
|
|
- **지원 매트릭스가 코드와 반대를 적었고, 그 오해가 소비자에게 자기 멱등성을 생략하게 한다**
|
|
선언과 문서가 어긋난 사례다.
|
|
- **진단 리포트가 살아 있는 리소스를 담지 않도록 값 타입을 좁혔다**
|
|
등급을 담는 값 타입이 지키는 제약이다.
|
|
|