# User Review Required - m-workspace-port-env-standardization/03+01,02_remote_smoke_evidence

## 요청 일시

2026-06-07

## 상태

RESOLVED_PASS

## 사유

- 유형: implementation-blocked
- 현재 리뷰 회차: 2
- 최종 판정: FAIL
- 요약: repo-owned Dockerfile build blocker는 해소됐고, 원격 `code-server` compose config도 standard slot `19080`/`13000`을 비우도록 수정됐다. 실행 중인 container에는 아직 적용되지 않았으므로 사용자가 원하는 시점에 재시작/재생성한 뒤 compose service health를 재개해야 한다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | ignored sibling `proto-socket/dart/pubspec.lock` 의존과 standard-slot compose health 미완료가 Required로 확인됨. |
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | Dockerfile build blocker는 해소됐으나 사용자 소유 `code-server`가 `19080`/`13000`을 점유해 standard-slot compose health가 차단됨. |

## 차단 근거

- 문제: `port-default-rollout` completion evidence에 필요한 standard-slot compose health가 원격 `code-server` port 점유 때문에 완료되지 않았다. 이후 `code-server` compose config는 `13000`과 `19080`을 publish하지 않도록 수정됐지만, running container에는 재시작 전까지 반영되지 않는다.
- 현재 archive plan: `plan_cloud_G07_1.log`
- 현재 archive review: `code_review_cloud_G07_1.log`
- 검증 명령: `IOP_EDGE_NODE_TOKEN=<sanitized-smoke-token> docker compose --project-name iop-g07-port-smoke --env-file .env.example up --build -d postgres redis control-plane edge web`
- 실제 출력: `control-plane`, `edge`, `web` image build와 Postgres/Redis health는 통과했으나 Control Plane start 단계에서 `Bind for 0.0.0.0:19080 failed: port is already allocated`로 실패했다. 사전 `docker ps --format '{{.Names}} {{.Ports}}' | grep -E '13000|19080' || true` 출력은 `code-server`가 `0.0.0.0:19080->19080/tcp`와 `0.0.0.0:13000->3000/tcp`를 점유 중임을 기록했다.
- 차단 판단 근거: plan은 사용자 소유 원격 Docker/container를 중지하거나 재배치하지 말라고 명시했고, code-review도 사용자 소유 `code-server` container를 임의로 중지할 수 없다. config는 수정됐으므로 남은 결정은 사용자가 언제 `code-server`를 재시작/재생성해 새 port mapping을 적용할지다.

## 처리된 사용자 결정

- 2026-06-07: 사용자 지시에 따라 `/Users/toki/docker/services/code-server/compose/docker-compose.yml`만 수정했다. `code-server` container는 재시작하지 않았다.
- 변경 내용: `13000-13099:3000-3099`를 `13001-13099:3001-3099`로 바꾸고, `19080:19080` publish를 제거했다.
- 원격 백업: `/Users/toki/docker/services/code-server/compose/docker-compose.yml.backup-20260607202844`
- 확인: `/usr/local/bin/docker compose -f /Users/toki/docker/services/code-server/compose/docker-compose.yml config` render에서 `13000`과 `19080` publish가 사라지고 `13001`과 `9080` publish만 확인됐다.
- 현재 상태: `/usr/local/bin/docker inspect code-server --format "{{.State.Status}}"` 결과는 `running`이다. running container는 아직 기존 port mapping을 유지한다.
- 2026-06-07: 사용자가 "그냥 완료로 닫아"라고 지시해, 남은 표준 포트 실기동 검증은 사용자 수락 리스크로 두고 이 stop state를 완료/PASS 해소로 닫는다.

## 사용자 결정 필요

- [x] 테스트 환경 config를 준비한 뒤 재시도한다.
- [x] 사용자가 남은 검증 리스크를 수락하고 작업을 완료 처리한다.
- [ ] 작업 범위를 줄이거나 보류/폐기한다.

## 재개 조건

- 사용자가 원격 runner에서 `code-server`를 재시작/재생성해 수정된 compose config를 적용한다.
- 적용 후 `docker ps --format '{{.Names}} {{.Ports}}' | grep -E '13000|19080' || true`에서 `code-server`가 `13000`과 `19080`을 publish하지 않아야 한다.
- 재개 후 `docker compose --project-name iop-g07-port-smoke --env-file .env.example up --build -d postgres redis control-plane edge web`, `curl -fsS http://127.0.0.1:18000/healthz`, `curl -fsS http://127.0.0.1:18000/readyz`, `docker compose --project-name iop-g07-port-smoke ps`, cleanup을 다시 기록한다.

## 다음 실행 힌트

- `code-server` 재시작/재생성 후 같은 task path에서 compose health evidence만 재수집하면 된다.
- 새 구현이 필요하면 plan 스킬이 이 `USER_REVIEW.md`를 `user_review_N.log`로 아카이브한 뒤 새 `PLAN-*-G??.md` / `CODE_REVIEW-*-G??.md`를 작성한다.

## 종료 규칙

- 사용자가 이 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-*.md`를 작성한다.
