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

# Plan - REVIEW_REVIEW_TEST Full-Cycle Status And Artifact Cleanup

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

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

## 배경

G07 follow-up은 full-cycle transcript를 추가했지만 `/status` command evidence가 없고, repo-local `scratch/` 검증 산출물을 남겨 FAIL 처리됐다. 이번 follow-up은 제품 코드 수정 없이 missing status evidence와 workspace artifact cleanup만 처리한다. 보조 smoke는 계속 full-cycle 대체 근거가 아니며, full-cycle transcript와 별도로 기록한다.

## 사용자 리뷰 요청 흐름

구현 중 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/skills/common/code-review/SKILL.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-ops/skills/project/e2e-smoke/SKILL.md`
- `agent-test/local/rules.md`
- `agent-test/local/edge-smoke.md`
- `agent-test/local/node-smoke.md`
- `agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/plan_cloud_G07_1.log`
- `agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/code_review_cloud_G07_1.log`
- `scripts/dev/edge.sh`
- `scripts/dev/node.sh`
- `scratch/edge.yaml`
- `scratch/node.yaml`
- `scratch/fake-cli.sh`
- `scratch/workspace/iop.db`

### 테스트 환경 규칙

- test_env: `local`.
- 적용 profile: `edge-smoke`, `node-smoke`.
- full-cycle evidence는 `scripts/dev/edge.sh`와 `scripts/dev/node.sh`를 각각 실행한 repo 내부 edge-node 진단 결과로 기록한다.
- `agent-ops/rules/project/domain/testing/rules.md:59`는 full-cycle 실제 구동에서 `status` cycle도 실제 entrypoint로 통과시키도록 요구한다.
- 임시 config/tool/db는 repo-local `scratch/`가 아니라 `mktemp -d` 같은 repo 밖 임시 디렉터리를 사용하거나, 기존 `scratch/`를 제거해 worktree에 검증 산출물이 남지 않게 한다.

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

- Go regression과 보조 smoke는 G07 review 중 reviewer fresh run 기준으로 통과했다.
- 남은 공백 1: `code_review_cloud_G07_1.log:50`과 `code_review_cloud_G07_1.log:215`는 background/session/status cycle을 완료로 기록했지만 `/status` 입력이나 status response가 없다.
- 남은 공백 2: `scratch/edge.yaml`, `scratch/node.yaml`, `scratch/fake-cli.sh`, `scratch/workspace/iop.db`가 repo-local untracked 산출물로 남아 있다.

### 심볼 참조

- rename/remove 없음.

### 분할 판단

- shared task group: `m-edge-model-group-queue-scheduling`.
- 현재 subtask: `04+01,02,03_regression_evidence`.
- 이번 follow-up은 이미 분리된 verification evidence subtask 안의 두 Required issue 복구이므로 추가 split을 만들지 않는다.

### 범위 결정 근거

- 제품 코드, 테스트 코드, script 수정은 기본 범위가 아니다.
- `/status`가 fake-cli profile에서 unsupported이면 그 unsupported/error 응답을 full-cycle evidence로 기록한다.
- `scratch/` 산출물은 추적하거나 `.gitignore`로 숨기지 말고 제거한다. 새 임시 파일이 필요하면 repo 밖 임시 디렉터리를 사용한다.

### 빌드 등급

- `cloud-G08`: terminal/process evidence 재수집, `/status` response 판독, repo-local runtime artifact cleanup 검증을 함께 요구한다.

## 구현 체크리스트

- [ ] `scripts/dev/edge.sh`와 `scripts/dev/node.sh` 기반 full-cycle 실제 구동을 다시 수행하고 `/status` 입력과 응답을 포함해 기록한다.
- [ ] repo-local `scratch/` 검증 산출물을 제거하거나 repo 밖 임시 경로로 대체하고, `git status --short -- scratch`가 비어 있음을 기록한다.
- [ ] `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_REVIEW_TEST-1] `/status` 포함 full-cycle evidence

#### 문제

`agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/code_review_cloud_G07_1.log:50`과 `code_review_cloud_G07_1.log:215`는 status cycle을 완료로 기록하지만 실제 transcript에는 `/status` 입력과 response가 없다. `agent-ops/rules/project/domain/testing/rules.md:59`는 status cycle을 full-cycle 실제 구동 항목에 포함한다.

#### 해결 방법

repo 밖 임시 config로 edge/node dev scripts를 실행하고 edge console에서 최소 `/nodes`, `/capabilities`, `/transport`, 메시지 2회, `/session`, `/background on/off`, `/status`, `/sessions`, `/terminate-session`, `/exit`을 입력한다. `/status`가 unsupported이면 해당 unsupported/error 출력도 실제 response로 기록한다.

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

- [ ] `agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/CODE_REVIEW-cloud-G08.md`에 `/status` 포함 full-cycle stdout/stderr를 기록한다.
- [ ] 보조 smoke 결과와 full-cycle 결과를 별도 항목으로 유지한다.

#### 테스트 작성

- 스킵: evidence recovery task다. 새 동작 결함이 발견되면 별도 follow-up으로 분리한다.

#### 중간 검증

```bash
tmp_dir="$(mktemp -d)"
IOP_EDGE_CONFIG="$tmp_dir/edge.yaml" ./scripts/dev/edge.sh
IOP_NODE_CONFIG="$tmp_dir/node.yaml" ./scripts/dev/node.sh
```

기대 결과: `/status` 입력과 status 또는 명확한 unsupported/error 응답이 full-cycle transcript에 포함된다.

### [REVIEW_REVIEW_TEST-2] repo-local verification artifact cleanup

#### 문제

`scratch/edge.yaml`, `scratch/node.yaml`, `scratch/fake-cli.sh`, `scratch/workspace/iop.db`가 repo-local untracked 산출물로 남아 있다. 이 task는 review artifact 외 repo 파일을 남기는 작업이 아니다.

#### 해결 방법

기존 `scratch/` 산출물을 제거하고, 새 full-cycle 임시 config/tool/db는 repo 밖 `mktemp -d` 위치를 사용한다. 검증 후 `git status --short -- scratch` 출력이 비어 있음을 기록한다.

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

- [ ] `scratch/` 산출물을 제거한다.
- [ ] `CODE_REVIEW-cloud-G08.md`에 cleanup 확인 명령과 실제 출력을 기록한다.

#### 테스트 작성

- 스킵: workspace artifact cleanup이다.

#### 중간 검증

```bash
git status --short -- scratch
```

기대 결과: 출력 없음.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-task/m-edge-model-group-queue-scheduling/04+01,02,03_regression_evidence/CODE_REVIEW-cloud-G08.md` | REVIEW_REVIEW_TEST-1, REVIEW_REVIEW_TEST-2 |
| `scratch/` | REVIEW_REVIEW_TEST-2 cleanup 대상 |

## 최종 검증

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

기대 결과: Go regression과 보조 smoke는 통과하고, `git status --short -- scratch`는 출력이 없다. full-cycle 실제 구동은 `REVIEW_REVIEW_TEST-1` 중간 검증의 edge/node dev script 실행 결과로 별도 기록되어야 하며, 보조 smoke 통과만으로 대체하지 않는다.

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