Files
cleveragents-core/robot/estimation_actor.robot
T
brent.edwards 6531440431
CI / build (push) Successful in 24s
CI / lint (push) Successful in 3m16s
CI / quality (push) Successful in 3m45s
CI / typecheck (push) Successful in 3m52s
CI / benchmark-regression (push) Has been skipped
CI / security (push) Successful in 4m1s
CI / unit_tests (push) Successful in 7m8s
CI / integration_tests (push) Successful in 7m1s
CI / docker (push) Successful in 1m6s
CI / e2e_tests (push) Successful in 9m49s
CI / coverage (push) Successful in 12m22s
CI / status-check (push) Successful in 1s
CI / benchmark-publish (push) Successful in 19m34s
feat(actor): implement estimation actor type (#962)
## Summary

Implement the estimation actor as a functional actor type. The estimation actor provides cost, time, and resource estimates for plan operations, running after Strategize completes (before Execute). Estimation is informational only and optional — plans work without an estimation actor configured.

### Changes

**New files:**
- `src/cleveragents/domain/models/core/estimation.py` — `EstimationResult` frozen Pydantic model with fields for cost (USD), tokens, steps, child plans, time, risk level/factors, summary
- `features/estimation_actor.feature` — 12 Behave test scenarios (model validation, serialization, stub actor, plan integration, optional behavior)
- `features/steps/estimation_actor_steps.py` — Step definitions
- `robot/estimation_actor.robot` — 6 Robot integration tests
- `robot/helper_estimation_actor.py` — Robot test helper

**Modified files:**
- `domain/models/acms/tiers.py` — Added `ESTIMATOR` to `ActorRole` enum
- `domain/models/core/plan.py` — Added `estimation_result: EstimationResult | None` field, estimation data in `as_cli_dict()`
- `application/services/plan_executor.py` — Added `EstimationStubActor` class
- `application/services/plan_lifecycle_service.py` — Added `_run_estimation()` method, invoked in `execute_plan()`
- `cli/commands/plan.py` — Display estimation results in plan status
- `vulture_whitelist.py` — Added 12 new public symbols

### Quality Gates

| Session | Result |
|---|---|
| `nox -s lint` | PASS |
| `nox -s typecheck` | PASS (0 errors) |
| `nox -s unit_tests` | PASS (10,818 scenarios) |
| `nox -s integration_tests` | PASS (1,512 tests) |
| `nox -s coverage_report` | 98% (>= 97%) |

Closes #890

Reviewed-on: #962
Co-authored-by: Brent Edwards <brent.edwards@cleverthis.com>
Co-committed-by: Brent Edwards <brent.edwards@cleverthis.com>
2026-03-21 01:40:58 +00:00

56 lines
3.1 KiB
Plaintext

*** Settings ***
Documentation Integration tests for the estimation actor type.
... Covers EstimationResult model, EstimationStubActor,
... Plan estimation_result field, ActorRole.ESTIMATOR,
... and estimation invocation during plan lifecycle.
... Issue #890.
Resource ${CURDIR}/common.resource
Suite Setup Setup Test Environment
Suite Teardown Cleanup Test Environment
*** Variables ***
${HELPER_SCRIPT} robot/helper_estimation_actor.py
*** Test Cases ***
EstimationResult Domain Model
[Documentation] Verify EstimationResult creation, defaults, serialization, and immutability
[Tags] estimation model critical
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} estimation-result-model cwd=${WORKSPACE} on_timeout=kill timeout=30s
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} estimation-result-model-ok
EstimationStubActor Placeholder Output
[Documentation] Verify stub actor returns placeholder estimation with correct summary
[Tags] estimation stub critical
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} estimation-stub-actor cwd=${WORKSPACE} on_timeout=kill timeout=30s
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} estimation-stub-actor-ok
ActorRole ESTIMATOR Enum Value
[Documentation] Verify ActorRole enum includes ESTIMATOR with value "estimator"
[Tags] estimation enum
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} actor-role-estimator cwd=${WORKSPACE} on_timeout=kill timeout=30s
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} actor-role-estimator-ok
Plan Model Estimation Result Field
[Documentation] Verify Plan model accepts estimation_result and includes it in CLI dict
[Tags] estimation plan model
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} plan-estimation-field cwd=${WORKSPACE} on_timeout=kill timeout=30s
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} plan-estimation-field-ok
Estimation Runs During Strategize To Execute Transition
[Documentation] Verify estimation actor is invoked when transitioning from Strategize to Execute
[Tags] estimation lifecycle critical
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} estimation-lifecycle-integration cwd=${WORKSPACE} on_timeout=kill timeout=30s
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} estimation-lifecycle-integration-ok
Estimation Skipped When No Actor Configured
[Documentation] Verify estimation is skipped when no estimation_actor is set on the plan
[Tags] estimation lifecycle
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} no-estimation-lifecycle cwd=${WORKSPACE} on_timeout=kill timeout=30s
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} no-estimation-lifecycle-ok