gito/agent-roadmap/phase/control-plane-foundation/milestones/operation-event-outbox.md
toki a9c033892e feat: operation-event-outbox milestone 검토중으로 전환 및 완료 리뷰 기록
- PHASE.md: operation-event-outbox 상태 [진행중] → [검토중] 변경
- milestone: 완료 리뷰 섹션 작성 (상태: 요청됨, 요청일: 2026-06-14)
- 완료 근거: complete.log event-store PASS, DB test SKIP 없이 PASS
- 검증 완료: 원격 code-server compose에서 gito_test DB로 검증 완료
- event-store 체크박스 완료 체크
2026-06-14 06:58:09 +09:00

3.4 KiB

Milestone: Operation Event Outbox

위치

  • Roadmap: agent-roadmap/ROADMAP.md
  • Phase: agent-roadmap/phase/control-plane-foundation/PHASE.md

목표

operation lifecycle과 normalized event를 PostgreSQL 원장에 기록하고, proto-socket event stream 또는 future Redis fanout이 읽을 수 있는 outbox 경계를 만든다. 재시도와 중복 적용은 idempotency key로 제어한다.

상태

[검토중]

승격 조건

  • 없음

구현 잠금

  • 상태: 해제
  • 결정 필요: 없음

범위

  • operation lifecycle model
  • idempotency key와 duplicate guard
  • operation event/outbox table
  • worker가 pending operation을 pick하는 store boundary
  • proto-socket event stream이 사용할 event shape

기능

Epic: [operation] Operation lifecycle

Git operation, agent run, provider projection을 같은 operation 원장으로 관리한다.

  • [op-model] operation type/state/idempotency schema를 확정한다.
  • [op-store] operation create/start/succeed/fail/cancel store boundary를 만든다. 검증: invalid transition과 idempotency duplicate를 테스트한다.
  • [op-pick] worker가 pending operation을 안전하게 pick하는 기준을 만든다. 검증: 같은 operation이 중복 pick되지 않는다.

Epic: [outbox] Durable events

operation 결과를 durable event로 남기고 fanout 대상이 읽을 수 있게 한다.

  • [event-model] normalized event type과 payload 저장 형식을 정리한다.
  • [event-store] event append/list/mark-published boundary를 만든다. 검증: event order와 retry 가능한 publish 상태를 확인한다.
  • [protosocket-events] proto-socket event channel 후보와 outbox event mapping을 contracts에 기록한다.

완료 리뷰

  • 상태: 요청됨
  • 요청일: 2026-06-14
  • 완료 근거:
    • agent-task/archive/2026/06/m-operation-event-outbox_1/complete.log의 Roadmap Completion이 event-store PASS를 기록했다.
    • 원격 code-server compose의 code-server-postgresgito_test DB를 만들고 TestPostgresOperationEventStoreAppendsListsMarksPublishedAndValidatesSKIP 없이 PASS했다.
    • cd /config/workspace/gito/services/core && GITO_TEST_DATABASE_URL=<redacted> go test ./... -count=1이 PASS했다.
  • 리뷰 필요:
    • 사용자가 완료 결과를 확인했다
    • archive 이동을 승인했다
  • 리뷰 코멘트: 모든 기능 Task와 명시 검증이 evidence와 함께 충족되어 Milestone 완료 후보로 전환한다. 사용자 승인 후 [완료] 및 archive 이동을 진행한다.

범위 제외

  • Redis Streams 구현
  • provider-specific projection
  • Flutter event UI
  • distributed scheduler 최적화

작업 컨텍스트

  • 관련 경로: services/core/internal/events/, services/core/internal/storage/, services/core/internal/worker/, services/core/migrations/
  • 표준선(선택): Postgres outbox가 event source of truth이며 Redis는 optional acceleration이다.
  • 현재 작업현황: event-store 구현과 DB-backed 검증이 완료되어 Milestone은 사용자 완료 확인 및 archive 승인 대기 상태다.
  • 검증 완료: 원격 code-server compose의 code-server-postgres에서 gito_test DB를 사용해 event order, retry 가능한 pending publish 상태, mark-published 동작을 검증했다.
  • 선행 작업: Platformless Git Operation Engine
  • 후속 작업: Agent Shell Runtime Channel
  • 확인 필요: 사용자가 완료 결과를 확인하고 archive 이동 여부를 승인한다.