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

# Plan - TEST Edge Queue Regression Evidence

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

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

## 배경

Edge queue core, surface/snapshot, Node simplification이 각각 PASS된 뒤에는 Epic의 최종 `verification` Task가 요구하는 FIFO, overflow/timeout, terminal release, disconnect release, multi-node dispatch 회귀 증거를 한곳에서 확인해야 한다. 보조 smoke는 completion을 대체하지 않으므로, package tests와 runtime 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-test/local/rules.md`
- `agent-test/local/edge-smoke.md`
- `agent-test/local/node-smoke.md`
- `agent-test/local/platform-common-smoke.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `Makefile`
- `scripts/e2e-smoke.sh`
- `scripts/e2e-openai-ollama.sh`
- `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`

### 테스트 환경 규칙

- test_env: `local`.
- 적용 profile: `edge-smoke`, `node-smoke`, `platform-common-smoke`.
- 대상 package tests:
  - `go test -count=1 ./apps/edge/internal/service`
  - `go test -count=1 ./apps/edge/internal/openai ./apps/edge/internal/input/a2a ./apps/edge/internal/opsconsole ./apps/edge/internal/controlplane`
  - `go test -count=1 ./apps/node/internal/node`
- 전체 Go regression: `go test -count=1 ./apps/edge/... ./apps/node/...`.
- 보조 smoke: `./scripts/e2e-smoke.sh`, `./scripts/e2e-openai-ollama.sh`.
- `scripts/e2e-smoke.sh` 자체가 "auxiliary smoke only; completion requires scripts/dev/edge.sh + scripts/dev/node.sh user-flow verification"을 출력한다. 이 plan에서도 보조 smoke만으로 완료 처리하지 않는다.

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

- 앞선 subtasks가 PASS되기 전에는 이 plan을 구현하지 않는다.
- real external CLI profile 또는 field host 검증은 local container에서 불가능할 수 있다. 불가하면 profile별 blocker로 기록하고, package/regression tests와 구분한다.
- Docker compose 검증은 현재 작업 컨테이너에서 수행하지 않는다.

### 심볼 참조

- 이 plan 자체는 rename/remove를 의도하지 않는다.
- queue 관련 regression test anchor:
  - `TestModelQueue*` 또는 `TestSubmitRunModelQueue*` in `apps/edge/internal/service`.
  - OpenAI request model group key tests in `apps/edge/internal/openai`.
  - Node safety/capability tests in `apps/node/internal/node`.

### 분할 판단

- shared task group: `m-edge-model-group-queue-scheduling`.
- 현재 subtask: `04+01,02,03_regression_evidence`.
- predecessor `01`, `02`, `03`: active complete.log 없음. 구현/검증 시작 전 세 predecessor의 PASS complete.log가 필요하다.
- 이 plan은 최종 evidence 수집 전용이며 새로운 product behavior를 추가하지 않는다.

### 범위 결정 근거

- 구현 보완이 발견되면 이 plan에서 임의로 광범위 수정하지 않는다. FAIL/WARN 후 follow-up plan으로 분리한다.
- remote field runner, external CLI auth, secret 준비는 사용자/환경 blocker로 기록한다.
- `go test ./...`가 너무 넓어 unrelated failure가 나오면, 대상 package command 결과와 전체 command failure를 모두 기록하고 원인 분류를 review에 남긴다.

### 빌드 등급

- `cloud-G06`: 검증 evidence 신뢰성이 중요하고, runtime smoke 출력 판독과 predecessor 결과 확인이 필요하다.

## 구현 체크리스트

- [ ] predecessor `01`, `02`, `03` complete.log를 확인하고 Roadmap Targets가 기대 Task를 가리키는지 검토한다.
- [ ] Edge service queue regression tests가 FIFO, overflow, timeout, terminal release, disconnect release, multi-node dispatch를 모두 커버하는지 확인한다.
- [ ] 대상 package tests와 Edge/Node package regression을 실행하고 실제 stdout/stderr를 기록한다.
- [ ] 보조 smoke `./scripts/e2e-smoke.sh`와 OpenAI-compatible smoke `./scripts/e2e-openai-ollama.sh` 실행 또는 blocker를 기록한다.
- [ ] full-cycle 실제 구동 수행 여부를 명시하고, 못 하면 local 규칙 기준 blocker/남은 위험을 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [TEST-1] Predecessor Evidence 확인

