diff --git a/agent-roadmap/ROADMAP.md b/agent-roadmap/ROADMAP.md index fda5b31..b144f32 100644 --- a/agent-roadmap/ROADMAP.md +++ b/agent-roadmap/ROADMAP.md @@ -14,7 +14,7 @@ Gito는 GitHub, GitLab, Gitea 같은 플랫폼에 묶이지 않는 Git control p - [진행중] Control Plane Foundation - 경로: `agent-roadmap/phase/control-plane-foundation/PHASE.md` - 요약: platformless Git control plane의 모듈 경계, repo/workspace/operation/event 원장, proto-socket 우선 transport 기준을 build 가능한 baseline으로 닫는다. -- [계획] Agent Shell IOP Execution +- [진행중] Agent Shell IOP Execution - 경로: `agent-roadmap/phase/agent-shell-iop-execution/PHASE.md` - 요약: `../agent-shell`은 Flutter agent UI/package로 사용하고, backend/runtime owner는 `../iop`로 지정해 Gito Git control plane과 연결한다. - [계획] Provider Change Request Integration diff --git a/agent-roadmap/phase/agent-shell-iop-execution/milestones/agent-shell-package-iop-backend-boundary.md b/agent-roadmap/archive/phase/agent-shell-iop-execution/milestones/agent-shell-package-iop-backend-boundary.md similarity index 76% rename from agent-roadmap/phase/agent-shell-iop-execution/milestones/agent-shell-package-iop-backend-boundary.md rename to agent-roadmap/archive/phase/agent-shell-iop-execution/milestones/agent-shell-package-iop-backend-boundary.md index 0028fe0..14c4c39 100644 --- a/agent-roadmap/phase/agent-shell-iop-execution/milestones/agent-shell-package-iop-backend-boundary.md +++ b/agent-roadmap/archive/phase/agent-shell-iop-execution/milestones/agent-shell-package-iop-backend-boundary.md @@ -11,7 +11,7 @@ workspace 상위 sibling 프로젝트 `../agent-shell`을 제품 비종속 Flutt ## 상태 -[검토중] +[완료] ## 승격 조건 @@ -39,20 +39,20 @@ workspace 상위 sibling 프로젝트 `../agent-shell`을 제품 비종속 Flutt - [x] [package-use] Gito/host Flutter surface가 `agent_shell: path: ../agent-shell`로 UI package를 사용하는 방향을 문서화한다. - [x] [iop-backend] `agent_shell` host의 backend/runtime owner를 `../iop` 프로젝트로 지정한다. - [x] [gito-boundary] Gito는 agent execution backend가 아니라 repo/workspace/operation/event control plane을 제공한다는 경계를 contracts와 docs에 반영한다. -- [x] [scaffold-cleanup] 기존 Go `gito-shell`/`internal/agentshell` scaffold를 유지, rename, 제거 중 어떤 정리 경로로 둘지 후속 계획에 남긴다. 후속 계획: `agent-task/m-agent-shell-package-iop-backend-boundary/PLAN-local-G05.md` +- [x] [scaffold-cleanup] 기존 Go `gito-shell`/`internal/agentshell` scaffold를 제거하는 경로로 확정하고, build/config/docs에서 legacy shell surface를 정리한다. 증거: `agent-task/archive/2026/06/m-agent-shell-package-iop-backend-boundary/complete.log` ## 완료 리뷰 -- 상태: 요청됨 +- 상태: 승인됨 - 요청일: 2026-06-14 - 완료 근거: - `README.md`, `docs/architecture.md`, `apps/client/README.md`, `packages/contracts/notes/gito-control-plane.md`에 `agent_shell: path: ../agent-shell`, `../iop` backend/runtime owner, Gito control plane 경계를 반영했다. - - legacy Go `gito-shell`/`internal/agentshell` scaffold 정리는 active 후속 plan `agent-task/m-agent-shell-package-iop-backend-boundary/PLAN-local-G05.md`와 review stub로 남겼다. - - local smoke search와 `git diff --check`가 통과했다. + - legacy Go `gito-shell`/`internal/agentshell` scaffold는 `agent-task/archive/2026/06/m-agent-shell-package-iop-backend-boundary/complete.log` 기준으로 제거 완료했고, `bin/build`는 `gito-server`, `gito-worker`만 생성한다. + - 코드 레벨 종료 검토에서 `cd services/core && go test ./...`, `bin/build`, docs/contracts smoke search, `test ! -e bin/gito-shell`이 통과했다. - 리뷰 필요: - - [ ] 사용자가 완료 결과를 확인했다 - - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 사용자 최종 확인 전까지 `[검토중]`으로 유지한다. + - [x] 사용자가 완료 결과를 확인했다 + - [x] archive 이동을 승인했다 +- 리뷰 코멘트: 코드 레벨 종료 검토에서 추가 구현 이슈가 없어 완료 처리한다. ## 범위 제외 diff --git a/agent-roadmap/phase/agent-shell-iop-execution/PHASE.md b/agent-roadmap/phase/agent-shell-iop-execution/PHASE.md index 79f4f14..53e3dc0 100644 --- a/agent-roadmap/phase/agent-shell-iop-execution/PHASE.md +++ b/agent-roadmap/phase/agent-shell-iop-execution/PHASE.md @@ -2,7 +2,7 @@ ## 상태 -[계획] +[진행중] ## 목표 @@ -14,8 +14,8 @@ workspace 상위 sibling 프로젝트 `../agent-shell`을 제품 비종속 Flutt 완료, 검토중, 진행중, 계획, 스케치 순서로 두어 아래로 갈수록 미래 작업에 가까워지게 정렬한다. 스케치 Milestone은 아직 구현 가능한 계획이 아니므로 계획 Milestone보다 아래에 둔다. -- [계획] Agent Shell Package and IOP Backend Boundary - - 경로: `agent-roadmap/phase/agent-shell-iop-execution/milestones/agent-shell-package-iop-backend-boundary.md` +- [완료] Agent Shell Package and IOP Backend Boundary + - 경로: `agent-roadmap/archive/phase/agent-shell-iop-execution/milestones/agent-shell-package-iop-backend-boundary.md` - 요약: `../agent-shell`은 Flutter agent UI/package로 사용하고, backend/runtime owner는 `../iop` 프로젝트로 지정한다. - [계획] IOP Agent Run Bridge diff --git a/agent-roadmap/phase/control-plane-foundation/PHASE.md b/agent-roadmap/phase/control-plane-foundation/PHASE.md index 394d6d0..6688055 100644 --- a/agent-roadmap/phase/control-plane-foundation/PHASE.md +++ b/agent-roadmap/phase/control-plane-foundation/PHASE.md @@ -34,6 +34,10 @@ 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 + - 경로: `agent-roadmap/phase/control-plane-foundation/milestones/branch-event-protosocket-interop-readiness.md` + - 요약: `branch.updated` producer 계약을 실제 proto-socket binary wire format, consumer-neutral schema, 다중 소비자 호환 fixture 기준으로 굳힌다. + ## Phase 경계 - 이 Phase는 Gito 자체 control plane과 platformless Git 기반만 다룬다. 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 new file mode 100644 index 0000000..8f27f31 --- /dev/null +++ b/agent-roadmap/phase/control-plane-foundation/milestones/branch-event-protosocket-interop-readiness.md @@ -0,0 +1,72 @@ +# Milestone: Branch Event Proto-Socket Interop Readiness + +## 위치 + +- Roadmap: `agent-roadmap/ROADMAP.md` +- Phase: `agent-roadmap/phase/control-plane-foundation/PHASE.md` + +## 목표 + +Forgejo push webhook에서 정규화된 `branch.updated` event를 여러 외부 consumer가 실제 Gito `/proto-socket` wire protocol로 구독하고 수신할 수 있음을 증명한다. 논리 JSON envelope 예시와 실제 proto-socket binary/protobuf frame 경계를 계약에 분리해 기록하고, base schema는 consumer-neutral하게 유지하며 consumer별 확장은 `metadata` 같은 optional custom field로만 다루는 기준을 남긴다. + +## 상태 + +[계획] + +## 승격 조건 + +- 없음 + +## 구현 잠금 + +- 상태: 해제 +- 결정 필요: 없음 + +## 범위 + +- `gito.forgejo-branch-events.v1` 계약의 실제 `/proto-socket` wire format 명시 +- `event.subscribe` request와 `branch.updated` broadcast의 channel/action/payload shape 고정 +- NomadCode 전용 payload가 아닌 branch event 범용 base schema와 optional metadata/custom extension 경계 +- proto-socket binary/protobuf client fixture로 Gito server producer 호환성 검증 +- Forgejo webhook, branch listener, event fanout을 묶은 producer-side smoke 경로 +- NomadCode를 초기 consumer smoke 대상으로 쓰되, 다른 consumer가 같은 schema를 재사용할 수 있는 운영 확인 절차 + +## 기능 + +### Epic: [branch-wire] Branch event wire interop + +Gito가 제공하는 branch event producer 표면을 문서상 계약이 아니라 실제 proto-socket wire 호환 기준으로 고정하되, base event schema를 특정 consumer에 종속시키지 않는다. + +- [ ] [wire-contract] `gito.forgejo-branch-events.v1`에 `/proto-socket`이 binary protobuf frame을 사용하고 JSON은 논리 envelope 예시임을 명시한다. 검증: 계약 문서가 frame type, channel/action, payload 필드와 optional metadata/custom field 경계를 함께 설명한다. +- [ ] [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로 도달한다. +- [ ] [consumer-interop] NomadCode를 첫 smoke consumer로 사용하되 schema가 NomadCode 전용으로 좁아지지 않는 최소 interop 확인 절차를 기록한다. 검증: NomadCode dev consumer가 generic `branch.updated`를 받아 자기 내부 wakeup으로 매핑하고, base payload에는 NomadCode 전용 필수 필드가 없다. +- [ ] [ops-docs] listener bootstrap, `/proto-socket`, `/api/listeners/branches`, `/api/events` 운영 확인 절차를 README 또는 contract note에 보강한다. 검증: 필요한 endpoint와 env가 secret 없이 재현 가능하게 적힌다. + +## 완료 리뷰 + +- 상태: 없음 +- 요청일: 없음 +- 완료 근거: 없음 +- 리뷰 필요: + - [ ] 사용자가 완료 결과를 확인했다 + - [ ] archive 이동을 승인했다 +- 리뷰 코멘트: 없음 + +## 범위 제외 + +- NomadCode core consumer transport 구현 +- NomadCode 전용 event schema 또는 필수 payload field 추가 +- Plane creation sync enqueue 구현 +- Forgejo provider delivery dedupe의 고도화 +- provider PR/MR ChangeRequest adapter +- Flutter control surface 표시 기능 + +## 작업 컨텍스트 + +- 관련 경로: `agent-contract/provided/gito-forgejo-branch-events-v1.md`, `services/core/internal/protosocket/`, `services/core/internal/controlplane/`, `services/core/internal/provider/forgejo/`, `services/core/internal/events/` +- 표준선(선택): Gito `/proto-socket`의 source of truth는 proto-socket binary/protobuf transport이며, JSON envelope는 계약 이해를 돕는 논리 표현으로만 둔다. Event base schema는 consumer-neutral하게 유지하고, 특정 consumer에만 필요한 값은 optional `metadata` 또는 custom extension에만 둔다. +- 선행 작업: Forgejo Branch Event MVP +- 후속 작업: NomadCode `Gito Proto-Socket Consumer Wire Readiness` +- 확인 필요: 없음