Seamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability
This report presents the forensic synthetic code analysis of apache/couchdb, a Erlang project with 6,933 GitHub stars. SynthScan v2.0 examined 69,750 lines of code across 259 source files, recording 290 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 5.1 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).
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 290 distinct pattern matches across 12 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 | .readthedocs.yaml | 1 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not | COMMENT |
| LOW | build-aux/print-committerlist.sh | 1 | #!/bin/sh | COMMENT |
| LOW | build-aux/logfile-uploader.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/bench/benchbulk.sh | 1 | #!/bin/sh -e | COMMENT |
| LOW | test/view_server/query_server_spec.rb | 1 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not | COMMENT |
| LOW | rel/haproxy.cfg | 1 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not | COMMENT |
| LOW | …che/couchdb/nouveau/lucene/NouveauQueryParserTest.java | 1 | // | COMMENT |
| LOW | …/couchdb/nouveau/lucene/LuceneAnalyzerFactoryTest.java | 1 | // | COMMENT |
| LOW | …org/apache/couchdb/nouveau/lucene/LuceneIndexTest.java | 1 | // | COMMENT |
| LOW | …/org/apache/couchdb/nouveau/core/IndexManagerTest.java | 1 | // | COMMENT |
| LOW | …che/couchdb/nouveau/health/AnalyzeHealthCheckTest.java | 1 | // | COMMENT |
| LOW | …pache/couchdb/nouveau/health/IndexHealthCheckTest.java | 1 | // | COMMENT |
| LOW | …rg/apache/couchdb/nouveau/api/IndexDefinitionTest.java | 1 | // | COMMENT |
| LOW | …/org/apache/couchdb/nouveau/api/SearchRequestTest.java | 1 | // | COMMENT |
| LOW | …e/couchdb/nouveau/NouveauApplicationConfiguration.java | 1 | // | COMMENT |
| LOW | …ava/org/apache/couchdb/nouveau/NouveauApplication.java | 1 | // | COMMENT |
| LOW | …/apache/couchdb/nouveau/tasks/CloseAllIndexesTask.java | 1 | // | COMMENT |
| LOW | …ava/org/apache/couchdb/nouveau/lucene/LuceneIndex.java | 1 | // | COMMENT |
| LOW | …g/apache/couchdb/nouveau/lucene/LuceneIndexSchema.java | 1 | // | COMMENT |
| LOW | …ache/couchdb/nouveau/lucene/LuceneAnalyzerFactory.java | 1 | // | COMMENT |
| LOW | …/apache/couchdb/nouveau/lucene/NouveauQueryParser.java | 1 | // | COMMENT |
| LOW | …he/couchdb/nouveau/lucene/ParallelSearcherFactory.java | 1 | // | COMMENT |
| LOW | …couchdb/nouveau/lucene/SimpleAsciiFoldingAnalyzer.java | 1 | // | COMMENT |
| LOW | …main/java/org/apache/couchdb/nouveau/core/IOUtils.java | 1 | // | COMMENT |
| LOW | …c/main/java/org/apache/couchdb/nouveau/core/Index.java | 1 | // | COMMENT |
| LOW | …ava/org/apache/couchdb/nouveau/core/IndexFunction.java | 1 | // | COMMENT |
| LOW | …a/org/apache/couchdb/nouveau/core/UserAgentFilter.java | 1 | // | COMMENT |
| LOW | …g/apache/couchdb/nouveau/core/StaleIndexException.java | 1 | // | COMMENT |
| LOW | …/java/org/apache/couchdb/nouveau/core/StripedLock.java | 1 | // | COMMENT |
| LOW | …e/couchdb/nouveau/core/UpdatesOutOfOrderException.java | 1 | // | COMMENT |
| LOW | …java/org/apache/couchdb/nouveau/core/IndexManager.java | 1 | // | COMMENT |
| LOW | …org/apache/couchdb/nouveau/core/ser/StringWrapper.java | 1 | // | COMMENT |
| LOW | …org/apache/couchdb/nouveau/core/ser/DoubleWrapper.java | 1 | // | COMMENT |
| LOW | …a/org/apache/couchdb/nouveau/core/ser/LongWrapper.java | 1 | // | COMMENT |
| LOW | …/apache/couchdb/nouveau/core/ser/PrimitiveWrapper.java | 1 | // | COMMENT |
| LOW | …a/org/apache/couchdb/nouveau/core/ser/NullWrapper.java | 1 | // | COMMENT |
| LOW | …va/org/apache/couchdb/nouveau/core/ser/IntWrapper.java | 1 | // | COMMENT |
| LOW | …/apache/couchdb/nouveau/core/ser/ByteArrayWrapper.java | 1 | // | COMMENT |
| LOW | …/org/apache/couchdb/nouveau/core/ser/FloatWrapper.java | 1 | // | COMMENT |
| LOW | …rg/apache/couchdb/nouveau/health/IndexHealthCheck.java | 1 | // | COMMENT |
| LOW | …/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java | 1 | // | COMMENT |
| LOW | …/apache/couchdb/nouveau/resources/WelcomeResource.java | 1 | // | COMMENT |
| LOW | …rg/apache/couchdb/nouveau/resources/IndexResource.java | 1 | // | COMMENT |
| LOW | …/apache/couchdb/nouveau/resources/AnalyzeResource.java | 1 | // | COMMENT |
| LOW | …n/java/org/apache/couchdb/nouveau/api/DoubleRange.java | 1 | // | COMMENT |
| LOW | …va/org/apache/couchdb/nouveau/api/WelcomeResponse.java | 1 | // | COMMENT |
| LOW | …ava/org/apache/couchdb/nouveau/api/DocumentUpdate.java | 1 | // | COMMENT |
| LOW | …ava/org/apache/couchdb/nouveau/api/AnalyzeRequest.java | 1 | // | COMMENT |
| LOW | …n/java/org/apache/couchdb/nouveau/api/DoubleField.java | 1 | // | COMMENT |
| LOW | …ain/java/org/apache/couchdb/nouveau/api/TextField.java | 1 | // | COMMENT |
| LOW | …/org/apache/couchdb/nouveau/api/IndexInfoResponse.java | 1 | // | COMMENT |
| LOW | …ain/java/org/apache/couchdb/nouveau/api/SearchHit.java | 1 | // | COMMENT |
| LOW | …/apache/couchdb/nouveau/api/DocumentUpdateRequest.java | 1 | // | COMMENT |
| LOW | …java/org/apache/couchdb/nouveau/api/SearchResults.java | 1 | // | COMMENT |
| LOW | …rc/main/java/org/apache/couchdb/nouveau/api/Range.java | 1 | // | COMMENT |
| LOW | …va/org/apache/couchdb/nouveau/api/AnalyzeResponse.java | 1 | // | COMMENT |
| LOW | …n/java/org/apache/couchdb/nouveau/api/StringField.java | 1 | // | COMMENT |
| LOW | …n/java/org/apache/couchdb/nouveau/api/StoredField.java | 1 | // | COMMENT |
| LOW | …rc/main/java/org/apache/couchdb/nouveau/api/Field.java | 1 | // | COMMENT |
| LOW | …va/org/apache/couchdb/nouveau/api/DocumentRequest.java | 1 | // | COMMENT |
| 129 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | share/server/dreyfus.js | 58 | print(JSON.stringify(buf)); | CODE |
| HIGH | share/server/util.js | 150 | print(JSON.stringify(obj)); | CODE |
| HIGH | share/server/state.js | 20 | print("true"); // indicates success | CODE |
| HIGH | share/server/state.js | 33 | print("true"); | CODE |
| HIGH | share/server/state.js | 37 | print("true"); | CODE |
| HIGH | share/server/views.js | 50 | print("[true," + reduce_line + "]"); | CODE |
| HIGH | share/server/views.js | 55 | print("[true," + reduce_line + "]"); | CODE |
| HIGH | share/server/views.js | 137 | print(JSON.stringify(buf)); | CODE |
| HIGH | share/server/dispatch-quickjs.js | 71 | print("true"); | CODE |
| HIGH | share/server/nouveau.js | 104 | print(JSON.stringify(buf)); | CODE |
| HIGH | share/server/loop.js | 80 | print("true"); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | share/server/60/esprima.js | 1 | (function webpackUniversalModuleDefinition(root, factory) { | CODE |
| LOW | share/server/60/esprima.js | 1197 | function AsyncArrowFunctionExpression(params, body, expression) { | CODE |
| LOW | src/mango/test/24-text-paginated-test.py | 44 | def test_query_with_lot_of_results(self): | CODE |
| LOW | src/mango/test/24-text-paginated-test.py | 65 | def test_no_duplicates_on_interleaved_updates(self): | CODE |
| LOW | src/mango/test/24-text-paginated-test.py | 75 | def test_no_duplicates_on_interleaved_updates_heavy(self): | CODE |
| LOW | src/mango/test/24-text-paginated-test.py | 96 | def test_no_duplicates_on_interleaved_updates_with_limit_skip(self): | CODE |
| LOW⚡ | src/mango/test/16-index-selectors-test.py | 88 | def test_saves_partial_filter_selector_in_index(self): | CODE |
| LOW⚡ | src/mango/test/16-index-selectors-test.py | 94 | def test_partial_filter_only_in_return_if_not_default(self): | CODE |
| LOW⚡ | src/mango/test/16-index-selectors-test.py | 99 | def test_saves_selector_in_index_throws(self): | CODE |
| LOW⚡ | src/mango/test/16-index-selectors-test.py | 108 | def test_uses_partial_index_for_query_selector(self): | CODE |
| LOW⚡ | src/mango/test/16-index-selectors-test.py | 158 | def test_old_selector_with_no_selector_still_supported(self): | CODE |
| LOW⚡ | src/mango/test/16-index-selectors-test.py | 166 | def test_old_selector_still_supported(self): | CODE |
| LOW⚡ | src/mango/test/16-index-selectors-test.py | 174 | def test_uses_partial_index_with_non_indexable_selector(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 121 | def test_uses_partial_index_with_different_selector(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 135 | def test_doesnot_use_selector_when_not_specified(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 146 | def test_doesnot_use_selector_when_not_specified_with_index(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 195 | def test_saves_partialfilterselector_in_index(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 204 | def test_uses_partial_index_for_query_selector(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 217 | def test_uses_partial_index_with_different_selector(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 231 | def test_doesnot_use_selector_when_not_specified(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 242 | def test_doesnot_use_selector_when_not_specified_with_index(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 256 | def test_old_selector_still_supported(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 264 | def test_old_selector_still_supported_via_api(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 275 | def test_partial_filter_only_in_return_if_not_default(self): | CODE |
| LOW | src/mango/test/16-index-selectors-test.py | 280 | def test_uses_partial_index_with_non_indexable_selector(self): | CODE |
| LOW⚡ | src/mango/test/17-multi-type-value-test.py | 33 | def test_can_query_with_name_subfield(self): | CODE |
| LOW⚡ | src/mango/test/17-multi-type-value-test.py | 38 | def test_can_query_with_name_range(self): | CODE |
| LOW⚡ | src/mango/test/17-multi-type-value-test.py | 45 | def test_can_query_with_age_and_name_range(self): | CODE |
| LOW | src/mango/test/06-basic-text-test.py | 393 | def test_exists_object_member(self): | CODE |
| LOW | src/mango/test/06-basic-text-test.py | 447 | def test_elem_match_non_object(self): | CODE |
| LOW | src/mango/test/20-no-timeout-test.py | 29 | def test_query_does_not_time_out(self): | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 31 | def test_works_for_basic_case(self): | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 38 | def test_works_for_all_fields_specified(self): | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 44 | def test_works_for_no_sort_fields_specified(self): | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 50 | def test_works_for_opp_dir_sort(self): | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 57 | def test_not_work_for_non_constant_field(self): | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 108 | def test_ignore_after_set_sort_value(self): | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 114 | def test_not_use_index_if_other_fields_in_sort(self): | CODE |
| LOW⚡ | src/mango/test/21-empty-selector-tests.py | 29 | def test_empty_array_or_with_age(self): | CODE |
| LOW⚡ | src/mango/test/21-empty-selector-tests.py | 35 | def test_empty_array_in_with_age(self): | CODE |
| LOW⚡ | src/mango/test/21-empty-selector-tests.py | 41 | def test_empty_array_and_with_age(self): | CODE |
| LOW | src/mango/test/21-empty-selector-tests.py | 53 | def test_empty_array_nested_all_with_age(self): | CODE |
| LOW | src/mango/test/21-empty-selector-tests.py | 61 | def test_empty_arrays_complex(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/elixir/test/data/lorem.txt | 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nunc sapien, porta id pellentesque at, elementum et f | CODE |
| LOW | test/elixir/test/data/lorem.txt | 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nunc sapien, porta id pellentesque at, elementum et f | CODE |
| LOW | test/elixir/test/data/lorem.txt | 13 | Donec mi enim, laoreet pulvinar mollis eu, malesuada viverra nunc. In vitae metus vitae neque tempor dapibus. Maecenas t | CODE |
| LOW | test/elixir/test/data/lorem.txt | 13 | Donec mi enim, laoreet pulvinar mollis eu, malesuada viverra nunc. In vitae metus vitae neque tempor dapibus. Maecenas t | CODE |
| LOW | test/elixir/test/data/lorem.txt | 25 | In sed feugiat eros. Donec bibendum ullamcorper diam, eu faucibus mauris dictum sed. Duis tincidunt justo in neque accum | CODE |
| LOW | test/elixir/test/data/lorem.txt | 25 | In sed feugiat eros. Donec bibendum ullamcorper diam, eu faucibus mauris dictum sed. Duis tincidunt justo in neque accum | CODE |
| LOW | test/elixir/test/data/lorem.txt | 47 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum nisl metus, hendrerit ut laoreet sed, consectetur at | CODE |
| LOW | test/elixir/test/data/lorem.txt | 47 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum nisl metus, hendrerit ut laoreet sed, consectetur at | CODE |
| LOW | test/elixir/test/data/lorem.txt | 65 | Phasellus viverra iaculis placerat. Nulla consequat dolor sit amet erat dignissim posuere. Nulla lacinia augue vitae mi | CODE |
| LOW⚡ | test/elixir/test/data/lorem.txt | 85 | Donec vitae pretium nibh. Maecenas bibendum bibendum diam in placerat. Ut accumsan, mi vitae vestibulum euismod, nunc ju | CODE |
| LOW⚡ | test/elixir/test/data/lorem.txt | 85 | Donec vitae pretium nibh. Maecenas bibendum bibendum diam in placerat. Ut accumsan, mi vitae vestibulum euismod, nunc ju | CODE |
| LOW⚡ | test/elixir/test/data/lorem.txt | 89 | Nulla commodo odio justo. Pellentesque non ornare diam. In consectetur sapien ac nunc sagittis malesuada. Morbi ullamcor | CODE |
| LOW⚡ | test/elixir/test/data/lorem.txt | 89 | Nulla commodo odio justo. Pellentesque non ornare diam. In consectetur sapien ac nunc sagittis malesuada. Morbi ullamcor | CODE |
| LOW⚡ | test/elixir/test/data/lorem.txt | 91 | In nec tempor risus. In faucibus nisi eget diam dignissim consequat. Donec pulvinar ante nec enim mattis rutrum. Vestibu | CODE |
| LOW⚡ | test/elixir/test/data/lorem.txt | 91 | In nec tempor risus. In faucibus nisi eget diam dignissim consequat. Donec pulvinar ante nec enim mattis rutrum. Vestibu | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/mango/test/16-index-selectors-test.py | 103 | except Exception as e: | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 63 | except Exception as e: | CODE |
| LOW | src/mango/test/18-json-sort.py | 85 | except Exception as e: | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 104 | except Exception as e: | CODE |
| LOW⚡ | src/mango/test/18-json-sort.py | 120 | except Exception as e: | CODE |
| LOW | src/mango/test/08-text-limit-test.py | 80 | except Exception as e: | CODE |
| LOW | src/mango/test/08-text-limit-test.py | 89 | except Exception as e: | CODE |
| LOW | src/mango/test/09-text-sort-test.py | 46 | except Exception as e: | CODE |
| LOW | src/mango/test/09-text-sort-test.py | 86 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …ava/org/apache/couchdb/nouveau/lucene/LuceneIndex.java | 335 | luceneRanges[i] = new org.apache.lucene.facet.range.DoubleRange( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | build-aux/show-test-results.py | 5 | CODE | |
| LOW | build-aux/show-test-results.py | 6 | CODE | |
| LOW | src/docs/src/conf.py | 18 | CODE | |
| LOW | src/mango/test/17-multi-type-value-test.py | 15 | CODE | |
| LOW | src/mango/test/06-basic-text-test.py | 18 | CODE | |
| LOW | src/mango/test/20-no-timeout-test.py | 14 | CODE | |
| LOW | src/mango/test/20-no-timeout-test.py | 15 | CODE | |
| LOW | src/mango/test/18-json-sort.py | 15 | CODE | |
| LOW | src/mango/test/13-users-db-find-test.py | 14 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | build-aux/show-test-results.py | 189 | CODE | |
| LOW | build-aux/show-test-results.py | 211 | CODE | |
| LOW | build-aux/show-test-results.py | 233 | CODE | |
| LOW | build-aux/show-test-results.py | 252 | CODE | |
| LOW | build-aux/show-test-results.py | 352 | CODE | |
| LOW | src/docs/ext/linter.py | 52 | CODE | |
| LOW | src/docs/ext/linter.py | 64 | CODE | |
| LOW | src/docs/ext/linter.py | 201 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | CONTRIBUTING.md | 313 | Thus, it is expressly forbidden to contribute material generated by AI, LLMs, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | build-aux/logfile-uploader.py | 46 | # JS harness | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mango/test/mango.py | 215 | CODE | |
| LOW | src/mango/test/mango.py | 289 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rel/overlay/etc/local.ini | 97 | ; 'username = password' lines. Don't forget to restart CouchDB after | CODE |