Feature: Sandbox Strategy Registry Coverage
  Scenarios targeting uncovered lines in strategy_registry.py:
  lines 65-68, 167, 196-200, 205-209.

  Background:
    Given the sandbox strategy registry module is imported

  # --- CustomStrategyConfig success (lines 65-68) ---

  Scenario: CustomStrategyConfig stores valid fields
    When I create a CustomStrategyConfig with name "my_strat" module "pkg.mod" and class "Cls"
    Then the config should have name "my_strat" module "pkg.mod" and class_name "Cls"
    And the config options should default to an empty dict

  Scenario: CustomStrategyConfig stores explicit options
    When I create a CustomStrategyConfig with name "x" module "a.b" class "C" and options
    Then the config options should contain the provided values

  # --- register_from_config (line 167) ---

  Scenario: register_from_config delegates to register and returns the class
    Given a registry with a mock loader that returns a compliant class
    And a CustomStrategyConfig named "cfg_strat" with module "fake.mod" and class "FakeCls"
    When I call register_from_config with that config
    Then the strategy "cfg_strat" should be registered in the registry

  # --- register_all_from_config skips missing module (lines 196-200) ---

  Scenario: register_all_from_config skips entry with missing module
    Given a registry with a mock loader that returns a compliant class
    When I call register_all_from_config with an entry that has an empty module
    Then the returned list should not contain the skipped entry name
    And a warning should be logged about the skipped entry

  Scenario: register_all_from_config skips entry with missing class
    Given a registry with a mock loader that returns a compliant class
    When I call register_all_from_config with an entry that has an empty class
    Then the returned list should not contain the skipped entry name

  # --- register_all_from_config error handling (lines 205-209) ---

  Scenario: register_all_from_config catches PluginLoadError and continues
    Given a registry whose loader raises PluginLoadError
    When I call register_all_from_config with an entry that will fail to load
    Then the returned list should be empty
    And an error should be logged about the failed registration

  Scenario: register_all_from_config catches ProtocolMismatchError and continues
    Given a registry whose loader returns a non-compliant class
    When I call register_all_from_config with an entry that will fail protocol check
    Then the returned list should be empty
