@mock_only @subplan @orchestration
Feature: Subplan spawn → execute → merge orchestration lifecycle
  As a system orchestrating hierarchical plan execution
  I want SubplanService.spawn() to create real child Plan domain objects
  and wire them through the full strategize → execute → validate cycle
  So that subplan execution is end-to-end orchestrated

  Background:
    Given a parent plan configured for subplan spawning
    And valid spawn entries for the parent plan

  Scenario: Spawn creates child Plans with correct parent-child identity
    When I spawn subplans via SubplanService
    Then the spawn result should contain child Plan domain objects
    And each child Plan should have parent_plan_id set to the parent
    And each child Plan root_plan_id should trace to the root plan

  Scenario: Child plans inherit project links from parent
    When I spawn subplans via SubplanService
    Then each child plan should inherit the parent project links

  Scenario: Parent plan blocks when child plans are pending
    When I spawn subplans via SubplanService
    Then the parent plan should have pending subplan statuses
    And the parent plan subplan_statuses count should equal spawn count

  Scenario: Child plan failure marks parent subplan status as errored
    When I spawn subplans via SubplanService
    And a child plan fails with error "ChildExecError: timeout"
    Then the corresponding parent subplan status should be errored
    And the parent subplan status error should contain "ChildExecError"

  Scenario: Child plan completion updates parent subplan status
    When I spawn subplans via SubplanService
    And a child plan completes successfully with changeset summary "Added tests"
    Then the corresponding parent subplan status should be complete
    And the parent subplan status changeset summary should be "Added tests"

  Scenario: Parallel spawn sets execution mode on result
    Given a parent plan configured for parallel subplan spawning
    And valid spawn entries for the parent plan
    When I spawn subplans via SubplanService
    Then the spawn result execution mode should be parallel
    And the spawn result child plan count should match entries
