<!-- task=m-provider-resource-admission-ownership-alignment/16_capacity_smoke plan=0 tag=TEST -->

# Code Review Reference - TEST

> **[IMPLEMENTING AGENT — READ FIRST]** Fill implementation-owned sections, report `review-ready`, and stop. The implementation model must differ from Plan and Review. Do not review or start another agent.

## 개요

date=2026-07-22
task=m-provider-resource-admission-ownership-alignment/16_capacity_smoke, plan=0, tag=TEST

## 역할 모델

- Plan: `gpt-5.6-terra`
- Implementation: `gpt-5`
- Review: `gpt-5.6-sol`

> Runtime records each identity at its first role start. All three identities must differ.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/operational-observability-provider-management/milestones/provider-resource-admission-ownership-alignment.md`
- Milestone link: [Milestone 문서](../../../agent-roadmap/phase/operational-observability-provider-management/milestones/provider-resource-admission-ownership-alignment.md)
- Task ids:
  - `capacity-smoke`: shared capacity-1 two-alias smoke with backend peak 1 and counter recovery.
- Completion mode: check-on-pass

## 이 파일을 읽는 리뷰 에이전트에게

> **[REVIEW AGENT ONLY]** Review must differ from Plan/Implementation, must not edit source/tests or execute plan work, and finishes by leaving exactly one of a follow-up pair, `USER_REVIEW.md`, or `complete.log`.

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| TEST-1 Control Plane long provider counters | [x] |
| TEST-2 Local two-alias capacity smoke | [x] |
| TEST-3 Verification evidence | [x] |

## 구현 체크리스트

- [x] [TEST-1] Control Plane status JSON에 existing long provider capacity/in-flight/queued wire values를 loss 없이 전달하고 typed/raw handler regression으로 고정한다.
- [x] [TEST-2] temporary fake OpenAI-compatible backend, Control Plane, Edge, Node config의 local smoke에서 `ornith:35b`/`ornith-fast` 동시 호출, queue/fallback, peak=1, final normal/long zero를 evidence로 기록한다.
- [x] [TEST-3] `gofmt -d apps/control-plane/cmd/control-plane/http_views.go apps/control-plane/cmd/control-plane/edge_registry_handler_test.go`, `go test -count=1 ./apps/control-plane/...`, `go test -count=1 ./apps/edge/internal/node ./apps/edge/internal/transport ./apps/edge/internal/service ./apps/edge/internal/bootstrap`, `go test -count=1 ./apps/node/internal/transport ./apps/node/internal/bootstrap`, `bash -n scripts/e2e-provider-capacity-smoke.sh`, `./scripts/e2e-provider-capacity-smoke.sh`, `IOP_E2E_BIND_TIMEOUT=60 IOP_E2E_PROFILE=mock ./scripts/e2e-smoke.sh` actual output을 stub에 기록한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 채우고 review-ready를 보고한 뒤 현재 실행을 종료한다. code-review를 실행하거나 다음 에이전트를 시작하지 않는다.

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

> **[REVIEW AGENT ONLY]**

- [x] 판정과 Required/Suggested/Nit가 evidence와 일치한다.
- [x] Runtime Plan/Implementation/Review identities are all distinct.
- [x] status view change is read-only rendering; no Control Plane ownership or wire/config semantics changed.
- [x] local smoke is no-secret/no-external-endpoint, bounded, cleanup-safe, and captures two aliases, queue/fallback, peak=1, final normal/long zero.
- [ ] PASS이면 `capacity-smoke` Roadmap Completion을 포함한 `complete.log`와 archive handoff를 만들되 roadmap을 직접 수정하지 않는다.

## 계획 대비 변경 사항

없음. 계획의 세 파일만 변경했다. local test rule에 따라 `make proto`와 live long-context preflight를 추가 실행했으며, preflight의 rc=3은 외부 endpoint/Control Plane 미준비 증거로 기록했고 S11 local pass로 해석하지 않았다.

## 주요 설계 결정

- Control Plane view는 기존 `ProviderSnapshot` getter의 long capacity/in-flight/queued만 read-only JSON field로 복사한다. wire/config/ownership 의미는 변경하지 않는다.
- local smoke는 두 alias가 하나의 provider resource를 참조하도록 임시 config를 만들고, fake backend의 첫 요청을 release sentinel까지 hold한다. 따라서 queue 관측 전에 backend peak가 2가 되면 smoke가 실패한다.
- fake backend stats와 Control Plane status를 독립적으로 확인해 backend peak=1, queue 관측, 모든 normal/long final counter=0을 각각 증명한다.

## 사용자 리뷰 요청

_선택된 Milestone `구현 잠금 > 결정 필요`가 구현을 막을 때만 채운다. 구현은 이 섹션을 포함한 모든 구현 소유 섹션을 채운 뒤 `review-ready`를 보고하고 종료한다._

- 상태: 없음
- 사유 유형: 없음
- 연결 대상: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 후속으로 해결할 수 없는 이유: 없음
- 재개 조건: 없음

## 리뷰어를 위한 체크포인트

- `http_views.go` must map existing long wire getters without exposing config internals/secrets.
- `edge_registry_handler_test.go` must prove typed and raw JSON long field preservation.
- The new script must not alter default configs, live long smoke, contracts/spec/roadmap, or root dirty Edge service tests.
- Compare actual backend stats and Control Plane status evidence, not reconstructed prose.

## 검증 결과

### `gofmt -d apps/control-plane/cmd/control-plane/http_views.go apps/control-plane/cmd/control-plane/edge_registry_handler_test.go`

exit 0, stdout/stderr 없음.

### `make proto` (local profile 추가 검증)

exit 0. `protoc --go_out=. --go_opt=module=iop`가 runtime/node/control/job proto를 재생성했고 생성물 diff는 없었다.

### `go test -count=1 ./apps/control-plane/...`

exit 0.

```text
ok  iop/apps/control-plane/cmd/control-plane  0.141s
ok  iop/apps/control-plane/internal/wire      1.599s
```

### `go test -count=1 ./apps/edge/internal/node ./apps/edge/internal/transport ./apps/edge/internal/service ./apps/edge/internal/bootstrap`

exit 0.

```text
ok  iop/apps/edge/internal/node       0.011s
ok  iop/apps/edge/internal/transport  4.735s
ok  iop/apps/edge/internal/service    5.868s
ok  iop/apps/edge/internal/bootstrap  3.214s
```

### `go test -count=1 ./apps/node/internal/transport ./apps/node/internal/bootstrap`

exit 0.

```text
ok  iop/apps/node/internal/transport  5.545s
ok  iop/apps/node/internal/bootstrap  1.261s
```

### `bash -n scripts/e2e-provider-capacity-smoke.sh`

exit 0, stdout/stderr 없음.

### `./scripts/e2e-provider-capacity-smoke.sh`

exit 0.

```text
[provider-capacity-smoke] aliases=ornith:35b,ornith-fast queue_observed=true
[provider-capacity-smoke] backend={"calls":2,"active":0,"peak":1}
[provider-capacity-smoke] final_provider_counters=[{"id":"ornith-provider","in_flight":0,"queued":0,"long_context_capacity":1,"long_in_flight":0,"long_queued":0}]
[provider-capacity-smoke] PASS evidence=/tmp/iop-provider-capacity-smoke.uTQzbS
```

기본 cleanup이 위 temporary evidence directory를 process 종료 뒤 제거한다. `IOP_PROVIDER_CAPACITY_SMOKE_KEEP_TMP=1`이면 조사용으로 유지한다.

### `IOP_E2E_BIND_TIMEOUT=60 IOP_E2E_PROFILE=mock ./scripts/e2e-smoke.sh`

exit 0. `scripts/dev/edge.sh`와 `scripts/dev/node.sh`를 별도 process로 실행해 `/nodes`, `/capabilities`, `/transport`, 같은 session의 두 foreground message, background run, `/sessions`, `/terminate-session`을 통과했다. 출력의 마지막 상태는 `Auxiliary smoke test PASSED.`다.

### `./scripts/e2e-long-context-admission-smoke.sh --preflight --out-dir /tmp/iop-provider-capacity-live-preflight-20260722`

exit 3 (외부 환경 blocker, S11 local pass 아님). config check는 통과했고, live `/v1/models`와 local default Control Plane status endpoint가 도달 불가였다. evidence는 `/tmp/iop-provider-capacity-live-preflight-20260722`에 남았다. 재개 조건은 live endpoint와 `edge-toki-labs-dev` status endpoint가 준비되는 것이다.

---

> **[IMPLEMENTING AGENT — BEFORE SAVING]** Fill implementation-owned sections, report `review-ready`, and stop. Do not execute code-review or start another agent.

## 섹션 소유권

| Section | Owner | Note |
|---------|-------|------|
| Header, overview, Roadmap Targets, checkpoints | Fixed | Implementation must not expand scope |
| 역할 모델 | Mixed | Runtime records distinct Implementation then Review identities |
| completion table, implementation checklist, changes, decisions, user review, verification output | Implementation | Record actual facts only |
| review checklist and verdict | Review | Implementation must not modify |

## 코드리뷰 결과

- 종합 판정: FAIL
- 차원별 평가:
  - correctness: Fail
  - completeness: Fail
  - test coverage: Fail
  - API contract: Pass
  - code quality: Fail
  - implementation deviation: Fail
  - verification trust: Fail
  - spec conformance: Fail
- 발견된 문제:
  - Required — `scripts/e2e-provider-capacity-smoke.sh:245`: Edge와 Node의 `metrics.port`는 `packages/go/observability/observability.go:105`의 wildcard `:<port>` listener를 시작하므로, review가 주장한 loopback-only/no-external-endpoint harness가 아니다. metrics listener에 explicit loopback bind를 지원해 이 smoke가 `127.0.0.1`에만 bind하도록 하거나, Edge와 Node 모두에서 `port <= 0`을 일관되게 disable한 뒤 smoke config에서 비활성화하고 listener scope를 검증하는 회귀를 추가한다.
  - Required — `scripts/e2e-provider-capacity-smoke.sh:86`: `wait_for_http`와 status/stats/model probes는 `--connect-timeout`만 사용하거나 timeout 자체가 없어 peer가 TCP 연결 후 응답을 멈추면 deadline 검사로 돌아오지 않는다. loopback hang-server fault injection에서 `curl --connect-timeout 1`은 외부 `timeout 2`에 의해 rc=124로 종료됐다. 모든 HTTP 호출에 total `--max-time`을 적용하는 공통 helper를 사용하고, `FIRST_PID`/`SECOND_PID`도 초기화해 실패 시 cleanup에서 kill/wait하여 bounded·cleanup-safe 요구를 증명한다.
  - Required — `scripts/e2e-provider-capacity-smoke.sh:411`: final jq predicate는 counter 4개만 0이면 성공하므로 `connected=false`, `status=unavailable`, `health=offline`, effective capacity 0인 Node disconnect snapshot도 recovery로 오판한다. 합성 offline snapshot이 현재 predicate에서 exit 0/`true`였다. `ornith-node`가 connected이고 `ornith-provider`가 expected identity/status/health/configured capacity를 유지한 상태에서 normal/long counters가 모두 0인지 함께 검증한다.
  - Required — `agent-task/m-provider-resource-admission-ownership-alignment/16_capacity_smoke/CODE_REVIEW-local-G08.md:143`: 기록된 `e2e-smoke.sh`는 자체 출력과 `scripts/e2e-smoke.sh:7`에서 auxiliary-only이며 direct dev user-flow를 대체하지 않는다고 명시한다. `agent-test/local/testing-smoke.md:39`의 `scripts/dev/edge.sh`/`scripts/dev/node.sh` full-cycle을 별도로 수행하고, 같은 session 두 메시지와 요구 command payload/terminal 순서의 raw evidence를 기록한다.
  - Suggested — `scripts/e2e-provider-capacity-smoke.sh:70`: tool preflight에 없는 `seq`를 사용해 기본 macOS 같은 환경에서 숨은 의존성이 된다. Bash 산술 loop로 바꾸거나 required tool로 명시·검증한다.
  - Nit — `agent-task/m-provider-resource-admission-ownership-alignment/16_capacity_smoke/PLAN-local-G08.md:1`: canonical task header 앞에 stray `ㄹ`이 있다. 후속 pair에서는 task header를 첫 바이트부터 정상 생성한다.
- 다음 단계: 다른 Plan 모델이 archived plan/review findings를 입력으로 follow-up PLAN/CODE_REVIEW pair를 작성한다.
