diff --git a/agent-roadmap/ROADMAP.md b/agent-roadmap/ROADMAP.md index f4ae635..050d5f8 100644 --- a/agent-roadmap/ROADMAP.md +++ b/agent-roadmap/ROADMAP.md @@ -4,7 +4,7 @@ NomadCode는 Flutter 기반 앱, core 서비스, 공유 계약, agent-operation 규칙을 하나의 원레포로 묶어 AI-assisted development workflow를 조율하는 프로젝트다. -현재 로드맵은 `ROADMAP.md -> phase//PHASE.md -> phase//milestones/.md` scaffold를 기준으로 관리한다. React/Vite 웹 콘솔 제거, 서버/Plane/provider 기반 작업, Flutter-first 클라이언트 정리, Mattermost push plugin extraction, client integration 표준화, workspace 포트/환경 표준화, External Integration, Milestone Work Item Creation Sync, Plane Work Item Webhook Intake, Gito Branch Event Creation Sync Bridge는 완료되었다. Agent-Ops MCP Control Plane의 Gito proto-socket consumer wire readiness와 실행 lifecycle sync 계열은 후속 후보로 둔다. +현재 로드맵은 `ROADMAP.md -> phase//PHASE.md -> phase//milestones/.md` scaffold를 기준으로 관리한다. React/Vite 웹 콘솔 제거, 서버/Plane/provider 기반 작업, Flutter-first 클라이언트 정리, Mattermost push plugin extraction, client integration 표준화, workspace 포트/환경 표준화, External Integration, Milestone Work Item Creation Sync, Plane Work Item Webhook Intake, Gito Branch Event Creation Sync Bridge, Gito proto-socket consumer wire readiness는 완료되었다. Agent-Ops MCP Control Plane의 최우선 활성 Milestone은 Gito HTTP Webhook Consumer Readiness로, Gito 제공 계약의 signed HTTP webhook delivery를 NomadCode 소비 경계로 반영한다. IOP 외부 실행 호출은 OpenAI-compatible Responses API 방식을 기본 계약으로 채택하고, NomadCode/IOP 고유의 task, workspace, session, approval, artifact, notification 문맥은 별도 `iop` wrapper field가 아니라 `metadata` 확장으로 전달한다. A2A는 agent-to-agent delegation이 명확히 필요할 때 재검토하며, IOP native protocol은 NomadCode의 기본 외부 실행 호출 표면으로 쓰지 않는다. @@ -37,7 +37,7 @@ IOP 외부 실행 호출은 OpenAI-compatible Responses API 방식을 기본 계 - 요약: Plane 확장, Jira-compatible provider 추상화, Mattermost, Agent Integrator, IOP OpenAI-compatible Responses 호출 경계를 실제 통합 adapter 흐름으로 확장했고, metadata 실행 문맥 전달, IOP Edge `/v1/responses`, NomadCode Core 원격 create/enqueue/poll smoke를 완료했다. - [진행중] Agent-Ops MCP Control Plane - 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/PHASE.md` - - 요약: 로드맵 기반 agent-ops 운영 자동화, Plane/Jira 같은 work item provider와 Milestone item의 양방향 동기화 도메인, 외부 agent용 MCP 제어 표면을 다루며, Gito Proto-Socket Consumer Wire Readiness는 사용자 완료 확인과 archive 승인을 기다린다. + - 요약: 로드맵 기반 agent-ops 운영 자동화, Plane/Jira 같은 work item provider와 Milestone item의 양방향 동기화 도메인, 외부 agent용 MCP 제어 표면을 다루며, 최우선으로 Gito HTTP Webhook Consumer Readiness에서 Gito branch event 소비 표면을 signed HTTP webhook/callback으로 재정렬한다. - [계획] Project Workspace Management UX - 경로: `agent-roadmap/phase/project-workspace-management-ux/PHASE.md` - 요약: client integration 표준화, core workflow, 외부 통합 기준 이후 프로젝트 단위 앱 UX를 다루며, provider slot 기반 외부 console composition은 계획 후보로 둔다. diff --git a/agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md b/agent-roadmap/archive/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md similarity index 94% rename from agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md rename to agent-roadmap/archive/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md index b672290..f600f13 100644 --- a/agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md +++ b/agent-roadmap/archive/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md @@ -11,7 +11,7 @@ NomadCode core의 Gito branch event consumer를 실제 Gito `/proto-socket` wire ## 상태 -[검토중] +[완료] ## 승격 조건 @@ -47,15 +47,15 @@ NomadCode가 Gito branch event를 논리 DTO가 아니라 실제 proto-socket wi ## 완료 리뷰 -- 상태: 요청됨 +- 상태: 승인됨 - 요청일: 2026-06-17 - 완료 근거: - `agent-task/archive/2026/06/m-gito-protosocket-consumer-wire-readiness/03+01_failure_ops/complete.log`의 `Roadmap Completion`에서 `failure-ops` PASS를 확인했다. - 최종 검증은 `git diff --check`, targeted `gitosync`/`gitoevents` tests, race test, `cd services/core && go test ./...` PASS로 기록되었다. - 리뷰 필요: - - [ ] 사용자가 완료 결과를 확인했다 - - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 모든 기능 Task와 명시 검증이 완료 근거와 함께 충족된 것으로 보이며, 사용자 최종 확인과 archive 승인을 기다린다. + - [x] 사용자가 완료 결과를 확인했다 + - [x] archive 이동을 승인했다 +- 리뷰 코멘트: 2026-06-17 사용자 완료 및 archive 지시로 승인되었다. 방향성 전환에 따라 이 MVP wire-readiness slice는 완료 스냅샷으로 보존한다. ## 범위 제외 diff --git a/agent-roadmap/phase/agent-ops-mcp-control-plane/PHASE.md b/agent-roadmap/phase/agent-ops-mcp-control-plane/PHASE.md index 06f71c2..7bb7eab 100644 --- a/agent-roadmap/phase/agent-ops-mcp-control-plane/PHASE.md +++ b/agent-roadmap/phase/agent-ops-mcp-control-plane/PHASE.md @@ -6,7 +6,7 @@ ## 목표 -로드맵 기반 agent-ops 운영 루프, Plane/Jira 같은 work item provider와 Milestone item의 양방향 동기화 도메인, 외부 agent 제어 표면을 Core action과 MCP tool 계층으로 분리한다. 현재는 Milestone Work Item Creation Sync, Plane Work Item Webhook Intake, Gito Branch Event Creation Sync Bridge를 완료/archive했고, Gito Proto-Socket Consumer Wire Readiness는 검토중이다. +로드맵 기반 agent-ops 운영 루프, Plane/Jira 같은 work item provider와 Milestone item의 양방향 동기화 도메인, 외부 agent 제어 표면을 Core action과 MCP tool 계층으로 분리한다. 현재는 Milestone Work Item Creation Sync, Plane Work Item Webhook Intake, Gito Branch Event Creation Sync Bridge, Gito Proto-Socket Consumer Wire Readiness를 완료/archive했고, Gito HTTP Webhook Consumer Readiness를 최우선 활성 Milestone으로 두어 Gito branch event 소비 표면을 signed HTTP webhook/callback으로 재정렬한다. ## Milestone 흐름 @@ -30,9 +30,13 @@ - 경로: `agent-roadmap/archive/phase/agent-ops-mcp-control-plane/milestones/gito-branch-event-creation-sync-bridge.md` - 요약: Gito `branch.updated` wakeup을 NomadCode core가 소비하고 target branch 재검증/스캔 뒤 creation sync job으로 enqueue하는 bridge를 구현했다. 코드 레벨 종료 검토에서 roadmap milestone path가 없는 event drop을 보강하고 archive했다. -- [검토중] Gito Proto-Socket Consumer Wire Readiness - - 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md` - - 요약: NomadCode/Gito 연동 MVP의 Gito `/proto-socket` binary transport/decode, bridge e2e, failure/reconnect 운영 기준 검증을 완료했고 사용자 완료 확인과 archive 승인을 기다린다. +- [완료] Gito Proto-Socket Consumer Wire Readiness + - 경로: `agent-roadmap/archive/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md` + - 요약: NomadCode/Gito 연동 MVP의 Gito `/proto-socket` binary transport/decode, bridge e2e, failure/reconnect 운영 기준 검증을 완료했고, 사용자 승인 후 archive했다. + +- [계획] Gito HTTP Webhook Consumer Readiness + - 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-http-webhook-consumer-readiness.md` + - 요약: 최우선 작업으로, Gito `gito.forgejo-branch-events.v1` 제공 계약의 signed HTTP webhook delivery를 NomadCode Core가 소비하고, 기존 branch revision 재검증/creation sync enqueue 의미 로직으로 수렴하도록 재정렬한다. - [계획] Roadmap Driven Agent-Ops Automation - 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/roadmap-driven-agent-ops-automation.md` diff --git a/agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-http-webhook-consumer-readiness.md b/agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-http-webhook-consumer-readiness.md new file mode 100644 index 0000000..a34f91e --- /dev/null +++ b/agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-http-webhook-consumer-readiness.md @@ -0,0 +1,91 @@ +# Milestone: Gito HTTP Webhook Consumer Readiness + +## 위치 + +- Roadmap: `agent-roadmap/ROADMAP.md` +- Phase: `agent-roadmap/phase/agent-ops-mcp-control-plane/PHASE.md` + +## 목표 + +NomadCode Core의 Gito branch event consumer를 Gito 제공 계약 `gito.forgejo-branch-events.v1`의 signed HTTP webhook delivery와 맞춘다. Gito는 외부/인접 consumer에게 `/proto-socket` binary transport를 요구하지 않으며, NomadCode는 `branch.updated` JSON delivery를 wakeup signal로 받아 target branch revision을 재검증한 뒤 기존 creation sync enqueue 흐름으로 수렴한다. + +## 상태 + +[계획] + +## 승격 조건 + +- 없음 + +## 구현 잠금 + +- 상태: 잠금 +- SDD: 필요 +- SDD 문서: `agent-roadmap/sdd/agent-ops-mcp-control-plane/gito-http-webhook-consumer-readiness/SDD.md` +- 잠금 해제 조건: + - [x] SDD 잠금이 해제되어 있다 + - [x] SDD 사용자 리뷰가 없거나 승인/해결되었다 + - [x] Acceptance Scenario가 Milestone 기능 Task와 연결되어 있다 + - [x] Evidence Map이 plan의 `Spec Targets`와 완료 시 `Spec Completion`으로 검증 가능하게 연결되어 있다 + - [ ] Workspace lock `nomadcode:gito-http-webhook-consumer-readiness`의 모든 `rely-on.status`가 `enable`이다 +- 결정 필요: 없음 + +## 범위 + +- Gito -> NomadCode signed HTTP webhook callback endpoint +- `X-Gito-Event`, `X-Gito-Delivery`, `X-Gito-Signature` 기준의 delivery 검증과 idempotency 경계 +- Gito `branch.updated` base payload를 NomadCode 전용 필수 필드 없이 소비하는 schema boundary +- 기존 `gitoevents` decode/filter와 `gitosync` branch scan/enqueue 의미 로직의 HTTP transport 재연결 +- Gito webhook subscription bootstrap과 NomadCode callback/secret 설정 문서화 +- invalid signature, malformed payload, duplicate delivery, not-ready revision, Gito retry에 대한 운영 로그와 실패 처리 + +## 기능 + +### Epic: [webhook-consumer] Gito HTTP webhook intake + +NomadCode Core가 Gito branch event delivery를 외부 HTTP callback으로 받고, Gito 원문 계약을 source of truth로 소비한다. + +- [ ] [receiver] Gito `branch.updated` HTTP callback endpoint를 추가한다. 검증: signed `branch.updated` delivery는 수락되고, wrong event와 invalid signature는 side effect 없이 거부된다. +- [ ] [payload-boundary] Gito base payload를 repo/branch/revision/change hint 중심으로 해석하고 NomadCode 전용 필드를 요구하지 않는다. 검증: NomadCode 전용 필드 없이도 on-target event가 decode된다. +- [ ] [idempotency] `X-Gito-Delivery`와 revision key 기준으로 duplicate delivery를 중복 enqueue 없이 처리한다. 검증: 같은 delivery 또는 같은 revision 재전달이 정확히 한 번의 sync 후보로 수렴한다. + +### Epic: [sync-bridge] Revision verification and creation sync + +HTTP webhook wakeup을 기존 branch revision 재검증과 creation sync enqueue 의미 로직으로 연결한다. + +- [ ] [scan-enqueue] HTTP receiver에서 받은 on-target event가 target branch fetch/scan 이후 `EnqueueRoadmapCreationSync`로 이어진다. 검증: 한 건의 Gito webhook delivery가 target branch 재검증 후 정확히 하나의 creation sync job으로 수렴한다. +- [ ] [config-docs] `GITO_PROTO_SOCKET_URL` 중심의 소비자 설정을 webhook callback endpoint, signing secret, Gito subscription bootstrap 기준으로 교체한다. 검증: secret 원문 없이 local/dev webhook consumer 설정 경로가 문서화된다. +- [ ] [failure-ops] invalid signature, malformed payload, not-ready revision, duplicate delivery, Gito retry가 core server shutdown이나 중복 Plane mutation으로 이어지지 않는다. 검증: 장애 입력이 안전하게 reject/drop/retry 후보로 기록된다. + +## 완료 리뷰 + +- 상태: 없음 +- 요청일: 없음 +- 완료 근거: 없음 +- 리뷰 필요: + - [ ] 사용자가 완료 결과를 확인했다 + - [ ] archive 이동을 승인했다 +- 리뷰 코멘트: 없음 + +## 범위 제외 + +- Gito Forgejo webhook producer와 outbound webhook delivery worker 구현 +- Gito 제공 계약 `gito.forgejo-branch-events.v1` 원문 변경 +- Gito event schema를 NomadCode 전용 필드로 확장하는 작업 +- Plane `Todo -> In Progress` 실행 lifecycle +- Milestone Task와 Plane 하위 티켓 동기화 +- Flutter UI에서 branch event 상태를 표시하는 기능 + +## 작업 컨텍스트 + +- 관련 경로: `services/core/internal/gitoevents/`, `services/core/internal/gitosync/`, `services/core/internal/http/`, `services/core/cmd/server/main.go`, `services/core/internal/config/`, `services/core/docker-compose.yml`, `README.md`, `packages/contracts/notes/flutter-core-api-candidates.md` +- 외부 계약: Gito `agent-contract/provided/gito-forgejo-branch-events-v1.md` (`gito.forgejo-branch-events.v1`) +- 관련 Gito Milestone: `Forgejo Branch Event MVP`, `Webhook Revision Reconcile` +- 표준선(선택): NomadCode는 Gito `branch.updated` delivery를 wakeup signal로만 사용하고, 최종 판단은 target branch fetch/scan과 provider identity 재검증으로 수행한다. Gito schema는 여러 consumer를 위한 범용 규약이며, Gito -> external consumer delivery는 HTTP webhook/callback이고 `/proto-socket`은 Gito 내부 control/runtime transport로 본다. +- 이전 방향 정리: `Gito Proto-Socket Consumer Wire Readiness`는 archive된 완료 기록으로 보존하되, 현재 프로젝트 방향에서는 NomadCode/Gito 외부 소비 표면으로 재사용하지 않는다. +- 우선순위: 최우선 - `Roadmap Driven Agent-Ops Automation`과 `Milestone Execution Lifecycle Sync`보다 먼저 SDD gate와 Gito 외부 의존 잠금 상태를 정리한다. +- 선행 작업: Gito 제공 계약 `gito.forgejo-branch-events.v1`의 HTTP webhook delivery 경계 확인 +- 외부 의존 잠금: Gito `agent-roadmap/phase/provider-change-request-integration/milestones/webhook-revision-reconcile.md`의 consumer webhook subscription과 signed HTTP delivery 구현이 완료되어야 실제 연동 구현/검증을 닫을 수 있다. +- 후속 작업: Milestone Execution Lifecycle Sync +- 확인 필요: + - [ ] SDD 작성과 gate 확인 후 구현 잠금을 해제한다. diff --git a/agent-roadmap/sdd/agent-ops-mcp-control-plane/gito-http-webhook-consumer-readiness/SDD.md b/agent-roadmap/sdd/agent-ops-mcp-control-plane/gito-http-webhook-consumer-readiness/SDD.md new file mode 100644 index 0000000..d3cdb97 --- /dev/null +++ b/agent-roadmap/sdd/agent-ops-mcp-control-plane/gito-http-webhook-consumer-readiness/SDD.md @@ -0,0 +1,112 @@ +# SDD: Gito HTTP Webhook Consumer Readiness + +## 위치 + +- Milestone: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-http-webhook-consumer-readiness.md` +- Phase: `agent-roadmap/phase/agent-ops-mcp-control-plane/PHASE.md` + +## 상태 + +[승인됨] + +## SDD 잠금 + +- 상태: 해제 +- 사용자 리뷰: 없음 +- 잠금 항목: + - [x] [D01] Gito -> NomadCode 외부 branch event delivery는 `/proto-socket`이 아니라 signed HTTP webhook/callback을 따른다. + - [x] [D02] NomadCode는 `branch.updated` delivery를 wakeup signal로만 사용하고 target branch revision을 재검증한다. + - [x] [D03] Gito outbound webhook delivery 구현 완료 전에는 NomadCode 실제 연동 구현/검증을 완료로 닫지 않는다. + +## 문제 / 비목표 + +- 문제: NomadCode의 기존 Gito branch event consumer는 `/proto-socket` wire consumer로 정리되어 있었지만, Gito의 현재 외부/인접 consumer 계약은 signed HTTP webhook delivery다. NomadCode는 Gito 외부 소비 표면을 HTTP callback으로 재정렬하면서도 기존 `branch.updated` wakeup, target branch revision 재검증, creation sync enqueue 의미 로직을 보존해야 한다. +- 비목표: + - Gito의 Forgejo webhook producer, outbound webhook delivery worker, subscription API 구현 + - Gito 제공 계약 `gito.forgejo-branch-events.v1` 원문 변경 + - Gito event schema를 NomadCode 전용 필수 필드로 확장 + - Plane `Todo -> In Progress` 실행 lifecycle, Milestone Task와 Plane 하위 티켓 동기화, Flutter UI 표시 + +## Source of Truth + +| 영역 | 기준 | 메모 | +|------|------|------| +| Roadmap | `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-http-webhook-consumer-readiness.md` | NomadCode 구현 범위, Task id, 완료 리뷰 기준 | +| Code | `services/core/internal/http/`, `services/core/internal/gitoevents/`, `services/core/internal/gitosync/`, `services/core/internal/config/` | HTTP callback, payload decode, branch scan/enqueue, config/env source of truth | +| External Provider | Gito `../gito/agent-contract/provided/gito-forgejo-branch-events-v1.md` | `branch.updated` HTTP delivery contract source of truth. SDD는 원문 계약을 복제하지 않는다. | +| User Decision | 없음 | 사용자가 Gito external consumer 표면을 HTTP webhook/callback으로 정렬하라고 지시했다. | + +## State Machine + +| 상태 | 진입 조건 | 다음 상태 | 근거 | +|------|-----------|-----------|------| +| disabled | webhook callback 설정 또는 signing secret 설정이 부족하다 | listening | config/env가 충족되고 core가 callback route를 등록한다 | +| listening | NomadCode Core가 Gito HTTP delivery를 받을 준비가 됐다 | accepted | `X-Gito-Event=branch.updated`, signature, payload shape가 유효하다 | +| listening | event, signature, payload가 유효하지 않다 | rejected | HTTP 4xx와 side effect 없음 | +| accepted | delivery id 또는 revision key가 이미 처리됐다 | duplicate_ignored | idempotency guard | +| accepted | on-target repo/branch이고 duplicate가 아니다 | scanning | `repo_id`, `branch`, `before`, `after`, `changed_files` wakeup hint | +| scanning | target branch fetch/scan이 아직 delivery revision을 확인하지 못했다 | retry_or_drop | not-ready revision failure policy | +| scanning | target branch revision과 roadmap-related changes가 확인됐다 | enqueued | `EnqueueRoadmapCreationSync` 호출 | +| enqueued | creation sync job enqueue 성공 | complete | job id 또는 enqueue success log | + +## Interface Contract + +- 계약 원문: `../gito/agent-contract/provided/gito-forgejo-branch-events-v1.md` +- 입력: + - `X-Gito-Event`: normalized event type. NomadCode는 `branch.updated`만 처리한다. + - `X-Gito-Delivery`: stable delivery id. NomadCode idempotency key 후보로 사용한다. + - `X-Gito-Signature`: `secret_ref` 기반 HMAC-SHA256 digest. 설정된 경우 검증해야 한다. + - JSON body: Gito `branch.updated` base payload. NomadCode는 `repo_id`, `branch`, `before`, `after`, `changed_files`, timestamp/id 계열을 wakeup hint로 소비한다. +- 출력: + - HTTP response: accepted/rejected 상태. invalid signature나 malformed payload는 side effect 없이 거부한다. + - Internal event: on-target delivery는 branch revision scan과 creation sync enqueue 후보로 전달한다. + - Logs/metrics: invalid signature, malformed payload, duplicate delivery, not-ready revision, enqueue failure를 secret 없이 기록한다. +- 금지: + - Gito 외부 consumer delivery에 `/proto-socket`을 요구하지 않는다. + - `changed_files` 또는 webhook payload만으로 Plane/roadmap source-of-truth mutation을 확정하지 않는다. + - duplicate delivery로 중복 Plane mutation이나 중복 creation sync job을 만들지 않는다. + - raw signing secret, token, webhook body 원문을 tracked docs나 logs에 남기지 않는다. + +## Acceptance Scenarios + +| ID | Milestone Task | Given | When | Then | +|----|----------------|-------|------|------| +| S01 | `receiver` | NomadCode Core에 callback route와 signing secret이 설정되어 있다 | Gito가 signed `branch.updated` HTTP delivery를 보낸다 | 요청이 수락되고 wrong event/invalid signature는 side effect 없이 거부된다 | +| S02 | `payload-boundary` | Gito base payload에 NomadCode 전용 필드가 없다 | on-target `repo_id`, `branch`, revision fields를 가진 delivery를 받는다 | payload가 decode되고 NomadCode 전용 필드 없이 wakeup 후보가 된다 | +| S03 | `idempotency` | 같은 `X-Gito-Delivery` 또는 같은 revision key delivery가 재전달된다 | consumer가 재시도 delivery를 처리한다 | 중복 enqueue 없이 한 번의 sync 후보로 수렴한다 | +| S04 | `scan-enqueue` | on-target delivery가 accepted 상태다 | target branch fetch/scan이 delivery revision을 확인한다 | `EnqueueRoadmapCreationSync`가 정확히 한 번 호출된다 | +| S05 | `config-docs` | local/dev 환경에서 Gito webhook consumer를 켜야 한다 | operator가 docs/env sample을 따른다 | secret 원문 없이 callback endpoint, signing secret ref, subscription bootstrap 경로를 구성할 수 있다 | +| S06 | `failure-ops` | invalid signature, malformed payload, duplicate delivery, not-ready revision, Gito retry가 들어온다 | consumer가 장애 입력을 처리한다 | core server shutdown이나 중복 Plane mutation 없이 reject/drop/retry 후보로 기록된다 | + +## Evidence Map + +| Scenario | Required Evidence | `agent-task` 연결 | `Spec Completion` 기대 | +|----------|-------------------|------------------|---------------------------| +| S01 | HTTP handler unit/integration test, invalid signature test | `agent-task/m-gito-http-webhook-consumer-readiness/...` | `receiver` Task와 S01 PASS, 검증 명령과 결과 | +| S02 | payload decode/filter tests without NomadCode-specific fields | `agent-task/m-gito-http-webhook-consumer-readiness/...` | `payload-boundary` Task와 S02 PASS, fixture 이름과 결과 | +| S03 | duplicate delivery/revision idempotency test | `agent-task/m-gito-http-webhook-consumer-readiness/...` | `idempotency` Task와 S03 PASS, duplicate enqueue 방지 근거 | +| S04 | bridge test proving accepted HTTP delivery reaches branch scan and one enqueue | `agent-task/m-gito-http-webhook-consumer-readiness/...` | `scan-enqueue` Task와 S04 PASS, enqueue count/result | +| S05 | README/compose/env sample diff plus docs keyword scan | `agent-task/m-gito-http-webhook-consumer-readiness/...` | `config-docs` Task와 S05 PASS, secret 원문 없음 근거 | +| S06 | failure case tests and log assertion without secret leakage | `agent-task/m-gito-http-webhook-consumer-readiness/...` | `failure-ops` Task와 S06 PASS, failure handling evidence | + +## Cross-repo Dependencies + +- `gito:agent-roadmap/phase/provider-change-request-integration/milestones/webhook-revision-reconcile.md` +- `.agent-roadmap-sync/locks.yaml` entry: `nomadcode:gito-http-webhook-consumer-readiness` +- 현재 lock 상태: `disable`. Gito의 consumer webhook subscription과 signed HTTP delivery 구현이 완료되어야 NomadCode Milestone의 실제 연동 구현/검증을 닫을 수 있다. + +## Drift Check + +- [x] Milestone 기능 Task와 Acceptance Scenario가 일치한다. +- [x] Evidence Map이 plan/code-review/complete.log에서 검증 가능하다. +- [x] agent-contract를 쓰는 경우 SDD에 계약 원문을 복제하지 않았다. +- [x] 사용자 리뷰가 필요한 항목은 `USER_REVIEW.md`에만 남겼다. + +## 사용자 리뷰 이력 + +- 없음 + +## 작업 컨텍스트 + +- 표준선: NomadCode는 Gito `branch.updated` delivery를 wakeup signal로만 소비하고, 최종 판단은 target branch fetch/scan과 provider identity 재검증으로 수행한다. Gito external consumer delivery는 HTTP webhook/callback이고 `/proto-socket`은 Gito 내부 control/runtime transport로 본다. +- 후속 SDD: 없음