<!-- task=m-korea-daily-data-foundation/03+01,02_data_check_smoke plan=1 tag=REVIEW_KIS_SMOKE -->

# Plan - Review Follow-up for Mock Data Check Smoke

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

이 plan은 이전 리뷰에서 FAIL된 검증 신뢰도와 범위 밖 generated diff만 좁게 정리한다. 구현 완료 전 active `CODE_REVIEW-cloud-G07.md`의 구현 에이전트 소유 섹션을 실제 수정 내용과 실제 검증 출력으로 채운다. 최종화, log rename, `complete.log`, archive 이동은 code-review 전용이다. 사용자만 결정할 blocker, 외부 환경 prerequisite, 또는 범위 충돌이 있으면 review stub의 `사용자 리뷰 요청` 섹션에 근거와 재개 조건을 기록하고 멈춘다.

## 배경

이전 smoke 구현은 focused worker test와 `go run`으로 동작이 확인됐지만, `bin/test` full gate가 통과하지 않았고 generated contract 파일 3개가 계획 범위 밖 diff로 남았다. 이번 follow-up은 smoke code를 넓히지 않고, contracts diff를 정리한 뒤 실제 검증 출력을 남겨 review trust를 회복한다.

## 사용자 리뷰 요청 흐름

구현 중 blocker는 active `CODE_REVIEW-cloud-G07.md`의 `사용자 리뷰 요청` 섹션에 기록한다. code-review가 검증과 `USER_REVIEW.md` 작성 여부를 판단한다.

## 분석 결과

### 읽은 파일

- `agent-task/m-korea-daily-data-foundation/03+01,02_data_check_smoke/plan_cloud_G07_0.log`
- `agent-task/m-korea-daily-data-foundation/03+01,02_data_check_smoke/code_review_cloud_G07_0.log`
- `packages/contracts/gen/go/alt/v1/backtest.pb.go`
- `packages/contracts/gen/go/alt/v1/common.pb.go`
- `packages/contracts/gen/go/alt/v1/market.pb.go`
- `bin/test`
- `bin/contracts-check`
- `bin/contracts-gen`
- `services/worker/cmd/alt-worker-data-check/main.go`
- `services/worker/internal/marketdata/datacheck/datacheck.go`
- `services/worker/internal/marketdata/datacheck/datacheck_test.go`
- `services/worker/internal/marketdata/datacheck/store.go`

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

- Smoke command stdout: 기존 `TestRunPrintsStableSummary`가 count/date substrings를 확인한다. 이번 follow-up에서 새 테스트는 필요하지 않다.
- Full gate verification: 이전 review stub가 `bin/test` 실제 stdout/stderr를 남기지 않았다. 이번 follow-up에서 실제 출력 기록이 필요하다.
- Generated contract drift: 테스트 추가보다 deterministic diff check와 `bin/test` 재실행이 필요하다.

### 심볼 참조

none. 심볼 rename/remove 없음.

### 분할 판단

단일 follow-up plan으로 유지한다. 두 Required issue는 모두 이전 review의 verification trust 회복에 묶여 있고, 별도 split은 같은 `bin/test` 재검증을 중복시킨다.

### 범위 결정 근거

범위는 generated contract diff 제거와 검증 출력 재기록으로 제한한다. `.proto` schema, Dart generated output, smoke command behavior, worker storage/importer/provider logic은 새 요구가 없으면 변경하지 않는다.

### 빌드 등급

build=`cloud-G07`, review=`cloud-G07`. 이전 리뷰가 real `bin/test`/contracts-check 실패와 stdout/stderr 기록 누락을 발견했으므로 terminal-facing verification trust 복구 등급을 유지한다.

## 구현 체크리스트

- [ ] 범위 밖 generated contract diff를 제거하고 contracts Go generated diff가 비어 있음을 확인한다.
- [ ] `bin/test`를 재실행하고 실제 stdout/stderr 또는 저장한 로그 경로를 `CODE_REVIEW-cloud-G07.md`에 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_KIS_SMOKE-1] Remove Generated Contract Drift

