이 문서는 RepoPilot 프로젝트의 최상위 개발 규칙이다.
세부 모듈 규칙은 docs/agents/*.md를 반드시 함께 따른다.
- Clean Architecture + DDD + Hexagonal Architecture(Ports & Adapters)를 절대적으로 준수한다.
- 의존성 방향을 절대 역전시키지 않는다.
- 빠른 구현보다 경계(boundary) 보존을 우선한다.
- 아키텍처 위반이 발생하면 기능 추가보다 먼저 구조를 바로잡는다.
- 포트는
application이 소유하고, 어댑터 구현은infrastructure/interface에 둔다.
허용되는 의존성 방향:
interface -> applicationapplication -> domaininfrastructure -> application(ports), domainmain/lib(조립) -> 모든 계층
Hexagonal 해석:
application: 유스케이스 + 포트(inside)interface: 인바운드 어댑터(사용자 입력)infrastructure: 아웃바운드 어댑터(외부 시스템 연동)
금지:
domain -> application/infrastructure/interfaceapplication -> infrastructure/interfaceinterface -> infrastructure(단, main의 조립 단계에서 주입은 허용)
src/domain: 엔티티, 값 객체, 도메인 정책src/application: 유스케이스, 포트(인터페이스)src/infrastructure: 외부 시스템 연동 구현체src/interface: CLI 입출력 어댑터src/main.rs,src/lib.rs: composition root / 실행 진입점
- 새 코드가 어느 계층인지 먼저 명시한다.
- 포트가 필요한지 먼저 판단하고, 구현체를 바로 만들지 않는다.
- 도메인 규칙은
domain에, 흐름 제어는application에 둔다. - 외부 API/CLI/파일/네트워크 접근은
infrastructure에만 둔다. - 신규 외부 연동은
application포트 정의 후infrastructure/interface어댑터로 구현한다. cargo check통과를 기본 완료 조건으로 한다.cargo clippy -- -D warnings린트 검사를 반드시 통과한다.- 모든 소스 파일에는 최소 1개 이상의 주석(
//!,///,//)을 포함한다.
- 이 루트
AGENTS.md docs/agents/README.md- 해당 모듈 상세 문서 (
docs/agents/domain.md등)
충돌 시 더 상위 문서의 규칙을 따른다.
- 편의상 계층을 건너뛰는 직접 참조
- 유스케이스 내부에서 구체 인프라 타입 직접 생성
- 도메인 타입 안에 HTTP/CLI/환경변수 접근 로직 혼합
- "일단 동작"을 이유로 구조 위반 커밋
refactor(domain): ...refactor(application): ...refactor(infrastructure): ...refactor(interface): ...
기능 커밋과 구조 커밋을 가능한 분리한다.