# User Review Required - m-operation-event-outbox

## 요청 일시

2026-06-14

## 상태

RESOLVED

## 사유

- 유형: environment-blocked
- 현재 리뷰 회차: 1
- 최종 판정: PASS
- 요약: 원격 code-server compose의 `code-server-postgres`에 `gito_test` DB를 만들고, code-server 컨테이너 내부에서 `GITO_TEST_DATABASE_URL`을 주입해 필수 DB-backed 검증을 skip 없이 통과했다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `agent-task/m-operation-event-outbox/plan_local_G04_0.log` | `agent-task/m-operation-event-outbox/code_review_local_G03_0.log` | FAIL | `GITO_TEST_DATABASE_URL` 부재로 targeted storage integration test가 SKIP되어 필수 검증 미충족 |
| `agent-task/m-operation-event-outbox/USER_REVIEW.md` | user decision | PASS/RESOLVED | 원격 code-server compose의 Postgres DB 사용 지시를 반영해 `gito_test` DB를 만들고 검증을 완료 |

## 차단 근거

- 문제: `event-store` Roadmap Target은 `TestPostgresOperationEventStoreAppendsListsMarksPublishedAndValidates`와 core 전체 fresh 검증이 skip 없이 PASS해야 하지만, 현재 환경에는 PostgreSQL DSN이 없다.
- 현재 archive plan: `agent-task/m-operation-event-outbox/plan_local_G04_0.log`
- 현재 archive review: `agent-task/m-operation-event-outbox/code_review_local_G03_0.log`
- 검증 명령: `cd services/core && go test ./internal/storage -run TestPostgresOperationEventStoreAppendsListsMarksPublishedAndValidates -count=1 -v`
- 실제 출력:
  ```text
  === RUN   TestPostgresOperationEventStoreAppendsListsMarksPublishedAndValidates
      postgres_test.go:747: GITO_TEST_DATABASE_URL not set; skipping Postgres integration test
  --- SKIP: TestPostgresOperationEventStoreAppendsListsMarksPublishedAndValidates (0.00s)
  PASS
  ok  	git.toki-labs.com/toki/gito/services/core/internal/storage	0.004s
  ```
- 차단 판단 근거: 리뷰 재실행에서도 `GITO_TEST_DATABASE_URL`은 비어 있었고, `docker`, `postgres`, `initdb`, `psql` 실행 파일도 PATH에서 확인되지 않았다. 저장소 코드 수정이나 단순 명령 재실행만으로는 skip 없는 DB integration 증거를 만들 수 없다.

## 해소 근거

- 사용자 결정: 원격 `~/docker/services/code-server/compose/docker-compose.yml`의 code-server compose를 기준으로, 함께 올라간 `code-server-postgres`에 DB를 만들어 검증한다.
- 조치: 원격 host에서 `/usr/local/bin/docker`를 사용해 `code-server-postgres`에 `gito_test` DB를 만들고, `code-server` 컨테이너의 `/config/workspace/gito` checkout에서 `DATABASE_URL`의 DB 이름만 `gito_test`로 바꿔 `GITO_TEST_DATABASE_URL`을 주입했다.
- 추가 수정: core 전체 DB 검증 중 `PickQueuedOperation`의 `RETURNING id`가 CTE의 `candidate.id`와 ambiguous한 실제 storage 버그를 발견해 `services/core/internal/storage/postgres.go`에서 `op.` alias로 한정했다.
- 검증:
  - `cd /config/workspace/gito/services/core && GITO_TEST_DATABASE_URL=<redacted> go test ./internal/storage -run TestPostgresOperationEventStoreAppendsListsMarksPublishedAndValidates -count=1 -v` - PASS, `SKIP` 없음.
  - `cd /config/workspace/gito/services/core && GITO_TEST_DATABASE_URL=<redacted> go test ./... -count=1` - PASS.

## 사용자 결정 필요

- [ ] 자동 follow-up plan/review를 계속 진행한다.
- [ ] 계획을 재작성한다.
- [x] 테스트 환경, secret, 외부 서비스, SDK, 장비 조건을 준비한 뒤 재시도한다.
- [ ] 작업 범위를 줄이거나 보류/폐기한다.

## 재개 조건

- 완료됨: 원격 code-server compose의 `code-server-postgres`와 `gito_test` DB를 사용해 `GITO_TEST_DATABASE_URL`을 주입했다.
- 완료됨: targeted command와 `go test ./... -count=1`이 skip 없이 PASS했다.

## 다음 실행 힌트

- 재개 검증 후보:
  - `cd services/core && test -n "$GITO_TEST_DATABASE_URL" && go test ./internal/storage -run TestPostgresOperationEventStoreAppendsListsMarksPublishedAndValidates -count=1 -v`
  - `cd services/core && test -n "$GITO_TEST_DATABASE_URL" && go test ./... -count=1`

## 종료 규칙

- 사용자가 이 stop state를 완료/PASS로 해소하면 `USER_REVIEW.md`를 해소 상태로 갱신하고, `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.
- 새 구현이 필요하면 `plan` 스킬이 `USER_REVIEW.md`를 `user_review_N.log`로 아카이브한 뒤 새 `PLAN-*-G??.md` / `CODE_REVIEW-*-G??.md`를 작성한다.
