Files
cleveragents-core/features/plan_cancelled_enrichment.feature
T
freemo 65aa7a7842
CI / typecheck (push) Has been cancelled
CI / quality (push) Has been cancelled
CI / e2e_tests (push) Has been cancelled
CI / build (push) Has been cancelled
CI / integration_tests (push) Has been cancelled
CI / helm (push) Has been cancelled
CI / benchmark-publish (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / security (push) Has been cancelled
CI / unit_tests (push) Has been cancelled
CI / status-check (push) Has been cancelled
CI / coverage (push) Has been cancelled
CI / docker (push) Has been cancelled
CI / benchmark-regression (push) Has been cancelled
feat(events): enrich PLAN_CANCELLED event with progress and resource cleanup context (#1301)
Enriches the PLAN_CANCELLED domain event emitted by PlanLifecycleService.cancel_plan() with additional context fields to improve audit trail quality (SEC7 Audit Logging).

Progress context fields: cancelled_phase, cancelled_processing_state, last_completed_step, subplan_count
Resource cleanup context fields: sandbox_refs, changeset_id, resources_pending_cleanup

Existing fields (reason, project_names) preserved for backward compatibility.
15 BDD scenarios added covering all new fields, accuracy, and backward compatibility.

Closes #717

Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
2026-04-02 17:07:41 +00:00

123 lines
7.0 KiB
Gherkin

Feature: Enriched PLAN_CANCELLED event payload
As an audit log consumer
I want the PLAN_CANCELLED domain event to include progress and resource cleanup context
So that I can understand what state the plan was in when it was cancelled
and what resources need cleanup
Background:
Given I have a plan lifecycle service for cancelled enrichment tests
# ---------------------------------------------------------------
# Core enrichment: progress context fields
# ---------------------------------------------------------------
Scenario: PLAN_CANCELLED event includes phase at cancellation
Given an action "local/enrich-cancel-phase" exists for enrichment tests
And a plan created from "local/enrich-cancel-phase" for enrichment tests
When I cancel the plan for enrichment tests with reason "user requested"
Then the PLAN_CANCELLED event details should include "cancelled_phase"
Scenario: PLAN_CANCELLED event includes processing state at cancellation
Given an action "local/enrich-cancel-state" exists for enrichment tests
And a plan created from "local/enrich-cancel-state" for enrichment tests
When I cancel the plan for enrichment tests with reason "timeout"
Then the PLAN_CANCELLED event details should include "cancelled_processing_state"
Scenario: PLAN_CANCELLED event includes last completed step
Given an action "local/enrich-cancel-step" exists for enrichment tests
And a plan created from "local/enrich-cancel-step" for enrichment tests
When I cancel the plan for enrichment tests with reason "budget exceeded"
Then the PLAN_CANCELLED event details should include "last_completed_step"
Scenario: PLAN_CANCELLED event includes subplan count
Given an action "local/enrich-cancel-subplan" exists for enrichment tests
And a plan created from "local/enrich-cancel-subplan" for enrichment tests
When I cancel the plan for enrichment tests with reason "manual"
Then the PLAN_CANCELLED event details should include "subplan_count"
# ---------------------------------------------------------------
# Core enrichment: resource cleanup context fields
# ---------------------------------------------------------------
Scenario: PLAN_CANCELLED event includes sandbox refs for cleanup
Given an action "local/enrich-cancel-sandbox" exists for enrichment tests
And a plan created from "local/enrich-cancel-sandbox" for enrichment tests
When I cancel the plan for enrichment tests with reason "resource limit"
Then the PLAN_CANCELLED event details should include "sandbox_refs"
Scenario: PLAN_CANCELLED event includes changeset id for cleanup
Given an action "local/enrich-cancel-changeset" exists for enrichment tests
And a plan created from "local/enrich-cancel-changeset" for enrichment tests
When I cancel the plan for enrichment tests with reason "rollback"
Then the PLAN_CANCELLED event details should include "changeset_id"
Scenario: PLAN_CANCELLED event includes resources pending cleanup count
Given an action "local/enrich-cancel-resources" exists for enrichment tests
And a plan created from "local/enrich-cancel-resources" for enrichment tests
When I cancel the plan for enrichment tests with reason "cleanup test"
Then the PLAN_CANCELLED event details should include "resources_pending_cleanup"
# ---------------------------------------------------------------
# Cancellation reason field
# ---------------------------------------------------------------
Scenario: PLAN_CANCELLED event includes cancellation reason
Given an action "local/enrich-cancel-reason" exists for enrichment tests
And a plan created from "local/enrich-cancel-reason" for enrichment tests
When I cancel the plan for enrichment tests with reason "explicit reason"
Then the PLAN_CANCELLED event details should have reason "explicit reason"
Scenario: PLAN_CANCELLED event reason defaults to empty string when not provided
Given an action "local/enrich-cancel-no-reason" exists for enrichment tests
And a plan created from "local/enrich-cancel-no-reason" for enrichment tests
When I cancel the plan for enrichment tests without a reason
Then the PLAN_CANCELLED event reason field should be empty string
# ---------------------------------------------------------------
# Progress context accuracy
# ---------------------------------------------------------------
Scenario: PLAN_CANCELLED event captures phase accurately as Strategize
Given an action "local/enrich-cancel-strategize" exists for enrichment tests
And a plan created from "local/enrich-cancel-strategize" for enrichment tests
When I cancel the plan for enrichment tests with reason "cancelled in strategize"
Then the PLAN_CANCELLED event details should have cancelled_phase "strategize"
Scenario: PLAN_CANCELLED event captures last_completed_step value accurately
Given an action "local/enrich-cancel-step-val" exists for enrichment tests
And a plan created from "local/enrich-cancel-step-val" for enrichment tests
When I cancel the plan for enrichment tests with reason "step check"
Then the PLAN_CANCELLED event details should have last_completed_step -1
# ---------------------------------------------------------------
# Resource cleanup context accuracy
# ---------------------------------------------------------------
Scenario: PLAN_CANCELLED event captures sandbox refs accurately when present
Given an action "local/enrich-cancel-sandbox-val" exists for enrichment tests
And a plan with sandbox refs created from "local/enrich-cancel-sandbox-val"
When I cancel the plan for enrichment tests with reason "sandbox cleanup"
Then the PLAN_CANCELLED event details should have sandbox_refs count 2
Scenario: PLAN_CANCELLED event captures resources_pending_cleanup count accurately
Given an action "local/enrich-cancel-pending" exists for enrichment tests
And a plan with sandbox refs created from "local/enrich-cancel-pending"
When I cancel the plan for enrichment tests with reason "pending cleanup"
Then the PLAN_CANCELLED event details should have resources_pending_cleanup 2
# ---------------------------------------------------------------
# Backward compatibility: existing fields still present
# ---------------------------------------------------------------
Scenario: PLAN_CANCELLED event still includes project_names field
Given an action "local/enrich-cancel-compat" exists for enrichment tests
And a plan created from "local/enrich-cancel-compat" for enrichment tests
When I cancel the plan for enrichment tests with reason "compat check"
Then the PLAN_CANCELLED event details should include "project_names"
Scenario: PLAN_CANCELLED event still includes reason field
Given an action "local/enrich-cancel-compat-reason" exists for enrichment tests
And a plan created from "local/enrich-cancel-compat-reason" for enrichment tests
When I cancel the plan for enrichment tests with reason "compat reason"
Then the PLAN_CANCELLED event details should include "reason"