cob diff#
프로젝트 간 feature 구현 차이를 분석하는 diff 검출 엔진입니다. 파일 구조, Repository 인터페이스 호환성, 구현 품질을 비교하고 Markdown 리포트를 생성합니다.
cob diff --project-a <path> [--project-b <path>] (--feature <name> | --all-features) [options]
옵션#
| 옵션 | 약어 | 설명 | 기본값 |
|---|---|---|---|
--project-a |
-a |
Project A 루트 디렉토리 (단일 분석 모드에서는 분석 대상) | 필수 |
--project-b |
-b |
Project B 루트 디렉토리 (지정 시 비교 모드) | - |
--feature |
-f |
비교할 feature 이름 (예: auth, home) |
- |
--all-features | - | 모든 feature 일괄 비교 | false |
--full-analysis |
- | 품질 분석 포함 (repository mixin 파일 필요) | false |
--output |
-o |
리포트 출력 디렉토리 | claudedocs |
--feature와 --all-features 중 하나는 반드시 지정해야 합니다.
두 가지 모드#
| 모드 | 조건 | 비교 대상 |
|---|---|---|
| 단일 프로젝트 분석 | --project-b 미지정 | 템플릿 프로젝트 vs 기존 bricks |
| 비교 모드 | --project-b 지정 | Project A vs Project B |
단일 프로젝트 모드 (template vs bricks)#
--project-a만 지정하면 템플릿 프로젝트를 기존 bricks와 비교합니다. bricks/ 디렉토리는 프로젝트에서 상위 방향으로 자동 탐색하며, feature는
bricks/app/__brick__/feature/{name}/과 비교됩니다.
# 템플릿 프로젝트와 bricks 비교
cob diff --project-a template/good-teacher --feature auth
# 품질 분석 포함
cob diff --project-a template/good-teacher --feature auth --full-analysis
# 모든 feature를 bricks와 비교
cob diff --project-a template/good-teacher --all-features
feature가 bricks에 아직 없으면 베이스라인 리포트({feature}-baseline-report.md)를 생성하고 sync 명령 실행을 권장합니다.
비교 모드 (두 프로젝트)#
# 두 프로젝트의 feature 비교
cob diff \
--project-a template/good-teacher \
--project-b template/blueprint \
--feature auth
# 모든 feature + 요약 리포트 + 품질 분석
cob diff \
--project-a template/good-teacher \
--project-b template/blueprint \
--all-features \
--full-analysis \
--output claudedocs/diff-reports
분석 컴포넌트#
| 컴포넌트 | 실행 조건 | 분석 내용 |
|---|---|---|
| FeatureDiffer (구조 diff) | 항상 | feature 디렉토리 파일 구조 비교 — 공통/A 전용/B 전용 파일 식별, 레이어(domain/data/presentation)별 필터링 |
| InterfaceAnalyzer (인터페이스 분석) | 공통 data/repository/*_repository.dart 존재 시 (impl 제외) |
AST 기반 Repository 인터페이스 메서드 시그니처 비교 — 시그니처 충돌(같은 메서드, 다른 반환 타입/파라미터), 한쪽에만 있는 메서드 검출 |
| QualityAnalyzer (품질 분석) | --full-analysis + 공통 data/repository/*_mixin.dart 존재 시 |
에러 처리 품질(try-catch, 구체적 예외 타입), 캐싱 전략, 로깅 커버리지, 코드 복잡도 — 권장 구현 제시 |
| DiffReporter (리포트 생성) | 항상 | Markdown 리포트 생성 — 요약, 섹션별 상세 분석, sync/merge 권장사항 |
해당 파일이 없으면 각 분석은 건너뛰며(No repository interfaces found 등), 리포트에는 미분석으로 표기됩니다.
리포트 위치#
| 리포트 | 경로 | 생성 조건 |
|---|---|---|
| 개별 feature 리포트 | {output}/{feature}-diff-report.md | feature별로 항상 |
| 요약 리포트 | {output}/features-summary.md |
--all-features |
| 베이스라인 리포트 | {output}/{feature}-baseline-report.md |
단일 모드에서 feature가 bricks에 없을 때 |
기본 출력 디렉토리는 claudedocs/이며 --output으로 변경할 수 있습니다.
사용 사례#
| 모드 | 사례 |
|---|---|
| 단일 프로젝트 | sync 전 템플릿 변경 검증, 신규 feature 검출(베이스라인 생성), 템플릿-bricks 드리프트 감지, 브릭 패턴 대비 품질 개선 |
| 비교 모드 | openapi vs serverpod 등 구현 방식 비교 학습, 프로젝트 간 이식 대상 feature 식별, 베스트 프랙티스 판별, 병합 전 충돌 분석 |
종료 코드#
| 코드 | 조건 |
|---|---|
0 (success) | 분석 완료 |
64 (usage) | --feature/--all-features 둘 다 미지정 |
66 (noInput) | Project A 또는 B 디렉토리가 존재하지 않음 |
70 (software) | 분석 중 예기치 못한 오류 |