Feature: Influence DAG traversal in correction affected subtree The affected subtree computation must traverse BOTH the structural tree (parent-child) AND the influence DAG (decision_dependencies) edges so that corrections cascade through influence relationships. # ================================================================ # Structural-only (existing behaviour preserved) # ================================================================ Scenario: Structural-only subtree with no influence edges Given an influence-aware correction service And a correction request targeting decision "D1" in plan "P1" for revert And a structural tree where "D1" has children "D2,D3" and "D2" has children "D4" And no influence edges When I analyze the impact with influence support Then the affected decision set should be "D1,D2,D3,D4" Scenario: Structural-only single node Given an influence-aware correction service And a correction request targeting decision "D1" in plan "P1" for revert And a structural tree with no children for "D1" And no influence edges When I analyze the impact with influence support Then the affected decision set should be "D1" # ================================================================ # Influence-only (new behaviour) # ================================================================ Scenario: Influence-only affected subtree finds linked decisions Given an influence-aware correction service And a correction request targeting decision "D1" in plan "P1" for revert And a structural tree with no children for "D1" And influence edges where "D1" influences "D5,D6" and "D5" influences "D7" When I analyze the impact with influence support Then the affected decision set should be "D1,D5,D6,D7" Scenario: Influence-only with no structural children Given an influence-aware correction service And a correction request targeting decision "DX" in plan "P1" for revert And a structural tree with no children for "DX" And influence edges where "DX" influences "DY" When I analyze the impact with influence support Then the affected decision set should be "DX,DY" # ================================================================ # Combined structural + influence (union) # ================================================================ Scenario: Combined structural and influence subtree is the union Given an influence-aware correction service And a correction request targeting decision "D1" in plan "P1" for revert And a structural tree where "D1" has children "D2,D3" And influence edges where "D1" influences "D4" and "D3" influences "D5" When I analyze the impact with influence support Then the affected decision set should be "D1,D2,D3,D4,D5" Scenario: Overlapping structural and influence edges deduplicate Given an influence-aware correction service And a correction request targeting decision "D1" in plan "P1" for revert And a structural tree where "D1" has children "D2" And influence edges where "D1" influences "D2" When I analyze the impact with influence support Then the affected decision set should be "D1,D2" # ================================================================ # Cycle detection (corrupt data) # ================================================================ Scenario: Cycle in influence DAG is handled gracefully Given an influence-aware correction service And a correction request targeting decision "D1" in plan "P1" for revert And a structural tree with no children for "D1" And influence edges with a cycle "D1" to "D2" to "D3" back to "D1" When I analyze the impact with influence support Then the affected decision set should be "D1,D2,D3" And no infinite loop occurred Scenario: Self-loop in influence DAG is handled gracefully Given an influence-aware correction service And a correction request targeting decision "D1" in plan "P1" for revert And a structural tree with no children for "D1" And influence edges where "D1" influences "D1" When I analyze the impact with influence support Then the affected decision set should be "D1" # ================================================================ # Decision creation populates decision_dependencies # ================================================================ Scenario: Decision creation records influence dependencies Given a decision service for influence tracking When I record a root decision "strategy_choice" for the tracked plan And I record a child decision "implementation_choice" depending on the root decision Then the influence edges for the tracked plan should link the root to the child Scenario: Decision creation without dependencies records no edges Given a decision service for influence tracking When I record a root decision "strategy_choice" for the tracked plan Then the influence edges for the tracked plan should be empty # ================================================================ # Revert execution with influence edges # ================================================================ Scenario: Revert with influence edges invalidates all affected Given an influence-aware correction service And a correction request targeting decision "D1" in plan "P1" for revert And a structural tree where "D1" has children "D2" And influence edges where "D1" influences "D3" When I execute the revert with influence support Then the reverted decisions should include "D1" And the reverted decisions should include "D2" And the reverted decisions should include "D3"