Repository Analysis

alecthomas/voluptuous

CONTRIBUTIONS ONLY: Voluptuous, despite the name, is a Python data validation library.

19.6 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of alecthomas/voluptuous, a Python project with 1,847 GitHub stars. SynthScan v2.0 examined 8,271 lines of code across 21 source files, recording 171 pattern matches distributed across 7 syntactic categories. The overall adjusted score of 19.6 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

19.6
Adjusted Score
19.6
Raw Score
100%
Time Factor
2026-07-11
Last Push
1.8K
Stars
Python
Language
8.3K
Lines of Code
21
Files
171
Pattern Hits
2026-07-14
Scan Date
0.10
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 2MEDIUM 4LOW 165

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 171 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers122 hits · 96 pts
SeverityFileLineSnippetContext
LOWvoluptuous/humanize.py51def validate_with_humanized_errors(CODE
LOWvoluptuous/schema_builder.py789 def _normalize_schema_extension(CODE
LOWvoluptuous/schema_builder.py905def _iterate_mapping_candidates(schema):CODE
LOWvoluptuous/schema_builder.py1234 def _is_complex_key_validator(self, schema):CODE
LOWvoluptuous/schema_builder.py1382 def validate_schema_decorator(func):CODE
LOWvoluptuous/dataclasses_support.py83def get_dataclass_field_defaults(dataclass_type: Type) -> Dict[str, Any]:CODE
LOWvoluptuous/tests/test_dataclasses.py359 def test_dataclass_with_list_field(self):CODE
LOWvoluptuous/tests/test_dataclasses.py27 def test_is_dataclass_with_dataclass(self):CODE
LOWvoluptuous/tests/test_dataclasses.py38 def test_is_dataclass_with_regular_class(self):CODE
LOWvoluptuous/tests/test_dataclasses.py49 def test_is_dataclass_with_primitive_types(self):CODE
LOWvoluptuous/tests/test_dataclasses.py60 def test_simple_dataclass_schema(self):CODE
LOWvoluptuous/tests/test_dataclasses.py76 def test_dataclass_with_defaults(self):CODE
LOWvoluptuous/tests/test_dataclasses.py99 def test_dataclass_with_default_factory(self):CODE
LOWvoluptuous/tests/test_dataclasses.py136 def test_missing_required_fields(self):CODE
LOWvoluptuous/tests/test_dataclasses.py156 def test_additional_constraints(self):CODE
LOWvoluptuous/tests/test_dataclasses.py229 def test_additional_fields_not_in_dataclass(self):CODE
LOWvoluptuous/tests/test_dataclasses.py255 def test_create_dataclass_schema_basic(self):CODE
LOWvoluptuous/tests/test_dataclasses.py270 def test_create_dataclass_schema_with_constraints(self):CODE
LOWvoluptuous/tests/test_dataclasses.py311 def test_nested_dataclass_like_structure(self):CODE
LOWvoluptuous/tests/test_dataclasses.py419 def test_regular_schema_still_works(self):CODE
LOWvoluptuous/tests/test_dataclasses.py429 def test_object_validator_still_works(self):CODE
LOWvoluptuous/tests/tests.py546def test_schema_extend_with_schema_instance_rejects_extra_mismatch():CODE
LOWvoluptuous/tests/tests.py556def test_schema_extend_with_non_dictionary_schema_instance_fails():CODE
LOWvoluptuous/tests/tests.py566def test_schema_extend_overrides():CODE
LOWvoluptuous/tests/tests.py1007def test_schema_decorator_match_with_args():CODE
LOWvoluptuous/tests/tests.py1015def test_schema_decorator_unmatch_with_args():CODE
LOWvoluptuous/tests/tests.py1023def test_schema_decorator_match_with_kwargs():CODE
LOWvoluptuous/tests/tests.py1031def test_schema_decorator_unmatch_with_kwargs():CODE
LOWvoluptuous/tests/tests.py1039def test_schema_decorator_match_return_with_args():CODE
LOWvoluptuous/tests/tests.py1047def test_schema_decorator_unmatch_return_with_args():CODE
LOWvoluptuous/tests/tests.py1055def test_schema_decorator_match_return_with_kwargs():CODE
LOWvoluptuous/tests/tests.py1063def test_schema_decorator_unmatch_return_with_kwargs():CODE
LOWvoluptuous/tests/tests.py1071def test_schema_decorator_return_only_match():CODE
LOWvoluptuous/tests/tests.py1079def test_schema_decorator_return_only_unmatch():CODE
LOWvoluptuous/tests/tests.py1087def test_schema_decorator_partial_match_called_with_args():CODE
LOWvoluptuous/tests/tests.py1095def test_schema_decorator_partial_unmatch_called_with_args():CODE
LOWvoluptuous/tests/tests.py1103def test_schema_decorator_partial_match_called_with_kwargs():CODE
LOWvoluptuous/tests/tests.py1111def test_schema_decorator_partial_unmatch_called_with_kwargs():CODE
LOWvoluptuous/tests/tests.py1119def test_number_validation_with_string():CODE
LOWvoluptuous/tests/tests.py1557def test_path_with_list_index():CODE
LOWvoluptuous/tests/tests.py1566def test_path_with_tuple_index():CODE
LOWvoluptuous/tests/tests.py1575def test_path_with_integer_dict_key():CODE
LOWvoluptuous/tests/tests.py1584def test_path_with_float_dict_key():CODE
LOWvoluptuous/tests/tests.py1593def test_path_with_tuple_dict_key():CODE
LOWvoluptuous/tests/tests.py1602def test_path_with_arbitrary_hashable_dict_key():CODE
LOWvoluptuous/tests/tests.py1748def test_lower_util_handles_various_inputs():CODE
LOWvoluptuous/tests/tests.py1755def test_upper_util_handles_various_inputs():CODE
LOWvoluptuous/tests/tests.py1762def test_capitalize_util_handles_various_inputs():CODE
LOWvoluptuous/tests/tests.py1771def test_title_util_handles_various_inputs():CODE
LOWvoluptuous/tests/tests.py1778def test_strip_util_handles_various_inputs():CODE
LOWvoluptuous/tests/tests.py129def test_in_unsortable_container():CODE
LOWvoluptuous/tests/tests.py161def test_not_in_unsortable_container():CODE
LOWvoluptuous/tests/tests.py299def test_email_validation_with_none():CODE
LOWvoluptuous/tests/tests.py311def test_email_validation_with_empty_string():CODE
LOWvoluptuous/tests/tests.py323def test_email_validation_without_host():CODE
LOWvoluptuous/tests/tests.py335def test_invalid_repr_includes_path_and_type():CODE
LOWvoluptuous/tests/tests.py352def test_email_validation_with_bad_data(input_value: str):CODE
LOWvoluptuous/tests/tests.py381def test_fqdn_url_validation_with_bad_data(input_value):CODE
LOWvoluptuous/tests/tests.py408def test_url_validation_with_bad_data(input_value):CODE
LOWvoluptuous/tests/tests.py458def test_schema_extend_with_schema_instance():CODE
62 more matches not shown…
Unused Imports15 hits · 15 pts
SeverityFileLineSnippetContext
LOWvoluptuous/util.py5CODE
LOWvoluptuous/util.py6CODE
LOWvoluptuous/util.py7CODE
LOWvoluptuous/util.py8CODE
LOWvoluptuous/util.py8CODE
LOWvoluptuous/validators.py2CODE
LOWvoluptuous/validators.py41CODE
LOWvoluptuous/__init__.py78CODE
LOWvoluptuous/__init__.py78CODE
LOWvoluptuous/__init__.py78CODE
LOWvoluptuous/__init__.py86CODE
LOWvoluptuous/__init__.py87CODE
LOWvoluptuous/__init__.py88CODE
LOWvoluptuous/__init__.py90CODE
LOWvoluptuous/schema_builder.py2CODE
Fake / Example Data12 hits · 14 pts
SeverityFileLineSnippetContext
LOWREADME.md730result = schema({'name': 'John Doe', 'age': 30, 'active': False})CODE
LOWREADME.md731# Returns: Person(name='John Doe', age=30, active=False)COMMENT
LOWREADME.md786 'street': '123 Main St',CODE
LOWvoluptuous/tests/test_dataclasses.py342 'name': 'John Doe',CODE
LOWvoluptuous/tests/test_dataclasses.py345 'street': '123 Main St',CODE
LOWvoluptuous/tests/test_dataclasses.py352 assert result.name == 'John Doe'CODE
LOWvoluptuous/tests/test_dataclasses.py355 assert result.address.street == '123 Main St'CODE
LOWvoluptuous/tests/test_dataclasses.py175 result = schema({'name': 'John Doe', 'age': 30, 'email': 'john@example.com'})CODE
LOWvoluptuous/tests/test_dataclasses.py176 assert result.name == 'John Doe'CODE
LOWexamples/dataclasses_example.py41 result = schema({'name': 'John Doe', 'age': 30, 'active': False})CODE
LOWexamples/dataclasses_example.py149 'street': '123 Main St',CODE
LOWexamples/dataclasses_example.py334 {'name': 'John Doe', 'age': 30, 'email': 'john@example.com'}CODE
Deep Nesting12 hits · 12 pts
SeverityFileLineSnippetContext
LOWvoluptuous/schema_builder.py212CODE
LOWvoluptuous/schema_builder.py238CODE
LOWvoluptuous/schema_builder.py445CODE
LOWvoluptuous/schema_builder.py580CODE
LOWvoluptuous/schema_builder.py667CODE
LOWvoluptuous/schema_builder.py789CODE
LOWvoluptuous/schema_builder.py291CODE
LOWvoluptuous/schema_builder.py533CODE
LOWvoluptuous/schema_builder.py596CODE
LOWvoluptuous/schema_builder.py683CODE
LOWvoluptuous/dataclasses_support.py30CODE
LOWvoluptuous/dataclasses_support.py149CODE
Docstring Block Structure2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHvoluptuous/dataclasses_support.py31Extract field information from a dataclass. Args: dataclass_type: The dataclass type to extract fields fromSTRING
HIGHvoluptuous/dataclasses_support.py155Create a voluptuous Schema from a dataclass. Args: dataclass_type: The dataclass type to create a schema foSTRING
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMvoluptuous/dataclasses_support.py218 # Create a custom validator that validates dict and creates dataclass instanceCOMMENT
MEDIUMvoluptuous/dataclasses_support.py278 # Create the schema using the helper functionCOMMENT
MEDIUMvoluptuous/tests/tests.py2137 # Create a very long string that will be truncatedCOMMENT
Excessive Try-Catch Wrapping5 hits · 6 pts
SeverityFileLineSnippetContext
LOWvoluptuous/util.py127 except Exception as e:CODE
MEDIUMvoluptuous/util.py124def __call__(self, v):CODE
LOWvoluptuous/tests/tests.py429 except Exception as e:CODE
LOWexamples/dataclasses_example.py95 except Exception as e:CODE
LOWexamples/dataclasses_example.py106 except Exception as e:CODE