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/BuildingBlock.Workflow.slnx b/BuildingBlock.Workflow.slnx
new file mode 100644
index 0000000..2c9e3c2
--- /dev/null
+++ b/BuildingBlock.Workflow.slnx
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000..17cbfc6
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,10 @@
+
+
+ AgileWebs
+ AgileWebs
+ git
+ http://192.168.68.156:3000/AgileWebs/building-block-workflow
+ http://192.168.68.156:3000/AgileWebs/building-block-workflow
+ false
+
+
diff --git a/src/BuildingBlock.Workflow.Contracts/Abstractions/IWorkflowCapabilityContract.cs b/src/BuildingBlock.Workflow.Contracts/Abstractions/IWorkflowCapabilityContract.cs
new file mode 100644
index 0000000..55189c0
--- /dev/null
+++ b/src/BuildingBlock.Workflow.Contracts/Abstractions/IWorkflowCapabilityContract.cs
@@ -0,0 +1,11 @@
+using BuildingBlock.Workflow.Contracts.Requests;
+using BuildingBlock.Workflow.Contracts.Responses;
+
+namespace BuildingBlock.Workflow.Contracts.Abstractions;
+
+public interface IWorkflowCapabilityContract
+{
+ Task TransitionWorkflowStateAsync(
+ TransitionWorkflowStateRequest request,
+ CancellationToken cancellationToken);
+}
diff --git a/src/BuildingBlock.Workflow.Contracts/BuildingBlock.Workflow.Contracts.csproj b/src/BuildingBlock.Workflow.Contracts/BuildingBlock.Workflow.Contracts.csproj
new file mode 100644
index 0000000..b760144
--- /dev/null
+++ b/src/BuildingBlock.Workflow.Contracts/BuildingBlock.Workflow.Contracts.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net10.0
+ enable
+ enable
+
+
+
diff --git a/src/BuildingBlock.Workflow.Contracts/Contracts/WorkflowState.cs b/src/BuildingBlock.Workflow.Contracts/Contracts/WorkflowState.cs
new file mode 100644
index 0000000..10fba30
--- /dev/null
+++ b/src/BuildingBlock.Workflow.Contracts/Contracts/WorkflowState.cs
@@ -0,0 +1,11 @@
+namespace BuildingBlock.Workflow.Contracts.Contracts;
+
+public enum WorkflowState
+{
+ Queued = 0,
+ InProgress = 1,
+ Blocked = 2,
+ Completed = 3,
+ Failed = 4,
+ Canceled = 5
+}
diff --git a/src/BuildingBlock.Workflow.Contracts/Contracts/WorkflowWorkItemContract.cs b/src/BuildingBlock.Workflow.Contracts/Contracts/WorkflowWorkItemContract.cs
new file mode 100644
index 0000000..08f15dd
--- /dev/null
+++ b/src/BuildingBlock.Workflow.Contracts/Contracts/WorkflowWorkItemContract.cs
@@ -0,0 +1,8 @@
+namespace BuildingBlock.Workflow.Contracts.Contracts;
+
+public sealed record WorkflowWorkItemContract(
+ string WorkItemId,
+ string WorkType,
+ int Priority,
+ DateTime RequestedAtUtc,
+ WorkflowState CurrentState);
diff --git a/src/BuildingBlock.Workflow.Contracts/Requests/TransitionWorkflowStateRequest.cs b/src/BuildingBlock.Workflow.Contracts/Requests/TransitionWorkflowStateRequest.cs
new file mode 100644
index 0000000..b6dadbe
--- /dev/null
+++ b/src/BuildingBlock.Workflow.Contracts/Requests/TransitionWorkflowStateRequest.cs
@@ -0,0 +1,9 @@
+using BuildingBlock.Workflow.Contracts.Contracts;
+
+namespace BuildingBlock.Workflow.Contracts.Requests;
+
+public sealed record TransitionWorkflowStateRequest(
+ string WorkItemId,
+ WorkflowState TargetState,
+ string RequestedBy,
+ DateTime RequestedAtUtc);
diff --git a/src/BuildingBlock.Workflow.Contracts/Responses/TransitionWorkflowStateResponse.cs b/src/BuildingBlock.Workflow.Contracts/Responses/TransitionWorkflowStateResponse.cs
new file mode 100644
index 0000000..146635f
--- /dev/null
+++ b/src/BuildingBlock.Workflow.Contracts/Responses/TransitionWorkflowStateResponse.cs
@@ -0,0 +1,10 @@
+using BuildingBlock.Workflow.Contracts.Contracts;
+
+namespace BuildingBlock.Workflow.Contracts.Responses;
+
+public sealed record TransitionWorkflowStateResponse(
+ string WorkItemId,
+ WorkflowState PreviousState,
+ WorkflowState CurrentState,
+ bool TransitionApplied,
+ string? RejectionReason);