From a897890dc9872fdabb92d04a4e0738d43a9a1e00 Mon Sep 17 00:00:00 2001 From: toki Date: Sat, 20 Jun 2026 20:45:51 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20backtest-loop=20milestone=20?= =?UTF-8?q?=EB=B0=8F=20SDD=20=EB=AC=B8=EC=84=9C=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backtest-multi-timeframe-coverage.md | 23 +++++++++++-------- .../backtest-multi-timeframe-coverage/SDD.md | 4 ++-- agent-roadmap/phase/backtest-loop/PHASE.md | 6 ++--- .../scheduled-market-data-refresh.md | 6 ++--- 4 files changed, 21 insertions(+), 18 deletions(-) rename agent-roadmap/{ => archive}/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md (84%) rename agent-roadmap/{ => archive}/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md (96%) diff --git a/agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md b/agent-roadmap/archive/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md similarity index 84% rename from agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md rename to agent-roadmap/archive/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md index f297e59..0f792a8 100644 --- a/agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md +++ b/agent-roadmap/archive/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md @@ -11,7 +11,7 @@ ## 상태 -[진행중] +[완료] ## 승격 조건 @@ -21,7 +21,7 @@ - 상태: 해제 - SDD: 필요 -- SDD 문서: `agent-roadmap/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md` +- SDD 문서: `agent-roadmap/archive/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md` - SDD 사유: timeframe contract/proto, provider capability, DB 저장 key, aggregation provenance, backtest fill policy와 field smoke가 함께 바뀐다. - 잠금 해제 조건: 아래 체크리스트 - [x] SDD 잠금이 해제되어 있다. @@ -65,18 +65,21 @@ 전략 실행과 결과 handoff가 timeframe 차이를 명시적으로 다룬다. - [x] [run-selector] backtest scenario matrix가 monthly/daily/minute timeframe을 표현하고 각 timeframe의 입력 기간을 검증한다. 검증: matrix expand test와 dry-run validation이 monthly/daily/minute run id를 생성한다. -- [ ] [fill-policy] daily 전용 fill policy를 multi-timeframe 용어로 재정리하고, timeframe별 체결/next-bar 규칙을 명시한다. 검증: fixture backtest가 monthly/daily/minute 각각 deterministic result를 낸다. -- [ ] [freshness-readiness] collection freshness와 readiness output이 월/일/분 timeframe별 latest/missing/gap/duplicate 상태를 구분한다. 검증: monthly/daily/minute freshness fixture가 stable text/JSONL로 구분된다. +- [x] [fill-policy] daily 전용 fill policy를 multi-timeframe 용어로 재정리하고, timeframe별 체결/next-bar 규칙을 명시한다. 검증: fixture backtest가 monthly/daily/minute 각각 deterministic result를 낸다. +- [x] [freshness-readiness] collection freshness와 readiness output이 월/일/분 timeframe별 latest/missing/gap/duplicate 상태를 구분한다. 검증: monthly/daily/minute freshness fixture가 stable text/JSONL로 구분된다. ## 완료 리뷰 -- 상태: 없음 -- 요청일: 없음 -- 완료 근거: 없음 +- 상태: 통과 +- 요청일: 2026-06-20 +- 완료 근거: + - `fill-policy`: `agent-task/archive/2026/06/m-backtest-multi-timeframe-coverage/01_fill_policy/complete.log`의 Roadmap Completion PASS와 SDD S07 PASS로 확인했다. + - `freshness-readiness`: `agent-task/archive/2026/06/m-backtest-multi-timeframe-coverage/02_freshness_readiness/complete.log`의 Roadmap Completion PASS와 SDD S08 PASS로 확인했다. + - 종료 전 코드레벨 재검토에서 S01-S08 대응 코드/테스트를 확인했고 `bin/contracts-check`, `bin/worker-storage-check`, `bin/test`, `bin/lint`, `bin/build`, `git diff --check`가 통과했다. - 리뷰 필요: - - [ ] 사용자가 완료 결과를 확인했다 - - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 없음 + - [x] 사용자가 완료 결과를 확인했다 + - [x] archive 이동을 승인했다 +- 리뷰 코멘트: 코드레벨 재검토와 전체 검증이 통과해 완료 및 archive 대상으로 확정했다. ## 범위 제외 diff --git a/agent-roadmap/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md b/agent-roadmap/archive/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md similarity index 96% rename from agent-roadmap/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md rename to agent-roadmap/archive/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md index 79a6362..3be0caf 100644 --- a/agent-roadmap/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md +++ b/agent-roadmap/archive/sdd/backtest-loop/backtest-multi-timeframe-coverage/SDD.md @@ -2,7 +2,7 @@ ## 위치 -- Milestone: `agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md` +- Milestone: `agent-roadmap/archive/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md` - Phase: `agent-roadmap/phase/backtest-loop/PHASE.md` ## 상태 @@ -29,7 +29,7 @@ | 영역       | 기준                                               | 메모                                                                          | | -------------------| --------------------------------------------------------------------------------------------------| ---------------------------------------------------------------------------------------------------------------------------------------------------------| -| Roadmap      | `agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md`       | Milestone 목표, 기능 Task, 범위 제외, 완료 후보 반영 기준                                                | +| Roadmap      | `agent-roadmap/archive/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md`   | Milestone 목표, 기능 Task, 범위 제외, 완료 후보 반영 기준                                                | | Code       | `packages/contracts/proto/alt/v1/common.proto`                          | `Timeframe` enum 원천. 현재 `DAILY`, `MINUTE_1`, `MINUTE_5`가 있으며 월봉 추가가 필요하다.                               | | Code       | `packages/domain/market/types.go`                                | domain `market.Timeframe` 원천. 현재 `1d`, `1m`, `5m`가 있다.                                              | | Code       | `packages/contracts/proto/alt/v1/market.proto`, `packages/contracts/proto/alt/v1/backtest.proto` | `Bar`, `ListBarsRequest`, `BacktestRunSpec`의 timeframe 전달 계약                                            | diff --git a/agent-roadmap/phase/backtest-loop/PHASE.md b/agent-roadmap/phase/backtest-loop/PHASE.md index a52003d..fa824a4 100644 --- a/agent-roadmap/phase/backtest-loop/PHASE.md +++ b/agent-roadmap/phase/backtest-loop/PHASE.md @@ -25,10 +25,10 @@ - [완료] Backtest Scenario Automation - 경로: `agent-roadmap/archive/phase/backtest-loop/milestones/backtest-scenario-automation.md` - 요약: 선택 universe와 기간 조합을 반복 가능한 backtest scenario로 실행하고, 원격 runner에서 migration/runtime/secret 주입/결과 handoff를 안정화한다. -- [진행중] Backtest Multi-Timeframe Coverage - - 경로: `agent-roadmap/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md` +- [완료] Backtest Multi-Timeframe Coverage + - 경로: `agent-roadmap/archive/phase/backtest-loop/milestones/backtest-multi-timeframe-coverage.md` - 요약: 월봉, 일봉, 분봉을 백테스트 기본 분석 timeframe으로 정리하고 data import/store/backtest/freshness 검증을 맞춘다. -- [계획] Scheduled Market Data Refresh +- [진행중] Scheduled Market Data Refresh - 경로: `agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md` - 요약: 원격 서버에서 선택 universe의 market data import를 주기 실행하고 freshness/backfill/readiness를 headless로 확인한다. diff --git a/agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md b/agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md index be83310..24e80aa 100644 --- a/agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md +++ b/agent-roadmap/phase/backtest-loop/milestones/scheduled-market-data-refresh.md @@ -11,7 +11,7 @@ ## 상태 -[계획] +[진행중] ## 승격 조건 @@ -84,6 +84,6 @@ - 표준선(선택): 운영 기능은 먼저 화면 없이 CLI, YAML scenario, JSONL/text output, fixture, remote smoke로 검증한다. - 표준선(선택): scheduled import는 provider 호출과 DB upsert를 idempotent하게 유지하고, 동일 tick 재실행이 중복 row를 만들지 않아야 한다. - 표준선(선택): scheduler config에는 secret 값을 넣지 않고, 원격 runtime env/SOPS 주입 경계를 따른다. -- 선행 작업: Backtest Data Collection Infrastructure, Backtest Scenario Automation -- 후속 작업: Backtest Multi-Timeframe Coverage, Data Quality Monitoring 후보 +- 선행 작업: Backtest Data Collection Infrastructure, Backtest Scenario Automation, Backtest Multi-Timeframe Coverage +- 후속 작업: Data Quality Monitoring 후보 - 결정: scheduler는 `services/worker` 내장 loop가 1차 실행 주체다. OS/systemd는 worker process supervision만 맡고 external cron은 사용하지 않는다. worker scheduler는 설정된 한도 안에서 병렬 수집을 지원해야 한다.