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
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.
137 lines
5.8 KiB
Gherkin
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
|