Files
cleveragents-core/features/phase_reversion.feature

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