Feature: A2A local facade coverage boost — uncovered validation paths As a developer maintaining the A2A local facade I want all error-handling and validation paths exercised So that edge-case regressions are caught early # --------------------------------------------------------------- # Constructor validation (line 82) # --------------------------------------------------------------- Scenario: Constructing A2aLocalFacade with a non-dict raises TypeError When I try to create an A2aLocalFacade with a non-dict services argument Then a TypeError should be raised with message "services must be a dict or None" # --------------------------------------------------------------- # plan.execute — empty plan_id with service wired (line 256) # --------------------------------------------------------------- Scenario: plan.execute with empty plan_id and wired service returns error Given a coverage-boost facade with a mock PlanLifecycleService When I dispatch coverage-boost operation "plan.execute" with params {"plan_id": ""} Then the coverage-boost response status should be "error" And the coverage-boost response error code should be "INTERNAL_ERROR" And the coverage-boost response error message should contain "plan_id is required" Scenario: plan.execute with missing plan_id param and wired service returns error Given a coverage-boost facade with a mock PlanLifecycleService When I dispatch coverage-boost operation "plan.execute" with params {} Then the coverage-boost response status should be "error" And the coverage-boost response error code should be "INTERNAL_ERROR" And the coverage-boost response error message should contain "plan_id is required" # --------------------------------------------------------------- # plan.status — empty plan_id with service wired (line 266) # --------------------------------------------------------------- Scenario: plan.status with empty plan_id and wired service returns error Given a coverage-boost facade with a mock PlanLifecycleService When I dispatch coverage-boost operation "plan.status" with params {"plan_id": ""} Then the coverage-boost response status should be "error" And the coverage-boost response error code should be "INTERNAL_ERROR" And the coverage-boost response error message should contain "plan_id is required" Scenario: plan.status with missing plan_id param and wired service returns error Given a coverage-boost facade with a mock PlanLifecycleService When I dispatch coverage-boost operation "plan.status" with params {} Then the coverage-boost response status should be "error" And the coverage-boost response error code should be "INTERNAL_ERROR" And the coverage-boost response error message should contain "plan_id is required" # --------------------------------------------------------------- # plan.diff — empty plan_id with service wired (line 281) # --------------------------------------------------------------- Scenario: plan.diff with empty plan_id and wired service returns error Given a coverage-boost facade with a mock PlanLifecycleService When I dispatch coverage-boost operation "plan.diff" with params {"plan_id": ""} Then the coverage-boost response status should be "error" And the coverage-boost response error code should be "INTERNAL_ERROR" And the coverage-boost response error message should contain "plan_id is required" Scenario: plan.diff with missing plan_id param and wired service returns error Given a coverage-boost facade with a mock PlanLifecycleService When I dispatch coverage-boost operation "plan.diff" with params {} Then the coverage-boost response status should be "error" And the coverage-boost response error code should be "INTERNAL_ERROR" And the coverage-boost response error message should contain "plan_id is required" # --------------------------------------------------------------- # plan.apply — empty plan_id with service wired (line 295) # --------------------------------------------------------------- Scenario: plan.apply with empty plan_id and wired service returns error Given a coverage-boost facade with a mock PlanLifecycleService When I dispatch coverage-boost operation "plan.apply" with params {"plan_id": ""} Then the coverage-boost response status should be "error" And the coverage-boost response error code should be "INTERNAL_ERROR" And the coverage-boost response error message should contain "plan_id is required" Scenario: plan.apply with missing plan_id param and wired service returns error Given a coverage-boost facade with a mock PlanLifecycleService When I dispatch coverage-boost operation "plan.apply" with params {} Then the coverage-boost response status should be "error" And the coverage-boost response error code should be "INTERNAL_ERROR" And the coverage-boost response error message should contain "plan_id is required"