2e04e8597e
Two changed source lines were uncovered by the existing test suite:
- ``src/cleveragents/cli/commands/config.py:57`` — ``return Path(home_env)``
branch in ``_get_config_dir()`` (only reached when
``CLEVERAGENTS_HOME`` is set).
- ``src/cleveragents/cli/commands/plan.py:3131`` —
``active_filters.append(f"[yellow]Namespace:[/yellow] {namespace}")``
in ``lifecycle_list_plans`` (only reached when ``--namespace`` is
passed).
Add one scenario per uncovered line:
- ``features/config_cli_safety_net_coverage.feature`` — new
``safety-net _get_config_dir`` scenario sets
``CLEVERAGENTS_HOME`` and asserts the resolver returns that
path. Step reuses the existing safety-net env var helper.
- ``features/plan_cli_spec_alignment.feature`` — new ``Plan list
with --namespace filter`` scenario invokes ``plan list
--namespace myteam`` against the existing plan-spec-alignment
fixtures and reuses the existing ``the plan spec list should
succeed`` assertion.
ISSUES CLOSED: #3773
147 lines
6.0 KiB
Gherkin
147 lines
6.0 KiB
Gherkin
Feature: Plan CLI spec alignment
|
|
As a developer
|
|
I want the plan CLI commands aligned to the v3 spec
|
|
So that plan use/list/status flags are consistent with the specification
|
|
|
|
Background:
|
|
Given a plan spec alignment CLI runner
|
|
And a plan spec alignment mocked lifecycle service
|
|
|
|
# ---- plan use: multiple projects (positional) ----
|
|
Scenario: Plan use with multiple positional projects
|
|
Given a plan spec alignment action exists
|
|
When I run plan use with positional projects "proj-a" and "proj-b"
|
|
Then the plan spec use should succeed
|
|
And the plan spec use should link projects "proj-a" and "proj-b"
|
|
|
|
# ---- plan use: --automation-profile ----
|
|
Scenario: Plan use with --automation-profile
|
|
Given a plan spec alignment action exists
|
|
When I run plan use with automation profile "trusted"
|
|
Then the plan spec use should succeed
|
|
And the plan spec output should contain "Automation Profile"
|
|
|
|
# ---- plan use: --invariant (repeatable) ----
|
|
Scenario: Plan use with repeatable --invariant
|
|
Given a plan spec alignment action exists
|
|
When I run plan use with invariants "No warnings" and "Keep compat"
|
|
Then the plan spec use should succeed
|
|
And the plan spec use should pass invariants to service
|
|
|
|
# ---- plan use: actor override flags ----
|
|
Scenario: Plan use with strategy-actor override
|
|
Given a plan spec alignment action exists
|
|
When I run plan use with strategy actor "openai/gpt-4"
|
|
Then the plan spec use should succeed
|
|
And the plan spec output should contain "Strategy Actor"
|
|
|
|
Scenario: Plan use with execution-actor override
|
|
Given a plan spec alignment action exists
|
|
When I run plan use with execution actor "anthropic/claude-3"
|
|
Then the plan spec use should succeed
|
|
And the plan spec output should contain "Execution Actor"
|
|
|
|
Scenario: Plan use with estimation-actor override
|
|
Given a plan spec alignment action exists
|
|
When I run plan use with estimation actor "openai/gpt-4"
|
|
Then the plan spec use should succeed
|
|
And the plan spec output should contain "Estimation Actor"
|
|
|
|
Scenario: Plan use with invariant-actor override
|
|
Given a plan spec alignment action exists
|
|
When I run plan use with invariant actor "openai/gpt-4"
|
|
Then the plan spec use should succeed
|
|
And the plan spec output should contain "Invariant Actor"
|
|
|
|
# ---- plan use: --arg name=value ----
|
|
Scenario: Plan use with --arg name=value
|
|
Given a plan spec alignment action exists
|
|
When I run plan use with arg "target_coverage=80"
|
|
Then the plan spec use should succeed
|
|
And the plan spec use should pass argument "target_coverage" with value 80
|
|
|
|
# ---- plan list: filter combinations ----
|
|
Scenario: Plan list with --phase filter
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with phase "strategize"
|
|
Then the plan spec list should succeed
|
|
|
|
Scenario: Plan list with --state filter
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with state "queued"
|
|
Then the plan spec list should succeed
|
|
|
|
Scenario: Plan list with --processing-state filter
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with processing-state "complete"
|
|
Then the plan spec list should succeed
|
|
|
|
Scenario: Plan list with --project filter
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with project "proj-a"
|
|
Then the plan spec list should succeed
|
|
|
|
Scenario: Plan list with --action filter
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with action "local/test-action"
|
|
Then the plan spec list should succeed
|
|
|
|
Scenario: Plan list with --namespace filter
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with namespace "myteam"
|
|
Then the plan spec list should succeed
|
|
|
|
Scenario: Plan list with regex filter
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with regex "test-action"
|
|
Then the plan spec list should succeed
|
|
|
|
Scenario: Plan list with combined filters
|
|
Given plan spec alignment plans exist
|
|
When I run plan list combining phase "strategize" with project "proj-a"
|
|
Then the plan spec list should succeed
|
|
|
|
# ---- plan status: output fields ----
|
|
Scenario: Plan status renders all required fields
|
|
Given a plan spec alignment plan exists for status
|
|
When I run plan status for the plan
|
|
Then the plan spec status should succeed
|
|
And the plan spec status should contain "Action"
|
|
And the plan spec status should contain "Phase"
|
|
And the plan spec status should contain "Processing State"
|
|
And the plan spec status should contain "Projects"
|
|
And the plan spec status should contain "Arguments"
|
|
And the plan spec status should contain "Automation Profile"
|
|
And the plan spec status should contain "Created"
|
|
And the plan spec status should contain "Updated"
|
|
|
|
# ---- plan cancel: --reason ----
|
|
Scenario: Plan cancel with --reason
|
|
Given a plan spec alignment plan exists for cancel
|
|
When I run plan cancel with reason "Requirements changed"
|
|
Then the plan spec cancel should succeed
|
|
And the plan spec cancel output should contain "Requirements changed"
|
|
|
|
# ---- plan list: required column rendering ----
|
|
@tdd_issue @tdd_issue_4252
|
|
Scenario: Plan list rich output includes Name column
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with no filters
|
|
Then the plan spec list should succeed
|
|
And the plan spec list output should contain "Name"
|
|
|
|
@tdd_issue @tdd_issue_4252
|
|
Scenario: Plan list rich output includes Updated column
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with no filters
|
|
Then the plan spec list should succeed
|
|
And the plan spec list output should contain "Updat"
|
|
And the plan spec list output should contain the current year-month timestamp
|
|
|
|
@tdd_issue @tdd_issue_4252
|
|
Scenario: Plan list rich output includes Invariants column
|
|
Given plan spec alignment plans exist
|
|
When I run plan list with no filters
|
|
Then the plan spec list should succeed
|
|
And the plan spec list output should contain "Invar"
|