formula_id: WBS_10_DOTNET_READ_MODEL_CONTRACT_V1 owner: QuantEngine status: draft goal: "운영 화면과 조회 API의 read model 경계를 분리한다." read_models: - model_id: dashboard_summary purpose: "운영 대시보드 상태" source: QuantEngine.Infrastructure.Repositories.CollectionRepository consumers: - src/dotnet/QuantEngine.Web/Pages/Admin/Dashboard/Index.cshtml.cs - src/dotnet/QuantEngine.Web/Endpoints/CollectionEndpoints.cs fields: - LastRunId - LastRunAt - SuccessCount - ErrorCount - SnapshotCount staleness_budget: "5m" - model_id: collection_runs purpose: "최근 수집 실행 이력" source: QuantEngine.Infrastructure.Repositories.CollectionRepository consumers: - src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Index.cshtml.cs - src/dotnet/QuantEngine.Web/Endpoints/CollectionEndpoints.cs fields: - RunId - State - StartedAt - FinishedAt - SuccessCount - ErrorCount staleness_budget: "5m" - model_id: price_history_summary purpose: "가격 히스토리 요약" source: QuantEngine.Infrastructure.Repositories.CollectionRepository consumers: - src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Index.cshtml.cs - src/dotnet/QuantEngine.Web/Endpoints/CollectionEndpoints.cs fields: - Ticker - Count - FirstDate - LastDate staleness_budget: "15m" rules: - "read model은 조회 전용이어야 한다." - "운영 화면은 직접 원장 테이블을 조립하지 않는다." - "쓰기 로직은 read model에 의존하지 않는다." - "staleness_budget이 명시되지 않은 조회는 금지한다." notes: - "의도된 역정규화는 허용하되, 원장과 동일 테이블로 재사용하지 않는다."