diff --git a/.gitignore b/.gitignore
index 31c7257..b299ff1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
.tasks/
.agile/
+**/bin/
+**/obj/
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000..18483ff
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,10 @@
+
+
+ AgileWebs
+ AgileWebs
+ git
+ http://192.168.68.156:3000/AgileWebs/operations-domain
+ http://192.168.68.156:3000/AgileWebs/operations-domain
+ false
+
+
diff --git a/Operations.Domain.slnx b/Operations.Domain.slnx
new file mode 100644
index 0000000..0bcb20e
--- /dev/null
+++ b/Operations.Domain.slnx
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/Operations.Domain/Conventions/OperationsDomainPackageContract.cs b/src/Operations.Domain/Conventions/OperationsDomainPackageContract.cs
new file mode 100644
index 0000000..6123800
--- /dev/null
+++ b/src/Operations.Domain/Conventions/OperationsDomainPackageContract.cs
@@ -0,0 +1,3 @@
+namespace Operations.Domain.Conventions;
+
+public interface IOperationsDomainPackageContract;
diff --git a/src/Operations.Domain/Decisions/IOperationsPolicyResolutionService.cs b/src/Operations.Domain/Decisions/IOperationsPolicyResolutionService.cs
new file mode 100644
index 0000000..d973a87
--- /dev/null
+++ b/src/Operations.Domain/Decisions/IOperationsPolicyResolutionService.cs
@@ -0,0 +1,11 @@
+using Operations.Domain.Models;
+
+namespace Operations.Domain.Decisions;
+
+public interface IOperationsPolicyResolutionService
+{
+ ResolvedPolicyDecision ResolvePolicy(
+ string policyName,
+ IReadOnlyDictionary facts,
+ IReadOnlyDictionary featureFlags);
+}
diff --git a/src/Operations.Domain/Decisions/OperationsPolicyResolutionService.cs b/src/Operations.Domain/Decisions/OperationsPolicyResolutionService.cs
new file mode 100644
index 0000000..b6b1277
--- /dev/null
+++ b/src/Operations.Domain/Decisions/OperationsPolicyResolutionService.cs
@@ -0,0 +1,19 @@
+using Operations.Domain.Models;
+
+namespace Operations.Domain.Decisions;
+
+public sealed class OperationsPolicyResolutionService : IOperationsPolicyResolutionService
+{
+ public ResolvedPolicyDecision ResolvePolicy(
+ string policyName,
+ IReadOnlyDictionary facts,
+ IReadOnlyDictionary featureFlags)
+ {
+ if (featureFlags.TryGetValue($"policy:{policyName}:disabled", out var disabled) && disabled)
+ {
+ return new ResolvedPolicyDecision(false, "Policy disabled by feature flag.");
+ }
+
+ return new ResolvedPolicyDecision(true, "Policy allowed by default resolution.");
+ }
+}
diff --git a/src/Operations.Domain/Models/ResolvedPolicyDecision.cs b/src/Operations.Domain/Models/ResolvedPolicyDecision.cs
new file mode 100644
index 0000000..8ee111f
--- /dev/null
+++ b/src/Operations.Domain/Models/ResolvedPolicyDecision.cs
@@ -0,0 +1,3 @@
+namespace Operations.Domain.Models;
+
+public sealed record ResolvedPolicyDecision(bool Allowed, string Explanation);
diff --git a/src/Operations.Domain/Operations.Domain.csproj b/src/Operations.Domain/Operations.Domain.csproj
new file mode 100644
index 0000000..b760144
--- /dev/null
+++ b/src/Operations.Domain/Operations.Domain.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net10.0
+ enable
+ enable
+
+
+