diff --git a/Directory.Build.props b/Directory.Build.props index 0643bf6..f3a7b9e 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -3,8 +3,8 @@ AgileWebs AgileWebs git - http://192.168.10.100:3000/AgileWebs/operations-domain - http://192.168.10.100:3000/AgileWebs/operations-domain + https://gitea.dream-views.com/AgileWebs/operations-domain + https://gitea.dream-views.com/AgileWebs/operations-domain false diff --git a/docs/architecture/control-plane-responsibilities.md b/docs/architecture/control-plane-responsibilities.md new file mode 100644 index 0000000..b864e3b --- /dev/null +++ b/docs/architecture/control-plane-responsibilities.md @@ -0,0 +1,13 @@ +# Operations Domain Responsibilities + +Operations is the restaurant control plane. + +## Owns +- Policy resolution and precedence decisions. +- Feature flag and rollout decisions. +- Service-window and operational override decisions. + +## Does Not Own +- Kitchen order execution state transitions. +- POS transaction finalization workflows. +- BFF edge adaptation logic. diff --git a/docs/roadmap/feature-epics.md b/docs/roadmap/feature-epics.md new file mode 100644 index 0000000..d42d564 --- /dev/null +++ b/docs/roadmap/feature-epics.md @@ -0,0 +1,18 @@ +# Feature Epics + +## Repository +operations-domain + +## Core Epics +- Epic 1: Expand domain-aligned capabilities for restaurant operations. +- Epic 2: Stabilize service contracts for containerized runtime integration. +- Epic 3: Improve observability and operational readiness for demo compose environments. + +## Domain-Specific Candidate Features +- Order lifecycle consistency and state transitions. +- Kitchen queue and dispatch optimization hooks. +- Operations control-plane policies (flags, service windows, overrides). +- POS closeout and settlement summary alignment. + +## Documentation Contract +Any code change in this repository must include docs updates in the same branch. diff --git a/src/Operations.Domain/Decisions/IOperationsControlPlaneService.cs b/src/Operations.Domain/Decisions/IOperationsControlPlaneService.cs new file mode 100644 index 0000000..4a82a28 --- /dev/null +++ b/src/Operations.Domain/Decisions/IOperationsControlPlaneService.cs @@ -0,0 +1,12 @@ +using Operations.Domain.Models; + +namespace Operations.Domain.Decisions; + +public interface IOperationsControlPlaneService +{ + OperationalControlPlaneDecision Evaluate( + string locationId, + DateTime nowUtc, + IReadOnlyDictionary featureFlags, + IReadOnlyCollection overrides); +} diff --git a/src/Operations.Domain/Decisions/OperationsControlPlaneService.cs b/src/Operations.Domain/Decisions/OperationsControlPlaneService.cs new file mode 100644 index 0000000..f03157c --- /dev/null +++ b/src/Operations.Domain/Decisions/OperationsControlPlaneService.cs @@ -0,0 +1,22 @@ +using Operations.Domain.Models; + +namespace Operations.Domain.Decisions; + +public sealed class OperationsControlPlaneService : IOperationsControlPlaneService +{ + public OperationalControlPlaneDecision Evaluate( + string locationId, + DateTime nowUtc, + IReadOnlyDictionary featureFlags, + IReadOnlyCollection overrides) + { + var open = featureFlags.TryGetValue($"location:{locationId}:open", out var isOpen) ? isOpen : true; + var enabled = featureFlags.TryGetValue($"location:{locationId}:enabled", out var isEnabled) ? isEnabled : true; + + var explanation = open && enabled + ? "Control-plane allows operations for the location." + : "Control-plane disabled operations for the location."; + + return new OperationalControlPlaneDecision(open, enabled, overrides, explanation); + } +} diff --git a/src/Operations.Domain/Models/OperationalControlPlaneDecision.cs b/src/Operations.Domain/Models/OperationalControlPlaneDecision.cs new file mode 100644 index 0000000..33b2976 --- /dev/null +++ b/src/Operations.Domain/Models/OperationalControlPlaneDecision.cs @@ -0,0 +1,7 @@ +namespace Operations.Domain.Models; + +public sealed record OperationalControlPlaneDecision( + bool IsServiceWindowOpen, + bool IsFeatureEnabled, + IReadOnlyCollection AppliedOverrides, + string Explanation);