#### 문제

이 verification Task는 구현 subtask 완료 없이 실행하면 의미가 없다.

#### 해결 방법

active/archive 후보에서 `complete.log`를 확인하고 `Roadmap Completion` 섹션이 `edge-admission`, `node-dispatch`, `snapshot-contract`, `surface-coverage`, `node-simplify`를 포함하는지 확인한다.

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

- [ ] 코드 수정 없음.
- [ ] `CODE_REVIEW-cloud-G06.md`에 predecessor complete.log 경로를 기록.

#### 테스트 작성

- 스킵: evidence collection task다. 새 동작 테스트가 빠져 있으면 predecessor follow-up으로 분리한다.

#### 중간 검증

```bash
find agent-task -path 'agent-task/archive' -prune -o -path 'agent-task/m-edge-model-group-queue-scheduling/*/complete.log' -print | sort
```

### [TEST-2] Package Regression

#### 문제

queue 전환은 Edge service, OpenAI/A2A/console/control-plane status, Node execution lifecycle을 모두 건드린다.

#### 해결 방법

대상 package tests를 fresh run으로 실행한다.

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

- [ ] 코드 수정 없음.
- [ ] 실패 시 실패 package와 test name을 review에 기록하고 follow-up plan이 필요한지 분류.

#### 테스트 작성

- 스킵: 이 task는 테스트 실행/evidence 수집 전용이다.

#### 중간 검증

```bash
go test -count=1 ./apps/edge/internal/service
go test -count=1 ./apps/edge/internal/openai ./apps/edge/internal/input/a2a ./apps/edge/internal/opsconsole ./apps/edge/internal/controlplane
go test -count=1 ./apps/node/internal/node
```

### [TEST-3] Runtime Smoke Evidence

#### 문제

local rules는 사용자 실행 파이프라인 변경을 unit tests만으로 완료 처리하지 않는다.

#### 해결 방법

보조 smoke를 실행하고, repo 내부 edge-node full-cycle 실제 구동 수행 여부를 기록한다. `scripts/e2e-smoke.sh`는 메시지 2회, background run, `/capabilities`, `/transport`, `/sessions`, persistent `/terminate-session`까지 확인한다. OpenAI smoke는 `/v1/models`, chat completions, `/v1/responses`, streaming chat, `iop-edge smoke openai`를 확인한다.

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

- [ ] 코드 수정 없음.
- [ ] `./scripts/e2e-smoke.sh` 결과 기록.
- [ ] `./scripts/e2e-openai-ollama.sh` 결과 기록.
- [ ] full-cycle 실제 구동 미수행 시 사유와 위험 기록.

#### 테스트 작성

- 스킵: 실행 evidence 수집 전용이다.

#### 중간 검증

```bash
./scripts/e2e-smoke.sh
./scripts/e2e-openai-ollama.sh
```

## 의존 관계 및 구현 순서

- `01_edge_queue_service`, `02+01_surface_snapshot_contract`, `03+01_node_queue_simplify` complete.log가 먼저 필요하다.
- 구현 전 확인 후보:
  - active: `agent-task/m-edge-model-group-queue-scheduling/01_edge_queue_service/complete.log`
  - active: `agent-task/m-edge-model-group-queue-scheduling/02+01_surface_snapshot_contract/complete.log`
  - active: `agent-task/m-edge-model-group-queue-scheduling/03+01_node_queue_simplify/complete.log`
  - archive: `agent-task/archive/*/*/m-edge-model-group-queue-scheduling/<subtask>/complete.log`

## 수정 파일 요약

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

## 최종 검증

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

기대 결과: 모두 통과. Go test cache는 허용하지 않는다. smoke가 환경 문제로 막히면 실제 stdout/stderr와 blocker를 기록한다.

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