Feature: Domain Repository Protocols
  As a developer maintaining the CleverAgents clean architecture
  I want domain repository protocols defined in the domain layer
  So that application services depend on abstractions, not infrastructure implementations

  Background:
    Given the domain repository protocols are importable

  Scenario: LifecyclePlanRepositoryProtocol is defined in the domain layer
    When I inspect the LifecyclePlanRepositoryProtocol
    Then it should be a runtime-checkable Protocol
    And it should define a "create" method
    And it should define a "get" method
    And it should define a "update" method
    And it should define a "delete" method
    And it should define a "list_all" method

  Scenario: ActionRepositoryProtocol is defined in the domain layer
    When I inspect the ActionRepositoryProtocol
    Then it should be a runtime-checkable Protocol
    And it should define a "create" method
    And it should define a "get_by_id" method
    And it should define a "update" method
    And it should define a "delete" method
    And it should define a "list_all" method

  Scenario: DecisionRepositoryProtocol is defined in the domain layer
    When I inspect the DecisionRepositoryProtocol
    Then it should be a runtime-checkable Protocol
    And it should define a "create" method
    And it should define a "get" method
    And it should define a "get_by_plan" method
    And it should define a "get_tree" method

  Scenario: ProjectRepositoryProtocol is defined in the domain layer
    When I inspect the ProjectRepositoryProtocol
    Then it should be a runtime-checkable Protocol
    And it should define a "create" method
    And it should define a "get" method
    And it should define a "update" method
    And it should define a "delete" method

  Scenario: LifecyclePlanRepository satisfies LifecyclePlanRepositoryProtocol
    Given the infrastructure LifecyclePlanRepository class
    When I check if it satisfies LifecyclePlanRepositoryProtocol
    Then the isinstance check should pass

  Scenario: ActionRepository satisfies ActionRepositoryProtocol
    Given the infrastructure ActionRepository class
    When I check if it satisfies ActionRepositoryProtocol
    Then the isinstance check should pass

  Scenario: DecisionRepository satisfies DecisionRepositoryProtocol
    Given the infrastructure DecisionRepository class
    When I check if it satisfies DecisionRepositoryProtocol
    Then the isinstance check should pass

  Scenario: NamespacedProjectRepository satisfies ProjectRepositoryProtocol
    Given the infrastructure NamespacedProjectRepository class
    When I check if it satisfies ProjectRepositoryProtocol
    Then the isinstance check should pass

  Scenario: Domain repository protocols are exported from the domain package
    When I import from cleveragents.domain.repositories
    Then LifecyclePlanRepositoryProtocol should be available
    And ActionRepositoryProtocol should be available
    And DecisionRepositoryProtocol should be available
    And ProjectRepositoryProtocol should be available

  Scenario: Protocol modules are in the domain layer, not infrastructure
    When I check the module path of LifecyclePlanRepositoryProtocol
    Then the module should be under "cleveragents.domain"
    When I check the module path of ActionRepositoryProtocol
    Then the module should be under "cleveragents.domain"
    When I check the module path of DecisionRepositoryProtocol
    Then the module should be under "cleveragents.domain"
    When I check the module path of ProjectRepositoryProtocol
    Then the module should be under "cleveragents.domain"
