Files
cleveragents-core/robot/subplan_execution.robot
Luis Mendes 9f6fb667c2 feat(subplan): execute and merge subplans
Implement SubplanExecutionService and SubplanMergeService to enable
parent plans to decompose work into coordinated child subplans with
configurable execution modes (sequential, parallel, dependency-ordered)
and merge strategies (git_three_way, sequential_apply, fail_on_conflict,
last_wins).

- SubplanExecutionService: schedules subplan execution with retry
  support via SubplanFailureHandler, max_parallel limits, fail_fast
  semantics, and topological DAG ordering for dependency mode
- SubplanMergeService: wraps sandbox merge infrastructure to combine
  subplan sandbox outputs using the configured merge strategy
- BDD tests: 21 scenarios covering all execution modes, merge
  strategies, validation, and integration flows
- Robot tests: 11 integration test cases with helper module
- ASV benchmarks: performance benchmarks for execution and merge
- Documentation: reference guide in docs/reference/subplans.md

ISSUES CLOSED: #184
2026-03-01 09:07:06 +00:00

109 lines
5.4 KiB
Plaintext

*** Settings ***
Documentation Smoke tests for subplan execution scheduler, merge strategies,
... and integrated execution+merge workflows.
Resource ${CURDIR}/common.resource
Suite Setup Setup Test Environment
Suite Teardown Cleanup Test Environment
*** Variables ***
${HELPER} robot/helper_subplan_execution.py
*** Test Cases ***
Sequential Execution Completes All Subplans
[Documentation] Verify sequential mode executes all subplans in order
[Tags] subplan execution sequential
${result}= Run Process ${PYTHON} ${HELPER} sequential-all cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} sequential-all-ok
Sequential Execution Stops On Fail Fast
[Documentation] Verify sequential fail_fast stops after first failure
[Tags] subplan execution sequential failfast
${result}= Run Process ${PYTHON} ${HELPER} sequential-failfast cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} sequential-failfast-ok
Parallel Execution Completes All Subplans
[Documentation] Verify parallel mode executes all subplans
[Tags] subplan execution parallel
${result}= Run Process ${PYTHON} ${HELPER} parallel-all cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} parallel-all-ok
Dependency Ordered Execution Respects DAG
[Documentation] Verify dependency-ordered mode follows topological order
[Tags] subplan execution dependency
${result}= Run Process ${PYTHON} ${HELPER} dep-ordered cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} dep-ordered-ok
Git Three Way Merge Non Overlapping
[Documentation] Verify git three-way merge combines non-overlapping changes
[Tags] subplan merge git
${result}= Run Process ${PYTHON} ${HELPER} merge-git-clean cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} merge-git-clean-ok
Sequential Apply Merge
[Documentation] Verify sequential apply merge strategy
[Tags] subplan merge sequential
${result}= Run Process ${PYTHON} ${HELPER} merge-sequential cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} merge-sequential-ok
Last Wins Merge Strategy
[Documentation] Verify last-wins merge strategy takes final output
[Tags] subplan merge lastwins
${result}= Run Process ${PYTHON} ${HELPER} merge-last-wins cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} merge-last-wins-ok
Fail On Conflict Merge Raises Error
[Documentation] Verify fail-on-conflict strategy raises error on conflicts
[Tags] subplan merge conflict
${result}= Run Process ${PYTHON} ${HELPER} merge-fail-conflict cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} merge-fail-conflict-ok
Execution With Merge Integration
[Documentation] Verify end-to-end execution and merge integration
[Tags] subplan execution merge integration
${result}= Run Process ${PYTHON} ${HELPER} exec-merge-integration cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} exec-merge-integration-ok
Service Validation Guards
[Documentation] Verify service rejects invalid inputs
[Tags] subplan validation
${result}= Run Process ${PYTHON} ${HELPER} validation-guards cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} validation-guards-ok
Execution Summary Report
[Documentation] Verify execution result reports correct summary
[Tags] subplan execution summary
${result}= Run Process ${PYTHON} ${HELPER} exec-summary cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} exec-summary-ok
Non Retriable Error Is Not Retried
[Documentation] Verify non-retriable errors are not retried
[Tags] subplan execution retry
${result}= Run Process ${PYTHON} ${HELPER} retry-non-retriable cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} retry-non-retriable-ok
Executor Exception Triggers Retry Then Succeeds
[Documentation] Verify executor exception triggers retry for retriable errors
[Tags] subplan execution retry
${result}= Run Process ${PYTHON} ${HELPER} retry-exception cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} retry-exception-ok
Merge Conflict During Execution
[Documentation] Verify merge conflict during execution marks result as failed
[Tags] subplan execution merge conflict
${result}= Run Process ${PYTHON} ${HELPER} merge-conflict-exec cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} merge-conflict-exec-ok