Feature: Semantic validation suite fixtures
  As a plan executor
  I want semantic validation suites covering porting mismatches, dependency violations,
  API surface changes, cross-file symbols, and duplicate relative import detection
  So that error patterns are caught and categorised before code reaches production

  Background:
    Given a semantic validation suite test environment

  # ── Language-porting mismatches ─────────────────────────────────

  Scenario: Porting fixture list_comprehension_side_effect passes api_misuse rule
    Given the porting fixture "list_comprehension_side_effect"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Porting fixture dynamic_attribute_access passes broken_reference rule
    Given the porting fixture "dynamic_attribute_access"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Porting fixture multiple_inheritance_diamond passes syntax_error rule
    Given the porting fixture "multiple_inheritance_diamond"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Porting fixture metaclass_usage passes syntax_error rule
    Given the porting fixture "metaclass_usage"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Porting fixture unpacking_star_expression passes broken_reference rule
    Given the porting fixture "unpacking_star_expression"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Porting fixture walrus_operator passes syntax_error rule
    Given the porting fixture "walrus_operator"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Porting fixture eval_in_porting_context fails api_misuse rule
    Given the porting fixture "eval_in_porting_context"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Porting fixture exec_for_code_generation fails api_misuse rule
    Given the porting fixture "exec_for_code_generation"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  # ── Dependency graph violations ─────────────────────────────────

  Scenario: Dependency fixture duplicate_relative_imports fails duplicate_import rule
    Given the dependency fixture "duplicate_relative_imports"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Dependency fixture triple_relative_import_cycle fails duplicate_import rule
    Given the dependency fixture "triple_relative_import_cycle"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Dependency fixture mixed_valid_imports passes duplicate_import rule
    Given the dependency fixture "mixed_valid_imports"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Dependency fixture private_module_import fails missing_import rule
    Given the dependency fixture "private_module_import"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Dependency fixture from_private_module_import fails missing_import rule
    Given the dependency fixture "from_private_module_import"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Dependency fixture valid_stdlib_private_import passes missing_import rule
    Given the dependency fixture "valid_stdlib_private_import"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  # ── API surface changes ─────────────────────────────────────────

  Scenario: API fixture renamed_function_reference fails broken_reference rule
    Given the API surface fixture "renamed_function_reference"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: API fixture missing_symbol_in_function fails missing_symbol rule
    Given the API surface fixture "missing_symbol_in_function"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: API fixture incompatible_type_usage fails broken_reference rule
    Given the API surface fixture "incompatible_type_usage"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: API fixture valid_api_usage passes broken_reference rule
    Given the API surface fixture "valid_api_usage"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: API fixture class_method_missing_symbol fails missing_symbol rule
    Given the API surface fixture "class_method_missing_symbol"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: API fixture eval_based_dynamic_call fails api_misuse rule
    Given the API surface fixture "eval_based_dynamic_call"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: API fixture aliased_pickle_not_caught documents known limitation
    Given the API surface fixture "aliased_pickle_not_caught"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: API fixture from_import_alias_not_caught documents known limitation
    Given the API surface fixture "from_import_alias_not_caught"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  # ── Cross-file symbol resolution ────────────────────────────────

  Scenario: Cross-file fixture undefined_cross_module_reference fails broken_reference rule
    Given the cross-file fixture "undefined_cross_module_reference"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Cross-file fixture properly_imported_cross_module passes broken_reference rule
    Given the cross-file fixture "properly_imported_cross_module"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Cross-file fixture nested_function_scoped_symbol passes missing_symbol rule
    Given the cross-file fixture "nested_function_scoped_symbol"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Cross-file fixture undefined_in_class_method fails missing_symbol rule
    Given the cross-file fixture "undefined_in_class_method"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Cross-file fixture wildcard_import_symbol fails broken_reference rule
    Given the cross-file fixture "wildcard_import_symbol"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Cross-file fixture deeply_nested_closure passes missing_symbol rule
    Given the cross-file fixture "deeply_nested_closure"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  # ── Duplicate relative import detection ─────────────────────────

  Scenario: Duplicate import fixture direct_circular_import fails duplicate_import rule
    Given the circular import fixture "direct_circular_import"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Duplicate import fixture multiple_self_references fails duplicate_import rule
    Given the circular import fixture "multiple_self_references"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Duplicate import fixture clean_relative_imports passes duplicate_import rule
    Given the circular import fixture "clean_relative_imports"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Duplicate import fixture absolute_imports_not_flagged passes duplicate_import rule
    Given the circular import fixture "absolute_imports_not_flagged"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  Scenario: Duplicate import fixture syntax_error_skips_check passes duplicate_import rule
    Given the circular import fixture "syntax_error_skips_cycle_check"
    When the suite runs the expected rule
    Then the suite result matches the fixture expectation

  # ── Full suite validation ───────────────────────────────────────

  Scenario: All porting fixtures load and validate schema
    Then all porting fixtures load without error

  Scenario: All dependency fixtures load and validate schema
    Then all dependency fixtures load without error

  Scenario: All API surface fixtures load and validate schema
    Then all API surface fixtures load without error

  Scenario: All cross-file fixtures load and validate schema
    Then all cross-file fixtures load without error

  Scenario: All circular import fixtures load and validate schema
    Then all circular import fixtures load without error
