# Complete - m-forgejo-branch-event-mvp/02+01_watch_store

## 완료 일시

2026-06-13

## 요약

watch-store Postgres persistence 검증을 완료했다. 총 4회 리뷰 루프 후 최종 판정 PASS이며, USER_REVIEW 환경 차단은 code-server 동반 Postgres 사용으로 해소됐다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | duplicate response/event persistence와 Postgres evidence가 부족했다. |
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | duplicate event id는 보완됐지만 timestamp precision 및 Postgres evidence 공백이 남았다. |
| `plan_cloud_G07_2.log` | `code_review_cloud_G07_2.log` | FAIL | timestamp precision 보정은 확인됐으나 Postgres integration test 환경이 없어 USER_REVIEW로 중단했다. |
| `user_review_0.log` | user decision | RESOLVED | code-server 동반 Postgres를 사용해 검증하기로 했다. |
| `plan_cloud_G07_3.log` | `code_review_cloud_G07_3.log` | PASS | revision cursor FK를 provider repo id 모델에 맞게 제거하고 isolated Postgres test가 skip 없이 PASS했다. |

## 구현/정리 내용

- `revision_cursors.repo_id`를 `repos.id` FK에서 분리해 provider repo id cursor 저장을 허용했다.
- Postgres integration test가 테스트별 unique schema를 만들고 `search_path`로 격리한 뒤 cleanup하도록 보완했다.
- `GITO_TEST_DATABASE_URL="$DATABASE_URL"`로 실제 Postgres 경로를 skip 없이 검증했다.

## 최종 검증

- `test -n "${DATABASE_URL:-}"` - PASS; exit code 0, no stdout/stderr.
- `(cd services/core && GITO_TEST_DATABASE_URL="$DATABASE_URL" go test -v -count=1 ./internal/storage)` - PASS; `TestPostgresBranchEventStorePersistsWatchCursorAndDedupesDelivery` PASS without skip.
- `(cd services/core && go test -count=1 ./internal/controlplane ./internal/storage)` - PASS.
- `(cd services/core && go test -count=1 ./...)` - PASS.
- `(cd services/core && go vet ./...)` - PASS; no stdout/stderr.
- `./bin/build` - PASS; no stdout/stderr.
- `git diff --check` - PASS; no stdout/stderr.

## Roadmap Completion

- Milestone: `agent-roadmap/phase/control-plane-foundation/milestones/forgejo-branch-event-mvp.md`
- Completed task ids:
  - `watch-store`: PASS; evidence=`plan_cloud_G07_3.log`, `code_review_cloud_G07_3.log`; verification=`(cd services/core && GITO_TEST_DATABASE_URL="$DATABASE_URL" go test -v -count=1 ./internal/storage)`
- Not completed task ids: 없음

## 잔여 Nit

- 없음

## 후속 작업

- 없음
