AI Slop Code Risk Monitor

BongoCatPet/BongoCat

SlopCodeMonitor badge for BongoCatPet/BongoCat Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

🐱 BongoCat — A cross-platform interactive desktop pet that brings fun to your desktop!

3.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for BongoCatPet/BongoCat, a Rust project with 24,421 GitHub stars. SynthScan examined 200,802 lines of code across 927 source files, recording 601 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 3.1 (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.1
Adjusted Signal
3.1
Raw Pattern Score
100%
Time Factor
2026-10-28
Last Push
24.4K
Stars
Rust
Language
200.8K
Lines of Code
927
Files
601
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 13.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.8/100 · LOW

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

Agent Over-Engineering Ratio 3.2/100 · LOW

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

PR Review Velocity Impact 14.4/100 · LOW

Which changes need focused human review? 601 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 2HIGH 0MEDIUM 3LOW 596

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 601 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 Block452 hits · 450 pts
SeverityFileLineSnippetContext
LOWtools/tests/test_release_changelog_contract.py21WORKFLOW = ROOT / ".github" / "workflows" / "app-release.yml"COMMENT
LOWtools/tests/test_packaging_contract.py221 self.assertNotIn(rejected, packager)COMMENT
LOWcrates/bongocat-runtime/tests/shared_input_fixtures.rs421 assert_eq!(COMMENT
LOWcrates/bongocat-runtime/src/client.rs101 /// reason [`Self::frame_scheduling`] exists, so a per-frame poll cannot bringCOMMENT
LOWcrates/bongocat-runtime/src/lib.rs141/// Upper bound of the overlay hover hide delay, in whole seconds.COMMENT
LOWcrates/bongocat-runtime/src/lib.rs161/// overlay compares the delay against `MonotonicMillis`. This is the singleCOMMENT
LOWcrates/bongocat-runtime/src/lib.rs201 /// make it impossible to move. `None` means no key does this.COMMENT
LOWcrates/bongocat-runtime/src/lib.rs281 /// press order, instead of one image per hand.COMMENT
LOWcrates/bongocat-runtime/src/lib.rs381#[derive(Clone, Debug, Eq, PartialEq)]COMMENT
LOWcrates/bongocat-runtime/src/pacing.rs41}COMMENT
LOWcrates/bongocat-runtime/src/tests/pacing.rs1//! Frame pacing, the frame interval and the work budget diagnostics.COMMENT
LOWcrates/bongocat-runtime/src/tests/pacing.rs141 const WARM_UP: Duration = Duration::from_millis(300);COMMENT
LOWcrates/bongocat-runtime/src/rendering/model_input.rs1//! Turning the product's input into the model's parameters.COMMENT
LOWcrates/bongocat-runtime/src/rendering/model_input.rs41 } else {COMMENT
LOWcrates/bongocat-runtime/src/input_state/snapshot.rs1//! What a consumer of the runtime sees.COMMENT
LOWcrates/bongocat-render/src/key.rs21 pub side: KeySide,COMMENT
LOWcrates/bongocat-render/src/key.rs101COMMENT
LOWcrates/bongocat-render/src/channel.rs1//! The bounded channel between the runtime's renderer and the overlay.COMMENT
LOWcrates/bongocat-render/src/geometry.rs61/// it is authored that way — so the canvas starts `(window_width - image_width) /COMMENT
LOWcrates/bongocat-render/src/validate.rs1//! The check that stands between a snapshot and a GPU upload.COMMENT
LOWcrates/bongocat-live2d-render/src/lib.rs101///COMMENT
LOWcrates/bongocat-live2d-render/src/lib.rs241/// skipped, so an incomplete model simply draws nothing for that key.COMMENT
LOWcrates/bongocat-live2d-render/src/lib.rs261///COMMENT
LOWcrates/bongocat-live2d-render/src/lib.rs281/// ever drew still draws something whenever its counterpart has artwork.COMMENT
LOWcrates/bongocat-live2d-render/src/lib.rs301 KeyIdentity::Gamepad(button) => gamepad_key_name_candidates(button),COMMENT
LOWcrates/bongocat-live2d-render/src/lib.rs401 if let Some(exact) = exact {COMMENT
LOWcrates/bongocat-live2d-render/src/lib.rs421 // one image name may only ever carry one meaning. This is the wholeCOMMENT
LOWcrates/bongocat-storage/src/lib.rs1//! User-private storage primitives shared by every crate that writes productCOMMENT
LOWcrates/bongocat-storage/src/lib.rs61 let _ = path;COMMENT
LOWcrates/bongocat-ui-protocol/src/lib.rs1#![forbid(unsafe_code)]COMMENT
LOWcrates/bongocat-ui-protocol/src/update.rs1//! The UI-facing update protocol.COMMENT
LOWcrates/bongocat-ui-protocol/src/settings/command.rs41 },COMMENT
LOWcrates/bongocat-ui-protocol/src/settings/command.rs161 settings: SettingsGamepadAutoSwitch,COMMENT
LOWcrates/bongocat-ui-protocol/src/settings/build.rs21}COMMENT
LOW…bongocat-ui-protocol/src/settings/input_diagnostics.rs41 pub transport_enqueued: u64,COMMENT
LOW…bongocat-ui-protocol/src/settings/input_diagnostics.rs61 /// `administrator` on Windows. Anonymous by construction — a capability nameCOMMENT
LOW…ates/bongocat-ui-protocol/src/settings/model_import.rs1//! Importing a model: the request, the progress, and the cancellation.COMMENT
LOW…ates/bongocat-ui-protocol/src/settings/model_import.rs21COMMENT
LOW…ates/bongocat-ui-protocol/src/settings/model_import.rs81///COMMENT
LOWcrates/bongocat-ui-protocol/src/settings/snapshot.rs61 /// decision a user makes, and which expression each model happens to beCOMMENT
LOWcrates/bongocat-ui-protocol/src/settings/snapshot.rs181pub struct SettingsGamepadAxisSettings {COMMENT
LOWcrates/bongocat-ui-protocol/src/settings/snapshot.rs221 /// The physical modifier key whose hold gives the pointer back to the user.COMMENT
LOW…tes/bongocat-ui-protocol/src/settings/model_catalog.rs21#[derive(Clone, Debug, Eq, PartialEq)]COMMENT
LOWcrates/bongocat-packaging/src/main.rs1//! The project-level build, bundle and installer packaging entry point.COMMENT
LOWcrates/bongocat-packaging/src/main.rs21//! does: the manifest shape stays owned by one place, and the release workflow onlyCOMMENT
LOWcrates/bongocat-packaging/src/main.rs41//!COMMENT
LOWcrates/bongocat-packaging/src/main.rs61//!COMMENT
LOWcrates/bongocat-packaging/src/main.rs101const APPLICATION_BINARY: &str = "bongocat-app";COMMENT
LOWcrates/bongocat-packaging/src/main.rs141const PROVENANCE_GENERATOR: &str = "tools/record-provenance.py";COMMENT
LOWcrates/bongocat-packaging/src/main.rs161/// The repair command the installer window offers next to the drop link.COMMENT
LOWcrates/bongocat-packaging/src/main.rs181/// Ad-hoc signature used when no distribution identity is provisioned.COMMENT
LOWcrates/bongocat-packaging/src/main.rs201/// produces bundle and installer artifacts but no update assets, which is what aCOMMENT
LOWcrates/bongocat-packaging/src/main.rs261 /// bundle archive and the installer of a target are named after the same chip andCOMMENT
LOWcrates/bongocat-packaging/src/main.rs281 /// which hard-codes `{main binary name}_{version}_{arch}-setup.exe` with noCOMMENT
LOWcrates/bongocat-packaging/src/main.rs1101/// Copies the preset models into the staging area the packager maps from.COMMENT
LOWcrates/bongocat-packaging/src/main.rs1301/// a per-entry field. `notes` is the release changelog the update window shows; it isCOMMENT
LOWcrates/bongocat-packaging/src/main.rs1321COMMENT
LOWcrates/bongocat-packaging/src/main.rs1341COMMENT
LOWcrates/bongocat-packaging/src/main.rs1361/// project, and it is shown in the same document as the install instructions.COMMENT
LOWcrates/bongocat-packaging/src/main.rs1381 /// every generated section below is `##`. Without a heading of its own the entryCOMMENT
392 more matches not shown…
Hyper-Verbose Identifiers121 hits · 127 pts
SeverityFileLineSnippetContext
LOWtools/inspect-cubism-sdk.py243def validate_framework_sources(CODE
LOWtools/inspect-cubism-sdk.py280def validate_redistributable_list(text: str) -> None:CODE
LOWtools/validate-json-schema.py171def validate_manifest_fixtures(CODE
LOWtools/validate-fixtures.py455def validate_behavior_manifest() -> tuple[set[str], set[str]]:CODE
LOWtools/tests/test_release_changelog_contract.py126def without_variation_selector(text):CODE
LOWtools/tests/test_release_changelog_contract.py182 def test_the_notes_come_from_the_changelogs_and_not_from_github(self):CODE
LOWtools/tests/test_release_changelog_contract.py198 def test_the_release_body_and_the_manifest_read_one_notes_file(self):CODE
LOWtools/tests/test_release_changelog_contract.py221 def test_the_notes_are_composed_before_they_are_consumed(self):CODE
LOWtools/tests/test_release_changelog_contract.py237 def test_the_packaging_tool_reads_the_changelogs_the_repository_has(self):CODE
LOWtools/tests/test_release_changelog_contract.py256 def test_the_bilingual_changelogs_document_the_same_releases(self):CODE
LOWtools/tests/test_release_changelog_contract.py274 def test_every_documented_release_has_notes(self):CODE
LOWtools/tests/test_release_changelog_contract.py284 def test_the_changelogs_do_not_carry_the_generated_download_block(self):CODE
LOWtools/tests/test_release_changelog_contract.py346 def test_the_english_headings_are_from_the_vocabulary(self):CODE
LOWtools/tests/test_release_changelog_contract.py364 def test_the_chinese_headings_are_from_the_vocabulary(self):CODE
LOW⚡tools/tests/test_release_changelog_contract.py382 def test_both_changelogs_carry_the_same_sections_in_the_same_order(self):CODE
LOW⚡tools/tests/test_release_changelog_contract.py392 def test_the_vocabulary_does_not_repeat_a_section(self):CODE
LOW⚡tools/tests/test_release_changelog_contract.py400 def test_the_documented_vocabulary_is_the_enforced_one(self):CODE
LOWtools/tests/test_changed_paths.py25 def test_documents_alone_are_documentation(self):CODE
LOWtools/tests/test_changed_paths.py42 def test_a_change_set_of_only_documents_is_docs_only(self):CODE
LOWtools/tests/test_changed_paths.py49 def test_one_code_path_is_enough_to_run_everything(self):CODE
LOWtools/tests/test_changed_paths.py74 def test_the_gate_configuration_is_never_treated_as_a_document(self):CODE
LOW⚡tools/tests/test_changed_paths.py87 def test_an_unreadable_change_set_runs_the_whole_pipeline(self):CODE
LOW⚡tools/tests/test_changed_paths.py95 def test_the_diff_range_follows_the_event(self):CODE
LOW⚡tools/tests/test_changed_paths.py104 def test_a_pull_request_without_its_base_ref_is_an_error(self):CODE
LOWtools/tests/test_provenance.py14 def test_writes_path_free_reproducible_metadata(self):CODE
LOWtools/tests/test_collect_failure_evidence.py14 def test_collects_only_bounded_redacted_evidence(self):CODE
LOWtools/tests/test_collect_failure_evidence.py49 def test_skips_symlinks_and_non_validation_images(self):CODE
LOWtools/tests/test_collect_failure_evidence.py74 def test_unknown_log_lines_are_replaced_with_a_placeholder(self):CODE
LOWtools/tests/test_collect_failure_evidence.py100 def test_output_directory_inside_input_is_not_collected(self):CODE
LOW⚡tools/tests/test_packaging_contract.py428 def test_bundle_is_rejected_when_the_resources_are_missing(self):CODE
LOW⚡tools/tests/test_packaging_contract.py433 def test_disk_image_wraps_the_packaged_bundle(self):CODE
LOW⚡tools/tests/test_packaging_contract.py443 def test_disk_image_declares_the_window_the_installer_opens_with(self):CODE
LOW⚡tools/tests/test_packaging_contract.py579 def test_version_has_exactly_one_source(self):CODE
LOW⚡tools/tests/test_packaging_contract.py586 def test_the_compiled_environment_reaches_the_child_build(self):CODE
LOW⚡tools/tests/test_packaging_contract.py596 def test_app_uses_a_single_production_feature(self):CODE
LOW⚡tools/tests/test_packaging_contract.py602 def test_no_self_built_packaging_script_remains(self):CODE
LOW⚡tools/tests/test_packaging_contract.py631 def test_release_workflow_builds_every_shipped_target(self):CODE
LOW⚡tools/tests/test_packaging_contract.py637 def test_release_workflow_runs_the_same_entry_point_as_developers(self):CODE
LOW⚡tools/tests/test_packaging_contract.py643 def test_update_runtime_and_dependency_policy_match_the_shipped_targets(self):CODE
LOW⚡tools/tests/test_packaging_contract.py650 def test_packaging_targets_match_the_update_runtime(self):CODE
LOWtools/tests/test_packaging_contract.py59 def test_exactly_three_release_targets_ship(self):CODE
LOWtools/tests/test_packaging_contract.py77 def test_every_release_target_publishes_the_expected_artifacts(self):CODE
LOWtools/tests/test_packaging_contract.py91 def test_windows_installer_stays_per_user(self):CODE
LOWtools/tests/test_packaging_contract.py97 def test_windows_installer_offers_exactly_the_application_languages(self):CODE
LOWtools/tests/test_packaging_contract.py165 def test_windows_installer_is_published_under_the_product_release_name(self):CODE
LOWtools/tests/test_packaging_contract.py189 def test_release_jobs_and_the_release_notes_call_a_machine_the_same_thing(self):CODE
LOWtools/tests/test_packaging_contract.py223 def test_every_release_job_is_named_by_the_action_it_performs(self):CODE
LOWtools/tests/test_packaging_contract.py253 def test_a_step_named_require_actually_fails_the_build(self):CODE
LOWtools/tests/test_packaging_contract.py271 def test_both_build_jobs_name_the_build_step_the_same_way(self):CODE
LOWtools/tests/test_packaging_contract.py282 def test_every_release_artifact_is_keyed_by_the_architecture_token(self):CODE
LOWtools/tests/test_packaging_contract.py314 def test_the_published_changelogs_call_a_chip_by_one_name(self):CODE
LOWtools/tests/test_packaging_contract.py328 def test_every_macos_artifact_is_named_after_the_same_architecture_token(self):CODE
LOWtools/tests/test_packaging_contract.py370 def test_product_icon_is_embedded_at_the_id_gpui_loads(self):CODE
LOWtools/tests/test_packaging_contract.py390 def test_bundle_identity_and_minimum_version_are_single_sourced(self):CODE
LOWtools/tests/test_packaging_contract.py414 def test_bundled_resources_match_the_runtime_lookup(self):CODE
LOWtools/tests/test_packaging_contract.py478 def test_disk_image_carries_a_repair_command_for_the_installed_copy(self):CODE
LOWtools/tests/test_packaging_contract.py495 def test_the_repair_command_says_what_to_do_when_there_is_nothing_to_repair(self):CODE
LOWtools/tests/test_packaging_contract.py514 def test_the_repair_command_closes_the_window_it_ran_in(self):CODE
LOWtools/tests/test_packaging_contract.py542 def test_disk_image_gives_the_volume_the_application_icon(self):CODE
LOWtools/tests/test_packaging_contract.py561 def test_just_stays_a_thin_entry_point(self):CODE
61 more matches not shown…
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALcrates/bongocat-overlay/src/windows/session.rs896 drawable_count: self.overlay.renderer.model.meshes.len(),CODE
CRITICALcrates/bongocat-overlay/src/windows/session.rs898 texture_count: self.overlay.renderer.model.textures.len(),CODE
Unused Imports14 hits · 14 pts
SeverityFileLineSnippetContext
LOWtools/validate-locales.py4CODE
LOWtools/inspect-cubism-sdk.py4CODE
LOWtools/release_notes.py4CODE
LOWtools/dev_plugins.py7CODE
LOWtools/validate-json-schema.py4CODE
LOWtools/run-input-fixtures.py4CODE
LOWtools/changed-paths.py18CODE
LOWtools/validate-fixtures.py4CODE
LOWtools/record-provenance.py4CODE
LOWtools/collect-failure-evidence.py4CODE
LOWtools/fetch_release_assets.py4CODE
LOWtools/tests/test_inspect_cubism_sdk.py1CODE
LOWtools/tests/test_product_version_contract.py3CODE
LOWplugins/key-sounds/resources/fetch_packs.py29CODE
Deep Nesting9 hits · 9 pts
SeverityFileLineSnippetContext
LOWtools/validate-locales.py38CODE
LOWtools/release_notes.py57CODE
LOWtools/validate-json-schema.py94CODE
LOWtools/run-input-fixtures.py44CODE
LOWtools/validate-fixtures.py76CODE
LOWtools/tests/test_release_changelog_contract.py149CODE
LOWtools/tests/test_packaging_e2e.py39CODE
LOWtools/tests/test_packaging_e2e.py313CODE
LOWplugins/key-sounds/resources/fetch_packs.py164CODE
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMcrates/bongocat-app/src/product_options.rs17/// `#[cfg]`-gated availability of a harness all read this one declaration, so a flagCOMMENT
MEDIUM.github/workflows/verify.yml282 # A model source is recognised from its own content, so the harness takesCOMMENT
Decorative Section Separators1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMcrates/bongocat-ui/src/window/tests/behavior_names.rs218// ── The inline editor ────────────────────────────────────────────────────────COMMENT