문제: `code_review_cloud_G07_0.log`의 판정은 `packages/contracts/gen/go/alt/v1/backtest.pb.go:4`, `packages/contracts/gen/go/alt/v1/common.pb.go:4`, `packages/contracts/gen/go/alt/v1/market.pb.go:4`가 smoke 범위 밖에서 `protoc v5.29.3` -> `v3.21.12`로 바뀐 상태라고 기록했다.

해결 방법: schema 변경이 의도된 작업이 아니므로 `.proto`를 건드리지 말고 Go generated output의 unplanned diff를 제거한다. 현재 toolchain으로 재생성이 필요하면 `bin/contracts-gen`을 사용하고, 의도치 않은 local drift만 남은 상태라면 해당 generated 파일 3개만 원래 내용으로 되돌린다. Dart generated output은 diff가 없으면 건드리지 않는다.

수정 파일 및 체크리스트:

- [ ] `packages/contracts/gen/go/alt/v1/backtest.pb.go`
- [ ] `packages/contracts/gen/go/alt/v1/common.pb.go`
- [ ] `packages/contracts/gen/go/alt/v1/market.pb.go`
- [ ] `.proto` 파일은 변경하지 않는다.

테스트 작성: 새 테스트 없음. generated diff 정리가 목적이므로 deterministic `git diff` 확인으로 충분하다.

중간 검증:

```bash
git diff -- packages/contracts/gen/go/alt/v1/backtest.pb.go packages/contracts/gen/go/alt/v1/common.pb.go packages/contracts/gen/go/alt/v1/market.pb.go
```

기대 결과: 출력 없음.

### [REVIEW_KIS_SMOKE-2] Restore Full Verification Output

문제: `code_review_cloud_G07_0.log`는 `bin/test` 실패와 모듈별 테스트 통과를 요약했지만 실제 stdout/stderr를 남기지 않았다. 원 plan의 `bin/test` 계약 검증은 실제 출력으로 재확인되어야 한다.

해결 방법: generated diff를 정리한 뒤 `bin/test`를 그대로 재실행하고 active review stub에 실제 stdout/stderr를 붙인다. 출력이 너무 길면 `/tmp` 아래 로그 파일로 저장하고, review stub에 실행 명령, 로그 경로, exit status, 마지막 실패 구간을 함께 기록한다. 여전히 외부 tool 문제로 실패하면 `command -v protoc`, `protoc --version`, `command -v protoc-gen-go`, `protoc-gen-go --version`, `command -v flutter`, `flutter --version` 출력까지 기록해 USER_REVIEW gate 판단 근거를 남긴다.

수정 파일 및 체크리스트:

- [ ] `agent-task/m-korea-daily-data-foundation/03+01,02_data_check_smoke/CODE_REVIEW-cloud-G07.md`
- [ ] 필요 시 `/tmp/alt-kis-smoke-bin-test.log` 같은 repo 밖 로그 파일 사용

테스트 작성: 새 테스트 없음. 검증 기록 복구가 목적이다.

중간 검증:

```bash
bin/test
```

기대 결과: exit code 0. 실패하면 실제 stdout/stderr와 tool evidence를 review stub에 기록한다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `packages/contracts/gen/go/alt/v1/backtest.pb.go` | REVIEW_KIS_SMOKE-1 |
| `packages/contracts/gen/go/alt/v1/common.pb.go` | REVIEW_KIS_SMOKE-1 |
| `packages/contracts/gen/go/alt/v1/market.pb.go` | REVIEW_KIS_SMOKE-1 |
| `agent-task/m-korea-daily-data-foundation/03+01,02_data_check_smoke/CODE_REVIEW-cloud-G07.md` | REVIEW_KIS_SMOKE-2 |

## 최종 검증

```bash
git diff -- packages/contracts/gen/go/alt/v1/backtest.pb.go packages/contracts/gen/go/alt/v1/common.pb.go packages/contracts/gen/go/alt/v1/market.pb.go
bin/test
```

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