<!-- task=m-workspace-port-env-standardization/01_service_defaults plan=2 tag=REVIEW2_PORT_DEFAULTS -->

# Plan - REVIEW2_PORT_DEFAULTS

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

`CODE_REVIEW-local-G07.md`의 구현 에이전트 소유 섹션 작성까지가 구현입니다. 변경 후 검증을 실행하고 실제 stdout/stderr를 붙여 넣은 뒤 active 파일을 그대로 두고 리뷰를 요청하세요. 사용자 결정, 사용자 소유 외부 환경, 범위 충돌이 없이는 직접 질문하지 말고 `사용자 리뷰 요청` 섹션에 근거를 남깁니다. 최종 archive, `complete.log`, roadmap 갱신은 code-review/runtime 책임입니다.

## 배경

이전 리뷰(`code_review_local_G07_1.log`)에서 G07의 API config test hermeticity 수정과 필수 검증은 통과했다. 남은 문제는 active diff에 root `README.md` 변경이 포함되어 있다는 점이다. 이 subtask의 계획은 root README를 범위 밖으로 두었고, 해당 README 변경은 현재 service default와도 충돌하므로 이번 follow-up은 root README drift만 제거한다.

## 사용자 리뷰 요청 흐름

구현 중 blocker는 active `CODE_REVIEW-local-G07.md`의 `사용자 리뷰 요청` 섹션에 기록한다. 구현 에이전트는 사용자에게 직접 질문하지 않고, code-review가 해당 요청을 검증해 필요할 때만 `USER_REVIEW.md`를 작성한다.

## 분석 결과

### 근거

- archived review: `agent-task/m-workspace-port-env-standardization/01_service_defaults/code_review_local_G07_1.log`
- 현재 문제: `README.md` diff가 이 task 범위 밖인데 active diff에 남아 있고, root guide에 `8080/8081` 기본값을 추가/유지해 service config의 `18030/18031` 변경과 충돌한다.

### 범위 결정 근거

- 수정 대상은 root `README.md`의 active diff 제거로 제한한다.
- `services/api/internal/config/config.go`, `services/api/internal/config/config_test.go`, `services/worker/internal/config/config.go`, `services/worker/internal/config/config_test.go`, `services/worker/README.md`의 기존 service-default 변경은 유지한다.
- root README의 최종 포트 가이드 정렬은 후속 `operator_client_refs`/docs task에서 다룬다. 이 subtask에서는 out-of-scope root README diff를 남기지 않는 것이 가장 좁은 수정이다.

### 빌드 등급

- build/review: `local-G07`. 변경은 문서 drift 제거와 deterministic 검증에 한정된다.

## 구현 체크리스트

- [ ] root `README.md`의 active diff를 제거해 이 subtask가 root README를 변경하지 않게 한다.
- [ ] `git diff -- README.md --exit-code`, focused API config test, API/worker Go tests, stale service default `rg` 검증을 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW2_PORT_DEFAULTS-1] Root README drift removal

문제: root `README.md` 변경은 이 subtask의 계획 범위 밖이다. 특히 추가된 env rows와 `Workspace Port Slots` 문구는 service config가 이미 `18030/18031`로 바뀐 상태에서 `8080/8081`을 현재 기본값처럼 남겨 guide와 code를 충돌시킨다.

해결 방법: `README.md`의 active diff를 제거한다. 안전하게 `git diff -- README.md`로 변경 범위를 확인한 뒤, 이 task에서 추가된 env rows와 `Workspace Port Slots` section을 apply_patch로 제거해 `git diff -- README.md --exit-code`가 통과하게 한다. `git checkout -- README.md` 같은 destructive shortcut은 사용하지 않는다.

수정 파일 및 체크리스트:

- [ ] `README.md`

테스트 작성: 문서 drift 제거라 새 테스트는 쓰지 않는다.

중간 검증:

```bash
git diff -- README.md --exit-code
```

기대 결과: exit code 0, no output.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `README.md` | REVIEW2_PORT_DEFAULTS-1 |

## 최종 검증

```bash
git diff -- README.md --exit-code
ALT_WORKER_SOCKET_URL=ws://example.invalid/socket go test ./services/api/internal/config
go test ./services/api/...
go test ./services/worker/...
rg --sort path -n "127\\.0\\.0\\.1:8081|localhost:5432|localhost:6379|ALT_WORKER_PORT.*8081" services/api/internal/config services/worker/internal/config services/worker/README.md
```

기대 결과: `git diff -- README.md --exit-code`와 세 `go test` 명령은 exit code 0. 마지막 `rg`는 exit code 1/no output으로 old service default가 남지 않았음을 보여야 한다.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
