Files
cleveragents-core/features/estimation_lifecycle_hook_651.feature
freemo 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
feat(estimation): wire actor.default.estimation config fallback and Strategize-to-Estimate lifecycle hook (#1310)
Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
2026-04-02 17:07:48 +00:00

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"