Feature: Checkpoint listing and management CLI commands As a user I want to list and delete checkpoints for a plan So that I can view and manage rollback points through the CLI # =================================================================== # checkpoint-list: empty state # =================================================================== Scenario: Listing checkpoints when none exist shows empty message Given a cp-cli mocked checkpoint service with no checkpoints for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" in default format Then the cp-cli command should succeed And the cp-cli output should contain "No checkpoints found" Scenario: Listing checkpoints in json format when none exist returns empty list Given a cp-cli mocked checkpoint service with no checkpoints for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" with format "json" Then the cp-cli command should succeed And the cp-cli output should contain "[]" # =================================================================== # checkpoint-list: populated state # =================================================================== Scenario: Listing multiple checkpoints shows table with IDs and timestamps Given a cp-cli mocked checkpoint service with 3 checkpoints for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" in default format Then the cp-cli command should succeed And the cp-cli output should contain "Fields: checkpoint_id" Scenario: Listing checkpoints in json format returns structured data Given a cp-cli mocked checkpoint service with 2 checkpoints for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" with format "json" Then the cp-cli command should succeed And the cp-cli output should contain "checkpoint_id" And the cp-cli output should contain "plan_id" Scenario: Listing checkpoints in yaml format returns structured data Given a cp-cli mocked checkpoint service with 2 checkpoints for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" with format "yaml" Then the cp-cli command should succeed And the cp-cli output should contain "checkpoint_id" Scenario: Listing checkpoints in table format returns structured data Given a cp-cli mocked checkpoint service with 2 checkpoints for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" with format "table" Then the cp-cli command should succeed And the cp-cli output should contain "checkpoint_id" # =================================================================== # checkpoint-list: sort options # =================================================================== Scenario: Listing checkpoints with sort desc returns newest first Given a cp-cli mocked checkpoint service with 3 checkpoints for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" with sort "desc" Then the cp-cli command should succeed Scenario: Listing checkpoints with sort asc returns oldest first Given a cp-cli mocked checkpoint service with 3 checkpoints for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" with sort "asc" Then the cp-cli command should succeed # =================================================================== # checkpoint-list: type filter # =================================================================== Scenario: Listing checkpoints filtered by type manual Given a cp-cli mocked checkpoint service with checkpoints of mixed types for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" with type filter "manual" Then the cp-cli command should succeed Scenario: Listing checkpoints filtered by type pre_write Given a cp-cli mocked checkpoint service with checkpoints of mixed types for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" with type filter "pre_write" Then the cp-cli command should succeed # =================================================================== # checkpoint-list: error handling # =================================================================== Scenario: Listing checkpoints when service raises CleverAgentsError aborts Given a cp-cli mocked checkpoint service that raises CleverAgentsError on list When I invoke cp-cli checkpoint-list for plan "01ARZ3NDEKTSV4RRFFQ69G5FAV" in default format Then the cp-cli command should abort And the cp-cli output should contain "Error" # =================================================================== # checkpoint-delete: single deletion # =================================================================== Scenario: Deleting a single checkpoint with --yes succeeds Given a cp-cli mocked checkpoint service that can delete checkpoints When I invoke cp-cli checkpoint-delete "01ARZ3NDEKTSV4RRFFQ69G5FAV" with yes flag Then the cp-cli command should succeed And the cp-cli output should contain "deleted" Scenario: Deleting a single checkpoint in json format returns structured data Given a cp-cli mocked checkpoint service that can delete checkpoints When I invoke cp-cli checkpoint-delete "01ARZ3NDEKTSV4RRFFQ69G5FAV" with yes flag and format "json" Then the cp-cli command should succeed And the cp-cli output should contain "deleted_count" # =================================================================== # checkpoint-delete: batch deletion # =================================================================== Scenario: Deleting multiple checkpoints in batch with --yes succeeds Given a cp-cli mocked checkpoint service that can delete checkpoints When I invoke cp-cli checkpoint-delete multiple IDs with yes flag Then the cp-cli command should succeed And the cp-cli output should contain "deleted" # =================================================================== # checkpoint-delete: error handling # =================================================================== Scenario: Deleting a non-existent checkpoint shows error message Given a cp-cli mocked checkpoint service that raises ResourceNotFoundError on delete When I invoke cp-cli checkpoint-delete "01ARZ3NDEKTSV4RRFFQ69G5FAV" with yes flag Then the cp-cli command should abort And the cp-cli output should contain "not found" Scenario: Deleting with no checkpoint IDs aborts Given a cp-cli mocked checkpoint service that can delete checkpoints When I invoke cp-cli checkpoint-delete with no IDs Then the cp-cli command should abort And the cp-cli output should contain "At least one checkpoint ID is required" Scenario: Cancelling deletion confirmation aborts Given a cp-cli mocked checkpoint service that can delete checkpoints When I invoke cp-cli checkpoint-delete "01ARZ3NDEKTSV4RRFFQ69G5FAV" and decline confirmation Then the cp-cli command should abort And the cp-cli output should contain "Deletion cancelled"