update: agent-ops-mcp-control-plane 로드맵 정리 및 gitoevents 클라이언트 개선
- 마일스톤 문서 archive로 이동 (gito-branch-event-sync-bridge, plane-work-item-webhook-intake) - PHASE.md 및 ROADMAP.md 갱신 - gitoevents/client.go: 클라이언트 로직 개선 - gitoevents/client_test.go: 테스트 커버리지 추가
This commit is contained in:
parent
dab107b4ba
commit
0109c89eb9
6 changed files with 44 additions and 23 deletions
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
NomadCode는 Flutter 기반 앱, core 서비스, 공유 계약, agent-operation 규칙을 하나의 원레포로 묶어 AI-assisted development workflow를 조율하는 프로젝트다.
|
NomadCode는 Flutter 기반 앱, core 서비스, 공유 계약, agent-operation 규칙을 하나의 원레포로 묶어 AI-assisted development workflow를 조율하는 프로젝트다.
|
||||||
|
|
||||||
현재 로드맵은 `ROADMAP.md -> phase/<phase-slug>/PHASE.md -> phase/<phase-slug>/milestones/<milestone-slug>.md` scaffold를 기준으로 관리한다. React/Vite 웹 콘솔 제거, 서버/Plane/provider 기반 작업, Flutter-first 클라이언트 정리, Mattermost push plugin extraction, client integration 표준화, workspace 포트/환경 표준화, External Integration, Milestone Work Item Creation Sync는 완료되었다. Agent-Ops MCP Control Plane의 Plane/Gito 생성 sync 계열은 남은 완료 검토 후보로 두고, 실행 lifecycle sync 계열은 후속 후보로 둔다.
|
현재 로드맵은 `ROADMAP.md -> phase/<phase-slug>/PHASE.md -> phase/<phase-slug>/milestones/<milestone-slug>.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 계열은 후속 후보로 둔다.
|
||||||
|
|
||||||
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의 기본 외부 실행 호출 표면으로 쓰지 않는다.
|
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를 완료했다.
|
- 요약: 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-Ops MCP Control Plane
|
||||||
- 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/PHASE.md`
|
- 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/PHASE.md`
|
||||||
- 요약: 로드맵 기반 agent-ops 운영 자동화, Plane/Jira 같은 work item provider와 Milestone item의 양방향 동기화 도메인, 외부 agent용 MCP 제어 표면을 다루며, Plane Work Item Webhook Intake와 Gito Branch Event Creation Sync Bridge를 검토 후보로 둔다.
|
- 요약: 로드맵 기반 agent-ops 운영 자동화, Plane/Jira 같은 work item provider와 Milestone item의 양방향 동기화 도메인, 외부 agent용 MCP 제어 표면을 다루며, Gito Proto-Socket Consumer Wire Readiness를 다음 계획 후보로 둔다.
|
||||||
- [계획] Project Workspace Management UX
|
- [계획] Project Workspace Management UX
|
||||||
- 경로: `agent-roadmap/phase/project-workspace-management-ux/PHASE.md`
|
- 경로: `agent-roadmap/phase/project-workspace-management-ux/PHASE.md`
|
||||||
- 요약: client integration 표준화, core workflow, 외부 통합 기준 이후 프로젝트 단위 앱 UX를 다루며, provider slot 기반 외부 console composition은 계획 후보로 둔다.
|
- 요약: client integration 표준화, core workflow, 외부 통합 기준 이후 프로젝트 단위 앱 UX를 다루며, provider slot 기반 외부 console composition은 계획 후보로 둔다.
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ Gito가 제공하는 proto-socket `branch.updated` wakeup을 NomadCode core가
|
||||||
|
|
||||||
## 상태
|
## 상태
|
||||||
|
|
||||||
[검토중]
|
[완료]
|
||||||
|
|
||||||
## 구현 잠금
|
## 구현 잠금
|
||||||
|
|
||||||
|
|
@ -43,16 +43,19 @@ Gito가 provider webhook과 branch watch를 정규화해 `branch.updated`를 발
|
||||||
|
|
||||||
## 완료 리뷰
|
## 완료 리뷰
|
||||||
|
|
||||||
- 상태: 요청됨
|
- 상태: 승인됨
|
||||||
- 요청일: 2026-06-16
|
- 요청일: 2026-06-16
|
||||||
|
- 승인일: 2026-06-16
|
||||||
- 완료 근거:
|
- 완료 근거:
|
||||||
- `agent-task/archive/2026/06/m-gito-branch-event-creation-sync-bridge/01_event_client/complete.log`의 `Roadmap Completion` 근거로 `[contract-consume]`, `[core-client]`, `[branch-filter]`를 완료 처리했다.
|
- `agent-task/archive/2026/06/m-gito-branch-event-creation-sync-bridge/01_event_client/complete.log`의 `Roadmap Completion` 근거로 `[contract-consume]`, `[core-client]`, `[branch-filter]`를 완료 처리했다.
|
||||||
- `agent-task/archive/2026/06/m-gito-branch-event-creation-sync-bridge/02+01_creation_enqueue_bridge/complete.log`의 `Roadmap Completion` 근거로 `[revision-scan]`, `[creation-enqueue]`, `[runtime-wiring]`을 완료 처리했다.
|
- `agent-task/archive/2026/06/m-gito-branch-event-creation-sync-bridge/02+01_creation_enqueue_bridge/complete.log`의 `Roadmap Completion` 근거로 `[revision-scan]`, `[creation-enqueue]`, `[runtime-wiring]`을 완료 처리했다.
|
||||||
- 검증 근거는 `go test -count=1 ./internal/gitoevents ./internal/config ./internal/protosocket`, `cd services/core && go test -count=1 ./internal/gitosync ./internal/roadmapsync ./internal/roadmapsyncpipeline ./internal/scheduler`, `cd services/core && go test -count=1 ./...`, `cd services/core && go vet ./...`, `git diff --check` PASS다.
|
- 검증 근거는 `go test -count=1 ./internal/gitoevents ./internal/config ./internal/protosocket`, `cd services/core && go test -count=1 ./internal/gitosync ./internal/roadmapsync ./internal/roadmapsyncpipeline ./internal/scheduler`, `cd services/core && go test -count=1 ./...`, `cd services/core && go vet ./...`, `git diff --check` PASS다.
|
||||||
|
- 2026-06-16 코드 레벨 종료 검토에서 repo/branch가 맞더라도 roadmap milestone 변경이 없는 `changed_files` event가 handler까지 전달되는 작은 누락을 확인했고, `gitoevents.Client`가 `MilestoneChangedFiles()` 기준으로 drop하도록 수정했다.
|
||||||
|
- 2026-06-16 재검증 근거는 `cd services/core && go test -count=1 ./internal/gitoevents ./internal/config ./internal/protosocket`, `cd services/core && go test -count=1 ./internal/gitosync ./internal/roadmapsync ./internal/roadmapsyncpipeline ./internal/scheduler`, `cd services/core && go test -count=1 ./...`, `cd services/core && go vet ./...`, `git diff --check` PASS다.
|
||||||
- 리뷰 필요:
|
- 리뷰 필요:
|
||||||
- [ ] 사용자가 완료 결과를 확인했다
|
- [x] 사용자가 완료 결과를 확인했다
|
||||||
- [ ] archive 이동을 승인했다
|
- [x] archive 이동을 승인했다
|
||||||
- 리뷰 코멘트: Gito branch event wakeup bridge 기능 Task가 모두 완료 후보가 되었다. Milestone은 `[검토중]`으로 두고, 사용자의 완료 결과 확인과 archive 승인을 기다린다.
|
- 리뷰 코멘트: 코드 레벨 종료 검토에서 작은 branch-filter 누락을 바로 수정했고, 남은 실제 proto-socket wire/reconnect 운영 기준은 후속 `Gito Proto-Socket Consumer Wire Readiness` 범위로 넘긴다.
|
||||||
|
|
||||||
## 범위 제외
|
## 범위 제외
|
||||||
|
|
||||||
|
|
@ -72,4 +75,5 @@ Gito가 provider webhook과 branch watch를 정규화해 `branch.updated`를 발
|
||||||
- 후속 작업: `Milestone Execution Lifecycle Sync`
|
- 후속 작업: `Milestone Execution Lifecycle Sync`
|
||||||
- 현황 동기화(2026-06-16): `agent-task/archive/2026/06/m-gito-branch-event-creation-sync-bridge/01_event_client/complete.log`의 `Roadmap Completion` 근거로 `[contract-consume]`, `[core-client]`, `[branch-filter]`를 완료 처리했다.
|
- 현황 동기화(2026-06-16): `agent-task/archive/2026/06/m-gito-branch-event-creation-sync-bridge/01_event_client/complete.log`의 `Roadmap Completion` 근거로 `[contract-consume]`, `[core-client]`, `[branch-filter]`를 완료 처리했다.
|
||||||
- 현황 동기화(2026-06-16): `agent-task/archive/2026/06/m-gito-branch-event-creation-sync-bridge/02+01_creation_enqueue_bridge/complete.log`의 `Roadmap Completion` 근거로 `[revision-scan]`, `[creation-enqueue]`, `[runtime-wiring]`을 완료 처리했다.
|
- 현황 동기화(2026-06-16): `agent-task/archive/2026/06/m-gito-branch-event-creation-sync-bridge/02+01_creation_enqueue_bridge/complete.log`의 `Roadmap Completion` 근거로 `[revision-scan]`, `[creation-enqueue]`, `[runtime-wiring]`을 완료 처리했다.
|
||||||
- 확인 필요: 사용자의 완료 결과 확인과 archive 이동 승인
|
- 현황 동기화(2026-06-16): 코드 레벨 종료 검토에서 roadmap milestone path가 없는 `changed_files` event drop을 보강하고 검증을 재통과해 archive했다.
|
||||||
|
- 확인 필요: 없음
|
||||||
|
|
@ -11,7 +11,7 @@ Plane에서 상위 work item 생성, 상태 변경, assignee 변경 이벤트가
|
||||||
|
|
||||||
## 상태
|
## 상태
|
||||||
|
|
||||||
[검토중]
|
[완료]
|
||||||
|
|
||||||
## 구현 잠금
|
## 구현 잠금
|
||||||
|
|
||||||
|
|
@ -48,13 +48,14 @@ Plane에서 발생한 work item event를 NomadCode creation sync trigger로 안
|
||||||
|
|
||||||
## 완료 리뷰
|
## 완료 리뷰
|
||||||
|
|
||||||
- 상태: 요청됨
|
- 상태: 승인됨
|
||||||
- 요청일: 2026-06-15
|
- 요청일: 2026-06-15
|
||||||
- 완료 근거: Plane Webhook intake 및 normalized trigger dispatch, idempotency 처리가 구현 및 원격 배포되었으며, 2026-06-15 live smoke 테스트를 통해 Plane UI/API에서 새 Backlog 티켓 생성 및 AGENT assignee 지정 시 webhook 202 Accepted 수신 및 Core Task(e3c92411-4056-4b76-a879-66f7904125d0) 생성 및 실행이 시작되는 것을 검증 완료함.
|
- 승인일: 2026-06-16
|
||||||
|
- 완료 근거: Plane Webhook intake 및 normalized trigger dispatch, idempotency 처리가 구현 및 원격 배포되었으며, 2026-06-15 live smoke 테스트를 통해 Plane UI/API에서 새 Backlog 티켓 생성 및 AGENT assignee 지정 시 webhook 202 Accepted 수신 및 Core Task(e3c92411-4056-4b76-a879-66f7904125d0) 생성 및 실행이 시작되는 것을 검증 완료함. 2026-06-16 코드 레벨 재검토에서 receiver/auth/normalize/dispatch/idempotency/config wiring과 관련 테스트를 재확인했고 blocking issue가 없었다.
|
||||||
- 리뷰 필요:
|
- 리뷰 필요:
|
||||||
- [ ] 사용자가 완료 결과를 확인했다
|
- [x] 사용자가 완료 결과를 확인했다
|
||||||
- [ ] archive 이동을 승인했다
|
- [x] archive 이동을 승인했다
|
||||||
- 리뷰 코멘트: 없음
|
- 리뷰 코멘트: 코드 레벨 검토 후 종료 처리함.
|
||||||
|
|
||||||
## 범위 제외
|
## 범위 제외
|
||||||
|
|
||||||
|
|
@ -77,7 +78,7 @@ Plane에서 발생한 work item event를 NomadCode creation sync trigger로 안
|
||||||
- [x] AGENT assignee로 쓸 Plane 계정/id는 `5d116a77-d3df-4f54-80bf-eca61e0118c4`다.
|
- [x] AGENT assignee로 쓸 Plane 계정/id는 `5d116a77-d3df-4f54-80bf-eca61e0118c4`다.
|
||||||
- [x] webhook-only live smoke용 기존 Plane 티켓은 `NOMAD-10`, `NOMAD-11`을 사용했다.
|
- [x] webhook-only live smoke용 기존 Plane 티켓은 `NOMAD-10`, `NOMAD-11`을 사용했다.
|
||||||
- [x] live smoke 후 Plane UI에서 `Todo` projection 또는 authoring 시작 상태를 확인한다.
|
- [x] live smoke 후 Plane UI에서 `Todo` projection 또는 authoring 시작 상태를 확인한다.
|
||||||
- 확인 필요: 사용자의 완료 결과 확인과 archive 이동 승인
|
- 확인 필요: 없음
|
||||||
- 작은 작업 처리 결과: `webhook-receiver`는 signed fixture/invalid signature/basic-auth bypass 테스트와 dev Core synthetic/live webhook smoke로 확인했다. `plane-registration`은 dev Plane active webhook `e25a2d41-2c9f-4f5f-a0ce-cad6b993853f`, target `http://toki-labs.com:18010/api/integrations/plane/webhook`, `issue=True`, response 202 발송 로그 8건으로 확인했다. 2026-06-15 live smoke에서 Plane issue `93b677f5-7913-4111-ae05-916033ae533b`에 대한 webhook 수신(202 Accepted) 및 Core Task `e3c92411-4056-4b76-a879-66f7904125d0` 기동을 검증함.
|
- 작은 작업 처리 결과: `webhook-receiver`는 signed fixture/invalid signature/basic-auth bypass 테스트와 dev Core synthetic/live webhook smoke로 확인했다. `plane-registration`은 dev Plane active webhook `e25a2d41-2c9f-4f5f-a0ce-cad6b993853f`, target `http://toki-labs.com:18010/api/integrations/plane/webhook`, `issue=True`, response 202 발송 로그 8건으로 확인했다. 2026-06-15 live smoke에서 Plane issue `93b677f5-7913-4111-ae05-916033ae533b`에 대한 webhook 수신(202 Accepted) 및 Core Task `e3c92411-4056-4b76-a879-66f7904125d0` 기동을 검증함.
|
||||||
- payload fixture: assignee update 샘플은 `services/core/internal/http/testdata/plane_webhook_issue_assignees_updated.json`에 PII redaction 상태로 남겼다. create/state-change 후보는 `plane_webhook_issue_created.json`, `plane_webhook_issue_state_updated.json`으로 추가했고 live create/state 로그 미확보로 관찰된 issue envelope 기반 synthetic candidate임을 `agent-test/plane-dev.md`에 명시했다. normalize helper(`normalizePlaneWebhookPayload`)는 payload를 wakeup hint로만 보고 provider-neutral ref/actor/change hint만 추출한다.
|
- payload fixture: assignee update 샘플은 `services/core/internal/http/testdata/plane_webhook_issue_assignees_updated.json`에 PII redaction 상태로 남겼다. create/state-change 후보는 `plane_webhook_issue_created.json`, `plane_webhook_issue_state_updated.json`으로 추가했고 live create/state 로그 미확보로 관찰된 issue envelope 기반 synthetic candidate임을 `agent-test/plane-dev.md`에 명시했다. normalize helper(`normalizePlaneWebhookPayload`)는 payload를 wakeup hint로만 보고 provider-neutral ref/actor/change hint만 추출한다.
|
||||||
- plane-webhook 후속 plan:
|
- plane-webhook 후속 plan:
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
## 목표
|
## 목표
|
||||||
|
|
||||||
로드맵 기반 agent-ops 운영 루프, Plane/Jira 같은 work item provider와 Milestone item의 양방향 동기화 도메인, 외부 agent 제어 표면을 Core action과 MCP tool 계층으로 분리한다. 현재는 Milestone Work Item Creation Sync를 완료/archive했고, Plane Work Item Webhook Intake와 Gito Branch Event Creation Sync Bridge를 완료 검토 후보로 두며, Gito proto-socket consumer wire readiness와 실행 lifecycle은 계획 후보로 둔다.
|
로드맵 기반 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를 다음 계획 후보로 둔다.
|
||||||
|
|
||||||
## Milestone 흐름
|
## Milestone 흐름
|
||||||
|
|
||||||
|
|
@ -22,13 +22,13 @@
|
||||||
- 경로: `agent-roadmap/archive/phase/agent-ops-mcp-control-plane/milestones/milestone-work-item-creation-sync.md`
|
- 경로: `agent-roadmap/archive/phase/agent-ops-mcp-control-plane/milestones/milestone-work-item-creation-sync.md`
|
||||||
- 요약: Plane-origin 방식으로 Milestone을 생성하고 Plane Todo 티켓까지 동기화한 뒤 멈추는 마일스톤이다. 12/13/14번 task group의 `Roadmap Completion` 근거로 live-cycle gate 보완 Task까지 완료했고, 사용자 승인 후 archive했다.
|
- 요약: Plane-origin 방식으로 Milestone을 생성하고 Plane Todo 티켓까지 동기화한 뒤 멈추는 마일스톤이다. 12/13/14번 task group의 `Roadmap Completion` 근거로 live-cycle gate 보완 Task까지 완료했고, 사용자 승인 후 archive했다.
|
||||||
|
|
||||||
- [검토중] Plane Work Item Webhook Intake
|
- [완료] Plane Work Item Webhook Intake
|
||||||
- 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/plane-work-item-webhook-intake.md`
|
- 경로: `agent-roadmap/archive/phase/agent-ops-mcp-control-plane/milestones/plane-work-item-webhook-intake.md`
|
||||||
- 요약: Plane work item 생성, 상태 변경, assignee 변경 webhook을 NomadCode Core가 받아 `Backlog + AGENT assignee` 조건을 재검증하고 기존 Milestone creation sync pipeline을 시작하도록 연결했다. 기능 Task는 완료 후보이며 사용자 최종 확인과 archive 승인만 남아 있다.
|
- 요약: Plane work item 생성, 상태 변경, assignee 변경 webhook을 NomadCode Core가 받아 `Backlog + AGENT assignee` 조건을 재검증하고 기존 Milestone creation sync pipeline을 시작하도록 연결했다. 코드 레벨 재검토와 사용자 종료 승인 후 archive했다.
|
||||||
|
|
||||||
- [검토중] Gito Branch Event Creation Sync Bridge
|
- [완료] Gito Branch Event Creation Sync Bridge
|
||||||
- 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-branch-event-creation-sync-bridge.md`
|
- 경로: `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 Task가 01/02번 task group의 `Roadmap Completion` 근거로 완료되어, 사용자 최종 확인과 archive 승인만 남은 검토 후보로 둔다.
|
- 요약: 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
|
- [계획] Gito Proto-Socket Consumer Wire Readiness
|
||||||
- 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md`
|
- 경로: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/gito-protosocket-consumer-wire-readiness.md`
|
||||||
|
|
|
||||||
|
|
@ -130,6 +130,14 @@ func (c *Client) handleEnvelope(ctx context.Context, env protosocket.Envelope) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(event.MilestoneChangedFiles()) == 0 {
|
||||||
|
c.logInfo("gito branch event ignored: no roadmap milestone changes",
|
||||||
|
"event_repo_id", event.RepoID,
|
||||||
|
"event_branch", event.Branch,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if c.handler != nil {
|
if c.handler != nil {
|
||||||
c.handler(ctx, event)
|
c.handler(ctx, event)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -123,10 +123,18 @@ func TestClientDropsOffTargetAndMalformedEvents(t *testing.T) {
|
||||||
malformed := branchUpdatedEnvelope()
|
malformed := branchUpdatedEnvelope()
|
||||||
malformed.Payload["changed_files"] = "not-a-list"
|
malformed.Payload["changed_files"] = "not-a-list"
|
||||||
|
|
||||||
|
noMilestone := branchUpdatedEnvelope()
|
||||||
|
noMilestone.Payload["changed_files"] = []any{
|
||||||
|
map[string]any{
|
||||||
|
"path": "README.md",
|
||||||
|
"change_type": "modified",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
onTarget := branchUpdatedEnvelope()
|
onTarget := branchUpdatedEnvelope()
|
||||||
|
|
||||||
ft := &fakeTransport{
|
ft := &fakeTransport{
|
||||||
inbound: []protosocket.Envelope{offRepo, offBranch, wrongAction, malformed, onTarget},
|
inbound: []protosocket.Envelope{offRepo, offBranch, wrongAction, malformed, noMilestone, onTarget},
|
||||||
}
|
}
|
||||||
|
|
||||||
var got []BranchUpdatedEvent
|
var got []BranchUpdatedEvent
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue