Decentralized cryptocurrency blockchain daemon implementing the XRP Ledger protocol in C++
This report presents the forensic synthetic code analysis of XRPLF/rippled, a C++ project with 5,173 GitHub stars. SynthScan v2.0 examined 622,174 lines of code across 1860 source files, recording 1616 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 2.7 places this repository in the Likely human-written 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).
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.
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.
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.
The scanner identified 1616 distinct pattern matches across 13 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-config.yaml | 1 | # To run pre-commit hooks, first install pre-commit: | COMMENT |
| LOW | nix/docker/test_files/cpp/sources/asan.cpp | 1 | #include <atomic> | COMMENT |
| LOW | bin/check-tools.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/install-sanitizer-libs.sh | 1 | #!/bin/bash | COMMENT |
| LOW | include/xrpl/basics/base_uint.h | 1 | // Copyright (c) 2009-2010 Satoshi Nakamoto | COMMENT |
| LOW | include/xrpl/basics/base_uint.h | 21 | #include <array> | COMMENT |
| LOW | include/xrpl/basics/IntrusiveRefCounts.h | 81 | // Calling this function may cause other threads to delete the object | COMMENT |
| LOW | include/xrpl/basics/TaggedCache.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/basics/TaggedCache.h | 21 | #include <string> | COMMENT |
| LOW | include/xrpl/basics/chrono.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/basics/Slice.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/basics/SlabAllocator.h | 1 | // Copyright (c) 2022, Nikolaos D. Bougalis <nikb@bougalis.net> | COMMENT |
| LOW | include/xrpl/basics/Log.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/basics/StringUtilities.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/basics/partitioned_unordered_map.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/basics/Number.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/basics/MallocTrim.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/basics/scope.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/CachedView.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/AcceptedLedgerTx.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/ApplyView.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/View.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/View.h | 21 | #include <cstdint> | COMMENT |
| LOW | include/xrpl/ledger/ReadView.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/AmendmentTable.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/AmendmentTable.h | 21 | #include <xrpl/protocol/TxFormats.h> | COMMENT |
| LOW | include/xrpl/ledger/AmendmentTable.h | 141 | COMMENT | |
| LOW | include/xrpl/ledger/ApplyViewImpl.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/OpenView.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/PaymentSandbox.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/OrderBookDB.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/Ledger.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/detail/RawStateTable.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/detail/ApplyViewBase.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/detail/ApplyStateTable.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/SponsorHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/RippleStateHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/LendingHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/LendingHelpers.h | 101 | // This value is always non-negative. | COMMENT |
| LOW | include/xrpl/ledger/helpers/LendingHelpers.h | 181 | // Calculated using the standard amortization formula based on principal, | COMMENT |
| LOW | include/xrpl/ledger/helpers/LendingHelpers.h | 301 | * They are "tracked" as they change tracked loan values. | COMMENT |
| LOW | include/xrpl/ledger/helpers/LendingHelpers.h | 361 | // This includes fees not part of the standard amortization schedule | COMMENT |
| LOW | include/xrpl/ledger/helpers/DirectoryHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/MPTokenHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/TokenHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/TokenHelpers.h | 221 | COMMENT | |
| LOW | include/xrpl/ledger/helpers/EscrowHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/AMMHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/AMMHelpers.h | 21 | #include <xrpl/protocol/Rules.h> | COMMENT |
| LOW | include/xrpl/ledger/helpers/AMMHelpers.h | 461 | // (pool.in * pool.out) / (pool.in + assetIn * feeMult(tfee)), | COMMENT |
| LOW | include/xrpl/ledger/helpers/AMMHelpers.h | 521 | swapAssetOut(TAmounts<TIn, TOut> const& pool, TOut const& assetOut, std::uint16_t tfee) | COMMENT |
| LOW | include/xrpl/ledger/helpers/AccountRootHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/NFTokenHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/ledger/helpers/CredentialHelpers.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/beast/rfc2616.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/beast/unit_test.h | 1 | #pragma once | COMMENT |
| LOW | include/xrpl/beast/unit_test/suite.h | 1 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | COMMENT |
| LOW | include/xrpl/beast/unit_test/suite_list.h | 1 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | COMMENT |
| LOW | include/xrpl/beast/unit_test/reporter.h | 1 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | COMMENT |
| LOW | include/xrpl/beast/net/IPEndpoint.h | 1 | #pragma once | COMMENT |
| 1455 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cfg/xrpld-example.cfg | 1 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 4 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 28 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 84 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 88 | #---------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 378 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 382 | #----------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 639 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 643 | #------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 859 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 863 | #---------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 899 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 903 | #------------ | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 1176 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 1180 | #--------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 1250 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 1254 | #---------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 1301 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 1305 | #----------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 1409 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 1413 | #-------------------- | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 1571 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/scripts/strategy-matrix/generate.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/scripts/strategy-matrix/generate.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/scripts/strategy-matrix/generate.py | 109 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/scripts/strategy-matrix/generate.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/scripts/strategy-matrix/generate.py | 144 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/scripts/strategy-matrix/generate.py | 146 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/scripts/strategy-matrix/generate.py | 256 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/scripts/strategy-matrix/generate.py | 258 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/test/core/Config_test.cpp | 67 | #------------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | cmake/scripts/codegen/generate_tx_classes.py | 102 | # Step 1: Clean the C++ code using pcpp | COMMENT |
| LOW⚡ | cmake/scripts/codegen/generate_tx_classes.py | 110 | # Step 2: Parse the clean text using pyparsing | COMMENT |
| LOW⚡ | cmake/scripts/codegen/generate_ledger_classes.py | 99 | # Step 1: Clean the C++ code using pcpp | COMMENT |
| LOW⚡ | cmake/scripts/codegen/generate_ledger_classes.py | 107 | # Step 2: Parse the clean text using pyparsing | COMMENT |
| LOW | src/libxrpl/ledger/helpers/TokenHelpers.cpp | 293 | // we need to check if the associated assets have been frozen | COMMENT |
| LOW | src/libxrpl/tx/transactors/token/TrustSet.cpp | 575 | // For PreFunded sponsors, we need to check if there are sufficient reserves before | COMMENT |
| LOW | src/libxrpl/tx/transactors/lending/LoanBrokerDelete.cpp | 98 | // So we need to check if the broker owner is deep frozen for that asset. | COMMENT |
| LOW | src/test/app/Loan_test.cpp | 5977 | // Step 1: Create vault with IOU asset | COMMENT |
| LOW⚡ | src/test/app/Loan_test.cpp | 6079 | // Step 7: Trigger default (dust adjustment will occur) | COMMENT |
| LOW⚡ | src/test/app/Loan_test.cpp | 6083 | // Step 8: Verify phantom assets created | COMMENT |
| LOW | src/test/app/FixNFTokenPageLinks_test.cpp | 438 | // Step 2: Enable the fixNFTokenPageLinks amendment. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | include/xrpl/basics/SlabAllocator.h | 227 | // When allocating large blocks, attempt to leverage Linux's | COMMENT |
| MEDIUM | …e/xrpl/beast/container/detail/aged_ordered_container.h | 799 | // VFALCO TODO Figure out how to utilize 'hint' | COMMENT |
| MEDIUM | …e/xrpl/beast/container/detail/aged_ordered_container.h | 815 | // VFALCO TODO Figure out how to utilize 'hint' | COMMENT |
| MEDIUM | …e/xrpl/beast/container/detail/aged_ordered_container.h | 875 | // VFALCO TODO Figure out how to utilize 'hint' | COMMENT |
| MEDIUM | include/xrpl/protocol/Concepts.h | 59 | // robust than class template argument deduction (CTAD) via the deduction guide. | COMMENT |
| MEDIUM | src/test/csf/Peer.h | 996 | // TODO: Make this more robust | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | cmake/scripts/codegen/generate_tx_classes.py | 102 | # Step 1: Clean the C++ code using pcpp | COMMENT |
| LOW⚡ | cmake/scripts/codegen/generate_tx_classes.py | 110 | # Step 2: Parse the clean text using pyparsing | COMMENT |
| LOW⚡ | cmake/scripts/codegen/generate_ledger_classes.py | 99 | # Step 1: Clean the C++ code using pcpp | COMMENT |
| LOW⚡ | cmake/scripts/codegen/generate_ledger_classes.py | 107 | # Step 2: Parse the clean text using pyparsing | COMMENT |
| LOW | cfg/xrpld-example.cfg | 1097 | # WARNING: These settings can have significant effects on data integrity, | COMMENT |
| LOW | src/test/app/Loan_test.cpp | 5977 | // Step 1: Create vault with IOU asset | COMMENT |
| LOW⚡ | src/test/app/Loan_test.cpp | 6079 | // Step 7: Trigger default (dust adjustment will occur) | COMMENT |
| LOW⚡ | src/test/app/Loan_test.cpp | 6083 | // Step 8: Verify phantom assets created | COMMENT |
| LOW | src/test/app/FixNFTokenPageLinks_test.cpp | 438 | // Step 2: Enable the fixNFTokenPageLinks amendment. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cmake/scripts/codegen/macro_parser_common.py | 224 | def enrich_fields_with_type_data(entry_info, field_types): | CODE |
| LOW | cmake/scripts/codegen/generate_tx_classes.py | 25 | def create_transaction_parser(): | CODE |
| LOW | cmake/scripts/codegen/generate_ledger_classes.py | 27 | def create_ledger_entry_parser(): | CODE |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 52 | def test_blank_lines_inside_block_ok() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 63 | def test_member_and_divider_allowed() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 114 | def test_qt_comment_single_line() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 125 | def test_single_line_markers_allowed() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 150 | def test_over_indented_first_line() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 232 | def test_backslash_command_on_body_line() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 241 | def test_backslash_command_suggests_canonical_spelling() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 259 | def test_wrong_command_on_body_line() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 268 | def test_body_line_commands_regression() -> None: | STRING |
| LOW⚡ | bin/pre-commit/test_check_doxygen_style.py | 286 | def test_command_on_closer_line() -> None: | STRING |
| LOW⚡ | bin/pre-commit/test_check_doxygen_style.py | 295 | def test_no_double_count_across_opener_body_closer() -> None: | STRING |
| LOW⚡ | bin/pre-commit/test_check_doxygen_style.py | 304 | def test_code_with_word_allowed() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 319 | def test_message_uses_category_description() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 325 | def test_message_detail_overrides() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 356 | def test_mid_line_plain_block_skipped() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 368 | def test_unclosed_block_scanned_to_eof() -> None: | STRING |
| LOW | bin/pre-commit/test_check_doxygen_style.py | 377 | def test_banner_and_empty_comment_not_flagged() -> None: | STRING |
| LOW | .github/scripts/levelization/generate.py | 91 | def find_repository_directories( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | include/xrpl/protocol/TER.h | 490 | // It's worth noting that an explicit conversion operator was considered | COMMENT |
| MEDIUM | cfg/xrpld-example.cfg | 222 | # ip = :: then you can use admin = ::ffff:127.0.0.1,::1 to allow | COMMENT |
| LOW | src/libxrpl/ledger/helpers/AccountRootHelpers.cpp | 518 | // SField::sMD_PseudoAccount flag in the SField definition. (Don't forget to | COMMENT |
| LOW | src/test/app/Invariants_test.cpp | 1451 | // this behavior, don't forget to use credentials::makeSorted | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/scripts/check-pr-description.py | 60 | # Check if the PR body is empty or whitespace-only | COMMENT |
| LOW | .github/scripts/levelization/generate.py | 104 | # Check if this directory has src or include folders | COMMENT |
| LOW | .github/scripts/levelization/generate.py | 166 | # Read file with a large buffer for performance. | COMMENT |
| LOW | .github/scripts/levelization/generate.py | 295 | # Check if include file exists and references source | COMMENT |
| LOW | .github/scripts/levelization/generate.py | 324 | # Print results | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/test/app/ValidatorList_test.cpp | 514 | // 2 is the threshold, as requested in configuration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cmake/scripts/codegen/macro_parser_common.py | 54 | # Define the macro so #if !defined(MACRO) / #error checks pass | COMMENT |
| MEDIUM | conan/lockfile/regenerate.sh | 22 | # Create a new lockfile that is compatible with Linux, macOS, and Windows. The | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/scripts/levelization/generate.py | 146 | print(f"Error: {e}", file=sys.stderr) | CODE |
| LOW | .github/scripts/levelization/generate.py | 185 | except Exception as e: | CODE |
| MEDIUM | .github/scripts/levelization/generate.py | 186 | print(f"Error reading {file_path}: {e}", file=sys.stderr) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cmake/scripts/codegen/macro_parser_common.py | 10 | CODE | |
| LOW | bin/pre-commit/clang_tidy_check.py | 19 | CODE | |
| LOW | .github/scripts/format-inline-bash.py | 27 | CODE | |
| LOW | .github/scripts/levelization/generate.py | 10 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/pre-commit/check_doxygen_style.py | 361 | CODE | |
| LOW | bin/pre-commit/check_doxygen_style.py | 404 | CODE | |
| LOW | .github/scripts/strategy-matrix/generate.py | 159 | CODE | |
| LOW | .github/scripts/levelization/generate.py | 124 | CODE |