<!-- task=m-workspace-port-env-standardization/04+03_standard_slot_runtime_check plan=1 tag=REVIEW_CHECK -->

# Plan - REVIEW_CHECK

## 이 파일을 읽는 구현 에이전트에게

이 작업은 `code_review_cloud_G07_0.log`의 FAIL 후속 plan이다. 새 source 수정 없이 원격 표준 slot 검증 evidence를 수집하고 `CODE_REVIEW-cloud-G07.md`의 구현 에이전트 소유 섹션을 실제 내용으로 채운다.

원격 `code-server` container를 stop/start/restart/recreate하지 않는다. 사용자에게 직접 질문하거나 선택지를 제시하지 않는다. `code-server`가 여전히 `13000` 또는 `19080`을 publish하고 있으면 검증을 강행하지 말고 `CODE_REVIEW-cloud-G07.md`의 `사용자 리뷰 요청`에 evidence와 재개 조건을 기록한 뒤 멈춘다.

## 배경

이전 plan은 원격 `code-server`의 user-managed restart/recreate 이후 IOP standard slot compose health evidence를 확인하려는 검증-only 작업이었다. 리뷰 시점의 active review stub에는 구현 체크리스트, 계획 대비 변경 사항, 주요 설계 결정, 검증 결과가 모두 placeholder로 남아 있어 원격 검증 수행 여부를 판단할 수 없었다.

## 사용자 리뷰 요청 흐름

구현 중 blocker는 active review stub의 `사용자 리뷰 요청` 섹션에 기록한다. 사용자 소유 환경 문제, 외부 credential/service 준비, 범위 충돌이 아니고 후속 에이전트가 명령 재실행이나 evidence 수집으로 해소할 수 있는 문제라면 사용자 리뷰 요청으로 멈추지 않는다.

## 분석 결과

### 읽은 파일

