This example shows how to compose multiple governance policies into reusable sets.
It is the sample to read when you want to see AllOf, AnyOf, and priority-based composition
without pushing the rules into one large handwritten policy class.
The sample uses a simple release gate model:
- a release has a name, stage, and owner
- policy metadata carries approvals, environment, and emergency flags
- composed policies decide whether the release stays blocked, becomes approved, or gets an emergency path
- reusable composed policy sets
- explicit merge rules for severity, requirements, side effects, and metadata
AllOf,AnyOf, and priority-based composition- deterministic conflict handling when two policies modify the same value
Program.csPolicyComposition.csprojState/ReleaseGateState.csMutations/SubmitReleaseMutation.csPolicies/ReleaseGovernancePolicies.csPolicies/Approval/RequireApprovalsPolicy.csPolicies/Approval/AddAuditTrailPolicy.csPolicies/Emergency/EmergencyOverridePolicy.csPolicies/Emergency/ApprovalFallbackPolicy.csPolicies/Deployment/ProductionGuardPolicy.csPolicies/Deployment/DefaultDeploymentPolicy.csPolicies/Shared/SetOwnerPolicy.csScenarios/AllOfScenario.csScenarios/AnyOfScenario.csScenarios/PriorityScenario.csScenarios/ConflictScenario.cs
dotnet run --project Examples/Core/PolicyComposition/PolicyComposition.csprojYou should see:
- an
AllOfrelease gate that merges state updates, metadata, and audit side effects - an
AnyOfgate that selects the first allowed branch - a priority-based gate that prefers the first decisive policy
- a conflict example that raises
PolicyCompositionConflictException