You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
머지는 항상 PR을 통해서만 한다. direct-first(main 직접 push, 실패 시 PR fallback) 계약은 폐지한다.
머지 자동화는 플래그로 켜고 끄는 기능이 아니다. PR 머지는 에이전트가 PR을 babysitting(CI·리뷰 통과 확인 후 머지, 실패 시 수리)해서 처리한다. 따라서 merge-automation 정책과 그 설정 표면을 제거한다.
현재 상태 (제거 근거)
코드 기본값·문서는 "기본 비활성"인데 운영 kv에 merge_automation_enabled=true, merge_strategy_mode=direct-first, merge_strategy=squash, merge_allowed_authors=…가 들어가 있다. 언제 왜 켰는지 기록이 없다(사용자도 기억 없음. 자동큐 시절 잔재로 추정).
카드별 오버라이드 merge_strategy_mode:card:<uuid>=direct-first 78행이 kv에 남아 있다.
3일 로그에서 실제 머지 액션 0건. 대신 onTick5min이 5초 tick 예산을 매번 소진해 5분 티어 타임아웃 100%를 만든다(별도 이슈 예정).
merge_request kv 경로에 작성자 검사가 없다.
에이전트 프롬프트에 direct-first 계약이 주입된다.prompt_builder/dispatch_contract.rs:8DIRECT_FIRST_COMPLETION_CONTRACT가 "완료 조건은 git push origin HEAD:main 성공"이라고 지시한다. 이것이 "항상 PR" 정책과 정면으로 어긋나는 실제 경로다.
결정 (사용자, 2026-09-05)
direct-first(main 직접 push, 실패 시 PR fallback) 계약은 폐지한다.merge-automation정책과 그 설정 표면을 제거한다.현재 상태 (제거 근거)
merge_automation_enabled=true,merge_strategy_mode=direct-first,merge_strategy=squash,merge_allowed_authors=…가 들어가 있다. 언제 왜 켰는지 기록이 없다(사용자도 기억 없음. 자동큐 시절 잔재로 추정).merge_strategy_mode:card:<uuid>=direct-first78행이 kv에 남아 있다.onTick5min이 5초 tick 예산을 매번 소진해 5분 티어 타임아웃 100%를 만든다(별도 이슈 예정).merge_requestkv 경로에 작성자 검사가 없다.prompt_builder/dispatch_contract.rs:8DIRECT_FIRST_COMPLETION_CONTRACT가 "완료 조건은git push origin HEAD:main성공"이라고 지시한다. 이것이 "항상 PR" 정책과 정면으로 어긋나는 실제 경로다.제거 범위
정책 (JS)
policies/merge-automation.js(2,238줄),policies/merge-automation.cap.yaml,policies/__tests__/merge-automation.test.jslib/github-pr-adapter.js,lib/merge-conflict-resolver.js,lib/merge-notification-dispatcher.js,lib/merge-text-utils.js(다른 정책에서 require 없음, 확인함)policies/pipeline.js:89우선순위 주석,policies/kanban-rules.js:667"feat: 카드 done 전환 시 워크트리 커밋 자동 머지/PR 생성 #401 auto-merge는 merge-automation이 처리" 주석과 해당 분기policies/review-automation.js:pr_tracking.last_error를 "merge-automation 재시도 루프가 집어가도록" 심는 계약(:394, :428, :1022, :1119, :1155, :1475, :1593, :1817). 재시도 주체를 에이전트 babysitting으로 바꾸고 주석·상태 전이를 그에 맞게 수정.pr_tracking테이블 자체는00-pr-tracking.js,ci-recovery.js, Rustreview_automation_ops.rs/ci_recovery_ops.rs/terminal_cleanup.rs가 쓰므로 유지.Rust
config.rs:2487AutomationConfig(enabled/strategy/strategy_mode/allowed_authors) 제거settings.rs:127-141, 559-560kv 키merge_automation_enabled,merge_strategy,merge_strategy_mode등록 제거dispatch_contract.rs:DIRECT_FIRST_COMPLETION_CONTRACT삭제,merge_strategy_mode분기 제거,PR_ALWAYS_COMPLETION_CONTRACT를 유일 계약으로. 문구에서 "pr-always 모드" 표현도 제거(모드가 아니라 기본 규칙)github/sync.rs,routes/docs/inventory/endpoints/part_05.rs의 참조 정리운영 데이터
merge_*4행 +merge_strategy_mode:card:*78행 삭제 (마이그레이션 또는 1회 운영 스크립트, 실행 전 dump)문서
docs/policy-sql-guard.md,docs/generated/policy-db-inventory.md,docs/diagrams/01-module-structure.md,docs/diagrams/04-hook-chain.md,docs/agent-maintenance/multinode-*.md에서 merge-automation·direct-first 항목 제거. "머지는 PR + 에이전트 babysitting" 원칙을docs/source-of-truth.md또는 CONTRIBUTING에 한 줄로 명시.순서
dispatch_contract.rs에서 direct-first 계약 제거 (에이전트가 main에 직접 push하는 경로부터 끊는다. 가장 작은 PR로 먼저)merge-automation정책 로드 중단 (5분 tick 타임아웃도 여기서 사라짐)완료 정의
git push origin HEAD:main완료 조건이 주입되지 않음 (dispatch_contract 테스트로 고정)policies/에 merge-automation·전용 lib 4개 없음,node --test policies/__tests__/*.test.js통과merge_*키 0행 (운영 실측)GET /api/settings/config에 merge 관련 키 없음hook timed out0건 (24시간 로그)관련
01c0c078d8