<!-- task=m-runtime-reconnect-config-refresh/07+01,03,04,05,06_field_docs_smoke plan=2 tag=REVIEW_REVIEW_TEST -->

# Code Review Reference - REVIEW_REVIEW_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 `구현 체크리스트`; the final checklist item is mandatory before saving.
> Fill implementation-owned sections, then stop with active files in place and report ready for review.
> If implementation is blocked by a selected Milestone `구현 잠금 > 결정 필요` item, fill `사용자 리뷰 요청` with linked evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`. Environment/secret/service blockers, generic scope changes, repeated failures, and evidence gaps that a follow-up agent can close are normal follow-up issues, not user-review blockers by themselves.
> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation; record only Milestone lock decisions in `사용자 리뷰 요청` and stop for code-review.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.
> Follow the ownership table at the bottom of this file for which sections you own.

## 개요

date=2026-06-23
task=m-runtime-reconnect-config-refresh/07+01,03,04,05,06_field_docs_smoke, plan=2, tag=REVIEW_REVIEW_TEST

## Roadmap Targets

- Milestone: `agent-roadmap/phase/update-plane-self-update-foundation/milestones/runtime-reconnect-config-refresh.md`
- Task ids:
  - `field-reconnect`: `toki-labs.com` dev-runtime에서 Edge restart 후 GX10 Linux Node와 OneXPlayer Windows Node가 bootstrap 재실행 없이 재접속한다.
  - `field-refresh`: `gx10-vllm=4`, `onexplayer-lemonade=3` capacity 변경을 refresh로 반영하고 Edge process restart 없이 `qwen3.6:35b` 동시 4개 요청이 성공한다.
  - `docs`: bootstrap/reconnect/refresh 운영 방법과 제한 사항이 `apps/edge/README.md`, `docs/edge-local-dev-guide.md`, agent-test field 기준에 반영된다.
- Completion mode: check-on-pass

## Archive Evidence Snapshot

- Prior active task: `agent-task/m-runtime-reconnect-config-refresh/07+01,03,04,05,06_field_docs_smoke`
- Archived plan logs:
  - `agent-task/m-runtime-reconnect-config-refresh/07+01,03,04,05,06_field_docs_smoke/plan_cloud_G08_0.log`
  - `agent-task/m-runtime-reconnect-config-refresh/07+01,03,04,05,06_field_docs_smoke/plan_cloud_G08_1.log`
- Archived review logs:
  - `agent-task/m-runtime-reconnect-config-refresh/07+01,03,04,05,06_field_docs_smoke/code_review_cloud_G08_0.log`
  - `agent-task/m-runtime-reconnect-config-refresh/07+01,03,04,05,06_field_docs_smoke/code_review_cloud_G08_1.log`
- Verdicts: FAIL, FAIL
- Required summary:
  - S16 `field-reconnect` evidence is still missing: `reconnect-after-status.json`, `reconnect-after-tcp.txt`, and `reconnect-pids.txt` were missing or empty.
  - S17 `field-refresh` evidence is still missing: remote `edge config` exposed only `check/init/print`, and `refresh-apply.json`, `refresh-pid.txt`, `refresh-concurrent-4.jsonl` were missing.
  - Remote `/Users/toki/agent-work/iop-dev` is dirty/divergent and lacks `apps/edge/internal/bootstrap/refresh_admin.go`; do not reset or overwrite it.
  - Reviewer repaired dev-runtime edge id wording in `docs/edge-local-dev-guide.md` and ignored local test profile `agent-test/local/edge-smoke.md` from `edge-toki-labs` to `edge-toki-labs-dev`.
- Affected files/areas:
  - Remote clean review workdir under `/Users/toki/agent-work/iop-field-review`
  - Remote ignored dev-runtime configs copied from `/Users/toki/agent-work/iop-dev/build/dev-runtime/*.yaml`
  - `CODE_REVIEW-cloud-G08.md`
- Verification evidence from prior loop:
  - Remote HEAD was `7398f32 update roadmap: archive inference-provider-extension milestone and update phase docs`.
  - Remote `build/dev-runtime/bin/edge --config build/dev-runtime/edge.yaml config --help` listed only `check`, `init`, `print`.
  - Remote Control Plane status for `edge-toki-labs-dev` showed only `mac-codex-node` and `onexplayer-lemonade-node`.
- Roadmap carryover: `field-reconnect`, `field-refresh`, and `docs` remain incomplete until this follow-up PASS writes `Roadmap Completion`.
- Narrow archive reread allowed if needed: only the four archived logs listed above.

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

> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.

각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요.
리뷰 완료는 아래 순서까지 끝난 상태를 의미합니다.

1. 판정을 append한다.
2. `CODE_REVIEW-cloud-G08.md` -> `code_review_cloud_G08_N.log`, `PLAN-cloud-G08.md` -> `plan_cloud_G08_M.log`로 아카이브한다.
3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-runtime-reconnect-config-refresh/07+01,03,04,05,06_field_docs_smoke/`로 이동한다. WARN/FAIL이면 user-review gate를 확인한 뒤 다음 active plan/review 파일 또는 `USER_REVIEW.md`를 작성한다. `USER_REVIEW.md`가 연결된 Milestone 결정으로 완료/PASS 해소되면 code-review가 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log` 작성 후 archive 이동한다.
4. PASS이고 task group이 `m-<milestone-slug>`이면 완료 이벤트 메타데이터를 보고한다. roadmap 상태 체크와 `update-roadmap` 호출은 런타임 책임이다.
5. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다.

---

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [REVIEW_REVIEW_TEST-1] Clean Remote Dev-Runtime Rebuild | [ ] |
| [REVIEW_REVIEW_TEST-2] Field Reconnect And Refresh Evidence | [ ] |

## 구현 체크리스트

- [ ] `REVIEW_REVIEW_TEST-1` 원격 dirty checkout을 보존하면서 clean review workdir를 만들고 현재 코드로 dev-runtime binaries를 재빌드한다. 검증: remote `edge config refresh --help`가 노출되고 `build/dev-runtime/bin/edge config check`가 통과한다.
- [ ] `REVIEW_REVIEW_TEST-2` clean dev-runtime으로 S16/S17 field evidence를 수집한다. 검증: Edge restart 후 3 Node reconnect evidence, refresh dry-run/apply JSON, Edge PID 유지, `/healthz`, `/v1/models`, 4-line concurrent JSONL이 모두 존재한다.
- [ ] 최종 검증 명령을 모두 실행하고 실제 stdout/stderr를 `CODE_REVIEW-cloud-G08.md`에 붙여 넣는다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

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

> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.
> 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다.

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

## 계획 대비 변경 사항

_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._

## 주요 설계 결정

_구현 에이전트가 주요 설계 결정 사항을 기록한다._

## 사용자 리뷰 요청

_기본값은 `없음`이다. 구현 중 새 결정이 필요해 보여도 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 이 섹션은 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 채운다. 외부 환경/secret/서비스 준비, 검증 증거 공백, 반복 실패, 일반 범위 조정은 사용자 리뷰 요청이 아니며 `검증 결과`, `계획 대비 변경 사항`, 또는 code-review의 일반 follow-up plan으로 처리한다._

- 상태: 없음
- 사유 유형: 없음
- 연결 대상: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음

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

- 기존 원격 `/Users/toki/agent-work/iop-dev` dirty checkout을 reset/overwrite하지 않았는지 확인한다.
- clean review workdir binary가 현재 코드의 `config refresh` 명령과 refresh admin listener를 포함하는지 확인한다.
- `field-reconnect` evidence가 bootstrap 재실행 없이 Edge restart 후 3 Node 회복을 보여주는지 확인한다.
- `field-refresh` evidence가 refresh apply, Edge PID 유지, `/healthz`, `/v1/models`, 4 concurrent success를 모두 포함하는지 확인한다.
- token/API key/private endpoint 원문이 tracked docs, roadmap, review output에 노출되지 않았는지 확인한다.

## 검증 결과

_구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다._

필수 규칙:
- 검증 명령은 고정된 계약이다. 임의로 대체하지 않는다.
- 대체가 필요하면 `계획 대비 변경 사항`에 이유와 대체 명령을 기록한다.
- `검증 결과`에는 실제 stdout/stderr를 붙여 넣는다.
- 사용자 리뷰 요청으로 명령을 끝까지 실행하지 못했다면 `사용자 리뷰 요청`에 실행한 명령, 실제 출력, 미실행 명령의 사유를 기록한다.
- mobile/UI hang, timeout, 또는 2분 무진행은 blind retry를 중단하고 focused rerun 명령과 screenshot/window/UI-tree evidence path를 남기며, 불가능하면 정확한 사유를 남긴다.

### REVIEW_REVIEW_TEST-1 중간 검증
```bash
$ git archive --format=tar HEAD | ssh toki@toki-labs.com 'set -euo pipefail
REVIEW_ROOT=/Users/toki/agent-work/iop-field-review
SOURCE_RUNTIME=/Users/toki/agent-work/iop-dev/build/dev-runtime
rm -rf "$REVIEW_ROOT"
mkdir -p "$REVIEW_ROOT"
tar -xf - -C "$REVIEW_ROOT"
cd "$REVIEW_ROOT"
mkdir -p build/dev-runtime/bin build/dev-runtime/logs /tmp/iop-field-evidence
cp "$SOURCE_RUNTIME"/*.yaml build/dev-runtime/
test -f apps/edge/internal/bootstrap/refresh_admin.go
/opt/homebrew/bin/go build -trimpath -o build/dev-runtime/bin/edge ./apps/edge/cmd/edge
/opt/homebrew/bin/go build -trimpath -o build/dev-runtime/bin/control-plane ./apps/control-plane/cmd/control-plane
/opt/homebrew/bin/go build -trimpath -o build/dev-runtime/bin/iop-node ./apps/node/cmd/node
GOOS=linux GOARCH=arm64 /opt/homebrew/bin/go build -trimpath -o build/dev-runtime/bin/iop-node-linux-arm64 ./apps/node/cmd/node
build/dev-runtime/bin/edge --config build/dev-runtime/edge.yaml config check | tee /tmp/iop-field-evidence/review-config-check.txt
build/dev-runtime/bin/edge --config build/dev-runtime/edge.yaml config refresh --help | tee /tmp/iop-field-evidence/review-config-refresh-help.txt
printf "review_root=%s\n" "$REVIEW_ROOT"
'
(output)
```

### REVIEW_REVIEW_TEST-2 중간 검증
```bash
$ ssh toki@toki-labs.com 'set -euo pipefail
REVIEW_ROOT=/Users/toki/agent-work/iop-field-review
cd "$REVIEW_ROOT"
mkdir -p /tmp/iop-field-evidence build/dev-runtime/logs
CP_BIN=build/dev-runtime/bin/control-plane
EDGE_BIN=build/dev-runtime/bin/edge
NODE_BIN=build/dev-runtime/bin/iop-node
CP_CONFIG=build/dev-runtime/control-plane.yaml
EDGE_CONFIG=build/dev-runtime/edge.yaml
for pat in "control-plane.*build/dev-runtime/control-plane.yaml" "edge.*build/dev-runtime/edge.yaml" "iop-node.*build/dev-runtime/node-codex.yaml" "iop-node.*build/dev-runtime/node-onexplayer-lemonade.yaml"; do
  pgrep -f "$pat" | xargs -r kill
done
sleep 2
nohup "$CP_BIN" --config "$CP_CONFIG" serve > build/dev-runtime/logs/control-plane.log 2>&1 &
echo $! > build/dev-runtime/control-plane.pid
nohup "$EDGE_BIN" --config "$EDGE_CONFIG" serve > build/dev-runtime/logs/edge.log 2>&1 &
echo $! > build/dev-runtime/edge.pid
for name in node-codex node-onexplayer-lemonade; do
  cfg="build/dev-runtime/${name}.yaml"
  nohup "$NODE_BIN" --config "$cfg" serve > "build/dev-runtime/logs/${name}.log" 2>&1 &
  echo $! > "build/dev-runtime/${name}.pid"
done
'
$ ssh toki@toki-labs.com 'set -euo pipefail
REVIEW_ROOT=/Users/toki/agent-work/iop-field-review
GX10_HOST=192.168.0.91
ssh toki@"$GX10_HOST" "mkdir -p ~/iop-field-review/bin ~/iop-field-review/logs"
scp "$REVIEW_ROOT/build/dev-runtime/bin/iop-node-linux-arm64" toki@"$GX10_HOST":~/iop-field-review/bin/iop-node
scp "$REVIEW_ROOT/build/dev-runtime/node-gx10-vllm.yaml" toki@"$GX10_HOST":~/iop-field-review/node-gx10-vllm.yaml
ssh toki@"$GX10_HOST" "pkill -f \"iop-field-review/bin/iop-node.*node-gx10-vllm.yaml\" || true; chmod +x ~/iop-field-review/bin/iop-node; nohup ~/iop-field-review/bin/iop-node --config ~/iop-field-review/node-gx10-vllm.yaml serve > ~/iop-field-review/logs/node-gx10-vllm.log 2>&1 & echo \\\$! > ~/iop-field-review/node-gx10-vllm.pid"
'
$ ssh toki@toki-labs.com 'set -euo pipefail
EDGE_ID=edge-toki-labs-dev
REVIEW_ROOT=/Users/toki/agent-work/iop-field-review
cd "$REVIEW_ROOT"
for i in $(seq 1 120); do
  curl -fsS "http://127.0.0.1:18001/edges/${EDGE_ID}/status" > /tmp/iop-field-evidence/reconnect-before-status.json && grep -q "mac-codex-node" /tmp/iop-field-evidence/reconnect-before-status.json && grep -q "gx10-vllm-node" /tmp/iop-field-evidence/reconnect-before-status.json && grep -q "onexplayer-lemonade-node" /tmp/iop-field-evidence/reconnect-before-status.json && break || true
  sleep 1
done
grep -E "mac-codex-node|gx10-vllm-node|onexplayer-lemonade-node" /tmp/iop-field-evidence/reconnect-before-status.json
(lsof -nP -iTCP:18084 -sTCP:ESTABLISHED 2>/dev/null || ss -tn state established "( sport = :18084 )" 2>/dev/null || true) | tee /tmp/iop-field-evidence/reconnect-before-tcp.txt
BEFORE_PID="$(cat build/dev-runtime/edge.pid)"
kill "$BEFORE_PID"
for i in $(seq 1 20); do if ! kill -0 "$BEFORE_PID" 2>/dev/null; then break; fi; sleep 1; done
nohup build/dev-runtime/bin/edge --config build/dev-runtime/edge.yaml serve > build/dev-runtime/logs/edge.log 2>&1 &
AFTER_PID="$!"
echo "$AFTER_PID" > build/dev-runtime/edge.pid
printf "before_pid=%s after_pid=%s bootstrap_rerun=none\n" "$BEFORE_PID" "$AFTER_PID" | tee /tmp/iop-field-evidence/reconnect-pids.txt
for i in $(seq 1 120); do
  curl -fsS "http://127.0.0.1:18001/edges/${EDGE_ID}/status" > /tmp/iop-field-evidence/reconnect-after-status.json && grep -q "mac-codex-node" /tmp/iop-field-evidence/reconnect-after-status.json && grep -q "gx10-vllm-node" /tmp/iop-field-evidence/reconnect-after-status.json && grep -q "onexplayer-lemonade-node" /tmp/iop-field-evidence/reconnect-after-status.json && break || true
  sleep 1
done
grep -E "mac-codex-node|gx10-vllm-node|onexplayer-lemonade-node" /tmp/iop-field-evidence/reconnect-after-status.json
(lsof -nP -iTCP:18084 -sTCP:ESTABLISHED 2>/dev/null || ss -tn state established "( sport = :18084 )" 2>/dev/null || true) | tee /tmp/iop-field-evidence/reconnect-after-tcp.txt
REFRESH_ADDR="$(python3 - <<'"'"'PY'"'"'
from pathlib import Path
import re
s = Path("build/dev-runtime/edge.yaml").read_text()
m = re.search(r"(?ms)^refresh:\n(?:^[ \t]+.*\n)*?^[ \t]+listen:[ \t]*\"?([^\"\n]+)\"?", s)
print(m.group(1).strip() if m else "127.0.0.1:19093")
PY
)"
EDGE_PID_BEFORE="$(cat build/dev-runtime/edge.pid)"
build/dev-runtime/bin/edge --config build/dev-runtime/edge.yaml config refresh --mode dry-run --addr "$REFRESH_ADDR" | tee /tmp/iop-field-evidence/refresh-dry-run.json
build/dev-runtime/bin/edge --config build/dev-runtime/edge.yaml config refresh --mode apply --addr "$REFRESH_ADDR" | tee /tmp/iop-field-evidence/refresh-apply.json
EDGE_PID_AFTER="$(cat build/dev-runtime/edge.pid)"
printf "edge_pid_before=%s edge_pid_after=%s\n" "$EDGE_PID_BEFORE" "$EDGE_PID_AFTER" | tee /tmp/iop-field-evidence/refresh-pid.txt
test "$EDGE_PID_BEFORE" = "$EDGE_PID_AFTER"
curl -fsS http://toki-labs.com:18083/healthz | tee /tmp/iop-field-evidence/refresh-healthz.txt
curl -fsS http://toki-labs.com:18083/v1/models | tee /tmp/iop-field-evidence/refresh-models.json
python3 - <<'"'"'PY'"'"' | tee /tmp/iop-field-evidence/refresh-concurrent-4.jsonl
import concurrent.futures, json, urllib.request
url = "http://toki-labs.com:18083/v1/chat/completions"
payload = {
  "model": "qwen3.6:35b",
  "messages": [{"role": "user", "content": "Reply with exactly IOP_FIELD_REFRESH_OK."}],
  "max_tokens": 32,
  "temperature": 0
}
def one(i):
    data = json.dumps(payload).encode()
    req = urllib.request.Request(url, data=data, headers={"Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=300) as resp:
        body = json.loads(resp.read().decode())
    return {"index": i, "status": "ok", "id": body.get("id"), "model": body.get("model"), "usage": body.get("usage"), "content": body.get("choices", [{}])[0].get("message", {}).get("content", "")}
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as ex:
    for item in ex.map(one, range(4)):
        print(json.dumps(item, ensure_ascii=False))
PY
test "$(wc -l < /tmp/iop-field-evidence/refresh-concurrent-4.jsonl)" = "4"
'
(output)
```

### 최종 검증
```bash
$ git diff --check
(output)
```

```bash
$ rg --sort path -n 'Control Plane status에서 `edge-toki-labs`|build/dev-runtime/iop-edge|build/bin/iop-edge|\./iop-edge --config build/dev-runtime/edge.yaml' docs/edge-local-dev-guide.md agent-test/local/edge-smoke.md
(output)
```

```bash
$ ssh toki@toki-labs.com 'test -s /tmp/iop-field-evidence/review-config-refresh-help.txt && test -s /tmp/iop-field-evidence/reconnect-before-status.json && test -s /tmp/iop-field-evidence/reconnect-after-status.json && test -s /tmp/iop-field-evidence/reconnect-after-tcp.txt && test -s /tmp/iop-field-evidence/reconnect-pids.txt && test -s /tmp/iop-field-evidence/refresh-apply.json && test -s /tmp/iop-field-evidence/refresh-pid.txt && test -s /tmp/iop-field-evidence/refresh-concurrent-4.jsonl && test "$(wc -l < /tmp/iop-field-evidence/refresh-concurrent-4.jsonl)" = "4"'
(output)
```

---

> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?**
> If anything is blank, go back and fill it in before saving this file.
> Leave review-agent-only sections unchanged.

## 섹션 소유권

| Section | Owner | Note |
|---------|-------|------|
| Header comment, 개요, 리뷰 에이전트 지시 | Fixed at stub creation | Implementing agent must not modify or execute these |
| Roadmap Targets | Fixed at stub creation from plan | Implementing agent must not modify; code-review copies it into `complete.log` as `Roadmap Completion` only on PASS |
| Archive Evidence Snapshot | Fixed at stub creation from plan | Previous loop context; only listed archive paths may be reread narrowly |
| 구현 항목별 완료 여부 (item names) | Fixed at stub creation | Implementing agent checks `[ ]` to `[x]` only |
| 구현 체크리스트 (item text/order) | Fixed at stub creation from plan | Implementing agent checks `[ ]` to `[x]` only; final checkbox is mandatory before saving |
| 코드리뷰 전용 체크리스트 | Review agent only | Implementing agent must not modify or check this section |
| 계획 대비 변경 사항, 주요 설계 결정 | Implementing agent | Replace placeholder text with actual content |
| 사용자 리뷰 요청 | Implementing agent | Keep `상태: 없음` unless a selected Milestone `구현 잠금 > 결정 필요` item blocks implementation |
| 리뷰어를 위한 체크포인트 | Fixed at stub creation | Pre-filled from plan |
| 검증 결과 | Implementing agent | Fill actual stdout/stderr only |
| 코드리뷰 결과 | Review agent appends | Not included in stub |
