Merge Generation
Need User Feedback분기된 브랜치를 병합해야 할 때, REAP는 일반 Generation 라이프사이클과 별도인 6단계 특수 라이프사이클인 Merge Generation을 실행합니다. 핵심 원칙: genome을 먼저 정렬한 후 소스 코드를 병합합니다.
Merge Generation이 일반 git merge와 다른 이유는?
일반 git merge는 소스 코드 충돌만 해결합니다. 하지만 두 브랜치가 독립적으로 진화하면서 — 각자의 Generation, genome 변경, 설계 결정이 있다면 — 소스 코드만 병합하는 것으로는 충분하지 않습니다. genome(아키텍처 원칙, 컨벤션, 제약, 비즈니스 규칙)도 분기되었을 수 있습니다. Merge Generation은 소스 merge 전에 세 가지 중요한 단계를 추가합니다: genome 분기 감지, mating(genome 충돌 해결), merge 후 genome-소스 일관성 검증. 이를 통해 병합된 코드베이스가 단순히 컴파일만 되는 것이 아니라 설계적으로도 일관됨을 보장합니다.
소스 충돌 → 해결 → 커밋. 설계 일관성을 확인하지 않습니다. 의미적 충돌이 감지되지 않습니다.
먼저 genome 정렬 → genome에 기반한 소스 merge → genome-소스 일관성 검증 → validation → 커밋. 보이지 않는 의미적 충돌을 포착합니다.
왜 genome 정렬이 먼저인가
소스 코드 충돌을 해결한다고 해서 의미적 충돌이 없다는 보장은 되지 않습니다. 두 코드가 깔끔하게 병합될 수 있습니다 — git 충돌이 전혀 없이 — 그러면서도 의도, 아키텍처, 비즈니스 로직에서 서로 모순될 수 있습니다. genome 기반 추론만이 이러한 보이지 않는 충돌을 감지할 수 있습니다: 병합된 코드가 아키텍처 원칙을 여전히 따르는가? 컨벤션이 일관적인가? 비즈니스 규칙이 정렬되는가? 이것이 REAP가 소스 코드에 손대기 전에 genome을 정렬하는 이유입니다. genome이 확정되면 소스 충돌을 해결하기 위한 권위 있는 가이드가 됩니다 — 구문적으로만이 아니라 의미적으로도.
단계 순서
| 단계 | 수행 내용 | 산출물 |
|---|---|---|
| Detect | git ref를 통해 대상 브랜치를 스캔합니다. DAG BFS로 공통 조상을 찾습니다. genome diff를 추출합니다. 충돌을 WRITE-WRITE 또는 CROSS-FILE로 분류합니다. | 01-detect.md |
| Mate | 모든 genome 충돌을 인간에게 제시합니다. WRITE-WRITE: A, B 선택 또는 수동 병합. CROSS-FILE: 논리적 호환성 확인. 진행 전에 genome이 완전히 해결되어야 합니다. | 02-mate.md |
| Merge | 대상 브랜치와 git merge --no-commit을 실행합니다. 확정된 genome에 기반하여 소스 충돌을 해결합니다. 의미적 충돌을 확인합니다 — 컴파일은 되지만 genome에 모순되는 코드. | 03-merge.md |
| Reconcile | merge 후 genome-소스 일관성을 검증합니다. AI가 genome과 소스 코드를 비교합니다. 사용자가 발견된 불일치를 확인합니다. 이슈가 있으면 Merge 또는 Mate로 회귀합니다. | 04-reconcile.md |
| Validation | 모든 기계적 테스트 명령어(test, lint, build, type check)를 실행합니다. 실패 시 Merge 또는 Mate로 회귀합니다. | 05-validation.md |
| Completion | 병합 결과를 커밋합니다. meta.yml에 type: merge와 양쪽 부모를 기록합니다. lineage에 아카이브합니다. | 06-completion.md |
충돌 유형
| 유형 | 설명 | 해결 방법 |
|---|---|---|
| WRITE-WRITE | 양쪽 브랜치에서 동일한 genome 파일이 수정됨 | 인간이 결정: A 유지, B 유지, 또는 병합 |
| CROSS-FILE | 다른 genome 파일이 수정되었지만 양쪽 브랜치 모두 genome을 변경 | 인간이 논리적 호환성을 검토 |
| 소스 충돌 | 소스 코드의 git merge 충돌 | 확정된 genome에 기반하여 해결 |
| 의미적 충돌 | 코드가 깔끔하게 병합되지만 genome(아키텍처, 컨벤션, 비즈니스 규칙)에 모순 | Reconcile 단계에서 감지 — AI가 genome과 소스를 비교하고, 사용자가 해결을 확인 |
| 충돌 없음 | genome이나 소스 충돌 없음 | 자동으로 진행 |
Merge 회귀
Validation이나 Reconcile 실패 시 Merge 또는 Mate로 회귀할 수 있습니다. Merge는 genome 이슈가 발견되면 Mate로 회귀할 수 있습니다. 회귀 규칙은 일반 Generation과 동일한 패턴을 따릅니다 — 이유가 타임라인과 산출물에 기록됩니다.
