elsa-core/specs/006-state-machine-activity/tasks.md
Sipke Schoorstra 6485f05a87
Add state machine activity (#7457)
* Add state machine activity

* address greptile state machine feedback

* address state machine trigger cancellation feedback
2026-05-18 02:09:03 +02:00

4.4 KiB

Tasks: State Machine Activity

Input: Design documents from /specs/006-state-machine-activity/ Prerequisites: plan.md, spec.md, research.md, data-model.md, contracts/

Tests: Required by FR-014.

Phase 1: Setup (Shared Infrastructure)

Purpose: No project setup needed; reuse existing workflow core and activity unit test projects.

  • T001 Confirm existing activity and test project structure in src/modules/Elsa.Workflows.Core/Activities/ and test/unit/Elsa.Activities.UnitTests/

Phase 2: Foundational (Blocking Prerequisites)

Purpose: Add the activity model types used by all stories.

  • T002 [P] Create StateMachineState model in src/modules/Elsa.Workflows.Core/Activities/StateMachine/Models/StateMachineState.cs
  • T003 [P] Create Transition model in src/modules/Elsa.Workflows.Core/Activities/StateMachine/Models/Transition.cs
  • T004 Create StateMachine activity skeleton in src/modules/Elsa.Workflows.Core/Activities/StateMachine/Activities/StateMachine.cs

Phase 3: User Story 1 - Run a State Through Entry and Triggers (Priority: P1) MVP

Goal: Initial state entry runs before outbound transition triggers and the machine stays running.

Independent Test: Execute a two-state machine and inspect scheduled activities and current state.

Tests for User Story 1

  • T005 [P] [US1] Add tests for initial state entry and outbound trigger scheduling in test/unit/Elsa.Activities.UnitTests/StateMachine/StateMachineTests.cs

Implementation for User Story 1

  • T006 [US1] Implement initial state resolution, entry scheduling, and outbound trigger scheduling in src/modules/Elsa.Workflows.Core/Activities/StateMachine/Activities/StateMachine.cs

Phase 4: User Story 2 - Complete a Winning Transition (Priority: P2)

Goal: A true transition condition runs action, source exit, target entry, updates current state, and schedules target triggers.

Independent Test: Invoke completion callbacks for trigger/action/exit/entry and verify the state path.

Tests for User Story 2

  • T007 [P] [US2] Add tests for true conditions, missing conditions, false conditions, and empty slots in test/unit/Elsa.Activities.UnitTests/StateMachine/StateMachineTests.cs

Implementation for User Story 2

  • T008 [US2] Implement transition condition evaluation and action/exit/entry progression in src/modules/Elsa.Workflows.Core/Activities/StateMachine/Activities/StateMachine.cs

Phase 5: User Story 3 - Cancel Competing Triggers (Priority: P3)

Goal: Accepted transitions cancel competing outbound trigger contexts.

Independent Test: Execute a state with two triggers, accept one trigger, and verify the losing trigger context is canceled.

Tests for User Story 3

  • T009 [P] [US3] Add competing trigger cancellation test in test/unit/Elsa.Activities.UnitTests/StateMachine/StateMachineTests.cs

Implementation for User Story 3

  • T010 [US3] Implement competing trigger tracking and cancellation in src/modules/Elsa.Workflows.Core/Activities/StateMachine/Activities/StateMachine.cs

Phase 6: Polish & Cross-Cutting Concerns

  • T011 Run dotnet test test/unit/Elsa.Activities.UnitTests/Elsa.Activities.UnitTests.csproj
  • T012 Update task checkboxes in specs/006-state-machine-activity/tasks.md
  • T013 [P] Update Spec Kit artifacts for terminal-state clarification in specs/006-state-machine-activity/
  • T014 [P] Update Spec Kit artifacts for false-condition trigger re-arm clarification in specs/006-state-machine-activity/
  • T015 [P] Add false-condition trigger re-arm assertion in test/unit/Elsa.Activities.UnitTests/StateMachine/StateMachineTests.cs
  • T016 Implement false-condition trigger re-arm behavior in src/modules/Elsa.Workflows.Core/Activities/StateMachine/Activities/StateMachine.cs

Dependencies & Execution Order

  • Phase 1 before all implementation.
  • Phase 2 before user stories.
  • User Story 1 before User Story 2.
  • User Story 2 before User Story 3.
  • Polish after all desired user stories.

Parallel Opportunities

  • T002 and T003 can run in parallel.
  • Test additions are in one file and should be coordinated if worked in parallel.

Implementation Strategy

Complete the backend MVP first: model types, initial entry, outbound trigger scheduling, transition progression, and cancellation semantics. Validate with focused unit tests.