# Complete - m-control-plane-api-data-binding/03+01,02_preview_smoke

## 완료 일시

2026-06-17

## 요약

원격 preview data smoke를 리뷰 1회차 PASS로 종료했다. tracked HEAD fresh build의 Overview 화면이 실제 Core health/readiness API 상태(CORE ONLINE, Health OK, Readiness OK)를 렌더링함을 curl + browser network capture + screenshot evidence로 확인했다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | PASS | 선행 01/02 의존성 충족 확인, curl/browser/screenshot evidence가 API-backed 화면 렌더링을 4중 교차 검증. |

## 구현/정리 내용

- source 코드 변경 없음. `preview-data-smoke`는 원격 smoke evidence 수집 task다.
- 선행 split `01_runner_surface`, `02+01_execution_surface`의 archive `complete.log`(둘 다 PASS)를 확인해 의존성 게이트를 충족했다.
- 원격 Core `http://toki-labs.com:18020/healthz`, `/readyz` curl과 preview `http://toki-labs.com:13020/` HTTP head를 `/tmp/oto-api-binding-smoke`에 수집했다.
- 원격 runner(`ssh toki@toki-labs.com`)에서 Playwright(설치된 Chrome 채널)로 preview를 로드해 Core 요청/응답과 full-page screenshot을 캡처했다. CanvasKit body-text 공백 때문에 heading assertion 대신 network capture + screenshot evidence로 판정하도록 `preview-smoke.mjs`를 재작성했다(사유는 archived review의 `계획 대비 변경 사항` 참조).
- 리뷰 중 active task group의 빈 `02+01_execution_surface/` 잔존 디렉터리(02는 이미 archive PASS)를 정리했다.

## 최종 검증

- `curl -fsS --max-time 10 http://toki-labs.com:18020/healthz` - PASS; `OK` (saved `/tmp/oto-api-binding-smoke/healthz.txt`).
- `curl -fsS --max-time 10 http://toki-labs.com:18020/readyz` - PASS; `OK` (saved `/tmp/oto-api-binding-smoke/readyz.txt`).
- `curl -fsSI --max-time 10 http://toki-labs.com:13020/` - PASS; `HTTP/1.0 200 OK` (saved `/tmp/oto-api-binding-smoke/preview-head.txt`).
- `ssh -o BatchMode=yes toki@toki-labs.com '... node /tmp/oto-api-binding-smoke/preview-smoke.mjs'` - PASS; captured `GET .../healthz` `200`, `GET .../readyz` `200`, NO_FAILED_CORE_REQUESTS; `screenshot=/tmp/oto-api-binding-smoke/preview.png`.
- `test -s /tmp/oto-api-binding-smoke/preview.png` - PASS; exit 0 (66KB; screenshot에 `CORE ONLINE`, `Health OK /healthz - HTTP 200`, `Readiness OK /readyz - HTTP 200` 표시 확인).

## Roadmap Completion

- Milestone: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-api-data-binding.md`
- Completed task ids:
  - `preview-data-smoke`: PASS; evidence=`agent-task/archive/2026/06/m-control-plane-api-data-binding/03+01,02_preview_smoke/plan_cloud_G07_0.log`, `agent-task/archive/2026/06/m-control-plane-api-data-binding/03+01,02_preview_smoke/code_review_cloud_G07_0.log`; verification=`curl .../healthz|/readyz`, `curl -I http://toki-labs.com:13020/`, 원격 Playwright smoke + `/tmp/oto-api-binding-smoke/preview.png`
- Not completed task ids: 없음

## 잔여 Nit

- 공개 preview `http://toki-labs.com:13020/`가 ephemeral `/tmp/oto-api-binding-smoke/work/...` 기반 Python server로 서비스 중이다. durable preview 배포는 이 Milestone 범위 제외라 smoke 판정에는 영향 없음.

## 후속 작업

- (후속 운영 Milestone 후보) 영구 13020 preview 배포 파이프라인이 최신 build를 서비스하도록 갱신. 이 Milestone의 쓰기/배포 범위 제외 항목이므로 별도 작업으로 분리.
