* Add state machine activity * address greptile state machine feedback * address state machine trigger cancellation feedback
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/andtest/unit/Elsa.Activities.UnitTests/
Phase 2: Foundational (Blocking Prerequisites)
Purpose: Add the activity model types used by all stories.
- T002 [P] Create
StateMachineStatemodel insrc/modules/Elsa.Workflows.Core/Activities/StateMachine/Models/StateMachineState.cs - T003 [P] Create
Transitionmodel insrc/modules/Elsa.Workflows.Core/Activities/StateMachine/Models/Transition.cs - T004 Create
StateMachineactivity skeleton insrc/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.