AI Slop Code Risk Monitor

quickwit-oss/tantivy

SlopCodeMonitor badge for quickwit-oss/tantivy Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Tantivy is a full-text search engine library inspired by Apache Lucene and written in Rust

3.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for quickwit-oss/tantivy, a Rust project with 16,367 GitHub stars. SynthScan examined 190,162 lines of code across 587 source files, recording 558 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 3.2 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

3.2
Adjusted Signal
3.2
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
16.4K
Stars
Rust
Language
190.2K
Lines of Code
587
Files
558
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 14.6/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 547 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.3/100 · LOW

Are imports declared and package/API names verified? 10 finding(s).

Agent Over-Engineering Ratio 0.1/100 · LOW

Are wrappers, guards, and repeated structures necessary? 1 finding(s).

PR Review Velocity Impact 14.4/100 · LOW

Which changes need focused human review? 558 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 0MEDIUM 16LOW 542

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 558 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Over-Commented Block510 hits · 510 pts
SeverityFileLineSnippetContext
LOWcliff.toml61COMMENT
LOWcolumnar/src/dynamic_column.rs321 #[doc(hidden)]COMMENT
LOWcolumnar/src/lib.rs1//! # Tantivy-ColumnarCOMMENT
LOWcolumnar/src/value.rs101 1 => Ok(NumericalType::U64),COMMENT
LOWcolumnar/src/dictionary.rs21COMMENT
LOWcolumnar/src/columnar/merge/mod.rs61/// If several columns with the same name are conflicting with the numerical types in theCOMMENT
LOWcolumnar/src/columnar/merge/tests.rs41 let columnar2 = make_columnar("numbers", &[2u64]);COMMENT
LOWcolumnar/src/columnar/writer/mod.rs41///COMMENT
LOWcolumnar/src/columnar/writer/mod.rs81 /// Returns the list of doc ids from 0..num_docs sorted by the `sort_field`COMMENT
LOWcolumnar/src/column_index/multivalued_index.rs101 }COMMENT
LOWcolumnar/src/column_index/multivalued_index.rs301 /// Converts a list of ranks (row ids of values) in a 1:n index to the corresponding list ofCOMMENT
LOWcolumnar/src/column_index/mod.rs161 // * doc_id_range.start and doc_id_range.end may not exist, but docids inCOMMENT
LOWcolumnar/src/column_index/optional_index/mod.rs41 pub fn num_bytes_in_block(&self) -> u32 {COMMENT
LOWcolumnar/src/column_index/optional_index/mod.rs61/// block]COMMENT
LOW…ar/src/column_index/optional_index/set_block/sparse.rs201 }COMMENT
LOWcolumnar/src/column/plain/mod.rs1//! Plain-encoded `Str` and `Bytes` columns.COMMENT
LOWcolumnar/src/column/plain/block/onpair16_block.rs1//! Blocks compressed with OnPair16.COMMENT
LOWcolumnar/src/column/plain/block/onpair16_block.rs41/// Maximum dictionary budget, in bits: a dictionary has at most `2^MAX_CODE_BITS` tokens.COMMENT
LOWcolumnar/src/column/plain/block/raw_block.rs1//! Blocks storing their values as is.COMMENT
LOWcolumnar/src/column_values/monotonic_mapping.rs21 ///COMMENT
LOWcolumnar/src/column_values/mod.rs41COMMENT
LOWcolumnar/src/column_values/mod.rs141 if value_range.contains(&val) {COMMENT
LOW…values/u128_based/compact_space/build_compact_space.rs101 let saved_bits = (amplitude_bits - amplitude_new_bits) as usize * total_num_values as usize;COMMENT
LOW…mnar/src/column_values/u128_based/compact_space/mod.rs1/// This codec takes a large number space (u128) and reduces it to a compact number space.COMMENT
LOWcolumnar/src/column_values/u64_based/line.rs41 // This is outside of realm we handle.COMMENT
LOWcolumnar/src/column_values/u64_based/line.rs81 return Line::default();COMMENT
LOWcolumnar/src/column_values/u64_based/line.rs101 // Without sorting our values, this is a difficult problem.COMMENT
LOWcolumnar/src/column_values/u64_based/mod.rs21use crate::iterable::Iterable;COMMENT
LOWsstable/src/block_match_automaton.rs41 for kb in &start_key[0..common_prefix_len] {COMMENT
LOWsstable/src/block_match_automaton.rs61 // e.* |COMMENT
LOWsstable/src/block_match_automaton.rs81 // pCOMMENT
LOWsstable/src/lib.rs1//! `tantivy_sstable` is a crate that provides a sorted string table data structure.COMMENT
LOWsstable/src/lib.rs21//! builder.insert(b"banana", &2).unwrap();COMMENT
LOWsstable/src/lib.rs261 /// Returns the last inserted key.COMMENT
LOWsstable/src/dictionary.rs21/// An SSTable is a sorted map that associates sorted `&[u8]` keysCOMMENT
LOWsstable/src/dictionary.rs181COMMENT
LOWsstable/src/dictionary.rs401COMMENT
LOWsstable/src/index/v3.rs561 max_slope_idx = index;COMMENT
LOWstacker/src/fastcmp.rs1/// fastcmp employs a trick to speed up the comparison of two slices of bytes.COMMENT
LOWstacker/src/arena_hashmap.rs1use super::{Addr, MemoryArena};COMMENT
LOWstacker/src/arena_hashmap.rs61 }COMMENT
LOWstacker/src/expull.rs1use std::mem;COMMENT
LOWstacker/src/expull.rs21/// It combines the idea of the unrolled linked list and tries to address theCOMMENT
LOWstacker/src/shared_arena_hashmap.rs41 fn is_empty(&self) -> bool {COMMENT
LOWstacker/src/shared_arena_hashmap.rs281 let v = memory_arena.read(val_addr);COMMENT
LOWstacker/src/memory_arena.rs1//! 32-bits Memory arena for types implementing `Copy`.COMMENT
LOWstacker/src/memory_arena.rs21//! access them as references.COMMENT
LOWtokenizer-api/src/lib.rs1//! Tokenizer are in charge of chopping text into a stream of tokensCOMMENT
LOWcommon/src/group_by.rs1use std::cell::RefCell;COMMENT
LOWcommon/src/key_tracking.rs1/// Initial capacity of the `Vec<u8>` key buffer, large enough for most keys.COMMENT
LOWcommon/src/lib.rs61/// in that order.COMMENT
LOWcommon/src/lib.rs81}COMMENT
LOWcommon/src/file_slice.rs281COMMENT
LOWcommon/src/datetime.rs21 Milliseconds,COMMENT
LOWcommon/src/datetime.rs81 }COMMENT
LOWcommon/src/bitset.rs161 // `trailing_zeros` and the bit-clear in parallel instead ofCOMMENT
LOWexamples/index_from_multiple_threads.rs1// # Indexing from different threads.COMMENT
LOWexamples/iterating_docs_and_positions.rs1// # Iterating docs and positions.COMMENT
LOWexamples/iterating_docs_and_positions.rs41 // (Because we indexed a very small number of documents over one threadCOMMENT
LOWexamples/iterating_docs_and_positions.rs101 // and the [`Postings`](https://docs.rs/tantivy/~0/tantivy/trait.Postings.html) traitCOMMENT
450 more matches not shown…
Structural Annotation Overuse21 hits · 44 pts
SeverityFileLineSnippetContext
LOW⚡.claude/skills/simple-pr/SKILL.md11## Step 1: Check workspace stateCOMMENT
LOW⚡.claude/skills/simple-pr/SKILL.md19## Step 2: Ensure main is up to dateCOMMENT
LOW⚡.claude/skills/simple-pr/SKILL.md25## Step 3: Review staged changesCOMMENT
LOW⚡.claude/skills/simple-pr/SKILL.md31## Step 4: Generate commit messageCOMMENT
LOW⚡.claude/skills/simple-pr/SKILL.md37## Step 5: Create a new branchCOMMENT
LOW⚡.claude/skills/simple-pr/SKILL.md45## Step 6: Commit changesCOMMENT
LOW⚡.claude/skills/simple-pr/SKILL.md52## Step 7: Push and open a PRCOMMENT
LOW⚡.claude/skills/rationalize-deps/SKILL.md18## Step 1: Identify the targetCOMMENT
LOW⚡.claude/skills/rationalize-deps/SKILL.md25## Step 2: Analyze current dependenciesCOMMENT
LOW⚡.claude/skills/rationalize-deps/SKILL.md33## Step 3: For each candidate dependencyCOMMENT
LOW.claude/skills/rationalize-deps/SKILL.md76## Step 4: Document findingsCOMMENT
LOW.claude/skills/rationalize-deps/SKILL.md84## Step 5: Verify full buildCOMMENT
LOW⚡.claude/skills/update-changelog/SKILL.md10## Step 1: Determine the changelog scopeCOMMENT
LOW⚡.claude/skills/update-changelog/SKILL.md16## Step 2: Find merged PRs not yet in the changelogCOMMENT
LOW⚡.claude/skills/update-changelog/SKILL.md26## Step 3: Consolidate related PRsCOMMENT
LOW.claude/skills/update-changelog/SKILL.md38## Step 4: Review the actual code diffCOMMENT
LOW.claude/skills/update-changelog/SKILL.md49## Step 5: Categorize each PR groupCOMMENT
LOW.claude/skills/update-changelog/SKILL.md61## Step 6: Format entriesCOMMENT
LOW⚡.claude/skills/update-changelog/SKILL.md75## Step 7: Present changes to the userCOMMENT
LOW⚡.claude/skills/update-changelog/SKILL.md79## Step 8: Update CHANGELOG.mdCOMMENT
LOW⚡.claude/skills/update-changelog/SKILL.md85## Step 9: VerifyCOMMENT
Self-Referential Comments12 hits · 36 pts
SeverityFileLineSnippetContext
MEDIUMexamples/snippet.rs22 // # Defining the schemaCOMMENT
MEDIUMexamples/json_field.rs13 // # Defining the schemaCOMMENT
MEDIUMexamples/index_from_multiple_threads.rs36 // # Defining the schemaCOMMENT
MEDIUMexamples/deleting_updating_documents.rs43 // # Defining the schemaCOMMENT
MEDIUMexamples/basic_search.rs26 // # Defining the schemaCOMMENT
MEDIUMexamples/ip_field.rs12 // # Defining the schemaCOMMENT
MEDIUMexamples/custom_collector.rs123 // # Defining the schemaCOMMENT
MEDIUMexamples/custom_tokenizer.rs1// # Defining a tokenizer pipelineCOMMENT
MEDIUMexamples/custom_tokenizer.rs12 // # Defining the schemaCOMMENT
MEDIUMexamples/fuzzy_search.rs25 // # Defining the schemaCOMMENT
MEDIUMexamples/date_time_field.rs11 // # Defining the schemaCOMMENT
MEDIUMsrc/query/fuzzy_query.rs237 // # Defining the schemaCOMMENT
Fake / Example Data10 hits · 10 pts
SeverityFileLineSnippetContext
LOWsrc/functional_test.rs132const LOREM: &str = "Doc Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod \CODE
LOWsrc/functional_test.rs132const LOREM: &str = "Doc Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod \CODE
LOWsrc/indexer/index_writer.rs858 const LOREM: &str = "Doc Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do \CODE
LOWsrc/indexer/index_writer.rs858 const LOREM: &str = "Doc Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do \CODE
LOWsrc/store/compression_lz4_block.rs121 let input = b"lorem ipsum dolor sit amet ".repeat(100);CODE
LOWsrc/store/compression_lz4_block.rs121 let input = b"lorem ipsum dolor sit amet ".repeat(100);CODE
LOWsrc/store/compression_lz4_block.rs134 let input = b"lorem ipsum dolor sit amet ".repeat(100);CODE
LOWsrc/store/compression_lz4_block.rs134 let input = b"lorem ipsum dolor sit amet ".repeat(100);CODE
LOWsrc/store/mod.rs70 const LOREM: &str = "Doc Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do \CODE
LOWsrc/store/mod.rs70 const LOREM: &str = "Doc Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do \CODE
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUM…ggregation/bucket/term_agg/flattened_term_histogram.rs561 // column's value count. (Essentially always true here: the column is full, so itsCOMMENT
MEDIUMsrc/schema/mod.rs101//! Some queries may leverage Fast fields when run on a field that is not indexed. This can beCOMMENT
MEDIUMsrc/schema/text_options.rs185/// Essentially, should we store the term frequency and/or the positions (SeeCOMMENT
Decorative Section Separators1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/postings/recorder.rs408 // ── TermFrequencyRecorder ─────────────────────────────────────────────────COMMENT
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/query/phrase_query/phrase_scorer.rs625 // So the cost estimation would be the number of times we need to check if a doc is a hit *COMMENT