<!-- task=m-agent-readable-repository-refactor/06+04,05_core_edge_tests plan=0 tag=TEST -->

# Code Review Reference - TEST

> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.**
> The task is NOT complete until every implementation-owned section below is filled in.
> Complete the completion checklist; the final checklist item is mandatory before saving.
> Fill implementation-owned sections, then stop with active files in place and report ready for review.

## Summary

date=2026-07-16
task=m-agent-readable-repository-refactor/06+04,05_core_edge_tests, plan=0, tag=TEST

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/agent-readable-repository-refactor.md`
- Milestone link: [Milestone link](agent-roadmap/phase/automation-runtime-bridge/milestones/agent-readable-repository-refactor.md)
- Task ids:
  - `core-tests`: config, Node, Edge service/bootstrap tests split
- Completion mode: check-on-pass

## For Review Agent Only

> **[REVIEW AGENT ONLY]** Under review-only sections.

---

## Completion Status

| Task | Completed |
|------|---------|
| [TEST-1] Edge queue/service/bootstrap tests split | [x] |

## Implementation Checklist

- [x] [TEST-1] service/bootstrap 대형 테스트를 scheduling/snapshot/runtime refresh 파일로 옮기고 core 네 package fresh test 및 Test 수를 보존한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## Code Review Checklist

> **[REVIEW AGENT ONLY]** This checklist is for the review agent.

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_{review_lane}_GNN_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_{build_lane}_GNN_M.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다.
- [x] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [x] PASS이면 active task 디렉터리를 `agent-task/archive/YYYY/MM/{task_name}/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [x] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [x] PASS split 작업이면 이동 후 빈 active parent를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [ ] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-{build_lane}-GNN.md`와 `CODE_REVIEW-{review_lane}-GNN.md`를 작성하고 `complete.log`를 작성하지 않는다.
- [ ] USER_REVIEW이면 template 기준으로 `USER_REVIEW.md`를 작성하고 active plan/review와 `complete.log`를 남기지 않는다.
- [ ] USER_REVIEW가 연결된 Milestone 결정으로 완료/PASS 해소되면 해소 상태와 `complete.log`를 기록한 뒤 task directory를 archive로 이동한다.

## Changes from Plan

- To satisfy the 1,000-line limit for all test files, split large test files further:
  - `provider_scheduling_test.go` -> `provider_scheduling_test.go` (754 lines) and `provider_scheduling_advanced_test.go` (866 lines)
  - `runtime_refresh_test.go` -> `runtime_refresh_test.go` (519 lines) and `runtime_refresh_node_test.go` (867 lines)

## Design Decisions

- Grouped tests by basic/advanced/node behaviors to keep test files under 1,000 lines cleanly.

## User Review Request

- Status: None
- Reason Type: None
- Linked Target: None
- Decision Needed: None
- Blocker Evidence: None
- Run Commands: None
- Auto-resume block: None
- Resume Condition: None

## Checkpoints for Reviewer

- Predecessor 04/05 complete logs exist.
- Queue/concurrency/refresh assertions and test counts are preserved.
- Original files are deleted and no files exceed 1,000 lines.

## Verification Results

### TEST-1 Intermediate Verification
```
$ gofmt -w apps/edge/internal/service/*_test.go apps/edge/internal/bootstrap/*_test.go
(exit status 0)

$ test ! -e apps/edge/internal/service/model_queue_test.go && echo "Deleted"
Deleted

$ test ! -e apps/edge/internal/service/service_test.go && echo "Deleted"
Deleted

$ test ! -e apps/edge/internal/bootstrap/runtime_test.go && echo "Deleted"
Deleted

$ [ "$(GOCACHE=/tmp/iop-go-build-cache go test -list '^Test' ./apps/edge/internal/service | sed '/^ok[[:space:]]/d' | wc -l)" -eq 96 ] && echo "96 tests"
96 tests

$ [ "$(GOCACHE=/tmp/iop-go-build-cache go test -list '^Test' ./apps/edge/internal/bootstrap | sed '/^ok[[:space:]]/d' | wc -l)" -eq 21 ] && echo "21 tests"
21 tests
```

### Final Verification
```
$ GOCACHE=/tmp/iop-go-build-cache go test -count=1 ./packages/go/config ./apps/node/internal/node ./apps/edge/internal/service ./apps/edge/internal/bootstrap
ok  	iop/packages/go/config	0.074s
ok  	iop/apps/node/internal/node	0.818s
ok  	iop/apps/edge/internal/service	1.013s
ok  	iop/apps/edge/internal/bootstrap	0.261s

$ [ "$(GOCACHE=/tmp/iop-go-build-cache go test -list '^Test' ./packages/go/config | sed '/^ok[[:space:]]/d' | wc -l)" -eq 107 ] && echo "config pass"
config pass

$ [ "$(GOCACHE=/tmp/iop-go-build-cache go test -list '^Test' ./apps/node/internal/node | sed '/^ok[[:space:]]/d' | wc -l)" -eq 66 ] && echo "node pass"
node pass

$ [ "$(GOCACHE=/tmp/iop-go-build-cache go test -list '^Test' ./apps/edge/internal/service | sed '/^ok[[:space:]]/d' | wc -l)" -eq 96 ] && echo "service pass"
service pass

$ [ "$(GOCACHE=/tmp/iop-go-build-cache go test -list '^Test' ./apps/edge/internal/bootstrap | sed '/^ok[[:space:]]/d' | wc -l)" -eq 21 ] && echo "bootstrap pass"
bootstrap pass

$ python3 -c "from pathlib import Path; roots=[Path('packages/go/config'),Path('apps/node/internal/node'),Path('apps/edge/internal/service'),Path('apps/edge/internal/bootstrap')]; bad=sorted((sum(1 for _ in f.open()),str(f)) for p in roots for f in p.glob('*_test.go') if sum(1 for _ in f.open())>1000); print(bad); raise SystemExit(bool(bad))"
[]
```

## 코드리뷰 결과

- 종합 판정: PASS

### 차원별 평가

- correctness: Pass — 삭제된 세 원본의 모든 top-level 선언과 함수 본문이 분할 파일에 SHA-256 기준으로 동일하게 보존되었다.
- completeness: Pass — 계획한 원본 삭제, 12개 책임별 테스트 파일 배치, 선행 04/05 완료 근거, core 네 package Test 수와 1,000줄 제한을 모두 확인했다.
- test coverage: Pass — 기존 Test 수 107/66/96/21을 보존했고 core fresh test, Edge 전체 package test, service/bootstrap race test가 통과했다.
- API contract: Pass — production source, package 경계, test symbol과 runtime/API 계약을 변경하지 않았다.
- code quality: Pass — 모든 대상 test file이 1,000줄 이하이고 `gofmt -d` 출력이 비어 있으며 debug/TODO/unrelated source 변경이 없다.
- implementation deviation: Pass — 추가 분할 두 건은 책임 응집도와 LOC 기준을 지키기 위한 범위 내 변경이며 실제 줄 수를 확인했다.
- verification trust: Pass — 구현 기록의 fresh test와 Test 수를 독립 재실행했고 선언 본문 hash 및 삭제 파일 상태까지 교차 확인했다.

### 발견된 문제

없음

### 리뷰어 독립 검증

- `GOCACHE=/tmp/iop-go-build-cache go test -count=1 ./packages/go/config ./apps/node/internal/node ./apps/edge/internal/service ./apps/edge/internal/bootstrap` — PASS
- `GOCACHE=/tmp/iop-go-build-cache go test -count=1 ./apps/edge/...` — PASS
- `GOCACHE=/tmp/iop-go-build-cache go test -race -count=1 ./apps/edge/internal/service ./apps/edge/internal/bootstrap` — PASS
- top-level declaration-body SHA-256 comparison (`git show HEAD:<원본>` 대 분할 파일) — PASS; 차이 없음
- Test 수 재검증 — PASS; config=107, node=66, service=96, bootstrap=21
- 1,000줄 초과 test 검색 및 `gofmt -d apps/edge/internal/service/*_test.go apps/edge/internal/bootstrap/*_test.go` — PASS; 출력 없음

### 다음 단계

- PASS: `complete.log`를 작성하고 task directory를 월별 archive로 이동한다.
