Files
cleveragents-core/features/m3_decision_validation_smoke.feature
T
brent.edwards 22986aaaf9
CI / lint (pull_request) Successful in 24s
CI / typecheck (pull_request) Successful in 58s
CI / security (pull_request) Successful in 56s
CI / quality (pull_request) Successful in 42s
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 25s
CI / integration_tests (pull_request) Successful in 5m7s
CI / unit_tests (pull_request) Successful in 25m18s
CI / benchmark-regression (pull_request) Successful in 26m14s
CI / docker (pull_request) Successful in 16s
CI / coverage (pull_request) Successful in 1h40m20s
fix(test): correct dry-run assertion in M3 decision validation smoke
The CLI plain format output does not include the literal text "Dry Run"
(that string only appears in the Rich panel title). Assert against
"risk_level" which is present in the dry-run impact output instead.
2026-02-25 22:09:26 +00:00

137 lines
5.8 KiB
Gherkin

Feature: M3 decision tree, validation gating, and invariant enforcement smoke tests
As a developer working with the CleverAgents M3 milestone
I want to verify decision trees, corrections, validation lifecycle,
and invariant constraints work end-to-end via the CLI
So that the M3 foundation for decision + validation + invariant is solid
Background:
Given a m3 smoke test runner
And a m3 smoke mocked environment
# --- Decision tree fixture loading ---
Scenario: M3 smoke load decision tree fixture
When I m3 smoke load the decision tree fixture
Then the m3 smoke decision tree fixture should have a minimal tree entry
And the m3 smoke minimal tree should contain 2 decisions
Scenario: M3 smoke load decision tree with invariant node
When I m3 smoke load the decision tree fixture
Then the m3 smoke decision tree fixture should have an invariant tree entry
And the m3 smoke invariant tree should contain an invariant_enforced decision
Scenario: M3 smoke load decision tree with correction
When I m3 smoke load the decision tree fixture
Then the m3 smoke decision tree fixture should have a correction tree entry
And the m3 smoke correction tree should contain a superseded decision
And the m3 smoke correction tree should contain a correction decision
# --- Validation fixture loading ---
Scenario: M3 smoke load validation attachment fixtures
When I m3 smoke load the validation attachment fixture
Then the m3 smoke validation fixture should have a coverage entry
And the m3 smoke coverage validation should have mode "required"
Scenario: M3 smoke load validation attachment with informational mode
When I m3 smoke load the validation attachment fixture
Then the m3 smoke validation fixture should have a lint entry
And the m3 smoke lint validation should have mode "informational"
# --- Invariant fixture loading ---
Scenario: M3 smoke load invariant config fixtures
When I m3 smoke load the invariant config fixture
Then the m3 smoke invariant fixture should have a global entry
And the m3 smoke global invariant text should be "Never delete production data"
Scenario: M3 smoke load invariant merge set
When I m3 smoke load the invariant config fixture
Then the m3 smoke invariant fixture should have a merge set entry
And the m3 smoke merge set should define expected merged count 4
# --- Invariant CLI: add ---
Scenario: M3 smoke invariant add global
When I m3 smoke invoke invariant add with text "Never delete production data" and global scope
Then the m3 smoke invariant add should succeed
And the m3 smoke invariant output should contain "Never delete production data"
Scenario: M3 smoke invariant add project scoped
When I m3 smoke invoke invariant add with text "All API changes need tests" and project "local/m3-smoke-proj"
Then the m3 smoke invariant add should succeed
# --- Invariant CLI: list ---
Scenario: M3 smoke invariant list shows entries
Given m3 smoke invariants have been added
When I m3 smoke invoke invariant list
Then the m3 smoke invariant list should succeed
And the m3 smoke invariant list output should contain "Never delete production data"
Scenario: M3 smoke invariant list with project filter
Given m3 smoke invariants have been added
When I m3 smoke invoke invariant list with project filter "local/m3-smoke-proj"
Then the m3 smoke invariant list should succeed
# --- Invariant CLI: remove ---
Scenario: M3 smoke invariant remove by id
Given m3 smoke invariants have been added
When I m3 smoke invoke invariant remove with a known id
Then the m3 smoke invariant remove should succeed
Scenario: M3 smoke invariant remove unknown id fails
When I m3 smoke invoke invariant remove with id "01UNKNOWN000000000000000000"
Then the m3 smoke invariant remove should fail
# --- Validation CLI: add ---
Scenario: M3 smoke validation add from config
Given a m3 smoke temporary validation config file
When I m3 smoke invoke validation add with the config
Then the m3 smoke validation add should succeed
And the m3 smoke validation output should contain "coverage-check"
# --- Validation CLI: attach ---
Scenario: M3 smoke validation attach to resource
Given a m3 smoke validation "local/coverage-check" is registered
When I m3 smoke invoke validation attach "local/coverage-check" to "git-checkout/my-repo"
Then the m3 smoke validation attach should succeed
# --- Validation CLI: detach ---
Scenario: M3 smoke validation detach by id
Given a m3 smoke validation attachment exists
When I m3 smoke invoke validation detach with the attachment id
Then the m3 smoke validation detach should succeed
# --- Plan correct CLI ---
Scenario: M3 smoke plan correct dry run
Given a m3 smoke plan with decisions exists
When I m3 smoke invoke plan correct in dry-run mode
Then the m3 smoke plan correct dry run should succeed
And the m3 smoke correction output should contain "risk_level"
Scenario: M3 smoke plan correct revert executes
Given a m3 smoke plan with decisions exists
When I m3 smoke invoke plan correct in revert mode
Then the m3 smoke plan correct should succeed
Scenario: M3 smoke plan correct append executes
Given a m3 smoke plan with decisions exists
When I m3 smoke invoke plan correct in append mode
Then the m3 smoke plan correct should succeed
# --- Negative cases ---
Scenario: M3 smoke plan correct with empty guidance fails
When I m3 smoke invoke plan correct with empty guidance
Then the m3 smoke plan correct should fail
Scenario: M3 smoke plan correct with invalid mode fails
When I m3 smoke invoke plan correct with invalid mode "rollback"
Then the m3 smoke plan correct should fail