<!-- task=m-backtest-scenario-automation/04_remote_env_sync plan=2 tag=REVIEW_REVIEW_REVIEW_TEST -->

# Remote Env Sync Follow-up Plan

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

이 plan은 `code_review_cloud_G07_1.log`의 Required 이슈만 좁게 해결한다. 구현 완료 후 `CODE_REVIEW-cloud-G07.md`의 구현 에이전트 소유 섹션을 채우고 active 파일을 유지한 채 리뷰 준비를 보고한다. 종결, log rename, `complete.log`, archive 이동은 code-review 전용이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 범위 충돌 없이는 진행할 수 없으면 review stub의 `사용자 리뷰 요청`에 정확한 근거를 남기고 멈춘다. 구현 에이전트는 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하거나 `USER_REVIEW.md`를 만들지 않는다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/backtest-loop/milestones/backtest-scenario-automation.md`
- Task ids:
  - `remote-env-sync`: 원격 테스트 checkout과 실제 실행 checkout을 하나로 맞추고 DB/Redis health 및 현재 checkout의 worker migration 적용 절차/evidence를 남긴다.
- Completion mode: check-on-pass

## 범위 결정 근거

이 후속은 `remote-env-sync` 완료를 막는 evidence sanitization, 문서 정확도, verification trust 문제만 처리한다. 새 scenario 동작, runtime startup, result polling fixture/test 구현은 이번 split 범위가 아니다. roadmap 상태 변경이나 Task 체크는 code-review/implementation 범위가 아니며 런타임 완료 이벤트가 처리한다.

## 구현 체크리스트

- [ ] `code_review_cloud_G07_1.log`와 새 active review evidence에서 raw remote endpoint, raw host/path, platform-specific Docker binary absolute path, DB/Redis credential 값을 제거하고 실제 `rg` 출력으로 재검증한다.
- [ ] `CODE_REVIEW-cloud-G07.md`의 모든 검증 블록에 placeholder marker나 거짓 pass summary 대신 실제 stdout/stderr 또는 저장된 출력 파일 경로를 기록한다.
- [ ] `apps/cli/testdata/operator/headless_validation.md`의 `backtest_result_summary` row에서 이번 split 범위 밖인 `run_status`/`GetBacktestRunResponse.run.status` 문서 drift를 제거한다.
- [ ] `apps/cli/testdata/operator/headless_validation.md`의 원격 migration 명령을 host/container checkout 경계와 secret placeholder 경계에 맞게 `<CONTAINER_ALT_ROOT>`, `<DATABASE_URL>`, `<REDIS_URL>` 형태로 정리한다.
- [ ] `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_REVIEW_REVIEW_TEST-1] Sanitize archived and active evidence

#### 문제

`code_review_cloud_G07_1.log`에는 active review에서 넘어온 raw remote endpoint와 platform-specific Docker binary absolute path가 남아 있다. 또한 해당 active review는 sanitization grep이 출력 없이 통과했다고 기록했지만, 리뷰 재실행 결과 같은 파일에서 raw evidence가 검출되어 verification trust가 깨졌다.

#### 해결 방법

archived review log와 새 active review 모두에서 개인 endpoint, 개인 absolute path, platform-specific Docker binary absolute path, DB/Redis credential 원문을 placeholder로 바꾼다. raw 값을 새 plan/review에 다시 쓰지 말고, 검증은 일반화된 패턴으로 수행한다. 검증 결과에는 실제 `rg` stdout/stderr를 기록한다.

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

- [ ] `agent-task/m-backtest-scenario-automation/04_remote_env_sync/code_review_cloud_G07_1.log`의 raw endpoint/path evidence를 placeholder로 정리한다.
- [ ] 새 `CODE_REVIEW-cloud-G07.md`에 raw endpoint/path/credential 값과 거짓 sanitization pass summary를 남기지 않는다.

#### 테스트 작성

새 unit test는 작성하지 않는다. task evidence sanitization은 `rg` 검증으로 확인한다.

#### 중간 검증

