Files
readme-haness/runs/ca-tmpl/20260717-quality-core-r2/claim-map.yaml
T

189 lines
8.6 KiB
YAML

schema-version: 1
claims:
- id: C-STACK-001
type: factual
statement: "`ca-tmpl`은 Java 21과 Spring Boot 4.0.0을 기준으로 구성된 멀티 모듈 서비스 템플릿입니다."
section: overview
sources: [{fact-id: F-STACK-001}, {fact-id: F-MODULES-001}]
status: supported
- id: C-POSITION-001
type: factual
statement: "이 저장소의 초점은 기능 예제를 많이 제공하는 데 있지 않습니다. domain, application, adapter, bootstrap의 책임을 나누고, 그 경계가 기능 추가 과정에서 무너지지 않도록 Gradle과 ArchUnit 검증을 함께 제공하는 데 있습니다."
section: overview
sources: [{fact-id: F-DEPENDENCY-POLICY-001}, {fact-id: F-CODE-BOUNDARY-001}]
status: supported
- id: C-MODULE-COUNT-001
type: factual
statement: "19개 Gradle 모듈이 core, inbound adapter, outbound adapter, composition root, sample 역할로 선언되어 있습니다."
section: overview
sources: [{fact-id: F-MODULES-001}]
status: supported
- id: C-FORCED-DEPS-001
type: factual
statement: "모든 선언 모듈을 의존성 정책에 포함하고 허용되지 않은 프로젝트 의존성을 실패시킵니다."
section: project-value
sources: [{fact-id: F-DEPENDENCY-POLICY-001}]
status: supported
- id: C-FORCED-CODE-001
type: factual
statement: "application 코드가 adapter·bootstrap·transport·persistence에 의존하지 못하도록 검사합니다."
section: project-value
sources: [{fact-id: F-CODE-BOUNDARY-001}]
status: supported
- id: C-FORCED-LOCKS-001
type: factual
statement: "leaf module의 모든 dependency configuration을 STRICT lock mode로 검증합니다."
section: project-value
sources: [{fact-id: F-LOCKS-001}]
status: supported
- id: C-FORCED-SAMPLE-001
type: factual
statement: "같은 핵심 테스트를 `sample-portfolio` 없이 컴파일·실행하는 경로를 제공합니다."
section: project-value
sources: [{fact-id: F-SAMPLE-001}]
status: supported
- id: C-VISUAL-MEANING-001
type: factual
statement: "다음 그림의 화살표는 런타임 호출 순서가 아니라 허용된 프로젝트 의존 방향을 요약합니다."
section: architecture
sources: [{fact-id: F-DEPENDENCY-POLICY-001}]
status: supported
- id: C-DOMAIN-001
type: factual
statement: "외부 라이브러리 의존성 없이 비즈니스 불변식과 도메인 타입을 둡니다."
section: architecture
sources: [{fact-id: F-CORE-001}]
status: supported
- id: C-APPLICATION-001
type: factual
statement: "`domain-core`와 `shared-contract`에 의존하며 유스케이스와 port를 둡니다."
section: architecture
sources: [{fact-id: F-CORE-001}]
status: supported
- id: C-ADAPTERS-001
type: factual
statement: "전송 계층 입력과 기술별 출력 구현을 core 바깥에 둡니다."
section: architecture
sources: [{fact-id: F-MODULES-001}, {fact-id: F-DEPENDENCY-POLICY-001}]
status: supported
- id: C-SHARED-001
type: factual
statement: "비즈니스 개념이 아닌 공용 운영 계약을 둡니다."
section: architecture
sources: [{fact-id: F-CORE-001}]
status: supported
- id: C-BOOTSTRAP-MODULE-001
type: factual
statement: "선택한 core와 adapter를 조립하고 Spring Boot 진입점을 소유합니다."
section: architecture
sources: [{fact-id: F-COMPOSITION-001}]
status: supported
- id: C-SAMPLE-ROLE-001
type: factual
statement: "템플릿 사용법을 보여주는 참조 구현이며 일반 테스트의 fixture로만 연결됩니다."
section: architecture
sources: [{fact-id: F-SAMPLE-001}]
status: supported
- id: C-TWO-LAYERS-001
type: factual
statement: "Gradle의 `verifyCleanArchitectureDependencies`는 모듈 간 의존 방향을, `CleanArchitectureTest`는 application 패키지의 adapter·transport 접근과 같은 코드 수준 경계를 검사합니다."
section: architecture
sources: [{fact-id: F-DEPENDENCY-POLICY-001}, {fact-id: F-CODE-BOUNDARY-001}]
status: supported
- id: C-PREREQUISITES-001
type: factual
statement: "필요한 도구는 JDK 21과 실행 중인 Docker daemon입니다. 저장소의 도구 버전 파일은 Temurin 21.0.11+10을 지정하고, bootstrap preflight는 Docker CLI가 daemon에 연결되는지 확인합니다."
section: quick-start
sources: [{fact-id: F-STACK-001}, {fact-id: F-BOOTSTRAP-001}]
status: supported
- id: C-BOOTSTRAP-COMMAND-001
type: factual
statement: "`./gradlew bootstrap`은 전체 소스 컴파일, Docker 확인, 로컬 PostgreSQL과 앱 시작, sample 격리 계약, HTTP smoke check를 순서대로 실행합니다."
section: quick-start
sources: [{fact-id: F-BOOTSTRAP-001}]
status: supported
- id: C-HEALTH-001
type: factual
statement: "성공 조건은 `http://localhost:8080/api/healthcheck`가 HTTP 200과 `status=UP`을 반환하는 것입니다."
section: quick-start
sources: [{fact-id: F-HEALTH-001}]
status: supported
- id: C-BOOTSTRAP-SIDE-EFFECT-001
type: factual
statement: "bootstrap은 Compose의 `app`과 `db` 서비스를 백그라운드로 시작합니다."
section: quick-start
sources: [{fact-id: F-BOOTSTRAP-001}, {fact-id: F-CONTAINER-001}]
status: supported
- id: C-CLEANUP-001
type: factual
statement: "위 Compose 명령은 저장소에 선언된 base와 local 구성 파일을 함께 사용해 서비스를 종료합니다."
section: quick-start
sources: [{fact-id: F-CONTAINER-001}]
status: supported
- id: C-IDENTITY-001
type: factual
statement: "Gradle root name은 `ca-skeleton`, Java package root와 main class는 `dev.caskeleton` 아래에 선언되어 있으므로 서비스 이름과 namespace 정책에 맞게 함께 변경합니다."
section: adoption
sources: [{fact-id: F-IDENTITY-001}]
status: supported
- id: C-ADOPT-SAMPLE-001
type: factual
statement: "`sample-portfolio`는 일반 테스트의 `sampleFixture`로만 연결되며 `sampleOffTest`는 샘플 없는 classpath에서 같은 핵심 테스트 corpus를 실행합니다."
section: adoption
sources: [{fact-id: F-SAMPLE-001}]
status: supported
- id: C-NEW-MODULE-POLICY-001
type: factual
statement: "새 모듈을 추가하면 Gradle 의존성 정책에도 명시적으로 등록해야 합니다."
section: adoption
sources: [{fact-id: F-DEPENDENCY-POLICY-001}]
status: supported
- id: C-VERIFY-TEST-001
type: factual
statement: "일반 테스트: `./gradlew test`"
section: verification
sources: [{fact-id: F-VERIFICATION-COMMANDS-001}]
status: supported
- id: C-VERIFY-ARCH-001
type: factual
statement: "모듈 의존 방향만 빠르게 확인: `./gradlew verifyCleanArchitectureDependencies`"
section: verification
sources: [{fact-id: F-VERIFICATION-COMMANDS-001}, {fact-id: F-DEPENDENCY-POLICY-001}]
status: supported
- id: C-VERIFY-SAMPLE-001
type: factual
statement: "sample 제거 가능성 확인: `./gradlew :app-bootstrap:sampleOffTest`"
section: verification
sources: [{fact-id: F-VERIFICATION-COMMANDS-001}, {fact-id: F-SAMPLE-001}]
status: supported
- id: C-VERIFY-CHECK-001
type: factual
statement: "전체 품질 계약: `./gradlew check`"
section: verification
sources: [{fact-id: F-VERIFICATION-COMMANDS-001}, {fact-id: F-CHECK-001}]
status: supported
- id: C-CHECK-SCOPE-001
type: factual
statement: "`check`는 테스트뿐 아니라 아키텍처 의존성, 환경 키, 산출물, 타입 배치, 취약점 예외, quarantine 만료, README 명령 검증을 집계합니다."
section: verification
sources: [{fact-id: F-CHECK-001}]
status: supported
- id: C-DOCS-STRATEGY-001
type: evaluative
statement: "README는 판단과 첫 실행에 필요한 정보만 유지합니다. 세부 계약은 소유 위치에서 확인하십시오."
section: documentation
sources: []
status: supported
- id: C-LIMIT-CHOICES-001
type: factual
statement: "여러 inbound·outbound adapter 모듈이 포함되어 있지만 실제 서비스가 채택할 범위와 배포 환경은 템플릿이 결정하지 않습니다."
section: documentation
sources: [{fact-id: F-TEMPLATE-LIMIT-001}]
status: supported
- id: C-LIMIT-LOCAL-001
type: factual
statement: "기본 로컬 실행 경로는 Docker와 PostgreSQL 16 Compose 서비스를 전제로 합니다."
section: documentation
sources: [{fact-id: F-BOOTSTRAP-001}, {fact-id: F-CONTAINER-001}]
status: supported