Feature: Cleanup CLI uncovered branches
  Cover missed lines and branches in cleveragents.cli.commands.cleanup:
  L49-50 (inner OSError in _detect_active_plan_ids),
  L52-58 (outer OSError),
  L87→94 (scan with no stale items),
  L128-131 (purge dry-run with stale items),
  L139→143 (purge confirmation prompt accepted).

  Scenario: scan reports no stale resources when report is empty
    Given cleanup cli branch mock service returns empty report
    When cleanup cli branch I invoke scan via main app
    Then cleanup cli branch exit code is 0
    And cleanup cli branch output contains "No stale resources found"

  Scenario: purge dry-run lists stale items when present
    Given cleanup cli branch mock service returns report with stale items
    When cleanup cli branch I invoke purge dry-run via main app
    Then cleanup cli branch exit code is 0
    And cleanup cli branch output contains "Would clean:"
    And cleanup cli branch output contains "/tmp/fake-sandbox"

  Scenario: detect active plan ids handles inner OSError on stat
    Given cleanup cli branch a service whose sandbox dir stat raises OSError
    When cleanup cli branch I call detect active plan ids
    Then cleanup cli branch the result is an empty frozenset

  Scenario: detect active plan ids handles outer OSError from get sandbox dirs
    Given cleanup cli branch a service whose get sandbox dirs raises OSError
    When cleanup cli branch I call detect active plan ids
    Then cleanup cli branch the result is an empty frozenset
    And cleanup cli branch a warning was printed about active plans

  Scenario: detect active plan ids returns empty frozenset for empty dir list
    Given cleanup cli branch a service with no sandbox dirs
    When cleanup cli branch I call detect active plan ids
    Then cleanup cli branch the result is an empty frozenset

  Scenario: purge with confirmation prompt accepted proceeds to purge
    Given cleanup cli branch mock service returns purge report
    When cleanup cli branch I invoke purge with confirmation y via main app
    Then cleanup cli branch exit code is 0
    And cleanup cli branch output contains "Cleanup Complete"
