<!-- task=m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence plan=1 tag=REVIEW_TEST -->

# Plan - REVIEW_TEST Full-Cycle Evidence Recovery

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

`CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션 작성은 필수다. 구현 후 검증 명령을 실행하고 실제 출력, 구현 메모, 계획 대비 변경 사항을 채운 뒤 active 파일을 남긴 채 리뷰 준비 상태로 보고한다. 최종 판정, log rename, `complete.log`, archive 이동은 code-review-skill 전용이다. 구현 중 사용자만 결정할 수 있는 범위 변경, 외부 환경/secret, 또는 scope conflict가 생기면 chat에서 묻지 말고 review stub의 `사용자 리뷰 요청` 섹션에 근거와 재개 조건을 남긴다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 증거 공백은 사용자 리뷰 요청이 아니라 검증 결과로 기록한다.

## 배경

이 subtask의 1차 review는 package/queue regression과 보조 smoke는 통과했지만, full-cycle 실제 구동 수행 여부 또는 미수행 사유가 기록되지 않아 FAIL 처리됐다. local testing rule은 보조 smoke가 full-cycle 실제 구동을 대체할 수 없다고 명시한다. 이번 follow-up은 제품 코드 수정 없이 누락된 full-cycle evidence를 복구하고, 보조 smoke와 full-cycle 결과를 명확히 분리한다.

## 사용자 리뷰 요청 흐름

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

## Roadmap Targets

- Milestone: `agent-roadmap/phase/inference-provider-extension/milestones/edge-model-group-queue-scheduling.md`
- Task ids:
  - `verification`: Edge-owned queue의 FIFO 순서, queue overflow/timeout, run terminal release, node disconnect release, multi-node dispatch가 테스트로 검증되어 있다. 검증: 대상 Go 패키지 테스트와 queue 관련 regression test가 통과한다.
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/common/rules-roadmap.md`
- `agent-roadmap/current.md`
- `agent-ops/skills/common/code-review/SKILL.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `agent-ops/skills/common/_templates/implementation-user-review-request-section.md`
- `agent-test/local/rules.md`
- `agent-test/local/edge-smoke.md`
- `agent-test/local/node-smoke.md`
- `agent-test/local/platform-common-smoke.md`
- `agent-test/local/testing-smoke.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-ops/rules/project/domain/edge/rules.md`
- `agent-ops/rules/project/domain/node/rules.md`
- `agent-ops/skills/project/e2e-smoke/SKILL.md`
- `agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/plan_cloud_G06_0.log`
- `agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/code_review_cloud_G06_0.log`
- `agent-task/archive/2026/06/m-edge-model-group-queue-scheduling/01_edge_queue_service/complete.log`
- `agent-task/archive/2026/06/m-edge-model-group-queue-scheduling/02+01_surface_snapshot_contract/complete.log`
- `agent-task/archive/2026/06/m-edge-model-group-queue-scheduling/03+01_node_queue_simplify/complete.log`
- `apps/edge/internal/service/model_queue.go`
- `apps/edge/internal/service/model_queue_test.go`
- `apps/edge/internal/service/service_test.go`
- `apps/edge/internal/openai/server_test.go`
- `apps/node/internal/node/node_test.go`
- `apps/node/internal/node/node_concurrency_integration_test.go`
- `scripts/dev/edge.sh`
- `scripts/dev/node.sh`
- `scripts/e2e-smoke.sh`
- `scripts/e2e-openai-ollama.sh`
- `Makefile`

### 테스트 환경 규칙

- test_env: `local`.
- 적용 profile: `edge-smoke`, `node-smoke`, `platform-common-smoke`, `testing-smoke`.
- 대상 Go regression은 `go test -count=1 ./apps/edge/... ./apps/node/...`로 fresh run한다.
- 보조 smoke는 `./scripts/e2e-smoke.sh`, `./scripts/e2e-openai-ollama.sh`를 실행하되 full-cycle 실제 구동과 구분해 기록한다.
- full-cycle evidence는 `scripts/dev/edge.sh`와 `scripts/dev/node.sh`를 각각 실행한 repo 내부 edge-node 진단 결과로 기록한다.
- `agent-ops/rules/project/domain/testing/rules.md:64`와 `agent-ops/skills/project/e2e-smoke/SKILL.md:115`는 보조 smoke 통과가 full-cycle 실제 구동이나 field bootstrap 검증을 대체하지 않는다고 명시한다.

### 테스트 커버리지 공백

- FIFO, overflow, timeout, terminal release, node disconnect release, multi-node dispatch 테스트는 `apps/edge/internal/service/model_queue_test.go`와 `apps/edge/internal/service/service_test.go`에서 확인됐다.
- 1차 review에서 `go test -count=1 ./apps/edge/... ./apps/node/...`, `./scripts/e2e-smoke.sh`, `./scripts/e2e-openai-ollama.sh`는 reviewer fresh run 기준으로도 통과했다.
- 공백: `code_review_cloud_G06_0.log:46`은 full-cycle 실제 구동 항목을 완료 처리했지만, `code_review_cloud_G06_0.log:114`와 `code_review_cloud_G06_0.log:124` 이후에는 보조 smoke와 Go regression만 있고 full-cycle 수행 여부 또는 미수행 사유가 없다.

### 심볼 참조

- rename/remove 없음.

### 분할 판단

- shared task group: `m-edge-model-group-queue-scheduling`.
- 현재 subtask: `04+01,02,03_regression_evidence`.
- predecessor `01`, `02`, `03`은 모두 `agent-task/archive/2026/06/m-edge-model-group-queue-scheduling/*/complete.log`로 충족됨.
- 이번 follow-up은 이미 분리된 verification evidence subtask의 단일 Required issue 복구이므로 추가 split을 만들지 않는다.

### 범위 결정 근거

- 제품 코드, 테스트 코드, script 수정은 기본 범위가 아니다.
- full-cycle 실행 중 제품 결함이 발견되면 active review stub에 실제 stdout/stderr와 실패 지점을 기록하고, 코드 수정은 code-review 후 별도 follow-up으로 분리한다.
- 외부 CLI auth, secret, field host 준비가 필요한 경우 token/secret 원문은 기록하지 않고 blocker와 남은 위험만 남긴다.

### 빌드 등급

- `cloud-G07`: 누락된 증거가 terminal/process 기반 full-cycle 실행, stdout/stderr 판독, 보조 smoke와 실제 구동의 신뢰 경계 구분을 요구한다.

## 구현 체크리스트

- [ ] 1차 archived review의 FAIL 원인과 기존 package/보조 smoke 통과 evidence를 요약하되, 보조 smoke를 full-cycle 대체 근거로 쓰지 않는다.
- [ ] `scripts/dev/edge.sh`와 `scripts/dev/node.sh` 기반 repo 내부 edge-node full-cycle 실제 구동을 수행하고, config 전략, 실행 명령, edge/node stdout/stderr, 메시지 2회, node local payload와 edge rendered payload 동일성, `/nodes`, `/capabilities`, `/transport`, `/sessions`, persistent `/terminate-session`, 관련 background/session/status cycle 결과를 기록한다.
- [ ] full-cycle을 수행하지 못하면 실행한 명령, 실제 출력, 정확한 blocker, 사용자 소유 여부, 자동 후속 가능 여부, 남은 위험을 기록한다.
- [ ] `go test -count=1 ./apps/edge/... ./apps/node/...`, `./scripts/e2e-smoke.sh`, `./scripts/e2e-openai-ollama.sh`를 fresh run으로 재확인하고 실제 stdout/stderr를 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_TEST-1] Full-Cycle Evidence 복구

#### 문제

`agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/code_review_cloud_G06_0.log:46`은 full-cycle 실제 구동 수행 여부 기록을 완료로 표시했지만, `code_review_cloud_G06_0.log:114`와 `code_review_cloud_G06_0.log:124` 이후의 검증 결과는 보조 smoke와 Go regression만 기록한다. `agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/plan_cloud_G06_0.log:153`은 repo 내부 edge-node full-cycle 실제 구동 수행 여부를 기록하라고 했고, `plan_cloud_G06_0.log:160`은 미수행 시 사유와 위험을 요구한다.

#### 해결 방법

보조 smoke와 별개로 `scripts/dev/edge.sh`와 `scripts/dev/node.sh`를 사용한 full-cycle evidence를 기록한다.

Before:

```text
$ ./scripts/e2e-smoke.sh
[e2e] Auxiliary smoke test PASSED.
```

After:

```text
Full-cycle 실제 구동:
- config 전략: <temporary config or default config path>
- edge command: IOP_EDGE_CONFIG=<path> ./scripts/dev/edge.sh
- node command: IOP_NODE_CONFIG=<path> ./scripts/dev/node.sh
- 메시지 왕복: message x2 - <통과|실패>
- Node message relay: node local payload == edge rendered payload - <통과|실패>
- Edge command 응답: /nodes, /capabilities, /transport, /sessions, /terminate-session, <관련 command> - <통과|실패>
- Background/session/status cycle: <통과|실패|미수행 사유>
- 남은 위험: <없음 또는 blocker>
```

#### 수정 파일 및 체크리스트

- [ ] `agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/CODE_REVIEW-cloud-G07.md`에 full-cycle evidence를 기록한다.
- [ ] 제품 코드와 테스트 코드는 수정하지 않는다. full-cycle에서 제품 결함이 확인되면 stdout/stderr와 실패 지점을 기록한다.

#### 테스트 작성

- 스킵: evidence recovery task다. 새 동작 결함이 발견되면 별도 follow-up에서 테스트/수정을 계획한다.

#### 중간 검증

```bash
IOP_EDGE_CONFIG=<temp-or-default-edge-config> ./scripts/dev/edge.sh
IOP_NODE_CONFIG=<temp-or-default-node-config> ./scripts/dev/node.sh
```

기대 결과: edge console에서 node 등록, 메시지 2회 응답, node local payload와 edge rendered payload 동일성, `/nodes`, `/capabilities`, `/transport`, `/sessions`, persistent `/terminate-session`, 관련 background/session/status cycle 결과가 기록된다. 실제 config path와 명령은 review stub에 그대로 남긴다.

## 의존 관계 및 구현 순서

- 선행 완료: `01_edge_queue_service`, `02+01_surface_snapshot_contract`, `03+01_node_queue_simplify`.
- 이번 follow-up은 새 코드 작성 없이 full-cycle evidence를 먼저 복구한 뒤 Go regression과 보조 smoke를 재확인한다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/CODE_REVIEW-cloud-G07.md` | REVIEW_TEST-1 |

## 최종 검증

```bash
go test -count=1 ./apps/edge/... ./apps/node/...
./scripts/e2e-smoke.sh
./scripts/e2e-openai-ollama.sh
```

기대 결과: Go regression과 보조 smoke는 모두 통과한다. full-cycle 실제 구동은 `REVIEW_TEST-1` 중간 검증의 edge/node dev script 실행 결과로 별도 기록되어야 하며, 보조 smoke 통과만으로 대체하지 않는다.

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