111 lines
5.3 KiB
Gherkin
111 lines
5.3 KiB
Gherkin
Feature: Phase Reversion State Machine
|
|
As a plan lifecycle manager
|
|
I want to revert plans to earlier phases
|
|
So that plans can be re-strategized when constraints prove unworkable
|
|
|
|
Background:
|
|
Given a plan lifecycle service is initialized
|
|
|
|
Scenario: Auto-reversion from constrained Apply to Strategize
|
|
Given an action "local/test-action" exists
|
|
And a plan is created from action "local/test-action"
|
|
And the plan is advanced to Apply phase with constrained state
|
|
And the plan has automation profile "ci" allowing auto-reversion
|
|
When auto-reversion from apply is attempted with reason "constraints too strict"
|
|
Then the plan should be in Strategize phase
|
|
And the plan processing state should be queued
|
|
And the plan reversion count should be 1
|
|
And a reversion decision should be recorded with source "apply" and target "strategize"
|
|
|
|
Scenario: Manual reversion via revert_plan method
|
|
Given an action "local/manual-revert" exists
|
|
And a plan is created from action "local/manual-revert"
|
|
And the plan is advanced to Execute phase
|
|
When the plan is manually reverted to Strategize with reason "need different strategy"
|
|
Then the plan should be in Strategize phase
|
|
And the plan processing state should be queued
|
|
And the plan reversion count should be 1
|
|
And a reversion decision should be recorded with reason "need different strategy"
|
|
|
|
Scenario: Loop guard prevents more than 3 reversions
|
|
Given an action "local/loop-guard" exists
|
|
And a plan is created from action "local/loop-guard"
|
|
And the plan has been reverted 3 times
|
|
When a reversion is attempted on the maxed-out plan
|
|
Then a PlanError should be raised about max reversions
|
|
|
|
Scenario: Auto-reversion blocked by manual profile threshold
|
|
Given an action "local/profile-gate" exists
|
|
And a plan is created from action "local/profile-gate"
|
|
And the plan is advanced to Apply phase with constrained state
|
|
And the plan has automation profile "manual" blocking auto-reversion
|
|
When auto-reversion from apply is attempted with reason "profile blocks it"
|
|
Then the plan should remain in Apply phase
|
|
And the plan processing state should be constrained
|
|
|
|
Scenario: Auto-reversion from Execute to Strategize
|
|
Given an action "local/exec-revert" exists
|
|
And a plan is created from action "local/exec-revert"
|
|
And the plan is advanced to Execute phase
|
|
And the plan has automation profile "ci" allowing auto-reversion
|
|
When auto-reversion from execute is attempted with reason "validation failures"
|
|
Then the plan should be in Strategize phase
|
|
And the plan processing state should be queued
|
|
And the plan reversion count should be 1
|
|
|
|
Scenario: Invalid reversion on terminal plan (applied)
|
|
Given an action "local/terminal-plan" exists
|
|
And a plan is created from action "local/terminal-plan"
|
|
And the plan has reached applied terminal state
|
|
When a reversion is attempted on the terminal plan
|
|
Then a PlanError should be raised about terminal state
|
|
|
|
Scenario: Invalid reversion to wrong phase
|
|
Given an action "local/wrong-phase" exists
|
|
And a plan is created from action "local/wrong-phase"
|
|
And the plan is in Strategize phase
|
|
When a reversion to Apply phase is attempted
|
|
Then an InvalidPhaseTransitionError should be raised
|
|
|
|
Scenario: Reversion preserves plan context
|
|
Given an action "local/context-preserve" exists
|
|
And a plan is created from action "local/context-preserve" with arguments
|
|
And the plan is advanced to Execute phase
|
|
When the plan is manually reverted to Strategize with reason "context check"
|
|
Then the plan arguments should be preserved
|
|
And the plan project links should be preserved
|
|
And the plan invariants should be preserved
|
|
|
|
Scenario: Multiple reversions tracked in decisions list
|
|
Given an action "local/multi-revert" exists
|
|
And a plan is created from action "local/multi-revert"
|
|
And the plan is advanced to Execute phase
|
|
When the plan is manually reverted to Strategize with reason "first reversion"
|
|
And the plan is re-advanced to Execute phase
|
|
And the plan is manually reverted to Strategize with reason "second reversion"
|
|
Then the plan reversion count should be 2
|
|
And there should be 2 reversion decisions recorded
|
|
|
|
Scenario: can_revert_to validates reversion paths
|
|
Given an action "local/revert-validation" exists
|
|
And a plan is created from action "local/revert-validation"
|
|
Then the plan in Strategize phase cannot revert to Apply
|
|
And the plan in Strategize phase cannot revert to Action
|
|
And the plan in Execute phase can revert to Strategize
|
|
And the plan in Apply phase can revert to Strategize
|
|
|
|
Scenario: Auto-reversion from Execute blocked by profile threshold
|
|
Given an action "local/exec-blocked" exists
|
|
And a plan is created from action "local/exec-blocked"
|
|
And the plan is advanced to Execute phase
|
|
And the plan has automation profile "manual" blocking auto-reversion
|
|
When auto-reversion from execute is attempted with reason "blocked by profile"
|
|
Then the plan should remain in Execute phase
|
|
|
|
Scenario: Cancelled plan cannot be reverted
|
|
Given an action "local/cancelled-plan" exists
|
|
And a plan is created from action "local/cancelled-plan"
|
|
And the plan has been cancelled
|
|
When a reversion is attempted on the cancelled plan
|
|
Then a PlanError should be raised about terminal state
|