Files
readme-haness/runs/ca-tmpl/20260717-quality-core-r2/repository-facts.yaml
T

361 lines
12 KiB
YAML

schema-version: 1
repository-snapshot-hash: sha256:4d351050ecdfa25ea9e39b22c7c5bc0c686b60aa1f9fef7a02f86ae073151f1e
project-name: ca-skeleton
languages:
- Java
frameworks:
- Spring Boot 4.0.0
- Gradle
facts:
- id: F-README-CONTRACT-001
category: readme-contract
key: required-literals
value:
- ./gradlew bootstrap
- GET /api/healthcheck
- feature-developer-experience-contract
assertion-type: observed
confidence: high
evidence:
- path: src/app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/DeveloperExperienceContractTest.java
line-start: 52
line-end: 64
symbol: readmeCommandsAreVerifiedAndBootstrapIsTheFirstRunEntrypoint
source-kind: executable-test-contract
- 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