<!-- task=m-backtest-scenario-automation/06+05_matrix_seed plan=1 tag=REVIEW_TEST -->

# Matrix Seed Follow-up Plan

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

구현 완료 전 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. finalization은 code-review 전용이다. 사용자 결정, 사용자 소유 외부 환경/secret 준비, 범위 충돌이 필요하면 직접 묻지 말고 review stub의 `사용자 리뷰 요청`에 정확한 근거를 남긴다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/backtest-loop/milestones/backtest-scenario-automation.md`
- Task ids:
  - `matrix-seed`: matrix scenario가 신규 원격 DB에서도 결정적으로 통과하도록 선행 import/seed 조건을 YAML 또는 handoff 문서에 반영한다.
- Completion mode: check-on-pass

## Archive Evidence Snapshot

- Archived plan: `plan_cloud_G07_0.log`
- Archived review: `code_review_cloud_G07_0.log`
- Verdict: FAIL
- Required finding: `headless_validation.md`가 matrix pre-seed를 `backtest_result_summary.yaml` 전체 실행으로 고정했지만, 현재 `backtest_result_summary.yaml`은 poll 없이 `start -> result`를 수행한다. `07+05_result_poll_remote`가 이 파일의 `start -> poll -> result` 안정화를 active sibling으로 소유하고, 이전 archive evidence에도 `get_backtest_result not_found`가 07 범위로 남아 있다.
- Retained evidence: `05+04_runtime_startup` PASS complete log가 archive에 있다. plan 0 구현은 remote `backtest_result_summary.yaml` 실행 뒤 `backtest_matrix_success.yaml`이 `run_status=succeeded`, summary exit 0을 반환한 evidence를 남겼고, local `git diff --check`와 `go test -count=1 ./apps/cli/internal/operator ./apps/cli/internal/cli`는 통과했다.
- Gap to close: matrix seed/import handoff가 미완료 sibling인 result-poll full scenario 성공에 의존하지 않도록, 동일 universe/symbol/date 데이터를 import하고 exit 0으로 끝나는 deterministic seed 경로를 문서 또는 fixture로 고정해야 한다.

## 범위 결정

이 후속은 `matrix-seed`만 다룬다. `backtest_result_summary.yaml`의 poll 추가, result summary remote evidence, result JSON key 보강은 `07+05_result_poll_remote` 범위다. full `backtest_result_summary.yaml` 실행을 matrix precondition으로 유지하려면 07 PASS 이후로 의존 관계를 명확히 해야 하며, 이 후속에서는 기본적으로 import-only seed 경로를 선호한다.

## 구현 체크리스트

- [ ] `05+04_runtime_startup` complete.log가 active 또는 archive 경로에 있는지 확인하고 경로를 기록한다.
- [ ] `backtest_matrix_success.yaml`이 필요로 하는 universe/symbol/date를 확인한다.
- [ ] `backtest_result_summary.yaml` 전체 실행에 의존하지 않는 seed/import 절차를 선택한다. 기본값은 동일 universe/symbol/date의 `import_daily_bars`만 실행하고 exit 0으로 끝나는 별도 fixture를 추가하는 것이다.
- [ ] 기존 import-only fixture를 재사용한다면, matrix와 같은 데이터가 DB에 적재된다는 근거를 코드/fixture/evidence로 기록한다.
- [ ] 선택한 seed/import 절차를 `apps/cli/testdata/operator/headless_validation.md` 또는 YAML fixture에 raw 값 없이 반영한다.
- [ ] 원격 runner에서 seed/import 절차 후 `backtest_matrix_success.yaml`을 실행해 seed command exit code 0, matrix exit code 0, matrix JSONL `run_status=succeeded` evidence를 기록한다.
- [ ] `git diff --check`와 `go test -count=1 ./apps/cli/internal/operator ./apps/cli/internal/cli`를 실행한다.
- [ ] `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 수정 파일 가이드

| 파일 | 항목 |
|------|------|
| `apps/cli/testdata/operator/headless_validation.md` | matrix pre-seed 절차를 result-poll sibling과 분리해 갱신 |
| `apps/cli/testdata/operator/backtest_matrix_seed_import.yaml` | 필요 시 동일 universe/symbol/date import-only seed fixture 추가 |
| `apps/cli/internal/operator/handoff_test.go` | handoff 문서 fixture 목록/계약 drift가 발생하면 기존 패턴에 맞춰 갱신 |

## 최종 검증

```bash
git diff --check
go test -count=1 ./apps/cli/internal/operator ./apps/cli/internal/cli
test -f agent-task/m-backtest-scenario-automation/05+04_runtime_startup/complete.log || find agent-task/archive -path '*/m-backtest-scenario-automation/05+04_runtime_startup/complete.log' -print -quit
ssh "$ALT_REMOTE_SSH" "set -euo pipefail; cd \"$ALT_REMOTE_ALT_ROOT/apps/cli\"; go run ./cmd/alt operator scenario run --file testdata/operator/<matrix-seed-fixture>.yaml --api-url \"ws://127.0.0.1:18030/socket\" --output jsonl"
ssh "$ALT_REMOTE_SSH" "set -euo pipefail; cd \"$ALT_REMOTE_ALT_ROOT/apps/cli\"; go run ./cmd/alt operator scenario run --file testdata/operator/backtest_matrix_success.yaml --api-url \"ws://127.0.0.1:18030/socket\" --output jsonl"
```

기대 결과: seed/import command는 typed success와 summary `exit_code=0`을 포함한다. matrix command는 exit code 0, `run_status=succeeded`, summary `exit_code=0`을 기록한다. `backtest_result_summary.yaml` full scenario 성공은 이 split의 PASS 조건으로 사용하지 않는다.
