diff --git a/agent-roadmap/phase/control-plane-foundation/PHASE.md b/agent-roadmap/phase/control-plane-foundation/PHASE.md index c3575ce..cc82252 100644 --- a/agent-roadmap/phase/control-plane-foundation/PHASE.md +++ b/agent-roadmap/phase/control-plane-foundation/PHASE.md @@ -34,7 +34,7 @@ Gito의 초기 control plane을 build 가능한 modular monolith로 구성한다 - 경로: `agent-roadmap/phase/control-plane-foundation/milestones/runtime-scaffold-and-contract-baseline.md` - 요약: Go command, Flutter control surface placeholder, contracts, agent-ops, README, architecture 문서를 실행 가능한 기준선으로 정리한다. -- [계획] Branch Event Proto-Socket Interop Readiness +- [검토중] Branch Event Proto-Socket Interop Readiness - 경로: `agent-roadmap/phase/control-plane-foundation/milestones/branch-event-protosocket-interop-readiness.md` - 요약: NomadCode 연동 MVP의 Gito producer slice로, `branch.updated` producer 계약을 실제 proto-socket binary wire format, consumer-neutral schema, 다중 소비자 호환 fixture 기준으로 굳힌다. diff --git a/agent-roadmap/phase/control-plane-foundation/milestones/branch-event-protosocket-interop-readiness.md b/agent-roadmap/phase/control-plane-foundation/milestones/branch-event-protosocket-interop-readiness.md index f24b5da..73076a9 100644 --- a/agent-roadmap/phase/control-plane-foundation/milestones/branch-event-protosocket-interop-readiness.md +++ b/agent-roadmap/phase/control-plane-foundation/milestones/branch-event-protosocket-interop-readiness.md @@ -11,7 +11,7 @@ Forgejo push webhook에서 정규화된 `branch.updated` event를 여러 외부 ## 상태 -[계획] +[검토중] ## 승격 조건 @@ -39,20 +39,23 @@ Gito가 제공하는 branch event producer 표면을 문서상 계약이 아니 - [x] [wire-contract] `gito.forgejo-branch-events.v1`에 `/proto-socket`이 binary protobuf frame을 사용하고 JSON은 논리 envelope 예시임을 명시한다. 검증: 계약 문서가 frame type, channel/action, payload 필드와 optional metadata/custom field 경계를 함께 설명한다. - [x] [schema-neutrality] `branch.updated` base payload를 repo, branch, revision, changed files 같은 범용 Git event 정보로 유지하고 consumer-specific field는 optional metadata/custom 영역으로만 허용한다. 검증: 계약 fixture에 NomadCode 전용 필수 필드가 없다. -- [ ] [producer-fixture] 실제 proto-socket Go client 또는 동등한 binary fixture로 `event.subscribe`를 보내고 `branch.updated`를 수신하는 producer-side 테스트를 추가한다. 검증: text JSON websocket client가 아니라 binary proto-socket 경로로 test가 통과한다. -- [ ] [webhook-smoke] Forgejo push webhook, watched branch listener, event outbox/fanout을 이어 `branch.updated`가 발행되는 smoke 절차를 남긴다. 검증: test 또는 dev smoke에서 `before`, `after`, `changed_files`가 consumer payload로 도달한다. +- [x] [producer-fixture] 실제 proto-socket Go client 또는 동등한 binary fixture로 `event.subscribe`를 보내고 `branch.updated`를 수신하는 producer-side 테스트를 추가한다. 검증: text JSON websocket client가 아니라 binary proto-socket 경로로 test가 통과한다. +- [x] [webhook-smoke] Forgejo push webhook, watched branch listener, event outbox/fanout을 이어 `branch.updated`가 발행되는 smoke 절차를 남긴다. 검증: test 또는 dev smoke에서 `before`, `after`, `changed_files`가 consumer payload로 도달한다. - [x] [consumer-interop] NomadCode를 첫 smoke consumer로 사용하되 schema가 NomadCode 전용으로 좁아지지 않는 최소 interop 확인 절차를 기록한다. 검증: NomadCode dev consumer가 generic `branch.updated`를 받아 자기 내부 wakeup으로 매핑하고, base payload에는 NomadCode 전용 필수 필드가 없다. - [x] [ops-docs] listener bootstrap, `/proto-socket`, `/api/listeners/branches`, `/api/events` 운영 확인 절차를 README 또는 contract note에 보강한다. 검증: 필요한 endpoint와 env가 secret 없이 재현 가능하게 적힌다. ## 완료 리뷰 -- 상태: 없음 -- 요청일: 없음 -- 완료 근거: 없음 +- 상태: 요청됨 +- 요청일: 2026-06-15 +- 완료 근거: + - `services/core/internal/controlplane/binary_interop_test.go`가 branch watch 등록, binary proto-socket `event.subscribe`, Forgejo push callback, `branch.updated` 수신을 한 경로로 검증한다. + - `agent-contract/provided/gito-forgejo-branch-events-v1.md`에 binary protobuf frame, consumer-neutral base payload, 운영 smoke 절차가 정리되어 있다. + - `cd services/core && go test -run TestBinaryProtoSocketBranchUpdated ./internal/controlplane -count=1` 통과. - 리뷰 필요: - [ ] 사용자가 완료 결과를 확인했다 - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 없음 +- 리뷰 코멘트: 모든 기능 Task가 완료 근거와 함께 충족되어 완료 후보로 올린다. 사용자 확인과 archive 승인 전까지 활성 Milestone으로 유지한다. ## 범위 제외