- `agent-task/m-workspace-port-env-standardization/04+03_standard_slot_runtime_check/plan_cloud_G07_0.log`
- `agent-task/m-workspace-port-env-standardization/04+03_standard_slot_runtime_check/code_review_cloud_G07_0.log`
- `agent-task/archive/2026/06/m-workspace-port-env-standardization/03+01,02_remote_smoke_evidence/complete.log`
- `apps/client/Dockerfile`
- `.env.example`
- `docker-compose.yml`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-test/local/rules.md`
- `agent-test/local/testing-smoke.md`
- `agent-test/local/client-smoke.md`
- `agent-test/local/control-plane-smoke.md`

### 테스트 환경 규칙

- 선택 test_env: `local`
- 적용 profile: `testing-smoke`, `client-smoke`, `control-plane-smoke`
- Docker compose와 Flutter/runtime evidence는 원격 runner/code-server 환경에서 확인한다.
- 현재 작업 컨테이너에서는 Docker-in-Docker를 사용하지 않는다.
- token/secret 원문은 tracked 파일과 review output에 기록하지 않는다.
- 원격 `code-server` stop/start/restart/recreate는 이 plan 범위에서 금지한다.

### 범위 결정 근거

- 이 plan은 source 수정 없이 verification evidence와 review artifact completion만 수행한다.
- 원격 `/Users/toki/docker/services/code-server/compose/docker-compose.yml` 추가 수정, `code-server` 재시작/재생성, 임시 override port 검증은 제외한다.
- `Roadmap Targets`는 포함하지 않는다. 이전 완료 로그에서 `port-default-rollout`은 사용자 결정으로 완료 처리됐고, 이 plan은 중복 roadmap completion 없이 잔여 실기동 확인만 수행한다.

### 빌드 등급

- `cloud-G07`: 원격 Docker compose, long-running image/service startup, stdout/stderr evidence, host port mapping 판정이 중심이다.

## 구현 체크리스트

- [x] 원격 `code-server`가 더 이상 `13000`과 `19080`을 publish하지 않는지 확인하고 결과를 기록한다.
- [ ] 표준 slot compose config render, service build/start, health/readiness, compose ps, cleanup을 원격 isolated context에서 확인하고 실제 출력을 기록한다. (PARTIAL: config render OK, control-plane/postgres/redis/web healthy, edge 19090 충돌로 미시작 — 사용자 리뷰 요청 참조)
- [x] smoke project cleanup과 `code-server` running 상태를 최종 확인하고 기록한다.
- [x] 검증 결과에 token/credential 원문이 남지 않도록 출력 sanitization 여부를 확인한다.
- [x] CODE_REVIEW-cloud-G07.md의 구현 항목별 완료 여부, 구현 체크리스트, 계획 대비 변경 사항, 주요 설계 결정, 사용자 리뷰 요청, 검증 결과를 실제 구현 내용과 검증 출력으로 채운다.

### [REVIEW_CHECK-1] Rerun and record standard-slot verification evidence

문제: `code_review_cloud_G07_0.log`에는 CHECK-1/CHECK-2의 검증 출력이 모두 `(output)` placeholder로 남아 있어 standard slot runtime evidence를 판단할 수 없다.

해결 방법:

- 먼저 `code-server` running 상태와 published port를 읽기 전용으로 확인한다.
- `13000` 또는 `19080` publish가 남아 있으면 compose 검증을 중단하고 `사용자 리뷰 요청`에 blocker evidence를 기록한다.
- port가 비어 있으면 기존 isolated context에서 `iop-g07-port-smoke` project로 compose config/up/health/ps/down을 수행한다.
- `IOP_EDGE_NODE_TOKEN`은 명령 환경에만 주입하고 output에는 `<sanitized-smoke-token>` 같은 placeholder만 남긴다.

수정 파일 및 체크리스트:

- [ ] source 수정 없음
- [ ] `CODE_REVIEW-cloud-G07.md`: CHECK-1/CHECK-2 검증 출력 기록

테스트 작성: 검증-only 작업이므로 새 테스트 파일은 작성하지 않는다.

중간 검증:

```bash
ssh toki@toki-labs.com '/usr/local/bin/docker inspect code-server --format "{{.State.Status}}" && /usr/local/bin/docker ps --format "{{.Names}} {{.Ports}}" | grep -E "code-server|13000|19080" || true'
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-g07-standard-20260607200222/iop && IOP_EDGE_NODE_TOKEN=<sanitized-smoke-token> /usr/local/bin/docker compose --project-name iop-g07-port-smoke --env-file .env.example config >/tmp/iop-compose-config-g07-standard.out && grep -E "18000|13000|15400|16300|19080|19081|19090" /tmp/iop-compose-config-g07-standard.out'
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-g07-standard-20260607200222/iop && IOP_EDGE_NODE_TOKEN=<sanitized-smoke-token> /usr/local/bin/docker compose --project-name iop-g07-port-smoke --env-file .env.example up --build -d postgres redis control-plane edge web'
ssh toki@toki-labs.com 'curl -fsS http://127.0.0.1:18000/healthz && curl -fsS http://127.0.0.1:18000/readyz'
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-g07-standard-20260607200222/iop && /usr/local/bin/docker compose --project-name iop-g07-port-smoke ps'
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-g07-standard-20260607200222/iop && IOP_EDGE_NODE_TOKEN=<sanitized-smoke-token> /usr/local/bin/docker compose --project-name iop-g07-port-smoke --env-file .env.example down'
```

기대 결과: `code-server`는 running이고 `13000`/`19080`을 publish하지 않는다. config render, build/start, `/healthz`, `/readyz`, compose ps, cleanup이 모두 성공한다.

### [REVIEW_CHECK-2] Complete implementation state and checklist sections

문제: `code_review_cloud_G07_0.log`의 구현 항목별 완료 여부와 구현 체크리스트가 모두 미체크라 구현 완료 상태를 판단할 수 없다.

해결 방법:

- REVIEW_CHECK-1의 실제 수행 결과에 맞춰 구현 항목별 완료 여부와 구현 체크리스트를 체크한다.
- 검증이 blocker로 멈춘 경우 성공 항목을 과장하지 말고 `사용자 리뷰 요청`에 blocker와 재개 조건을 채운다.
- 마지막 mandatory checklist item까지 채운 뒤 리뷰 요청 상태로 멈춘다.

수정 파일 및 체크리스트:

- [ ] `CODE_REVIEW-cloud-G07.md`: 구현 항목별 완료 여부 갱신
- [ ] `CODE_REVIEW-cloud-G07.md`: 구현 체크리스트 갱신

테스트 작성: 새 테스트 파일은 작성하지 않는다.

중간 검증:

```bash
sed -n '31,60p' agent-task/m-workspace-port-env-standardization/04+03_standard_slot_runtime_check/CODE_REVIEW-cloud-G07.md
```

기대 결과: 구현-owned 완료 여부와 구현 체크리스트가 실제 수행 결과와 일치한다. review-agent-only 체크리스트는 구현 에이전트가 체크하지 않는다.

### [REVIEW_CHECK-3] Record scope/deviation/design notes and sanitization

문제: `code_review_cloud_G07_0.log`의 `계획 대비 변경 사항`, `주요 설계 결정`이 placeholder로 남아 있고, output sanitization 여부도 구현 evidence로 확인되지 않는다.

해결 방법:

- source 수정 없음, 원격 `code-server` restart/recreate 미수행, isolated compose project 사용 여부를 명시한다.
- 계획과 다르게 수행한 명령이 있으면 이유와 대체 명령을 기록한다.
- 검증 결과에 token/credential 원문이 없는지 확인하고, 필요한 경우 placeholder로 치환한 사실을 기록한다.

수정 파일 및 체크리스트:

- [ ] `CODE_REVIEW-cloud-G07.md`: 계획 대비 변경 사항 기록
- [ ] `CODE_REVIEW-cloud-G07.md`: 주요 설계 결정 기록
- [ ] `CODE_REVIEW-cloud-G07.md`: sanitization 확인 기록

테스트 작성: 새 테스트 파일은 작성하지 않는다.

중간 검증:

```bash
rg -n --sort path '\\(output\\)|_구현 에이전트가' agent-task/m-workspace-port-env-standardization/04+03_standard_slot_runtime_check/CODE_REVIEW-cloud-G07.md
```

기대 결과: 구현-owned placeholder가 남아 있지 않아야 한다. 명령 exit=1(no matches)이 기대 결과다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `CODE_REVIEW-cloud-G07.md` | REVIEW_CHECK-1, REVIEW_CHECK-2, REVIEW_CHECK-3 |

## 최종 검증

```bash
ssh toki@toki-labs.com '/usr/local/bin/docker inspect code-server --format "{{.State.Status}}" && /usr/local/bin/docker ps --format "{{.Names}} {{.Ports}}" | grep -E "code-server|13000|19080" || true'
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-g07-standard-20260607200222/iop && IOP_EDGE_NODE_TOKEN=<sanitized-smoke-token> /usr/local/bin/docker compose --project-name iop-g07-port-smoke --env-file .env.example config >/tmp/iop-compose-config-g07-standard.out && grep -E "18000|13000|15400|16300|19080|19081|19090" /tmp/iop-compose-config-g07-standard.out'
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-g07-standard-20260607200222/iop && IOP_EDGE_NODE_TOKEN=<sanitized-smoke-token> /usr/local/bin/docker compose --project-name iop-g07-port-smoke --env-file .env.example up --build -d postgres redis control-plane edge web'
ssh toki@toki-labs.com 'curl -fsS http://127.0.0.1:18000/healthz && curl -fsS http://127.0.0.1:18000/readyz'
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-g07-standard-20260607200222/iop && /usr/local/bin/docker compose --project-name iop-g07-port-smoke ps'
ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop-g07-standard-20260607200222/iop && IOP_EDGE_NODE_TOKEN=<sanitized-smoke-token> /usr/local/bin/docker compose --project-name iop-g07-port-smoke --env-file .env.example down'
sed -n '31,60p' agent-task/m-workspace-port-env-standardization/04+03_standard_slot_runtime_check/CODE_REVIEW-cloud-G07.md
rg -n --sort path '\\(output\\)|_구현 에이전트가' agent-task/m-workspace-port-env-standardization/04+03_standard_slot_runtime_check/CODE_REVIEW-cloud-G07.md
```

기대 결과: user-managed restart 이후 standard slots가 비어 있고 compose health/readiness가 통과한다. `CODE_REVIEW-cloud-G07.md`의 구현-owned 섹션에는 실제 수행 결과와 stdout/stderr가 남아 있으며 token/credential 원문은 남아 있지 않는다.
