<!-- task=review_followup_alignment/02_docs_runtime_context_split plan=0 tag=REVIEW_DOCS -->
# CODE_REVIEW-local-G02: 공개 문서와 로컬 검증 문맥 분리
date=2026-07-06

## 상태
구현 완료

## 이 파일을 읽는 구현 에이전트에게
구현 후 이 파일의 구현 에이전트 소유 섹션을 실제 변경 내용, 계획 대비 변경, 검증 출력으로 채운다. active `PLAN-*.md`와 `CODE_REVIEW-*.md`는 남겨두고 review 준비 상태를 보고한다. 직접 사용자에게 질문하거나 `USER_REVIEW.md`를 만들거나 archive/complete 처리를 하지 않는다.

## 구현 체크리스트
- [x] REVIEW_DOCS-1의 공개 문서 축소와 local test 문맥 이동을 수행한다.
- [x] 중간 검증 명령을 실행하고 결과를 `CODE_REVIEW-local-G02.md`에 기록한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 코드리뷰 전용 체크리스트

> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.
> 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다.

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 archive 로그로 이동한다.
- [x] active `PLAN-*-G??.md`를 archive 로그로 이동한다.
- [x] `.gitignore`의 Agent-Ops 관리 block을 확인한다.
- [ ] PASS이면 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [ ] PASS split 작업이면 이동 후 빈 active parent 정리 여부를 확인한다.

## 계획 대비 변경 사항

- `docs/edge-local-dev-guide.md`: 공개 가이드로 완전히 재작성. `toki-labs.com`, `192.168.0.x` 대역, dev-runtime 경로, SSH host, bearer token 원문, machine-specific config 등을 제거하고 `<control-plane-host>`, `<edge-host>`, `<token>`, `<model-alias>`, `<platform>`, `<edge-id>` placeholder로 치환. `dev-runtime` 키워드 자체를 공개 docs에서 완전 제거. provider pool, thinking smoke, tool-call boundary smoke의 공개 개요만 남김.
- `agent-test/local/edge-local-dev-guide.md` 신규 생성: `docs/`에서 이동한 private/local 검증 런버 세부사항을 새 local test 문서로 작성. 특정 host(`toki-labs.com`, `192.168.0.91`, `192.168.0.59`), dev-runtime 경로(`build/dev-runtime/edge.yaml`, `EDGE_BIN`), provider pool candidate, SSH 연결, credential 원문 예시(`IOP_MLX_API_KEY="<edge.yaml local bearer token>"`) 포함.

## 주요 설계 결정

- 공개 docs/edge-local-dev-guide.md를 "Edge를 로컬에서 빌드하고 실행해 Node를 연결하고 OpenAI-compatible smoke까지 확인하는 최소 절차"로 정의. person-facing quickstart에 private host와 검증 evidence를 섞지 않음.
- `dev-runtime` 키워드 자체를 tracked docs에서 완전히 제거. 이 키워드는 local test 문맥에서만 사용됨.
- 이동된 local 문서는 secret 원문을 포함하지 않고 `<edge.yaml local bearer token>` 등 placeholder와 환경변수 이름만 남김.
- 이미 `agent-test/local/edge-smoke.md`가 있으므로 중복 방지: 기존 edge-smoke.md에 없었던 Windows SSH, 내부 IP 검증, token 처리, raw tool-call curl 예시 등만 새로운 local guide로 이동.

## 사용자 리뷰 요청

_기본값은 `없음`이다. 구현 중 새 결정이 필요해 보여도 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 이 섹션은 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 채운다. 외부 환경/secret/서비스 준비, 검증 증거 공백, 반복 실패, 일반 범위 조정은 사용자 리뷰 요청이 아니며 `검증 결과`, `계획 대비 변경 사항`, 또는 code-review의 일반 follow-up plan으로 처리한다._

- 상태: 없음
- 사유 유형: 없음
- 연결 대상: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음

## 리뷰어를 위한 체크포인트
- tracked `docs/`가 공개 가이드 성격으로 정리되었는가.
- private/local-only 검증 문맥이 local test 문서로 이동했는가.
- 공개 문서에 secret 원문, private IP, machine-specific host가 남지 않는가.

## 검증 결과

### REVIEW_DOCS-1 중간 검증

```bash
$ rg --sort path -n '192\.168\.|dev-runtime|edge-toki-labs|Windows SSH|toki-labs\.com' docs/edge-local-dev-guide.md
(no output)

$ rg --sort path -n 'mattermost_credentials|Bearer [A-Za-z0-9._-]+' docs/edge-local-dev-guide.md
(no output)
```

### 최종 검증

```bash
$ rg --sort path -n '192\.168\.|dev-runtime|edge-toki-labs|Windows SSH|toki-labs\.com' docs/edge-local-dev-guide.md
(no output)

$ rg --sort path -n 'mattermost_credentials|Bearer [A-Za-z0-9._-]+' docs/edge-local-dev-guide.md
(no output)
```

두 명령 모두 출력이 없어 예상과 일치한다. 공개 `docs/edge-local-dev-guide.md`에 `192.168.x.x`, `dev-runtime`, `edge-toki-labs`, `toki-labs.com`, `Bearer <token>`, `mattermost_credentials`가 모두 제거됨.

## 코드리뷰 결과
_리뷰 에이전트가 append한다._

## 코드리뷰 결과 - 2026-07-06

- 종합 판정: FAIL
- 차원별 평가:
  - correctness: Fail
  - completeness: Fail
  - test coverage: Pass
  - API contract: Fail
  - code quality: Pass
  - implementation deviation: Fail
  - verification trust: Fail
- 발견된 문제:
  - Required: `docs/edge-local-dev-guide.md:146`와 `docs/edge-local-dev-guide.md:155`의 `/v1/chat/completions` 예시가 `http://<edge-host>:18083`을 사용한다. 같은 공개 quickstart의 config는 `openai.listen: "0.0.0.0:18081"`이고 기본 smoke/base URL도 `18081`을 가리키므로, 사용자가 문서를 그대로 따르면 thinking smoke만 다른 dev-runtime 포트를 호출한다. 공개 guide에서는 두 예시를 `http://<edge-host>:18081/v1/chat/completions`로 맞추고, `18083`이 공개 docs에 남지 않는 검증을 추가해야 한다.
- 다음 단계: WARN/FAIL 후속 plan/review를 작성해 위 Required를 좁게 수정한다.
