diff --git a/AGENTS.md b/AGENTS.md index 34f72ef4..cae6f7da 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -98,6 +98,7 @@ - `docs/ROADMAP_WBS.md`의 WBS-8.2: `run_kis_data_collection_v1.py` → `validate_platform_transition_wbs_v1.py` → `validate_snapshot_admin_web_v1.py`. - `docs/WBS_10_DOTNET_MIGRATION_ROADMAP.yaml`: `.NET 엔진 고도화` 상세 WBS와 각 WBS별 성공 데이터 가이드. - `docs/WBS_10_DOTNET_MIGRATION_INVENTORY.yaml`: WBS-10 전환 우선순위용 실행 경로 인벤토리. +- `docs/WBS_10_DOTNET_MIGRATION_EXECUTION_PLAN.yaml`: WBS-10 착수용 실행 분해 계획. - `tools/validate_dotnet_migration_roadmap_v1.py`: WBS-10 상세 로드맵 YAML validator. - `Temp/snapshot_admin_approval_packet_v1.json`: snapshot admin approval packet export. - `Temp/snapshot_admin_approval_packet_v1.md`: snapshot admin approval packet summary. diff --git a/docs/ROADMAP_WBS.md b/docs/ROADMAP_WBS.md index 7797c42a..64346e90 100644 --- a/docs/ROADMAP_WBS.md +++ b/docs/ROADMAP_WBS.md @@ -1466,6 +1466,7 @@ WBS-8.8 (KIS 리팩터) — 독립적 (원격 병행) > 상세 작업 가이드(YAML): [WBS_10_DOTNET_MIGRATION_ROADMAP.yaml](./WBS_10_DOTNET_MIGRATION_ROADMAP.yaml) > 실행 경로 인벤토리: [WBS_10_DOTNET_MIGRATION_INVENTORY.yaml](./WBS_10_DOTNET_MIGRATION_INVENTORY.yaml) +> 실행 분해 계획: [WBS_10_DOTNET_MIGRATION_EXECUTION_PLAN.yaml](./WBS_10_DOTNET_MIGRATION_EXECUTION_PLAN.yaml) > 현황 진단(2026-06-26): .NET 프로젝트는 Python 엔진(41 모듈, 14,500 LOC) 대비 5~10%(~1,400 LOC) 수준. > Domain 계산기 6개·데이터 모델 8개·KIS/Naver/Yahoo 클라이언트·PostgreSQL 마이그레이션·Razor Pages 어드민 대시보드 기본 구현 완료. diff --git a/docs/WBS_10_DOTNET_MIGRATION_EXECUTION_PLAN.yaml b/docs/WBS_10_DOTNET_MIGRATION_EXECUTION_PLAN.yaml new file mode 100644 index 00000000..ec9b737a --- /dev/null +++ b/docs/WBS_10_DOTNET_MIGRATION_EXECUTION_PLAN.yaml @@ -0,0 +1,98 @@ +formula_id: WBS_10_DOTNET_MIGRATION_EXECUTION_PLAN_V1 +owner: QuantEngine +status: draft +source_of_truth: + - docs/WBS_10_DOTNET_MIGRATION_ROADMAP.yaml + - docs/WBS_10_DOTNET_MIGRATION_INVENTORY.yaml + +goal: ".NET 엔진 고도화를 실제 작업 순서로 착수 가능한 수준까지 분해한다." + +work_packages: + - wp_id: WBS-10-WP1 + title: "운영 경로 분해 및 전환 경계 확정" + objective: "Python harness / .NET domain / .NET application / .NET web / read model 경계를 고정한다." + depends_on: + - WBS-10-A1 + inputs: + - docs/WBS_10_DOTNET_MIGRATION_INVENTORY.yaml + - docs/WBS_10_DOTNET_MIGRATION_ROADMAP.yaml + outputs: + - docs/WBS_10_DOTNET_MIGRATION_INVENTORY.yaml + - docs/WBS_10_DOTNET_MIGRATION_EXECUTION_PLAN.yaml + success_data: + schema: yaml + fields: + - route_id + - classification + - keep_or_migrate + - owner_file + - note + pass_condition: "migrate 대상과 keep 대상이 혼동 없이 분리됨" + + - wp_id: WBS-10-WP2 + title: "Domain parity 우선순위 확정" + objective: "핵심 계산기와 하네스 parity 대상을 먼저 고정한다." + depends_on: + - WBS-10-WP1 + inputs: + - src/dotnet/QuantEngine.Core/Domain/FormulaEngine.cs + - src/dotnet/QuantEngine.Core/Domain/FactorCalculator.cs + - src/dotnet/QuantEngine.Core.Tests/FormulaEngineTests.cs + outputs: + - Temp/wbs10_domain_parity_backlog.json + success_data: + schema: json + fields: + - formula_id + - parity_targets + - tolerance + - coverage_min + pass_condition: "핵심 계산기 parity 대상이 누락 없이 나열됨" + + - wp_id: WBS-10-WP3 + title: "스케줄러 서비스 수준 강화 착수" + objective: "SchedulerService를 상태/의존성/재시도/감사 추적 서비스로 진화시킨다." + depends_on: + - WBS-10-WP1 + inputs: + - src/dotnet/QuantEngine.Web/Services/SchedulerService.cs + - spec/41_release_dag.yaml + outputs: + - Temp/wbs10_scheduler_service_backlog.yaml + success_data: + schema: yaml + fields: + - state_machine + - dependency_edges + - retry_policy + - audit_fields + pass_condition: "현재 cron형 호출과 서비스 수준 제어면의 차이가 정의됨" + + - wp_id: WBS-10-WP4 + title: "read model 분리 착수" + objective: "운영 조회를 원장/집계와 분리한다." + depends_on: + - WBS-10-WP1 + inputs: + - src/dotnet/QuantEngine.Web/Pages/Admin/Dashboard/Index.cshtml.cs + - src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Index.cshtml.cs + outputs: + - Temp/wbs10_read_model_boundary.yaml + success_data: + schema: yaml + fields: + - projection + - source_of_truth + - refresh_mode + - staleness_budget + pass_condition: "조회 모델과 원장 모델의 경계가 설명됨" + +execution_order: + - WBS-10-WP1 + - WBS-10-WP2 + - WBS-10-WP3 + - WBS-10-WP4 + +notes: + - "이 문서는 실행 가능한 작업 분해용이며, 권위는 roadmap/inventory에 남긴다." + - "모든 success_data는 하네스가 아닌 착수 기준으로 사용한다."