{ "sources": [ { "id": "Lbe6cb7d8e8", "title": "branch / feature-application-port-usecase-contract — 결정 사항", "url": "repo:///raw/branch-notes/feature-application-port-usecase-contract.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## 결정 사항\n\n- D3: transaction boundary는 application use case 책임이지만 Spring `@Transactional` 직접 import는 금지하고 `TransactionPort` abstraction을 기본값으로 둔다.\n- D11: `TransactionPort`는 `Supplier`와 `Runnable` 시그니처를 유지한다.\n- D13: `application-core`는 `org.springframework.stereotype.Service`와 `Component` 사용을 DI 등록 목적으로 허용한다. `spring-context`와 `spring-beans` 의존은 유지한다.\n- D13 이유: Spring DI까지 제거하면 use case bean마다 `@Configuration`에서 수동 등록해야 하므로 조립 코드가 급격히 늘어난다.\n- D13 경계: `spring-tx`, Spring Web, JPA annotation은 계속 금지한다. 편의 때문에 application layer의 책임을 transaction, transport, persistence까지 넓히지 않는다." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "branch-note", "status": "verified", "path": "raw/branch-notes/feature-application-port-usecase-contract.md", "heading": "결정 사항", "line_start": 14, "line_end": 21, "claim_ids": [], "decision_ids": [ "D11", "D13", "D3" ], "priority": 26.36788 }, { "id": "Lf440ea562d", "title": "branch / feature-application-port-usecase-contract — 선택의 비용", "url": "repo:///raw/branch-notes/feature-application-port-usecase-contract.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## 선택의 비용\n\n`application-core`가 Spring core DI 의존을 갖는다는 비용은 수용한다. 대신 허용 목적을 bean 등록으로 좁히고, transaction, transport, persistence 의존은 빌드 규칙과 ArchUnit으로 차단한다." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "branch-note", "status": "verified", "path": "raw/branch-notes/feature-application-port-usecase-contract.md", "heading": "선택의 비용", "line_start": 26, "line_end": 28, "claim_ids": [], "decision_ids": [], "priority": 24.851643 }, { "id": "L1259369d94", "title": "branch / feature-log-management-contract — 근거 경계", "url": "repo:///raw/branch-notes/feature-log-management-contract.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## 근거 경계\n\n`domain layer logger 금지`는 외부 공식 문서가 직접 증명한 보편 원칙이 아니라 ca-tmpl 내부 정책이다. 외부 공개 글에서는 프로젝트 지역 결정으로만 표현한다.\n\n이 문서는 `application-core`가 SLF4J를 사용하는 이유를 설명하지 않는다. 단어가 등장하거나 로거가 존재한다는 사실만으로 선택 이유를 만들어내지 않는다." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "branch-note", "status": "raw", "path": "raw/branch-notes/feature-log-management-contract.md", "heading": "근거 경계", "line_start": 15, "line_end": 19, "claim_ids": [], "decision_ids": [], "priority": 16.777009 }, { "id": "L6d3ebbb7a0", "title": "branch / feature-application-port-usecase-contract — 구현 및 검증", "url": "repo:///raw/branch-notes/feature-application-port-usecase-contract.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## 구현 및 검증\n\n`application-core`의 `spring-tx` 의존성을 제거했다. `@Transactional`이 compile classpath에 없도록 했다. `application_does_not_use_spring_transactional_annotation`과 `application_does_not_depend_on_application_context` ArchUnit rule을 두고 negative fixture로 위반 검출을 확인했다." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "branch-note", "status": "verified", "path": "raw/branch-notes/feature-application-port-usecase-contract.md", "heading": "구현 및 검증", "line_start": 22, "line_end": 25, "claim_ids": [], "decision_ids": [], "priority": 16.747122 }, { "id": "L8db0ff5b86", "title": "ca-tmpl - Clean Architecture 패키지 레이아웃 결정 — 검증 범위", "url": "repo:///wiki/projects/ca-tmpl/clean-architecture-package-layout.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## 검증 범위\n\nmodule dependency matrix와 ArchUnit rule은 로컬에서 검증했다. 운영 배포와 운영 metric으로 검증한 결과는 없다." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "canonical-project", "status": "verified", "path": "wiki/projects/ca-tmpl/clean-architecture-package-layout.md", "heading": "검증 범위", "line_start": 28, "line_end": 30, "claim_ids": [], "decision_ids": [], "priority": 12.97464 }, { "id": "L54271e62b5", "title": "ca-tmpl - Clean Architecture 패키지 레이아웃 결정 — 경계 검증", "url": "repo:///wiki/projects/ca-tmpl/clean-architecture-package-layout.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## 경계 검증\n\nGradle의 `verifyCleanArchitectureDependencies`는 project dependency graph를 검사한다. ArchUnit의 `CleanArchitectureTest`는 source import graph를 검사한다. 두 검사는 서로 다른 그래프를 담당한다.\n\n정적 분석은 모든 우회를 잡지 못한다. `getBean(String)`, `Class.forName(String)`, `BeanFactory#getBeansOfType` 같은 reflection-style bypass는 code review checklist로 보완한다." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "canonical-project", "status": "verified", "path": "wiki/projects/ca-tmpl/clean-architecture-package-layout.md", "heading": "경계 검증", "line_start": 22, "line_end": 27, "claim_ids": [], "decision_ids": [], "priority": 11.338676 }, { "id": "Ld4394f2f14", "title": "ca-tmpl - Clean Architecture 패키지 레이아웃 결정 — 실제 구현 내용", "url": "repo:///wiki/projects/ca-tmpl/clean-architecture-package-layout.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## 실제 구현 내용\n\n`domain-core`는 Spring, JPA, Servlet, Hibernate, Lombok, application, adapter, bootstrap 의존을 금지해 framework-neutral POJO 경계를 유지한다.\n\n`application-core`는 adapter와 bootstrap, Spring Web, persistence, Hibernate에 의존하지 못한다. `@Transactional`과 `ApplicationContext` 직접 의존도 금지한다.\n\n`shared-contract`는 response, request, error, operation, headers, logging, tracing, metrics, registry, annotation 같은 운영 계약 package만 허용한다. business common dumping ground로 사용하지 않는다." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "canonical-project", "status": "verified", "path": "wiki/projects/ca-tmpl/clean-architecture-package-layout.md", "heading": "실제 구현 내용", "line_start": 14, "line_end": 21, "claim_ids": [], "decision_ids": [], "priority": 11.111827 }, { "id": "Lcb081a533b", "title": "Spring component stereotype and scanning notes — Evidence boundary", "url": "repo:///raw/official-docs/spring-component-scanning.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## Evidence boundary\n\nThis vendor behavior explains what the annotations do. It does not prove why a particular project chose to use them, nor does it prove which other Spring dependencies the project allows. Project rationale must come from the project's own decision record." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "official-doc", "status": "reviewed", "path": "raw/official-docs/spring-component-scanning.md", "heading": "Evidence boundary", "line_start": 13, "line_end": 15, "claim_ids": [], "decision_ids": [], "priority": 7.048668 }, { "id": "L058b642200", "title": "Spring component stereotype and scanning notes — Supported behavior", "url": "repo:///raw/official-docs/spring-component-scanning.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## Supported behavior\n\nSpring stereotype annotations such as `@Component` and `@Service` mark classes as candidates for component scanning and container registration." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "official-doc", "status": "reviewed", "path": "raw/official-docs/spring-component-scanning.md", "heading": "Supported behavior", "line_start": 9, "line_end": 12, "claim_ids": [], "decision_ids": [], "priority": 4.977786 }, { "id": "L0ed1686206", "title": "branch / feature-log-management-contract — 결정 사항", "url": "repo:///raw/branch-notes/feature-log-management-contract.md", "publisher": "local documentation corpus", "accessed": "", "facts": [ "## 결정 사항\n\n- 운영 로그는 structured JSON을 기본 포맷으로 둔다.\n- domain layer logger는 금지하고 domain invariant violation을 application layer에서 client-safe diagnostic log로 변환한다." ], "notes": "Internal retrieval excerpt. Preserve provenance in the sidecar evidence map; do not copy repository paths, source IDs, access dates, or process language into reader-facing prose.", "source_type": "branch-note", "status": "raw", "path": "raw/branch-notes/feature-log-management-contract.md", "heading": "결정 사항", "line_start": 10, "line_end": 14, "claim_ids": [], "decision_ids": [], "priority": 2.365 } ] }