Files
cleveragents-core/features/fixtures/validation/api_surface_changes.json
T
CoreRasurae 7e6f6fae37
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 12s
CI / build (pull_request) Successful in 15s
CI / quality (pull_request) Successful in 17s
CI / typecheck (pull_request) Successful in 31s
CI / security (pull_request) Successful in 31s
CI / unit_tests (pull_request) Successful in 1m46s
CI / docker (pull_request) Successful in 38s
CI / integration_tests (pull_request) Successful in 2m52s
CI / coverage (pull_request) Successful in 3m41s
CI / benchmark-regression (pull_request) Successful in 23m24s
CI / lint (push) Successful in 14s
CI / build (push) Successful in 15s
CI / quality (push) Successful in 17s
CI / typecheck (push) Successful in 33s
CI / benchmark-regression (push) Has been skipped
CI / security (push) Successful in 35s
CI / unit_tests (push) Successful in 2m13s
CI / docker (push) Successful in 38s
CI / integration_tests (push) Successful in 2m58s
CI / coverage (push) Successful in 3m44s
CI / benchmark-publish (push) Successful in 13m19s
test(validation): add semantic validation suites
Add comprehensive semantic validation test suites covering five
new fixture categories: language porting mismatches, dependency
graph violations, API surface changes, cross-file symbols, and
circular import detection.

New BDD scenarios (38) exercise all six built-in rules against
fixture-driven inputs.  Robot Framework integration tests (11)
validate end-to-end rule execution via the SemanticValidationService.
ASV benchmarks (6 suites) establish performance baselines for
batch validation throughput and per-rule latency.

Files added:
- features/fixtures/validation/{language_porting_mismatches,
  dependency_graph_violations, api_surface_changes,
  cross_file_symbols, circular_import_detection}.json
- features/semantic_validation_suite.feature
- features/steps/semantic_validation_suite_steps.py
- robot/semantic_validation_suite.robot
- robot/helper_semantic_validation_suite.py
- benchmarks/semantic_validation_suite_bench.py
- docs/reference/semantic_validation_coverage.md

All 11 nox sessions pass (lint, format, typecheck, security_scan,
dead_code, unit_tests, integration_tests, docs, build, benchmark,
coverage_report).  Coverage remains at 97%.

ISSUES CLOSED: #316
2026-03-02 22:05:53 +00:00

82 lines
3.6 KiB
JSON

{
"fixtures": [
{
"name": "renamed_function_reference",
"description": "Function uses a name that was renamed — broken reference detected",
"source": "def process():\n return old_handler_xyz()\n",
"filename": "refactored.py",
"expected_rule": "broken_reference",
"expected_passed": false,
"expected_message_contains": "broken reference",
"expected_data_contains": {"filename": "refactored.py"}
},
{
"name": "missing_symbol_in_function",
"description": "Function references a symbol that does not exist in any scope",
"source": "def compute(x):\n return x + missing_constant_xyz\n",
"filename": "missing_api.py",
"expected_rule": "missing_symbol",
"expected_passed": false,
"expected_message_contains": "missing symbol",
"expected_data_contains": {"filename": "missing_api.py"}
},
{
"name": "incompatible_type_usage",
"description": "Calling an attribute on a string literal that does not exist — detectable as broken reference",
"source": "def transform():\n return nonexistent_transformer_xyz.convert()\n",
"filename": "type_mismatch.py",
"expected_rule": "broken_reference",
"expected_passed": false,
"expected_message_contains": "broken reference",
"expected_data_contains": {"filename": "type_mismatch.py"}
},
{
"name": "valid_api_usage",
"description": "All function calls use defined names — passes all rules",
"source": "import json\n\ndef parse(data):\n return json.loads(data)\n",
"filename": "valid_api.py",
"expected_rule": "broken_reference",
"expected_passed": true,
"note": "json.loads is a valid API call"
},
{
"name": "class_method_missing_symbol",
"description": "Class method uses an undefined symbol from a removed API",
"source": "class Processor:\n def run(self):\n return removed_api_function_xyz()\n",
"filename": "class_api.py",
"expected_rule": "missing_symbol",
"expected_passed": false,
"expected_message_contains": "missing symbol",
"expected_data_contains": {"filename": "class_api.py"}
},
{
"name": "eval_based_dynamic_call",
"description": "Using eval to call functions dynamically — API misuse pattern",
"source": "def dispatch(name, arg):\n return eval(f'{name}({arg})')\n",
"filename": "dynamic_api.py",
"expected_rule": "api_misuse",
"expected_passed": false,
"expected_message_contains": "API misuse",
"expected_data_contains": {"filename": "dynamic_api.py"}
},
{
"name": "aliased_pickle_not_caught",
"description": "Aliased import of pickle bypasses APIMisuseRule — known limitation",
"source": "import pickle as pk\n\ndef load_data(path):\n with open(path, 'rb') as f:\n return pk.load(f)\n",
"filename": "aliased_pickle.py",
"expected_rule": "api_misuse",
"expected_passed": true,
"note": "APIMisuseRule checks module names literally; aliased imports (import X as Y) are not tracked"
},
{
"name": "from_import_alias_not_caught",
"description": "From-import alias of dangerous function bypasses APIMisuseRule — known limitation",
"source": "from os import system as run_cmd\n\ndef execute(cmd):\n return run_cmd(cmd)\n",
"filename": "aliased_system.py",
"expected_rule": "api_misuse",
"expected_passed": true,
"note": "APIMisuseRule does not resolve from-import aliases; 'run_cmd' is not in the dangerous names set"
}
]
}