forked from HAL9000/cleveragents-core
7e6f6fae37
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
118 lines
6.5 KiB
Markdown
118 lines
6.5 KiB
Markdown
# Semantic Validation Coverage Expectations
|
|
|
|
## Overview
|
|
|
|
The semantic validation subsystem provides static analysis of Python source code
|
|
through a pluggable rule-based architecture. This document describes the test
|
|
coverage expectations for the validation fixture suites.
|
|
|
|
## Rule Coverage Matrix
|
|
|
|
Each built-in rule is exercised by dedicated fixture suites that test both
|
|
passing (no violation detected) and failing (violation correctly flagged)
|
|
scenarios.
|
|
|
|
| Rule | Fixture Suite | Pass Scenarios | Fail Scenarios |
|
|
| :--- | :------------ | :------------- | :------------- |
|
|
| `SyntaxCheckRule` | Language-porting mismatches | Valid Python patterns (diamond inheritance, metaclasses, walrus operator, star unpacking) | — |
|
|
| `MissingImportRule` | Dependency graph violations | Valid stdlib private imports (`_thread`), mixed valid imports | Private module imports, from-private imports |
|
|
| `BrokenReferenceRule` | API surface changes, Cross-file symbols | Valid API usage, properly imported cross-module symbols | Renamed function references, incompatible type usage, undefined cross-module references, wildcard imports (known limitation) |
|
|
| `DuplicateImportRule` | Dependency graph violations, Duplicate relative imports | Mixed valid imports, clean relative imports, absolute imports (not flagged), syntax errors (skipped) | Duplicate relative imports, triple duplicates, direct duplicates, multiple self-references |
|
|
| `APIMisuseRule` | Language-porting mismatches, API surface changes | List comprehension side effects (not flagged), dynamic attribute access, aliased imports (known limitation) | eval-based dynamic calls, eval in porting context, exec for code generation |
|
|
| `MissingSymbolRule` | API surface changes, Cross-file symbols | Closure variables (enclosing scope tracking), deeply nested closures | Missing symbols in functions, class method missing symbols, undefined in class methods |
|
|
|
|
## Fixture Categories
|
|
|
|
### 1. Language-Porting Mismatches
|
|
|
|
Fixtures in `features/fixtures/validation/language_porting_mismatches.json`
|
|
cover Python-specific patterns that are difficult or impossible to port to
|
|
other languages: list comprehension side effects, dynamic attribute access,
|
|
diamond inheritance, metaclasses, star unpacking, and walrus operators.
|
|
|
|
**Coverage expectation:** Pass fixtures verify that valid Python porting
|
|
patterns are not falsely flagged. Fail fixtures (`eval_in_porting_context`,
|
|
`exec_for_code_generation`) verify that genuinely dangerous API usage is
|
|
detected regardless of the porting context.
|
|
|
|
### 2. Dependency Graph Violations
|
|
|
|
Fixtures in `features/fixtures/validation/dependency_graph_violations.json`
|
|
cover import-related violations: duplicate relative imports (cycle indicators),
|
|
private module imports not in stdlib, and valid import patterns as negative
|
|
controls.
|
|
|
|
**Coverage expectation:** Failure fixtures trigger `duplicate_import` or
|
|
`missing_import` rules. Pass fixtures confirm no false positives on valid
|
|
patterns.
|
|
|
|
### 3. API Surface Changes
|
|
|
|
Fixtures in `features/fixtures/validation/api_surface_changes.json` cover
|
|
renamed functions, missing symbols, incompatible types, dynamic API calls
|
|
via `eval`, and known limitation fixtures for import aliasing bypass.
|
|
|
|
**Coverage expectation:** Failure fixtures trigger `broken_reference`,
|
|
`missing_symbol`, or `api_misuse` rules. Pass fixtures confirm valid API
|
|
usage is not flagged. Aliasing limitation fixtures
|
|
(`aliased_pickle_not_caught`, `from_import_alias_not_caught`) document that
|
|
`APIMisuseRule` does not resolve import aliases.
|
|
|
|
### 4. Cross-File Symbol Resolution
|
|
|
|
Fixtures in `features/fixtures/validation/cross_file_symbols.json` cover
|
|
cross-module references, properly imported symbols, closure scoping (including
|
|
deeply nested closures), class method undefined references, and wildcard
|
|
imports.
|
|
|
|
**Coverage expectation:** Single-file rules cannot detect true cross-file
|
|
resolution failures when the symbol appears imported. Closure fixtures
|
|
verify that `MissingSymbolRule` correctly tracks enclosing function scopes.
|
|
Fixtures test the boundaries of what single-file analysis can detect.
|
|
|
|
### 5. Duplicate Relative Import Detection
|
|
|
|
Fixtures in `features/fixtures/validation/circular_import_detection.json`
|
|
cover duplicate relative imports within a single file, multiple self-
|
|
references, clean imports, and edge cases (absolute imports, syntax errors).
|
|
|
|
> **Note:** `DuplicateImportRule` detects duplicate `from . import X`
|
|
> statements **within a single file** as a heuristic for structural problems.
|
|
> It does **not** perform cross-file circular dependency detection. The
|
|
> fixture category name reflects duplicate relative import detection, not
|
|
> true circular import analysis.
|
|
|
|
**Coverage expectation:** `DuplicateImportRule` flags repeated relative
|
|
`from . import X` patterns as duplicate indicators. Absolute imports are
|
|
not flagged. Syntax errors cause the rule to skip gracefully.
|
|
|
|
## Known Limitations
|
|
|
|
The following known limitations are documented via fixture tests:
|
|
|
|
| Limitation | Rule | Fixture | Description |
|
|
| :--------- | :--- | :------ | :---------- |
|
|
| Import aliasing bypass | `APIMisuseRule` | `aliased_pickle_not_caught`, `from_import_alias_not_caught` | Aliased imports (`import X as Y`, `from X import func as alias`) bypass detection because the rule matches module/function names literally |
|
|
| Wildcard import resolution | `BrokenReferenceRule` | `wildcard_import_symbol` | Names imported via `from X import *` are not tracked, causing false positives on valid wildcard-imported names |
|
|
| No cross-file cycle detection | `DuplicateImportRule` | — | Only detects duplicates within a single file; cannot trace import cycles across modules |
|
|
|
|
## Test Infrastructure
|
|
|
|
- **Shared utilities:** `features/fixtures/validation/suite_helpers.py` — common
|
|
fixture loading, lookup, rule-map, and verification logic used by all three
|
|
test frameworks.
|
|
- **BDD (Behave):** `features/semantic_validation_suite.feature` — 38 scenarios
|
|
covering all five fixture categories with individual fixture validation and
|
|
schema-validated loading tests.
|
|
- **Integration (Robot):** `robot/semantic_validation_suite.robot` — 11 test
|
|
cases that load fixtures and run them through rules via a helper script.
|
|
- **Benchmarks (ASV):** `benchmarks/semantic_validation_suite_bench.py` — 6
|
|
benchmark suites measuring fixture load time, individual suite runtime, and
|
|
combined full-suite runtime.
|
|
|
|
## Coverage Target
|
|
|
|
All semantic validation code must maintain **>=97%** line coverage as measured
|
|
by `nox -s coverage_report`. The fixture suites contribute to this target by
|
|
exercising rule logic across diverse code patterns and edge cases.
|