schema-version: 1 repository-snapshot-hash: sha256:c20f64d403a220484a181c484ded61def423b59a42cbec9f228fa17e97b0a8d7 project-name: ca-skeleton languages: - Java frameworks: - Spring Boot 4.0.0 - Gradle facts: - id: F-IDENTITY-001 category: adoption key: template-identifiers value: gradle-root-name: ca-skeleton java-package-root: dev.caskeleton main-class: dev.caskeleton.bootstrap.CaSkeletonApplication assertion-type: observed confidence: high evidence: - path: src/settings.gradle line-start: 5 line-end: 5 source-kind: build-configuration - path: src/app-bootstrap/src/main/java/dev/caskeleton/bootstrap/CaSkeletonApplication.java line-start: 1 line-end: 20 symbol: CaSkeletonApplication source-kind: implementation - id: F-STACK-001 category: stack key: runtime-and-framework value: java: 21 java-distribution: temurin-21.0.11+10 spring-boot: 4.0.0 assertion-type: observed confidence: high evidence: - path: .tool-versions line-start: 1 line-end: 1 source-kind: tool-version-configuration - path: src/build.gradle line-start: 5 line-end: 7 source-kind: build-configuration - path: src/build.gradle line-start: 103 line-end: 107 source-kind: build-configuration - id: F-MODULES-001 category: architecture key: declared-modules value: core: [domain-core, application-core, shared-contract] inbound: [web, grpc, graphql, websocket] outbound: [persistence-jpa, support, messaging, cache-redis, notification, objectstorage, fileserver, persistence-mongo, httpclient, identifier] composition: [app-bootstrap] sample: [sample-portfolio] assertion-type: observed confidence: high evidence: - path: src/settings.gradle line-start: 5 line-end: 25 source-kind: build-configuration - id: F-DEPENDENCY-POLICY-001 category: architecture key: module-dependency-policy value: Gradle의 verifyCleanArchitectureDependencies가 모든 선언 모듈을 정책에 포함시키고 허용되지 않은 프로젝트 의존성을 실패시킨다. assertion-type: observed confidence: high evidence: - path: src/build.gradle line-start: 553 line-end: 615 symbol: verifyCleanArchitectureDependencies source-kind: executable-build-rule - id: F-CODE-BOUNDARY-001 category: architecture key: code-boundary-policy value: ArchUnit 규칙이 application 패키지의 adapter·bootstrap·transport·persistence 의존과 Spring @Transactional 사용을 금지한다. assertion-type: observed confidence: high evidence: - path: src/app-bootstrap/src/test/java/dev/caskeleton/bootstrap/architecture/CleanArchitectureTest.java line-start: 197 line-end: 228 source-kind: executable-test-rule - id: F-CORE-001 category: architecture key: core-responsibilities value: domain-core: 외부 라이브러리 의존성이 없는 도메인 모듈 application-core: domain-core와 shared-contract를 의존하는 유스케이스 모듈 shared-contract: 비즈니스 개념을 두지 않는 공용 운영 계약 모듈 assertion-type: derived confidence: high evidence: - path: src/domain-core/build.gradle line-start: 1 line-end: 3 source-kind: build-configuration - path: src/application-core/build.gradle line-start: 1 line-end: 15 source-kind: build-configuration - path: src/shared-contract/build.gradle line-start: 1 line-end: 3 source-kind: build-configuration - id: F-COMPOSITION-001 category: architecture key: composition-root value: app-bootstrap가 core, inbound web, 여러 outbound adapter, shared-contract를 조립하고 Spring Boot main class를 지정한다. assertion-type: observed confidence: high evidence: - path: src/app-bootstrap/build.gradle line-start: 41 line-end: 58 source-kind: build-configuration - path: src/app-bootstrap/build.gradle line-start: 174 line-end: 176 source-kind: build-configuration - id: F-SAMPLE-001 category: adoption key: sample-removal-contract value: sample-portfolio는 일반 테스트에서만 sampleFixture로 연결되며 sampleOffTest는 같은 핵심 테스트 스위트를 샘플 없이 컴파일하고 실행한다. assertion-type: observed confidence: high evidence: - path: src/app-bootstrap/build.gradle line-start: 14 line-end: 38 source-kind: build-configuration - path: src/app-bootstrap/build.gradle line-start: 95 line-end: 100 source-kind: build-configuration - path: src/app-bootstrap/build.gradle line-start: 135 line-end: 147 symbol: sampleOffTest source-kind: executable-build-rule - id: F-BOOTSTRAP-001 category: command key: local-bootstrap-contract value: bootstrap은 전체 소스 컴파일, Docker daemon 확인, PostgreSQL 시작, 앱 빌드·시작, 샘플 격리 계약, HTTP smoke check를 순서대로 실행한다. assertion-type: observed confidence: high evidence: - path: src/build.gradle line-start: 345 line-end: 435 symbol: bootstrap source-kind: executable-build-rule - id: F-HEALTH-001 category: endpoint key: bootstrap-success-signal value: bootstrap smoke check는 http://localhost:8080/api/healthcheck의 HTTP 200 응답과 status UP을 요구한다. assertion-type: observed confidence: high evidence: - path: src/build.gradle line-start: 396 line-end: 426 symbol: bootstrapSmoke source-kind: executable-build-rule - path: src/adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/controller/HealthcheckController.java line-start: 10 line-end: 17 symbol: HealthcheckController source-kind: implementation - id: F-CONTAINER-001 category: runtime key: local-compose-topology value: 로컬 Compose 구성은 app과 PostgreSQL 16 서비스를 연결하고 named volume에 데이터베이스 데이터를 보존한다. assertion-type: observed confidence: high evidence: - path: docker-compose.yml line-start: 26 line-end: 80 source-kind: container-configuration - path: docker-compose.local.yml line-start: 15 line-end: 83 source-kind: container-configuration - id: F-LOCKS-001 category: verification key: dependency-lock-policy value: 각 leaf module은 모든 구성을 STRICT 모드로 잠그며 잠금 상태 검증 태스크가 실제 dependency resolution을 수행한다. assertion-type: observed confidence: high evidence: - path: src/build.gradle line-start: 109 line-end: 167 source-kind: executable-build-rule - id: F-CHECK-001 category: verification key: check-aggregation value: 각 leaf module의 check는 아키텍처 의존성, 환경 키, 산출물, 타입 배치, 취약점 예외, 격리 테스트 만료, README 명령 검증을 포함한다. assertion-type: observed confidence: high evidence: - path: src/build.gradle line-start: 273 line-end: 280 source-kind: executable-build-rule - path: src/build.gradle line-start: 437 line-end: 550 symbol: verifyReadmeCommands source-kind: executable-build-rule - id: F-VERIFICATION-COMMANDS-001 category: command key: documented-verification-tasks value: - ./gradlew test - ./gradlew verifyCleanArchitectureDependencies - ./gradlew :app-bootstrap:sampleOffTest - ./gradlew check assertion-type: derived confidence: high evidence: - path: src/build.gradle line-start: 247 line-end: 280 source-kind: executable-build-rule - path: src/build.gradle line-start: 553 line-end: 615 symbol: verifyCleanArchitectureDependencies source-kind: executable-build-rule - path: src/app-bootstrap/build.gradle line-start: 135 line-end: 147 symbol: sampleOffTest source-kind: executable-build-rule - id: F-DOCS-001 category: documentation key: detailed-documentation value: 빌드 루트, 핵심 모듈, inbound·outbound adapter에 각각 README가 있고 환경·운영 계약은 docs 아래 레지스트리와 runbook으로 분리되어 있다. assertion-type: observed confidence: high evidence: - path: src/README.md source-kind: documentation-index - path: src/domain-core/README.md source-kind: module-documentation - path: src/application-core/README.md source-kind: module-documentation - path: src/adapter/inbound/web/README.md source-kind: module-documentation - path: src/adapter/outbound/persistence-jpa/README.md source-kind: module-documentation - path: docs/registries/env-keys.yaml source-kind: configuration-registry - path: docs/runbooks/template.md source-kind: runbook-template - id: F-TEMPLATE-LIMIT-001 category: limitation key: adoption-decisions value: 템플릿은 여러 inbound·outbound adapter seam과 PostgreSQL 로컬 구성을 제공하지만 실제 서비스가 사용할 adapter와 배포 환경 선택은 도입자가 결정해야 한다. assertion-type: derived confidence: high evidence: - path: src/settings.gradle line-start: 7 line-end: 25 source-kind: build-configuration - path: docker-compose.local.yml line-start: 15 line-end: 83 source-kind: container-configuration commands: - id: CMD-001 command: ./gradlew bootstrap cwd: src source: path: src/build.gradle line-start: 431 line-end: 435 verification: status: static-verified method: gradle-task-discovery level: static - id: CMD-002 command: docker compose -f docker-compose.yml -f docker-compose.local.yml down cwd: . source: path: docker-compose.local.yml line-start: 15 line-end: 83 verification: status: static-verified method: compose-file-discovery level: static - id: CMD-003 command: ./gradlew test cwd: src source: path: src/build.gradle line-start: 247 line-end: 251 verification: status: static-verified method: gradle-lifecycle-task level: static - id: CMD-004 command: ./gradlew :app-bootstrap:sampleOffTest cwd: src source: path: src/app-bootstrap/build.gradle line-start: 135 line-end: 147 verification: status: static-verified method: gradle-task-discovery level: static - id: CMD-005 command: ./gradlew verifyCleanArchitectureDependencies cwd: src source: path: src/build.gradle line-start: 553 line-end: 615 verification: status: static-verified method: gradle-task-discovery level: static - id: CMD-006 command: ./gradlew check cwd: src source: path: src/build.gradle line-start: 273 line-end: 280 verification: status: static-verified method: gradle-lifecycle-task level: static