0989f58dc8
CI / build (push) Has been cancelled
CI / quality (push) Has been cancelled
CI / e2e_tests (push) Has been cancelled
CI / benchmark-publish (push) Has been cancelled
CI / security (push) Has been cancelled
CI / integration_tests (push) Has been cancelled
CI / typecheck (push) Has been cancelled
CI / unit_tests (push) Has been cancelled
CI / helm (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / coverage (push) Has been cancelled
CI / docker (push) Has been cancelled
CI / status-check (push) Has been cancelled
CI / benchmark-regression (push) Has been cancelled
Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
89 lines
5.1 KiB
Gherkin
89 lines
5.1 KiB
Gherkin
Feature: Estimation lifecycle hook and actor.default.estimation config fallback
|
|
As a developer using CleverAgents
|
|
I want the estimation actor to be resolved via a 4-level fallback chain
|
|
And I want a PLAN_ESTIMATION_COMPLETE event emitted after estimation
|
|
And I want cost_estimate_usd populated from the estimation result
|
|
So that estimation integrates cleanly into the Strategize-to-Execute lifecycle
|
|
|
|
# ── Subtask 1: 4-level fallback chain in use_action() ──────────────────
|
|
|
|
Scenario: estimation_actor from action YAML takes precedence over global config
|
|
Given I have a lifecycle service with a global estimation actor config "global/estimator"
|
|
And I create an action with estimation_actor "action/estimator"
|
|
When I use the action to create a plan
|
|
Then the plan estimation_actor should be "action/estimator"
|
|
|
|
Scenario: estimation_actor falls back to actor.default.estimation global config when action has none
|
|
Given I have a lifecycle service with a global estimation actor config "global/estimator"
|
|
And I create an action without an estimation_actor
|
|
When I use the action to create a plan
|
|
Then the plan estimation_actor should be "global/estimator"
|
|
|
|
Scenario: estimation_actor is None when neither action nor global config provides one
|
|
Given I have a lifecycle service without a global estimation actor config
|
|
And I create an action without an estimation_actor
|
|
When I use the action to create a plan
|
|
Then the plan estimation_actor should be None for fallback tests
|
|
|
|
Scenario: estimation_actor from action YAML is used even when global config is set
|
|
Given I have a lifecycle service with a global estimation actor config "global/estimator"
|
|
And I create an action with estimation_actor "action/specific-estimator"
|
|
When I use the action to create a plan
|
|
Then the plan estimation_actor should be "action/specific-estimator"
|
|
|
|
# ── Subtask 2: PLAN_ESTIMATION_COMPLETE event ───────────────────────────
|
|
|
|
Scenario: PLAN_ESTIMATION_COMPLETE event is emitted when estimation runs
|
|
Given I have a lifecycle service with an event bus for estimation tests
|
|
And I create an action with estimation_actor "local/estimator" for event tests
|
|
When I use the action and drive through strategize to execute
|
|
Then a PLAN_ESTIMATION_COMPLETE event should have been emitted
|
|
|
|
Scenario: No PLAN_ESTIMATION_COMPLETE event when no estimation actor configured
|
|
Given I have a lifecycle service with an event bus for estimation tests
|
|
And I create an action without estimation_actor for event tests
|
|
When I use the action and drive through strategize to execute without estimation
|
|
Then no PLAN_ESTIMATION_COMPLETE event should have been emitted
|
|
|
|
# ── Subtask 3: Conditional estimation step in Strategize-to-Execute ─────
|
|
|
|
Scenario: Estimation step runs between Strategize completion and Execute start
|
|
Given I have a plan lifecycle service for estimation lifecycle tests
|
|
And I create an action with estimation_actor "local/estimator" for lifecycle tests
|
|
When I use the action and complete strategize for lifecycle tests
|
|
And I call execute_plan for lifecycle tests
|
|
Then the plan should be in Execute phase
|
|
And the plan estimation_result should be populated
|
|
|
|
Scenario: Estimation step is skipped cleanly when no estimation actor is set
|
|
Given I have a plan lifecycle service for estimation lifecycle tests
|
|
And I create an action without estimation_actor for lifecycle tests
|
|
When I use the action and complete strategize for lifecycle tests
|
|
And I call execute_plan for lifecycle tests
|
|
Then the plan should be in Execute phase
|
|
And the plan estimation_result should be None for lifecycle tests
|
|
|
|
# ── Subtask 4: cost_estimate_usd populated from estimation result ────────
|
|
|
|
Scenario: cost_estimate_usd is populated from estimation result after estimation runs
|
|
Given I have a plan lifecycle service for cost estimate tests
|
|
And I create an action with estimation_actor "local/estimator" for cost tests
|
|
When I use the action and drive through strategize to execute for cost tests
|
|
Then the plan cost_estimate_usd should be set
|
|
|
|
# ── Subtask 5: Clean skip when no estimation actor configured ────────────
|
|
|
|
Scenario: Plan transitions to Execute cleanly when no estimation actor is configured
|
|
Given I have a plan lifecycle service for skip tests
|
|
And I create an action without estimation_actor for skip tests
|
|
When I use the action and complete strategize for skip tests
|
|
And I call execute_plan for skip tests
|
|
Then the plan should transition to Execute phase cleanly
|
|
And no estimation result should be set on the plan
|
|
|
|
# ── EventType enum has PLAN_ESTIMATION_COMPLETE ──────────────────────────
|
|
|
|
Scenario: EventType enum includes PLAN_ESTIMATION_COMPLETE
|
|
Then the EventType enum should have PLAN_ESTIMATION_COMPLETE
|
|
And the PLAN_ESTIMATION_COMPLETE value should be "plan.estimation_complete"
|