Outcome
Implement reusable business-effective revision timeline mechanics in TradingEngine.Domain and apply them first to per-instrument monitoring-rule revisions.
The same composed timeline component will later support PortfolioRiskPolicy (#49) and PerformanceObjectiveSchedule (#51) without merging their different definitions, scopes or aggregate-specific validation.
The difficult temporal invariants are proven without EF Core, SQL Server, Azure or API concerns.
Acceptance criteria
Clarifications
- This is shared lifecycle machinery, not one generic aggregate containing every configuration type.
- MonitoringRule, PortfolioRiskPolicy and PerformanceObjectiveSchedule remain separate aggregates with separate XML schemas.
- A PerformanceObjectiveSchedule revision contains an immutable list of dated objective periods; each period is not initially a separate revision timeline.
- Draft represents the proposed next revision; future-dated scheduling is not required initially.
- The business revision number is assigned on activation so it represents effective order.
- Business revision number, XML schema version and SQL
rowversion remain distinct concepts.
- Lifecycle metadata may change only through controlled domain operations; an activated definition cannot change.
Out of scope
- EF Core and SQL Server mappings
- Database migrations and transactions
- XML serialization details
- REST endpoints and UI
- Azure provisioning
Outcome
Implement reusable business-effective revision timeline mechanics in
TradingEngine.Domainand apply them first to per-instrument monitoring-rule revisions.The same composed timeline component will later support PortfolioRiskPolicy (#49) and PerformanceObjectiveSchedule (#51) without merging their different definitions, scopes or aggregate-specific validation.
The difficult temporal invariants are proven without EF Core, SQL Server, Azure or API concerns.
Acceptance criteria
RevisionTimelinecomponent inTradingEngine.DomainInstant[EffectiveFrom, EffectiveTo)IClockin the Application layer and pass theInstantexplicitly to the DomainInstantClarifications
rowversionremain distinct concepts.Out of scope