feat(dotnet): add parity contract and wiring
Validators (Pushes and Pull Requests) / validate-ui-and-storage (push) Successful in 24s
CI Workflow Lint / validate-ci-workflow-lint (push) Failing after 12s
Validators (Pushes and Pull Requests) / validate-core (push) Has been cancelled

This commit is contained in:
2026-07-13 00:06:48 +09:00
parent 528a1b4425
commit eb3a33f124
7 changed files with 233 additions and 0 deletions
+1
View File
@@ -1468,6 +1468,7 @@ WBS-8.8 (KIS 리팩터) — 독립적 (원격 병행)
> 실행 경로 인벤토리: [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)
> 실행 분해 검증기: `tools/validate_dotnet_migration_execution_plan_v1.py`
> parity 계약: [WBS_10_DOTNET_PARITY_CONTRACT.yaml](./WBS_10_DOTNET_PARITY_CONTRACT.yaml)
> 현황 진단(2026-06-26): .NET 프로젝트는 Python 엔진(41 모듈, 14,500 LOC) 대비 5~10%(~1,400 LOC) 수준.
> Domain 계산기 6개·데이터 모델 8개·KIS/Naver/Yahoo 클라이언트·PostgreSQL 마이그레이션·Razor Pages 어드민 대시보드 기본 구현 완료.
+83
View File
@@ -0,0 +1,83 @@
formula_id: WBS_10_DOTNET_PARITY_CONTRACT_V1
owner: QuantEngine
status: draft
source_of_truth:
- src/dotnet/QuantEngine.Core/Domain/FormulaEngine.cs
- src/dotnet/QuantEngine.Core/Domain/ExitDecisions.cs
- src/dotnet/QuantEngine.Core/Domain/FactorCalculator.cs
- src/dotnet/QuantEngine.Core.Tests/FormulaEngineTests.cs
- src/dotnet/QuantEngine.Core.Tests/FactorCalculatorTests.cs
- src/dotnet/QuantEngine.Core.Tests/ParityTests/DomainParityTests.cs
goal: "Python reference와 .NET domain 결과를 데이터 기반 parity 계약으로 고정한다."
targets:
- target_id: formula_engine_timing
symbol: FormulaEngine.ComputeTimingDecision
tolerance:
numeric: 0
text: exact
evidence:
- src/dotnet/QuantEngine.Core.Tests/FormulaEngineTests.cs
- src/dotnet/QuantEngine.Core.Tests/ParityTests/DomainParityTests.cs
pass_condition: "timing action/reason이 reference와 동일"
- target_id: formula_engine_sell
symbol: FormulaEngine.ComputeSellDecision
tolerance:
numeric: 0
text: exact
evidence:
- src/dotnet/QuantEngine.Core.Tests/FormulaEngineTests.cs
- src/dotnet/QuantEngine.Core.Tests/ParityTests/DomainParityTests.cs
pass_condition: "sell action/ratio/validation이 reference와 동일"
- target_id: formula_engine_final
symbol: FormulaEngine.ComputeFinalDecision
tolerance:
numeric: 0
text: exact
evidence:
- src/dotnet/QuantEngine.Core.Tests/FormulaEngineTests.cs
- src/dotnet/QuantEngine.Core.Tests/ParityTests/DomainParityTests.cs
pass_condition: "final action/priority/source가 reference와 동일"
- target_id: exit_stop_price
symbol: ExitDecisions.ComputeStopPriceCore
tolerance:
numeric: 0.0001
text: exact
evidence:
- src/dotnet/QuantEngine.Core.Tests/ParityTests/DomainParityTests.cs
pass_condition: "stop price within tolerance"
- target_id: exit_stop_ladder
symbol: ExitDecisions.ComputeStopActionLadder
tolerance:
numeric: 0
text: exact
evidence:
- src/dotnet/QuantEngine.Core.Tests/ParityTests/DomainParityTests.cs
pass_condition: "exit action ladder exact match"
- target_id: exit_heat_thresholds
symbol: ExitDecisions.ComputeDynamicHeatThresholds
tolerance:
numeric: 0
text: exact
evidence:
- src/dotnet/QuantEngine.Core.Tests/ParityTests/DomainParityTests.cs
pass_condition: "heat thresholds exact match"
- target_id: factor_calculator
symbol: FactorCalculator.CalculateFactors
tolerance:
numeric: 0.000001
text: exact
evidence:
- src/dotnet/QuantEngine.Core.Tests/FactorCalculatorTests.cs
pass_condition: "factor outputs stable and deterministic"
execution_notes:
- "Parity is a contract, not a guess."
- "Do not add new parity targets without updating reference fixtures and tolerances."