Feature: Actor CLI coverage
  As a developer
  I want actor CLI commands covered
  So that actor management paths stay stable

  Scenario: Add actor fails without config
    Given an actor CLI runner
    When I run actor add without config
    Then the actor command should fail with bad parameter

  @tdd_issue @tdd_issue_4232 @tdd_expected_fail
  Scenario: Add actor with JSON config file
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor add with that config
    Then the actor add should pass the loaded config

  Scenario: Add actor requires unsafe confirmation when config is marked unsafe
    Given an actor CLI runner
    And I have an unsafe actor JSON config file
    When I run actor add with that config
    Then the actor command should fail with bad parameter

  @tdd_issue @tdd_issue_4232 @tdd_expected_fail
  Scenario: Add actor allows unsafe config when flag is provided
    Given an actor CLI runner
    And I have an unsafe actor JSON config file
    When I run actor add with that config and unsafe flag
    Then the actor add should pass the loaded config

  Scenario: Add actor fails when config is missing
    Given an actor CLI runner
    When I run actor add with missing config path
    Then the actor command should fail with bad parameter

  Scenario: Add actor rejects non-dictionary config input
    Given an actor CLI runner
    And I have an actor list config file
    When I run actor add with that config
    Then the actor command should fail with bad parameter

  @tdd_issue @tdd_issue_4232 @tdd_expected_fail
  Scenario: Add actor falls back to YAML-only config
    Given an actor CLI runner
    And I have an actor YAML-only config file
    When I run actor add with that config
    Then the actor add should pass the loaded config

  @tdd_issue @tdd_issue_4232 @tdd_expected_fail
  Scenario: Add actor uses service path with graph descriptor
    Given an actor CLI runner
    And I have an actor graph config file
    When I run actor add via service with that config
    Then the service actor add should include graph descriptor

  @tdd_issue @tdd_issue_4232 @tdd_expected_fail
  Scenario: Add actor merges CLI options into config blob
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor add with that config and options overrides
    Then the actor add should pass the loaded config

  Scenario: Add actor rejects empty config file
    Given an actor CLI runner
    And I have an empty actor YAML config file
    When I run actor add with that config
    Then the actor command should fail with bad parameter

  @tdd_issue @tdd_issue_4232 @tdd_expected_fail
  Scenario: Add actor aborts on business rule violation
    Given an actor CLI runner
    When I run actor add with business rule violation
    Then the actor command should abort with error

  Scenario: Add actor rejects unsafe service config without confirmation
    Given an actor CLI runner
    And I have an unsafe actor JSON config file
    When I run actor add via service without unsafe flag
    Then the actor command should fail with bad parameter
    And the actor service should not be called

  Scenario: Update actor from YAML config and safe flag
    Given an actor CLI runner
    And I have an actor YAML config file returning empty data
    When I run actor update with safe flag and yaml config
    Then the actor update should set safe and merge config

  Scenario: Update actor toggles unsafe flag
    Given an actor CLI runner
    When I run actor update with unsafe flag
    Then the actor update should set unsafe flag

  Scenario: Update actor aborts on validation error
    Given an actor CLI runner
    When I run actor update with validation error
    Then the actor command should abort with error

  Scenario: Update actor aborts when not found
    Given an actor CLI runner
    When I run actor update for missing actor
    Then the actor command should abort for missing actor

  Scenario: Update actor rejects conflicting safety flags
    Given an actor CLI runner
    When I run actor update with conflicting flags
    Then the actor command should fail with bad parameter

  Scenario: Update actor requires unsafe confirmation when requested
    Given an actor CLI runner
    When I run actor update requiring unsafe confirmation
    Then the actor command should fail with bad parameter

  Scenario: Update actor rejects unsafe service config without confirmation
    Given an actor CLI runner
    And I have an unsafe actor JSON config file
    When I run actor update via service without unsafe flag
    Then the actor command should abort with error
    And the actor service should not be called

  Scenario: Remove actor succeeds
    Given an actor CLI runner
    When I run actor remove successfully
    Then the actor remove should succeed

  Scenario: Remove actor aborts on validation error
    Given an actor CLI runner
    When I run actor remove and it fails validation
    Then the actor command should abort with error

  Scenario: List actors when none exist
    Given an actor CLI runner
    When I run actor list with no actors
    Then the actor list should report empty state

  Scenario: List actors with entries
    Given an actor CLI runner
    When I run actor list with two actors
    Then the actor list should render rows

  Scenario: Show actor displays details
    Given an actor CLI runner
    When I run actor show successfully
    Then the actor show should display details

  Scenario: Show actor aborts on validation error
    Given an actor CLI runner
    When I run actor show with validation error
    Then the actor command should abort with error

  Scenario: Set default actor succeeds
    Given an actor CLI runner
    When I run set-default actor successfully
    Then the set default actor should display details

  Scenario: Set default actor aborts on business rule violation
    Given an actor CLI runner
    When I run set-default actor with violation
    Then the actor command should abort with error

  @tdd_issue @tdd_issue_4232 @tdd_expected_fail
  Scenario: Add actor merges options and parses boolean override
    Given an actor CLI runner
    And I have an actor JSON config file with options
    When I run actor add with boolean option override
    Then the actor add should pass the loaded config

  Scenario: Add actor rejects option without separator
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor add with malformed option
    Then the actor command should fail with bad parameter

  Scenario: Add actor rejects empty option key
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor add with empty option key
    Then the actor command should fail with bad parameter

  @tdd_issue @tdd_issue_4232 @tdd_expected_fail
  Scenario: Add actor via service rejects unsafe canonical config
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor add via service with unsafe canonical blob
    Then the actor command should abort with error

  Scenario: Update actor includes option overrides in registry call
    Given an actor CLI runner
    When I run actor update with option overrides
    Then the actor update should include option overrides

  Scenario: Update actor parses uppercase boolean option override
    Given an actor CLI runner
    When I run actor update with uppercase boolean option override
    Then the actor update should include option overrides

  Scenario: Update actor via service rejects unsafe canonical config
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor update via service with unsafe canonical blob
    Then the actor command should abort with error

  Scenario: Update actor via service succeeds with safe config
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor update via service with safe config
    Then the actor service update should succeed

  Scenario: Remove actor falls back to service path
    Given an actor CLI runner
    When I run actor remove via service path
    Then the actor service remove should be called

  @tdd_issue @tdd_issue_4232 @tdd_expected_fail
  Scenario: Add actor parses uppercase boolean option override
    Given an actor CLI runner
    And I have an actor JSON config file with options
    When I run actor add with uppercase boolean option override
    Then the actor add should pass the loaded config

  Scenario: Run actor uses load context with named context
    Given an actor CLI runner
    And I have an actor JSON config file
    And I have a saved context JSON file
    And I have an actor output file path
    When I run actor run with load context and context name
    Then the actor run should write output and persist context

  Scenario: Run actor loads context without name
    Given an actor CLI runner
    And I have an actor JSON config file
    And I have a saved context JSON file
    When I run actor run with load context only
    Then the actor run should update global context and echo result

  Scenario: Run actor reuses named context
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run with context only
    Then the actor run should reuse saved context

  Scenario: Run actor executes without context
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run without context
    Then the actor run should call single shot without context manager

  Scenario: Run actor forwards allow-rxpy flag with named context and output
    Given an actor CLI runner
    And I have an actor JSON config file
    And I have a saved context JSON file
    And I have an actor output file path
    When I run actor run with load context and context name allowing rxpy
    Then the actor run should write output and persist context
    And the actor run should pass allow rxpy flag

  Scenario: Run actor forwards allow-rxpy flag when loading context only
    Given an actor CLI runner
    And I have an actor JSON config file
    And I have a saved context JSON file
    When I run actor run with load context only allowing rxpy
    Then the actor run should update global context and echo result
    And the actor run should pass allow rxpy flag

  Scenario: Run actor forwards allow-rxpy flag when reusing context
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run with context only allowing rxpy
    Then the actor run should reuse saved context
    And the actor run should pass allow rxpy flag

  Scenario: Run actor forwards allow-rxpy flag without context
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run without context allowing rxpy
    Then the actor run should call single shot without context manager
    And the actor run should pass allow rxpy flag

  Scenario: Run actor reports unsafe configuration error
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run with unsafe configuration error
    Then the actor run should exit with error code 1

  Scenario: Run actor reports clever agents error
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run with clever agents error
    Then the actor run should exit with error code 2

  @coverage
  Scenario: Run actor with single skill flag
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run with a single skill flag
    Then the actor run should pass skill names to the runtime

  @coverage
  Scenario: Run actor with multiple skill flags
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run with multiple skill flags
    Then the actor run should pass all skill names to the runtime

  @coverage
  Scenario: Run actor with unknown skill flag
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run with an unknown skill flag
    Then the actor run should exit with skill not found error

  @coverage
  Scenario: Run actor with skill and context flags combined
    Given an actor CLI runner
    And I have an actor JSON config file
    When I run actor run with skill and context flags
    Then the actor run should pass skill names to the runtime
    And the context manager should have been instantiated
    And the context manager exists should have been called
