diff --git a/agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/plane-origin-authoring-roundtrip-sync.md b/agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/plane-origin-authoring-roundtrip-sync.md index 3dd8797..dbdd292 100644 --- a/agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/plane-origin-authoring-roundtrip-sync.md +++ b/agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/plane-origin-authoring-roundtrip-sync.md @@ -73,10 +73,10 @@ Git/Plane 동기화는 path나 provider work item id가 아니라 Milestone 파 Gito HTTP webhook wakeup 이후 Core sync pipeline이 active Milestone reconcile과 Plane Todo projection까지 닫히는지 실제 환경 기준으로 검증한다. -- [ ] [gito-delivery] Forgejo push -> Gito -> NomadCode Core signed HTTP webhook delivery가 remote `develop` push마다 들어온다. 검증: Gito subscription target, signed delivery 202, Core gito webhook log, duplicate delivery 처리 결과를 secret 없이 확인한다. -- [ ] [scan-enqueue] Gito wakeup이 local develop checkout fetch와 active Milestone index scan 이후 slug 단위 reconcile job enqueue로 이어진다. 검증: 변경 파일 힌트와 무관하게 active Milestone 전체가 reconcile 후보가 되고, archive Milestone은 제외된다. -- [ ] [plane-todo] reconcile job이 Plane 원문 댓글 보존, Milestone 본문 projection, `[milestone-id]` 제목 갱신, `Todo` 이동까지 완료한다. 검증: Plane UI/API와 `roadmap_sync_steps`에서 `milestone_id_matched`, `original_comment_preserved`, `plane_body_updated`, `plane_todo_moved`를 확인한다. -- [ ] [slot-finalize] projected, failed, timeout, queue timeout, push failed, identity missing 결과가 workspace slot 상태와 task metadata에 일관되게 반영된다. 검증: 성공은 slot `available`, 수동 복구가 필요한 git 상태는 `dirty`, bridge/provider 오류는 `error`로 수렴한다. +- [x] [gito-delivery] Forgejo push -> Gito -> NomadCode Core signed HTTP webhook delivery가 remote `develop` push마다 들어온다. 검증: Gito subscription target, signed delivery 202, Core gito webhook log, duplicate delivery 처리 결과를 secret 없이 확인한다. +- [x] [scan-enqueue] Gito wakeup이 local develop checkout fetch와 active Milestone index scan 이후 slug 단위 reconcile job enqueue로 이어진다. 검증: 변경 파일 힌트와 무관하게 active Milestone 전체가 reconcile 후보가 되고, archive Milestone은 제외된다. +- [x] [plane-todo] reconcile job이 Plane 원문 댓글 보존, Milestone 본문 projection, `[milestone-id]` 제목 갱신, `Todo` 이동까지 완료한다. 검증: Plane UI/API와 `roadmap_sync_steps`에서 `milestone_id_matched`, `original_comment_preserved`, `plane_body_updated`, `plane_todo_moved`를 확인한다. +- [x] [slot-finalize] projected, failed, timeout, queue timeout, push failed, identity missing 결과가 workspace slot 상태와 task metadata에 일관되게 반영된다. 검증: 성공은 slot `available`, 수동 복구가 필요한 git 상태는 `dirty`, bridge/provider 오류는 `error`로 수렴한다. ### Epic: [live-gate] End-to-end live smoke gate @@ -84,7 +84,7 @@ Gito HTTP webhook wakeup 이후 Core sync pipeline이 active Milestone reconcile - [ ] [remote-baseline] standard remote runner, Core compose, IOP workspace clone, Gito service, Forgejo webhook, project sync DB 설정을 현재 요청 기준으로 reset/clean/reclone 또는 rebuild해 맞춘다. 검증: dirty runner 상태를 차단 사유로 삼지 않고 최신 local 작업 범위와 같은 테스트 환경으로 만든다. - [ ] [full-cycle] 새 Plane Backlog 티켓을 AGENT에 assign한 authoring roundtrip과, Git에만 있는 active Milestone을 Plane에 생성하는 reconcile roundtrip을 함께 확인한다. 검증: `agent-test/live-cycle-smoke.md` 절차에 따라 secret redaction 상태의 live evidence가 남는다. -- [ ] [regression-doc] 이번 회귀 원인과 방지 기준을 `agent-test/live-cycle-smoke.md` 또는 core README의 비밀 없는 운영 규칙에 반영한다. 검증: filename slug canonical id, archive 제외, provider identity 누락, IOP queue timeout, push-only 단계 누락, Gito delivery-only 성공을 각각 완료 조건으로 오인하지 않는 기준이 문서화된다. +- [x] [regression-doc] 이번 회귀 원인과 방지 기준을 `agent-test/live-cycle-smoke.md` 또는 core README의 비밀 없는 운영 규칙에 반영한다. 검증: filename slug canonical id, archive 제외, provider identity 누락, IOP queue timeout, push-only 단계 누락, Gito delivery-only 성공을 각각 완료 조건으로 오인하지 않는 기준이 문서화된다. ## 완료 리뷰 @@ -158,6 +158,22 @@ Gito HTTP webhook wakeup 이후 Core sync pipeline이 active Milestone reconcile - `agent-task/archive/2026/06/m-plane-origin-authoring-roundtrip-sync/05_canonical_id/complete.log` - `agent-task/archive/2026/06/m-plane-origin-authoring-roundtrip-sync/06+05_plane_missing_create/complete.log` - `agent-task/archive/2026/06/m-plane-origin-authoring-roundtrip-sync/07+05,06_slug_reconcile/complete.log` - - 현재 활성 `agent-task` plan/review/user-review/complete 파일은 없다. - - 현재 남은 실구현/검증 후보는 `gito-delivery`, `scan-enqueue`, `plane-todo`, `slot-finalize`, `remote-baseline`, `full-cycle`, `regression-doc`이다. + - `gito-delivery` Task는 signed delivery 202, Core Gito webhook log, duplicate delivery 202 결과를 secret 없이 재확인한 근거로 완료 처리했다. + - `scan-enqueue` Task는 Gito wakeup 이후 active Milestone 5개가 `roadmap_creation_sync`로 enqueue되고 archive Milestone 17개가 제외된 live evidence 근거로 완료 처리했다. + - `plane-todo` Task는 Plane work item 원문 댓글 보존, Milestone body/title projection, `Todo` 이동, `roadmap_sync_steps` evidence와 bridge regression test 보강 근거로 완료 처리했다. + - `slot-finalize` Task는 success completion의 stale authoring failure metadata 정리, terminal task metadata, slot state evidence와 workflow/scheduler/authoring 테스트 근거로 완료 처리했다. + - `regression-doc` Task는 `agent-test/live-cycle-smoke.md`에 filename slug canonical id, archive 제외, provider identity 누락/불일치, IOP queue timeout/stale, push-only 단계, Gito delivery-only 성공을 완료로 오인하지 않는 기준을 문서화해 완료 처리했다. + - 완료 근거: + - `agent-task/archive/2026/06/m-plane-origin-authoring-roundtrip-sync/08+07_gito_delivery/complete.log` + - `agent-task/archive/2026/06/m-plane-origin-authoring-roundtrip-sync/09+08_scan_enqueue/complete.log` + - `agent-task/archive/2026/06/m-plane-origin-authoring-roundtrip-sync/10+09_plane_todo/complete.log` + - `agent-task/archive/2026/06/m-plane-origin-authoring-roundtrip-sync/11+10_slot_finalize/complete.log` + - `agent-test/live-cycle-smoke.md` + - `remote-baseline`과 `full-cycle`은 큰 live runtime 작업으로 분류해 plan-loop에 진입시켰다. + - 활성 plan/review: + - `agent-task/m-plane-origin-authoring-roundtrip-sync/12_remote_baseline/PLAN-cloud-G07.md` + - `agent-task/m-plane-origin-authoring-roundtrip-sync/12_remote_baseline/CODE_REVIEW-cloud-G07.md` + - `agent-task/m-plane-origin-authoring-roundtrip-sync/13+12_full_cycle/PLAN-cloud-G08.md` + - `agent-task/m-plane-origin-authoring-roundtrip-sync/13+12_full_cycle/CODE_REVIEW-cloud-G08.md` + - 현재 남은 실구현/검증 후보는 `remote-baseline`, `full-cycle`이며, 둘 다 active plan 상태다. - 확인 필요: 없음 diff --git a/agent-test/live-cycle-smoke.md b/agent-test/live-cycle-smoke.md index 3b6d2e5..5d3b062 100644 --- a/agent-test/live-cycle-smoke.md +++ b/agent-test/live-cycle-smoke.md @@ -3,7 +3,7 @@ test_env: local test_profile: live-cycle-smoke domain: core verification_type: smoke -last_rule_updated_at: 2026-06-20 +last_rule_updated_at: 2026-06-21 --- # live-cycle-smoke @@ -96,6 +96,16 @@ for t in d.get('tasks', []): | `live-creation-projection`: develop 스캔 → ledger steps → Plane Todo | Core log + Plane UI | 7→8 | | slot 재사용: 두 번째 smoke에서 slot available | API 응답 | 9 | +## 완료 오인 방지 기준 + +- filename slug canonical id: `roadmap_sync_identities.milestone_id` 또는 Core log가 `agent-roadmap/phase/*/milestones/.md`의 파일명 slug 기준으로 매칭됨을 보여야 한다. `roadmap_milestone_path`나 Plane work item id만 맞는 증거는 완료 근거가 아니다. +- archive 제외: active reconcile 후보는 `agent-roadmap/phase/*/milestones/*.md`만 포함해야 한다. `agent-roadmap/archive/**` 문서는 생성/갱신 대상이 아니라 이력 lookup 후보로만 남아야 한다. +- provider identity 누락/불일치: generated Milestone에 provider identity가 없거나 원 Plane 티켓과 불일치하면 Plane `Todo` projection으로 넘기지 않는다. sync ledger 보강 또는 명시 failure evidence가 필요하다. +- IOP queue timeout/stale: IOP `/v1/responses` 장시간 대기, queue timeout, stale monitor는 각각 task metadata에 관찰 가능한 상태로 남아야 한다. authoring 시작이나 단일 실패 로그만으로 terminal 완료/실패를 단정하지 않는다. +- push-only 누락: authoring 응답 성공은 완료 근거가 아니다. push-only 요청, remote `develop` revision 확인, Gito wakeup 이후 reconcile evidence가 이어져야 다음 단계 완료로 본다. +- Gito delivery-only 성공: signed webhook 202 또는 duplicate 202는 delivery 증거일 뿐 full-cycle 완료 근거가 아니다. active Milestone slug reconcile enqueue, `roadmap_sync_steps`, Plane body/title/comment projection, `Todo` 이동까지 확인한다. +- full-cycle 완료: 새 Plane `Backlog + AGENT assignee` authoring roundtrip과 Git에만 있는 active Milestone missing-create/reconcile roundtrip을 모두 secret redaction 상태로 남긴다. + ## 대체 근거 (런타임 에퀄리번트) reviewed commit을 현재 실행 중인 서버에 배포하지 않은 경우 아래 단계로 대체 근거를 수집한다.