Feature: Plan explain and decision tree CLI commands Validates the plan explain and plan tree commands including formatting, filtering, and flag-controlled detail views. # ------------------------------------------------------------------ # plan explain - default format # ------------------------------------------------------------------ Scenario: Explain a decision with default format Given a test decision for explain When I build the explain dict with default options Then the explain dict should contain key "decision_id" And the explain dict should contain key "question" And the explain dict should contain key "chosen" And the explain dict should contain key "type" And the explain dict should contain key "alternatives" And the explain dict should not contain key "rationale" And the explain dict should not contain key "context_snapshot" # ------------------------------------------------------------------ # plan explain - show-context # ------------------------------------------------------------------ Scenario: Explain with show-context flag Given a test decision with context snapshot for explain When I build the explain dict with show-context enabled Then the explain dict should contain key "context_snapshot" And the context snapshot should contain key "hot_context_hash" And the context snapshot should contain key "relevant_resources" # ------------------------------------------------------------------ # plan explain - show-reasoning # ------------------------------------------------------------------ Scenario: Explain with show-reasoning flag Given a test decision with reasoning for explain When I build the explain dict with show-reasoning enabled Then the explain dict should contain key "rationale" And the explain dict should contain key "actor_reasoning" # ------------------------------------------------------------------ # plan explain - alternatives always included # ------------------------------------------------------------------ Scenario: Explain includes alternatives by default Given a test decision with alternatives for explain When I build the explain dict with default options Then the explain dict should contain key "alternatives" And the alternatives list should have 2 items And each alternative should have keys "index", "description", and "chosen" And exactly one alternative should have chosen set to true # ------------------------------------------------------------------ # plan explain - json format # ------------------------------------------------------------------ Scenario: Explain with json format Given a test decision for explain When I format the explain dict as json Then the json output should contain "decision_id" And the plan explain json output should be valid # ------------------------------------------------------------------ # plan explain - yaml format # ------------------------------------------------------------------ Scenario: Explain with yaml format Given a test decision for explain When I format the explain dict as yaml Then the yaml output should contain "decision_id" # ------------------------------------------------------------------ # plan explain - non-existent decision # ------------------------------------------------------------------ Scenario: Explain for non-existent decision returns error marker Given a non-existent decision id Then the explain lookup should indicate not found # ------------------------------------------------------------------ # plan tree - default format # ------------------------------------------------------------------ Scenario: Tree with default format builds tree structure Given a set of test decisions forming a tree When I build the decision tree with default options Then the tree should have at least 1 root node And the first root node should have children # ------------------------------------------------------------------ # plan tree - show-superseded # ------------------------------------------------------------------ Scenario: Tree with show-superseded includes superseded decisions Given a set of test decisions with superseded entries When I build the decision tree with show-superseded enabled Then the tree should include superseded decision nodes # ------------------------------------------------------------------ # plan tree - depth limit # ------------------------------------------------------------------ Scenario: Tree with depth limit restricts tree depth Given a set of test decisions forming a deep tree When I build the decision tree with depth 1 Then the root nodes should have no children # ------------------------------------------------------------------ # plan tree - json format # ------------------------------------------------------------------ @tdd_issue @tdd_issue_4254 Scenario: Tree with json format Given a set of test decisions forming a tree When I format the tree as json Then the json tree output should be a valid json envelope And the json tree output should contain "command" # ------------------------------------------------------------------ # plan tree - yaml format # ------------------------------------------------------------------ Scenario: Tree with yaml format Given a set of test decisions forming a tree When I format the tree as yaml Then the yaml tree output should contain "decision_id" # ------------------------------------------------------------------ # plan tree - no decisions # ------------------------------------------------------------------ Scenario: Tree for plan with no decisions Given an empty list of decisions When I build the decision tree with default options from empty list Then the tree should be empty # ------------------------------------------------------------------ # plan tree - filters superseded by default # ------------------------------------------------------------------ Scenario: Tree filters out superseded decisions by default Given a set of test decisions with superseded entries When I build the decision tree with default options Then the tree should not include superseded decision nodes # ------------------------------------------------------------------ # plan tree - per-type ordinals in decision labels # ------------------------------------------------------------------ Scenario: Decision labels use per-type ordinals Given a set of test decisions with multiple types for ordinal testing When I generate decision labels with per-type ordinals Then the first invariant should be labeled "Invariant 1" And the second invariant should be labeled "Invariant 2" And the first strategy should be labeled "Strategy" And the first parallel should be labeled "Parallel 1" Scenario: Decision labels restart counting per decision type Given a set of test decisions with mixed types When I generate decision labels with per-type ordinals Then each decision type should start counting from 1 And invariants should have sequential numbers And parallel spawns should have sequential numbers And spawn decisions should have sequential numbers Scenario: Full tree output includes per-type ordinal labels Given a set of test decisions forming a tree with multiple types When I build the plain format tree output with decision labels Then the decision tree output should contain "Invariant 1" And the decision tree output should contain "Invariant 2" And the decision tree output should contain "Strategy" And the decision tree output should not contain "Invariant 6" And the decision tree output should not contain "Strategy 7"