Feature: Multi-project service coverage boost As a developer I want to test edge cases and guard clauses in MultiProjectService So that all code paths have test coverage Background: Given a fresh multi-project service # --- constructor guard: None decision_service (line 59) --- Scenario: Creating service with None decision_service raises ValueError When I create a MultiProjectService with a None decision_service Then a ValueError should have been raised with message "decision_service must not be None" # --- decision_service property accessor (line 66) --- Scenario: Accessing decision_service property returns injected service Then the decision_service property should return the injected mock # --- initialize_scopes: None plan guard (line 93) --- Scenario: Initialize scopes with None plan raises ValueError When I call initialize_scopes with a None plan Then a ValueError should have been raised with message "plan must not be None" # --- initialize_scopes: None available_resources guard (line 95) --- Scenario: Initialize scopes with None available_resources raises ValueError Given a simple two-project plan When I call initialize_scopes with None available_resources Then a ValueError should have been raised with message "available_resources must not be None" # --- resolve_context_view: None plan guard (line 157) --- Scenario: Resolve context view with None plan raises ValueError When I call resolve_context_view with a None plan and project "any" Then a ValueError should have been raised with message "plan must not be None" # --- record_changeset: None plan guard (line 196) --- Scenario: Record changeset with None plan raises ValueError When I call record_changeset with a None plan Then a ValueError should have been raised with message "plan must not be None" # --- record_changeset: metadata not initialized (lines 198-199) --- Scenario: Record changeset without initialized metadata raises ValueError Given a simple two-project plan When I call record_changeset on a plan without metadata Then a ValueError should have been raised with message "Multi-project metadata not initialized" # --- validate_cross_project: None plan (line 253) --- Scenario: Validate cross-project with None plan returns error When I call validate_cross_project with a None plan Then the validation result should contain "plan must not be None" # --- validate_cross_project: no metadata / single-project (line 255) --- Scenario: Validate cross-project with no metadata returns empty list Given a simple two-project plan When I call validate_cross_project on a plan without metadata Then the validation result should be an empty list # --- validate_cross_project: unknown source project (lines 283-285) --- Scenario: Validate cross-project with unknown source project in dependency Given a simple two-project plan And the plan has initialized scopes with resources And the plan has a cross-project dependency from unknown source "phantom-src" to known target "proj-a" When I call validate_cross_project on the prepared plan Then the validation result should contain "unknown source project 'phantom-src'"