AI Slop Code Risk Monitor

petergpt/bullshit-benchmark

SlopCodeMonitor badge for petergpt/bullshit-benchmark Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

BullshitBench measures whether AI models challenge nonsensical prompts instead of confidently answering them, created by Peter Gostev.

2.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for petergpt/bullshit-benchmark, a Python project with 1,904 GitHub stars. SynthScan examined 129,406 lines of code across 96 source files, recording 296 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 2.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.

2.2
Adjusted Signal
2.2
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
1.9K
Stars
Python
Language
129.4K
Lines of Code
96
Files
296
Pattern Hits
2026-10-31
Scan Date
0.05
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 8.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.9/100 · LOW

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

Agent Over-Engineering Ratio 8.5/100 · LOW

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

PR Review Velocity Impact 11.7/100 · LOW

Which changes need focused human review? 296 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 5MEDIUM 0LOW 291

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 296 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.

Hyper-Verbose Identifiers220 hits · 200 pts
SeverityFileLineSnippetContext
LOWtests/test_refusal_outcomes.py29 def test_empty_collection_exhausts_three_attempts_and_retains_diagnostics(self):CODE
LOWtests/test_refusal_outcomes.py57 def test_substantive_collection_after_empty_retry_remains_valid(self):CODE
LOWtests/test_refusal_outcomes.py70 def test_empty_native_refusal_collection_remains_unscored_outcome(self):CODE
LOWtests/test_refusal_outcomes.py82 def test_grade_rejects_empty_outputs_without_judge_call(self):CODE
LOWtests/test_refusal_outcomes.py102 def test_fable_minimal_normalizes_to_native_low(self) -> None:CODE
LOWtests/test_refusal_outcomes.py124 def test_stored_fable_minimal_row_displays_as_low(self) -> None:CODE
LOWtests/test_refusal_outcomes.py141 def test_native_refusal_is_classified(self) -> None:CODE
LOWtests/test_refusal_outcomes.py159 def test_plain_empty_response_is_not_assumed_to_be_refusal(self) -> None:CODE
LOWtests/test_refusal_outcomes.py175 def test_substantive_text_overrides_native_refusal_marker(self) -> None:CODE
LOWtests/test_refusal_outcomes.py198 def test_persisted_outcome_survives_slimming_response_text(self) -> None:CODE
LOWtests/test_refusal_outcomes.py211 def test_explicit_refusal_boolean_has_priority_over_other_markers(self) -> None:CODE
LOWtests/test_refusal_outcomes.py227 def test_missing_text_is_not_an_empty_answer(self) -> None:CODE
LOWtests/test_refusal_outcomes.py238 def test_fresh_payload_detects_refusal_before_storing_outcome(self) -> None:CODE
LOWtests/test_refusal_outcomes.py258 def test_summary_excludes_refusal_from_scores_and_reliability(self) -> None:CODE
LOWtests/test_refusal_outcomes.py313 def test_grade_skips_provider_refusal(self) -> None:CODE
LOWtests/test_refusal_outcomes.py350 def test_user_directed_empty_refusal_preserves_provenance_without_native_marker(self):CODE
LOW⚡tests/test_published_dataset.py232 def test_oversize_jsonl_record_leaves_originals_untouched(self):CODE
LOW⚡tests/test_published_dataset.py240 def test_oversize_gzip_record_leaves_originals_untouched(self):CODE
LOW⚡tests/test_published_dataset.py250 def test_compact_summary_can_exceed_uncompressed_limit_when_encoded_small(self):CODE
LOW⚡tests/test_published_dataset.py460 def test_cross_asset_id_mismatch_rejected_before_install(self):CODE
LOW⚡tests/test_published_dataset.py469 def test_valid_json_truncation_of_small_packed_asset_cannot_be_blessed(self):CODE
LOW⚡tests/test_published_dataset.py479 def test_stale_monolithic_shadows_never_override_declared_shards(self):CODE
LOW⚡tests/test_published_dataset.py489 def test_orphaned_parts_without_manifest_are_not_a_new_dataset(self):CODE
LOWtests/test_published_dataset.py137 def test_legacy_read_does_not_parse_or_translate_text(self):CODE
LOWtests/test_published_dataset.py145 def test_dataset_absence_and_incomplete_legacy_are_distinct(self):CODE
LOWtests/test_published_dataset.py156 def test_jsonl_roundtrip_preserves_every_byte_and_key(self):CODE
LOWtests/test_published_dataset.py172 def test_gzip_shards_preserve_numeric_spelling_and_array_interiors(self):CODE
LOWtests/test_published_dataset.py189 def test_small_assets_use_immutable_paths_with_deterministic_gzip(self):CODE
LOWtests/test_published_dataset.py205 def test_gzip_is_deterministic_across_fresh_publications(self):CODE
LOWtests/test_published_dataset.py214 def test_every_part_obeys_limit_counts_hashes_and_sources(self):CODE
LOWtests/test_published_dataset.py262 def test_empty_assets_roundtrip_and_tiny_cap_fails_safely(self):CODE
LOWtests/test_published_dataset.py271 def test_missing_part_fails_all_public_read_gates(self):CODE
LOWtests/test_published_dataset.py284 def test_corrupt_part_same_size_fails_checksum(self):CODE
LOWtests/test_published_dataset.py294 def test_corrupt_manifest_counts_hashes_and_formats_fail(self):CODE
LOWtests/test_published_dataset.py316 def test_actual_row_count_is_checked_not_only_manifest_totals(self):CODE
LOWtests/test_published_dataset.py326 def test_unknown_or_malformed_storage_version_fails_closed(self):CODE
LOWtests/test_published_dataset.py342 def test_traversal_absolute_url_encoded_and_reordered_paths_fail(self):CODE
LOWtests/test_published_dataset.py358 def test_part_file_and_directory_symlinks_are_rejected(self):CODE
LOWtests/test_published_dataset.py376 def test_invalid_gzip_rejected_even_with_updated_encoded_checksum(self):CODE
LOWtests/test_published_dataset.py388 def test_repeat_and_limit_migrations_do_not_lose_data(self):CODE
LOWtests/test_published_dataset.py406 def test_new_records_only_change_final_existing_jsonl_shard(self):CODE
LOWtests/test_published_dataset.py424 def test_duplicate_sample_ids_fail_before_replacement(self):CODE
LOWtests/test_published_dataset.py433 def test_missing_empty_and_nonstring_sample_ids_are_rejected(self):CODE
LOWtests/test_published_dataset.py444 def test_duplicate_ids_across_stored_parts_are_rejected(self):CODE
LOWtests/test_published_dataset.py501 def test_orphaned_parts_with_all_monolithic_shadows_still_require_manifest(self):CODE
LOWtests/test_published_dataset.py518 def test_failure_before_manifest_activation_keeps_old_dataset_readable(self):CODE
LOWtests/test_published_dataset.py538 def test_reader_holding_previous_manifest_can_read_during_and_after_install(self):CODE
LOWtests/test_published_dataset.py558 def test_legacy_cross_asset_id_mismatch_fails_verification(self):CODE
LOWtests/test_published_dataset.py585 def test_details_group_by_question_preserving_every_record_and_canonical_byte(self):CODE
LOWtests/test_published_dataset.py610 def test_question_partition_metadata_must_match_summary(self):CODE
LOWtests/test_published_dataset.py621 def test_missing_summary_question_id_and_disagreeing_detail_question_fail(self):CODE
LOWtests/test_published_dataset.py632 def test_unchanged_question_groups_reuse_existing_content_files(self):CODE
LOWtests/test_published_dataset.py653 def test_existence_check_does_not_decode_or_hash_entire_asset_again(self):CODE
LOWtests/test_published_dataset.py671 def test_cli_cat_exact_bytes_and_corruption_goes_to_stderr(self):CODE
LOWtests/test_published_dataset.py685 def test_model_launch_jsonl_reader_matches_legacy_with_unicode_separator(self):CODE
LOWtests/test_published_dataset.py695 def test_model_launch_inventory_matches_legacy_and_rejects_missing_shards(self):CODE
LOWtests/test_published_dataset.py712 def test_forge_aggregate_reader_matches_legacy_full_schema(self):CODE
LOWtests/test_repair_published_judges.py104 def test_verified_same_judge_repair_preserves_answers_other_judges_and_metadata(self):CODE
LOWtests/test_repair_published_judges.py129 def test_summary_only_historical_error_keeps_aggregate_bytes_but_excludes_partial_score(self):CODE
LOW⚡tests/test_repair_published_judges.py144 def test_valid_scores_cannot_be_replaced(self):CODE
160 more matches not shown…
Deep Nesting40 hits · 30 pts
SeverityFileLineSnippetContext
LOWtests/test_publication.py155CODE
LOWtests/test_judge_failures.py299CODE
LOWscripts/model_launch_pipeline.py292CODE
LOWscripts/model_launch_pipeline.py761CODE
LOWscripts/repair_published_judges.py226CODE
LOWscripts/openrouter_benchmark.py1229CODE
LOWscripts/openrouter_benchmark.py1602CODE
LOWscripts/openrouter_benchmark.py2353CODE
LOWscripts/openrouter_benchmark.py2640CODE
LOWscripts/openrouter_benchmark.py2680CODE
LOWscripts/openrouter_benchmark.py2868CODE
LOWscripts/openrouter_benchmark.py3123CODE
LOWscripts/openrouter_benchmark.py3727CODE
LOWscripts/openrouter_benchmark.py3872CODE
LOWscripts/openrouter_benchmark.py4355CODE
LOWscripts/openrouter_benchmark.py4917CODE
LOWscripts/openrouter_benchmark.py5466CODE
LOWscripts/openrouter_benchmark.py5606CODE
LOWscripts/openrouter_benchmark.py5773CODE
LOWscripts/openrouter_benchmark.py5842CODE
LOWscripts/openrouter_benchmark.py5898CODE
LOWscripts/openrouter_benchmark.py6125CODE
LOWscripts/openrouter_benchmark.py6252CODE
LOWscripts/push_bullshitbench_to_forge.py142CODE
LOWscripts/validate_configs.py46CODE
LOWscripts/validate_configs.py94CODE
LOWscripts/published_dataset.py157CODE
LOWscripts/published_dataset.py303CODE
LOWscripts/published_dataset.py639CODE
LOWscripts/published_dataset.py723CODE
LOWscripts/published_dataset.py783CODE
LOWscripts/publication.py89CODE
LOWscripts/publication.py245CODE
LOWscripts/publication.py507CODE
LOWscripts/publication.py645CODE
LOWscripts/build_pages.py132CODE
LOWscripts/build_questions_v2_from_draft.py103CODE
LOWscripts/build_questions_v2_from_draft.py244CODE
LOWscripts/apply_judge_fallback.py46CODE
LOWscripts/apply_judge_fallback.py67CODE
Empty Error Handlers4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHscripts/repair_published_judges.py263except ValueError:CODE
HIGHscripts/openrouter_benchmark.py1439except ValueError:CODE
HIGHscripts/openrouter_benchmark.py3765except json.JSONDecodeError:CODE
HIGHscripts/openrouter_benchmark.py4709except StopIteration:CODE
Unused Imports19 hits · 17 pts
SeverityFileLineSnippetContext
LOWtests/test_publication.py2CODE
LOWtests/test_publication.py15CODE
LOWscripts/model_launch_pipeline.py8CODE
LOWscripts/check_openrouter_new_text_models.py4CODE
LOWscripts/check_openrouter_new_text_models.py12CODE
LOWscripts/repair_published_judges.py9CODE
LOWscripts/annotate_star_history_milestone.py2CODE
LOWscripts/render_star_milestone_chart.py2CODE
LOWscripts/render_star_milestone_chart.py12CODE
LOWscripts/openrouter_benchmark.py14CODE
LOWscripts/openrouter_benchmark.py22CODE
LOWscripts/push_bullshitbench_to_forge.py4CODE
LOWscripts/push_bullshitbench_to_forge.py17CODE
LOWscripts/validate_configs.py4CODE
LOWscripts/published_dataset.py20CODE
LOWscripts/publication.py3CODE
LOWscripts/build_pages.py8CODE
LOWscripts/build_questions_v2_from_draft.py8CODE
LOWscripts/apply_judge_fallback.py8CODE
Excessive Try-Catch Wrapping11 hits · 10 pts
SeverityFileLineSnippetContext
LOWscripts/publish_latest_to_viewer.sh503 except Exception:CODE
LOWscripts/publish_latest_to_viewer.sh712 except Exception:CODE
LOWscripts/openrouter_benchmark.py2471 except Exception as exc: # pylint: disable=broad-exceptCODE
LOWscripts/openrouter_benchmark.py2628 except Exception as exc: # pylint: disable=broad-exceptCODE
LOWscripts/openrouter_benchmark.py3104 except Exception as exc: # pylint: disable=broad-exceptCODE
LOWscripts/openrouter_benchmark.py3490 except Exception as exc: # pylint: disable=broad-exceptCODE
LOWscripts/openrouter_benchmark.py4116 except Exception as parse_exc: # pylint: disable=broad-exceptCODE
LOWscripts/openrouter_benchmark.py4141 except Exception as exc: # pylint: disable=broad-exceptCODE
LOWscripts/openrouter_benchmark.py4622 except Exception as exc: # pylint: disable=broad-exceptCODE
LOWscripts/openrouter_benchmark.py4872 except Exception:CODE
LOWscripts/openrouter_benchmark.py5299 except Exception as exc:CODE
Cross-Language Confusion1 hit · 8 pts
SeverityFileLineSnippetContext
HIGH⚡tests/test_pipeline_consumers.py204 path.write_text('{"consensus_score": null}\n{"sample_id":', encoding="utf-8")CODE
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscripts/build_questions_v2_from_draft.py259 # Check if legacy or new formatCOMMENT