```bash
rg --sort path -n "([[:alnum:]_.-]+@[[:alnum:]_.-]+[.][[:alpha:]]{2,})|/Users/[^[:space:]\"']+|/Applications/Docker[.]app|postgres://[^<[:space:]]+:[^<[:space:]@]+@" apps/cli/testdata/operator/headless_validation.md agent-task/m-backtest-scenario-automation/04_remote_env_sync/code_review_cloud_G07_1.log agent-task/m-backtest-scenario-automation/04_remote_env_sync/CODE_REVIEW-cloud-G07.md | rg -v '^[^:]+:[0-9]+:(\$ )?rg --sort path -n '
```

기대 결과: exit code 1 또는 출력 없음.

### [REVIEW_REVIEW_REVIEW_TEST-2] Replace placeholder verification output

#### 문제

`CODE_REVIEW-cloud-G07.md`의 후속 검증 블록이 실제 stdout/stderr 대신 `(output)` placeholder로 남아 있었다. 이 상태에서는 checkout, migration, DB schema version evidence가 실제로 수집되었는지 판단할 수 없다.

#### 해결 방법

계획된 모든 중간 검증과 최종 검증 명령을 다시 실행하거나, 원격 명령처럼 실행 환경이 필요한 경우 저장한 출력 파일 경로와 그 파일을 생성한 명령을 기록한다. 단순 요약 또는 `(output)` placeholder는 남기지 않는다. 원격 출력도 raw endpoint/path/credential 없이 sanitized form으로 기록한다.

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

- [ ] 새 `CODE_REVIEW-cloud-G07.md`의 `REVIEW_REVIEW_REVIEW_TEST-1` 검증 결과에 실제 `rg` 출력 또는 exit code 1의 무출력 사실을 기록한다.
- [ ] 새 `CODE_REVIEW-cloud-G07.md`의 checkout/migration/DB version 검증 결과에 실제 stdout/stderr 또는 저장된 출력 파일 경로를 기록한다.
- [ ] 새 `CODE_REVIEW-cloud-G07.md`의 최종 검증 결과에 `git diff --check`, Go test, scope drift grep, sanitization grep의 실제 결과를 기록한다.

#### 테스트 작성

새 unit test는 작성하지 않는다. 이 항목은 verification evidence 복구다.

#### 중간 검증

```bash
rg --sort path -n "\\(output\\)|# \\(출력 없음 - exit code 1\\)" agent-task/m-backtest-scenario-automation/04_remote_env_sync/CODE_REVIEW-cloud-G07.md
```

기대 결과: 구현 완료 후 exit code 1 또는 출력 없음.

### [REVIEW_REVIEW_REVIEW_TEST-3] Remove result-poll documentation drift

#### 문제

`apps/cli/testdata/operator/headless_validation.md`의 `backtest_result_summary` row가 `run_status`와 `GetBacktestRunResponse.run.status`를 포함하도록 바뀌었다. 이는 `result-poll` split의 문서/fixture 의미이며 이번 `remote-env-sync` split 범위를 벗어난다.

#### 해결 방법

`backtest_result_summary` row를 이번 split 전 의미로 되돌린다. 이번 split에는 원격 환경 동기화 및 migration 확인 절차 추가만 남긴다. 다른 사용자 변경을 되돌리지 말고 해당 row hunk만 수동 정리한다.

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

- [ ] `apps/cli/testdata/operator/headless_validation.md`의 `backtest_result_summary` expected keys에서 `run_status`를 제거한다.
- [ ] 같은 row의 checked protobuf/view-model field에서 `GetBacktestRunResponse.run.status`를 제거한다.

#### 테스트 작성

새 unit test는 작성하지 않는다. 범위 밖 문서 drift 제거 작업이다.

#### 중간 검증

```bash
git diff -- apps/cli/testdata/operator/headless_validation.md
rg --sort path -n "backtest_result_summary.*run_status" apps/cli/testdata/operator/headless_validation.md
```

