Repository Analysis

python/peps

Python Enhancement Proposals

9.8 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of python/peps, a reStructuredText project with 4,998 GitHub stars. SynthScan v2.0 examined 14,031 lines of code across 92 source files, recording 114 pattern matches distributed across 9 syntactic categories. The overall adjusted score of 9.8 places this repository in the Low 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).

9.8
Adjusted Score
9.8
Raw Score
100%
Time Factor
2026-08-29
Last Push
5.0K
Stars
reStructuredText
Language
14.0K
Lines of Code
92
Files
114
Pattern Hits
2026-08-29
Scan Date
0.01
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

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

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 1HIGH 0MEDIUM 7LOW 106

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 114 distinct pattern matches across 9 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 Identifiers60 hits · 61 pts
SeverityFileLineSnippetContext
LOWcheck-peps.py229def _validate_required_headers(found_headers: KeysView[str]) -> MessageIterator:CODE
LOWrelease_management/serialize.py66def create_release_schedule_calendar() -> str:CODE
LOWrelease_management/serialize.py81def release_schedule_calendar_lines(CODE
LOW…ase_management/tests/test_release_schedule_calendar.py13def test_create_release_calendar_has_calendar_metadata() -> None:CODE
LOW…ase_management/tests/test_release_schedule_calendar.py33def test_create_release_calendar_first_event() -> None:CODE
LOWpep_sphinx_extensions/__init__.py34def _update_config_for_builder(app: Sphinx) -> None:CODE
LOW…inx_extensions/tests/pep_zero_generator/test_parser.py105def test_parse_authors_invalid():CODE
LOW…inx_extensions/tests/pep_zero_generator/test_parser.py127def test_abbreviate_type_status(test_type, test_status, expected):CODE
LOW…inx_extensions/tests/pep_zero_generator/test_writer.py8def test_pep_zero_writer_emit_text_newline():CODE
LOW…inx_extensions/tests/pep_zero_generator/test_writer.py17def test_pep_zero_writer_emit_title():CODE
LOW…inx_extensions/tests/pep_zero_generator/test_writer.py48def test_verify_email_addresses(test_input, expected):CODE
LOW…inx_extensions/tests/pep_zero_generator/test_writer.py59def test_verify_email_addresses_multiple_emails():CODE
LOW…inx_extensions/tests/pep_zero_generator/test_writer.py104def test_emit_pep_row_links_python_version_to_release_pep(CODE
LOW…s/tests/pep_zero_generator/test_pep_index_generator.py14def test_build_release_peps_links_individual_versions_from_joint_release_pep():CODE
LOW…ions/tests/pep_processor/transform/test_pep_headers.py91def test_process_pretty_url_invalid(test_input, expected):CODE
LOW…ions/tests/pep_processor/transform/test_pep_headers.py152def test_abbreviate_status_unknown():CODE
LOW…ions/tests/pep_processor/transform/test_pep_headers.py183def test_abbreviate_type_unknown():CODE
LOW…sions/tests/pep_processor/transform/test_pep_footer.py6def test_get_page_footer_context():CODE
LOW…sions/tests/pep_processor/transform/test_pep_footer.py19def test_get_page_footer_context_no_history():CODE
LOW…sions/tests/pep_processor/transform/test_pep_footer.py28def test_get_last_modified_timestamps():CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_email.py35def test_validate_author_over__indented(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_email.py49def test_validate_author_continuation(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py23def test_validate_discussions_to_valid(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py37def test_validate_discussions_to_list_name(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py51def test_validate_discussions_to_invalid_list_domain(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py79def test_validate_post_history_valid(body: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py91def test_validate_post_history_unbalanced_link(body: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py112def test_validate_resolution_valid(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py132def test_validate_resolution_invalid(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py144def test_validate_resolution_unbalanced_link(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py171def test_thread_checker_valid(thread_url: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py224def test_thread_checker_invalid(thread_url: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py244def test_thread_checker_valid_allow_message(thread_url: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py269def test_thread_checker_invalid_allow_message(thread_url: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py296def test_thread_checker_valid_discussions_to(thread_url: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py320def test_thread_checker_invalid_discussions_to(thread_url: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_post_url.py330def test_thread_checker_allow_message_discussions_to():CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_pep_number.py27def test_validate_pep_number_invalid_header(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_pep_lint.py50def test_skip_direct_pep_link_check():CODE
LOW…_sphinx_extensions/tests/pep_lint/test_direct_links.py14def test_check_direct_links_pep(line: str):CODE
LOW…_sphinx_extensions/tests/pep_lint/test_direct_links.py28def test_check_direct_links_rfc(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_date.py69def test_date_checker_malformed(date_str: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_date.py85def test_date_checker_too_early(date_str: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_date.py102def test_date_checker_too_late(date_str: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py47def test_header_pattern_no_match(test_input):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py51def test_validate_required_headers():CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py61def test_validate_required_headers_missing():CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py72def test_validate_required_headers_order():CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py97def test_validate_title_blank():CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py102def test_validate_title_too_long():CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py122def test_validate_status_valid(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py145def test_validate_status_invalid(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py181def test_validate_type_invalid(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py264def test_validate_pep_references(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py279def test_validate_pep_references_separators(line: str):CODE
LOWpep_sphinx_extensions/tests/pep_lint/test_headers.py330def test_validate_python_version(line: str, expected_warnings: set):CODE
LOWpep_sphinx_extensions/pep_zero_generator/writer.py73 def emit_author_table_separator(self, max_name_len: int) -> None:STRING
LOW…x_extensions/pep_processor/html/pep_html_translator.py20 def should_be_compact_paragraph(node: nodes.paragraph) -> bool:CODE
LOW…x_extensions/pep_processor/html/pep_html_translator.py66 def depart_footnote_reference(self, node):CODE
LOW…hinx_extensions/pep_processor/transforms/pep_footer.py58def _get_last_modified_timestamps():CODE
Self-Referential Comments7 hits · 21 pts
SeverityFileLineSnippetContext
MEDIUMbuild.py2# This file is placed in the public domain or under theCOMMENT
MEDIUMcheck-peps.py3# This file is placed in the public domain or under theCOMMENT
MEDIUMrelease_management/python-releases.toml1# This file is placed in the public domain or under theCOMMENT
MEDIUMpeps/conf.py1# This file is placed in the public domain or under theCOMMENT
MEDIUMpep_sphinx_extensions/generate_rss.py1# This file is placed in the public domain or under theCOMMENT
MEDIUM…phinx_extensions/pep_processor/transforms/pep_title.py40 # Create the title string for the PEPCOMMENT
MEDIUM…nx_extensions/pep_processor/transforms/pep_contents.py19 # Create the contents placeholder sectionCOMMENT
Unused Imports19 hits · 19 pts
SeverityFileLineSnippetContext
LOWcheck-peps.py16CODE
LOWrelease_management/serialize.py1CODE
LOWrelease_management/serialize.py7CODE
LOWrelease_management/update_release_schedules.py26CODE
LOWrelease_management/__init__.py1CODE
LOWrelease_management/__main__.py1CODE
LOWpep_sphinx_extensions/__init__.py3CODE
LOWpep_sphinx_extensions/__init__.py12CODE
LOWpep_sphinx_extensions/generate_rss.py4CODE
LOWpep_sphinx_extensions/pep_zero_generator/subindices.py3CODE
LOWpep_sphinx_extensions/pep_zero_generator/parser.py3CODE
LOWpep_sphinx_extensions/pep_zero_generator/writer.py3CODE
LOW…x_extensions/pep_zero_generator/pep_index_generator.py18CODE
LOWpep_sphinx_extensions/pep_zero_generator/errors.py1CODE
LOW…x_extensions/pep_processor/html/pep_html_translator.py1CODE
LOW…sphinx_extensions/pep_processor/transforms/pep_zero.py1CODE
LOW…nx_extensions/pep_processor/transforms/pep_contents.py1CODE
LOW…tensions/pep_processor/parsing/pep_banner_directive.py3CODE
LOW…_sphinx_extensions/pep_processor/parsing/pep_parser.py1CODE
Deep Nesting12 hits · 12 pts
SeverityFileLineSnippetContext
LOWcheck-peps.py128CODE
LOWcheck-peps.py167CODE
LOWcheck-peps.py369CODE
LOWcheck-peps.py401CODE
LOWcheck-peps.py504CODE
LOWrelease_management/update_release_schedules.py116CODE
LOWpeps/pep-0465/scan-ops.py50CODE
LOWpeps/pep-0426/pepsort.py124CODE
LOWpep_sphinx_extensions/pep_zero_generator/writer.py297CODE
LOW…hinx_extensions/pep_processor/transforms/pep_footer.py18CODE
LOW…inx_extensions/pep_processor/transforms/pep_headers.py213CODE
LOW…inx_extensions/pep_processor/transforms/pep_headers.py58CODE
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALpep_sphinx_extensions/pep_processor/parsing/pep_role.py17 pep_base = self.inliner.document.settings.pep_url.format(pep_num)CODE
Over-Commented Block6 hits · 6 pts
SeverityFileLineSnippetContext
LOWrelease_management/python-releases.toml1# This file is placed in the public domain or under theCOMMENT
LOWrelease_management/python-releases.toml481[[release."2.4"]]COMMENT
LOWpeps/pep-0465/scan-ops.py121 [[],COMMENT
LOWpeps/pep-0418/bench_time.c41 {"CLOCK_PROCESS_CPUTIME_ID", CLOCK_PROCESS_CPUTIME_ID},COMMENT
LOWpeps/pep-0418/bench_time.c61#ifdef CLOCK_MONOTONIC_PRECISECOMMENT
LOWpeps/pep-0418/clockutils.py1#!/usr/bin/pythonCOMMENT
Modern Structural Boilerplate4 hits · 4 pts
SeverityFileLineSnippetContext
LOWrelease_management/update_release_schedules.py66def update_peps() -> None:CODE
LOWrelease_management/update_release_schedules.py116def update_pep(metadata: VersionMetadata, schedules: ReleaseSchedules) -> None:CODE
LOWpeps/pep-0426/pepsort.py18logger = logging.getLogger(__name__)CODE
LOWpep_sphinx_extensions/__init__.py34def _update_config_for_builder(app: Sphinx) -> None:CODE
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippetContext
LOW…inx_extensions/tests/pep_zero_generator/test_parser.py79 [_Author(full_name="First Last", email="user@example.com")],CODE
LOW…inx_extensions/tests/pep_zero_generator/test_parser.py87 [_Author(full_name="First Last", email="user@example.com")],CODE
LOW…ensions/tests/pep_processor/transform/test_pep_zero.py12 "", text="user@example.com", refuri="mailto:user@example.com"CODE
Excessive Try-Catch Wrapping2 hits · 2 pts
SeverityFileLineSnippetContext
LOWpeps/pep-0465/scan-ops.py60 except Exception as e:CODE
LOWpeps/pep-0426/pepsort.py173 except Exception:CODE