기대 결과: diff에는 원격 환경 동기화 절차와 migration 확인 절차만 남고, `rg`는 exit code 1 또는 출력 없음.

### [REVIEW_REVIEW_REVIEW_TEST-4] Fix remote migration command placeholders

#### 문제

`apps/cli/testdata/operator/headless_validation.md`의 `docker exec code-server` 명령이 컨테이너 내부에서 host checkout placeholder를 사용하고, secret-bearing `DATABASE_URL` 값을 command 예시에 직접 펼친다. 이 문서는 host checkout과 실행 checkout을 구분해야 하는 `remote-env-sync`의 핵심 evidence 문서라서 placeholder 경계가 정확해야 한다.

#### 해결 방법

host checkout은 `<ALT_REMOTE_ALT_ROOT>`로, code-server 컨테이너 내부 checkout은 `<CONTAINER_ALT_ROOT>`로 분리해서 기록한다. `DATABASE_URL`과 `REDIS_URL`은 command 안에 직접 펼치지 말고 `<DATABASE_URL>`/`<REDIS_URL>` placeholder로 둔다. Docker binary는 tracked 문서에서 platform-specific absolute path 없이 `docker` 또는 `<DOCKER_BIN>` 형태로 기록한다.

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

- [ ] `apps/cli/testdata/operator/headless_validation.md`의 code-server 내부 `cd` 경로를 `<CONTAINER_ALT_ROOT>/services/worker`로 바꾼다.
- [ ] 같은 명령의 `DATABASE_URL`/`REDIS_URL` 값을 `<DATABASE_URL>`/`<REDIS_URL>` placeholder로 바꾼다.

#### 테스트 작성

새 unit test는 작성하지 않는다. 문서 명령 정확도와 secret boundary 정리 작업이다.

#### 중간 검증

```bash
rg --sort path -n "<ALT_REMOTE_ALT_ROOT>/services/worker|DATABASE_URL=postgres://|REDIS_URL=redis://[^<]" apps/cli/testdata/operator/headless_validation.md
```

기대 결과: exit code 1 또는 출력 없음.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-task/m-backtest-scenario-automation/04_remote_env_sync/code_review_cloud_G07_1.log` | REVIEW_REVIEW_REVIEW_TEST-1 |
| active review stub | REVIEW_REVIEW_REVIEW_TEST-1, REVIEW_REVIEW_REVIEW_TEST-2 |
| `apps/cli/testdata/operator/headless_validation.md` | REVIEW_REVIEW_REVIEW_TEST-3, REVIEW_REVIEW_REVIEW_TEST-4 |

## 최종 검증

```bash
git diff --check
go test -count=1 ./apps/cli/internal/operator ./apps/cli/internal/cli
rg --sort path -n "worker-available|poll_backtest_run|backtest_result_summary.*run_status" apps/cli/testdata/operator/headless_validation.md apps/cli/testdata/operator/api_connection_smoke.yaml apps/cli/testdata/operator/backtest_result_summary.yaml apps/cli/testdata/operator/expected/backtest_result_summary.jsonl
rg --sort path -n "([[:alnum:]_.-]+@[[:alnum:]_.-]+[.][[:alpha:]]{2,})|/Users/[^[:space:]\"']+|/Applications/Docker[.]app|postgres://[^<[:space:]]+:[^<[:space:]@]+@" apps/cli/testdata/operator/headless_validation.md agent-task/m-backtest-scenario-automation/04_remote_env_sync/code_review_cloud_G07_1.log agent-task/m-backtest-scenario-automation/04_remote_env_sync/CODE_REVIEW-cloud-G07.md | rg -v '^[^:]+:[0-9]+:(\$ )?rg --sort path -n '
rg --sort path -n "\\(output\\)|# \\(출력 없음 - exit code 1\\)" agent-task/m-backtest-scenario-automation/04_remote_env_sync/CODE_REVIEW-cloud-G07.md
```

기대 결과: `git diff --check`와 Go test는 exit code 0. 세 `rg` 명령은 exit code 1 또는 출력 없음. 모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
