A minimal, secure Python interpreter written in Rust for use by AI
This report presents the forensic synthetic code analysis of pydantic/monty, a Rust project with 8,120 GitHub stars. SynthScan v2.0 examined 240,592 lines of code across 1140 source files, recording 1964 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 9.4 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
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 1964 distinct pattern matches across 19 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 | Cargo.toml | 141 | tempfile = "3" | COMMENT |
| LOW | .macroscope/ignore.md | 1 | # Repository-wide Macroscope ignore (code review + any check-run agents). | COMMENT |
| LOW | crates/monty-types/src/format.rs | 1 | //! Pure CPython-compatible formatting helpers shared by the boundary types: | COMMENT |
| LOW | crates/monty-types/src/format.rs | 121 | f.write_char(quote) | COMMENT |
| LOW | crates/monty-types/src/format.rs | 141 | /// | COMMENT |
| LOW | crates/monty-types/src/resource.rs | 21 | COMMENT | |
| LOW | crates/monty-types/src/resource.rs | 41 | /// Error returned when a resource limit is exceeded during execution. | COMMENT |
| LOW | crates/monty-types/src/resource.rs | 81 | /// [`DEFAULT_MAX_RECURSION_DEPTH`]): unbounded recursion would let sandboxed | COMMENT |
| LOW | crates/monty-types/src/resource.rs | 141 | pub fn max_recursion_depth(mut self, limit: usize) -> Self { | COMMENT |
| LOW | crates/monty-types/src/resource.rs | 161 | #[derive(Debug, serde::Serialize, serde::Deserialize)] | COMMENT |
| LOW | crates/monty-types/src/resource.rs | 241 | COMMENT | |
| LOW | crates/monty-types/src/resource.rs | 321 | COMMENT | |
| LOW | crates/monty-types/src/resource.rs | 381 | /// | COMMENT |
| LOW | crates/monty-types/src/os.rs | 21 | // ============================================================================= | COMMENT |
| LOW | crates/monty-types/src/os.rs | 41 | IsFile(MontyPath), | COMMENT |
| LOW | crates/monty-types/src/os.rs | 61 | #[strum(serialize = "Path.resolve")] | COMMENT |
| LOW | crates/monty-types/src/os.rs | 81 | // ---- FS mutate (custom shapes) ---------------------------------------- | COMMENT |
| LOW | crates/monty-types/src/os.rs | 101 | // ---- Non-FS ----------------------------------------------------------- | COMMENT |
| LOW | crates/monty-types/src/os.rs | 201 | // `pathlib.Path.iterdir` reaches `os.scandir`, not `os.listdir`. | COMMENT |
| LOW | crates/monty-types/src/os.rs | 401 | /// | COMMENT |
| LOW | crates/monty-types/src/os.rs | 421 | /// * `mode` - Directory permissions as octal. Common values: | COMMENT |
| LOW | crates/monty-types/src/type_checking.rs | 1 | use std::str::FromStr; | COMMENT |
| LOW | crates/monty-types/src/builtins.rs | 1 | //! [`BuiltinsFunctions`] — the name-level identity of every interpreter-native | COMMENT |
| LOW | crates/monty-types/src/builtins.rs | 41 | // bytearray - handled by Type enum | COMMENT |
| LOW | crates/monty-types/src/builtins.rs | 101 | Zip, | COMMENT |
| LOW | crates/monty-types/src/io.rs | 21 | /// Today the `print()` builtin only writes to `Stdout`. The `Stderr` variant is | COMMENT |
| LOW | crates/monty-types/src/io.rs | 41 | /// - `Stdout` — writes to standard output (the default behavior). | COMMENT |
| LOW | crates/monty-types/src/io.rs | 61 | CollectString(&'a mut String, Option<usize>), | COMMENT |
| LOW | crates/monty-types/src/io.rs | 221 | /// # Arguments | COMMENT |
| LOW | crates/monty-types/src/object.rs | 21 | format::{FormatFloat, StringRepr, bytes_repr_fmt, format_offset_timedelta_repr, string_repr_fmt}, | COMMENT |
| LOW | crates/monty-types/src/object.rs | 41 | /// # Hashability | COMMENT |
| LOW | crates/monty-types/src/object.rs | 61 | /// Python boolean (`True` or `False`). | COMMENT |
| LOW | crates/monty-types/src/object.rs | 101 | Time(MontyTime), | COMMENT |
| LOW | crates/monty-types/src/object.rs | 121 | Path(String), | COMMENT |
| LOW | crates/monty-types/src/object.rs | 141 | /// An external function provided by the host. | COMMENT |
| LOW | crates/monty-types/src/object.rs | 761 | COMMENT | |
| LOW | crates/monty-types/src/object.rs | 821 | Dict, | COMMENT |
| LOW | crates/monty-types/src/object.rs | 881 | DictKeyIterator, | COMMENT |
| LOW | crates/monty-types/src/object.rs | 901 | ItertoolsIslice, | COMMENT |
| LOW | crates/monty-types/src/object.rs | 941 | // Every remaining variant is named by strum's `IntoStaticStr` | COMMENT |
| LOW | crates/monty-types/src/object.rs | 981 | pub year: i32, | COMMENT |
| LOW | crates/monty-types/src/object.rs | 1001 | pub timezone_name: Option<String>, | COMMENT |
| LOW | crates/monty-types/src/object.rs | 1041 | /// Smallest UTC offset `datetime.timezone` accepts, -23:59:59. | COMMENT |
| LOW | crates/monty-types/src/object.rs | 1341 | COMMENT | |
| LOW | crates/monty-types/src/run_options.rs | 1 | //! Compile-time configuration: [`CompileOptions`] and the | COMMENT |
| LOW | crates/monty-types/src/file_mode.rs | 1 | //! [`FileMode`] — the parsed, validated form of a Python `open()` mode | COMMENT |
| LOW | crates/monty-types/src/file_mode.rs | 21 | /// currently rejects them — properly modelling them needs read-position | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 21 | /// Optional exception message explaining what went wrong | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 101 | /// | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 181 | /// | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 341 | /// to a read-only mount, or attempting to access a path outside a mounted directory). | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 361 | TypeError, | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 381 | /// A `ValueError` subclass in CPython, so `except ValueError:` catches it. | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 441 | // All other types only match exactly (handled by self == handler_type above) | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 481 | } | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 561 | ExcData::None | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 581 | /// UTF-8 (`json.loads` on `bytes` input). | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 621 | /// | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 641 | /// helper-function loops — share a single allocation. Without sharing, a | COMMENT |
| LOW | crates/monty-types/src/exceptions.rs | 741 | /// already unreachable for any source ruff will accept (it caps source | COMMENT |
| 889 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 23 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 25 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 222 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 224 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 321 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 323 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 379 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 381 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 414 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 416 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 498 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 500 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 529 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 531 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 581 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 583 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 703 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 705 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 750 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 752 | # ===================================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/function__kwargs_unpacking.py | 71 | # ============================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/function__kwargs_unpacking.py | 73 | # ============================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/function__kwargs_unpacking.py | 126 | # ============================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/function__kwargs_unpacking.py | 128 | # ============================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 12 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 14 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 53 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 55 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 175 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 177 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 233 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 235 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 286 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 288 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 310 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 312 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 327 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 329 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 343 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 345 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 404 | # ============================================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/mount_fs__errors.py | 406 | # ============================================================================ | COMMENT |
| MEDIUM | …ates/monty/test_cases/method__args_kwargs_unpacking.py | 126 | # ============================================================ | COMMENT |
| MEDIUM | …ates/monty/test_cases/method__args_kwargs_unpacking.py | 128 | # ============================================================ | COMMENT |
| MEDIUM | …ates/monty/test_cases/method__args_kwargs_unpacking.py | 223 | # ============================================================ | COMMENT |
| MEDIUM | …ates/monty/test_cases/method__args_kwargs_unpacking.py | 225 | # ============================================================ | COMMENT |
| MEDIUM | crates/monty/test_cases/math__module.py | 1271 | # ========================================================== | COMMENT |
| MEDIUM | crates/monty/test_cases/math__module.py | 1273 | # ========================================================== | COMMENT |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access_raw.py | 206 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access_raw.py | 208 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access_raw.py | 409 | # ============================================================================= | STRING |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access_raw.py | 411 | # ============================================================================= | STRING |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access_raw.py | 461 | # ============================================================================= | STRING |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access_raw.py | 463 | # ============================================================================= | STRING |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access_raw.py | 500 | # ============================================================================= | STRING |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access_raw.py | 502 | # ============================================================================= | STRING |
| MEDIUM | crates/monty-python/tests/test_os_access_raw.py | 570 | # ============================================================================= | STRING |
| MEDIUM | crates/monty-python/tests/test_os_access_raw.py | 572 | # ============================================================================= | STRING |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access.py | 81 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | crates/monty-python/tests/test_os_access.py | 83 | # ============================================================================= | COMMENT |
| 135 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/monty-js/ts/options.ts | 67 | export function encodeAssertMessageAnnotations(value: AssertMessageAnnotations | undefined): number | undefined { | CODE |
| LOW | crates/monty/test_cases/closure__multi_hop_capture.py | 74 | def nonlocal_through_pass_through(): | CODE |
| LOW | …ates/monty/test_cases/global__error_assigned_before.py | 37 | def from_import_as_then_global(): | CODE |
| LOW | …ates/monty/test_cases/global__error_assigned_before.py | 53 | def nested_def_read_then_global(): | CODE |
| LOW | crates/monty/test_cases/async__control_flow.py | 36 | async def continue_swallows_awaited_error(): | CODE |
| LOW | crates/monty/test_cases/async__control_flow.py | 144 | async def return_swallows_pending_failure(): | CODE |
| LOW | crates/monty/test_cases/async__control_flow.py | 156 | async def continue_swallows_pending_failures(): | CODE |
| LOW | crates/monty/test_cases/import__local_scope.py | 41 | def test_aliased_import_local(): | CODE |
| LOW | crates/monty/test_cases/module__dunders.py | 18 | def module_name_from_function(): | CODE |
| LOW | crates/monty/test_cases/lookup__mutation.py | 186 | def inserted_candidate_lookup(kind, calls): | CODE |
| LOW | crates/monty/test_cases/try_finally__control_flow.py | 62 | def raise_in_finally_during_return(): | CODE |
| LOW | crates/monty/test_cases/try_finally__control_flow.py | 194 | def bare_raise_in_inner_finally(): | CODE |
| LOW | crates/monty/test_cases/try_finally__control_flow.py | 246 | def exceptional_handler_cell_cleanup(): | CODE |
| LOW | crates/monty/test_cases/try_finally__control_flow.py | 361 | def return_through_exploding_exit(): | CODE |
| LOW | crates/monty/test_cases/try_finally__control_flow.py | 473 | def continue_from_handler_through_finally(): | CODE |
| LOW | crates/monty/test_cases/try_finally__control_flow.py | 738 | def return_call_short_circuit(): | CODE |
| LOW⚡ | crates/monty/test_cases/try_finally__control_flow.py | 769 | def return_indirect_call_except(): | CODE |
| LOW⚡ | crates/monty/test_cases/try_finally__control_flow.py | 779 | def return_call_and_fallthrough(): | CODE |
| LOW⚡ | crates/monty/test_cases/try_finally__control_flow.py | 789 | def return_call_ternary_fallthrough(): | CODE |
| LOW | crates/monty/test_cases/dataclass__init.py | 114 | def non_default_after_default(): | CODE |
| LOW | crates/monty/test_cases/decorator__function.py | 414 | def walrus_captured_by_closure(): | CODE |
| LOW | crates/monty/test_cases/comprehension__scope.py | 48 | def make_comprehension_closure(): | CODE |
| LOW | crates/monty/test_cases/lambda__all.py | 138 | def test_inner_lambda_capture(): | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 151 | def finally_return_overrides_handler_exc(): | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 175 | def finally_return_overrides_else_exc(): | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 604 | def _return_from_except_then_bare_raise_in_finally() -> None: | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 624 | def _return_from_doubly_nested_except() -> None: | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 647 | def _returns_from_except_no_finally() -> str: | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 714 | def _callee_raises_and_handles(): | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 739 | def _return_through_inner_finally() -> str: | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 781 | def _return_through_two_finallys() -> str: | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 849 | def _identity_through_finally(): | CODE |
| LOW | crates/monty/test_cases/decorator__class.py | 206 | def lambda_in_decorator_position(): | CODE |
| LOW | crates/monty/test_cases/decorator__class.py | 219 | def lambda_passed_to_decorator_factory(): | CODE |
| LOW | crates/monty/test_cases/decorator__class.py | 327 | def walrus_captured_by_closure(): | CODE |
| LOW | crates/monty/test_cases/list__ops.py | 498 | def _make_list_unpack_closure(): | CODE |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 162 | def test_type_check_default_allows_run_with_inputs(pool: Monty): | CODE |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 171 | def test_monty_typing_error_is_monty_error_subclass(tc_session: MontySession): | CODE |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 180 | def test_monty_typing_error_caught_as_monty_error(tc_session: MontySession): | CODE |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 186 | def test_monty_typing_error_repr(tc_session: MontySession): | CODE |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 445 | def test_type_check_accumulated_function(tc_session: MontySession): | CODE |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 519 | def test_type_check_function_define_then_call(tc_session: MontySession): | CODE |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 661 | def test_type_check_stubs_and_accumulated_together(pool: Monty): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 29 | def test_type_check_no_errors(tc_session: MontySession): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 34 | def test_type_check_with_errors(tc_session: MontySession): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 110 | def test_type_check_function_return_type(tc_session: MontySession): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 238 | def test_type_check_format_json(pool: Monty): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 256 | def test_type_check_format_names_match_the_worker(pool: Monty): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 275 | def test_type_check_format_invalid(pool: Monty): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 284 | def test_type_check_format_not_a_string(pool: Monty): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 300 | def test_type_check_stubs_with_external_function(pool: Monty): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 639 | def test_type_check_function_calling_prior_function(tc_session: MontySession): | CODE |
| LOW | crates/monty-python/tests/test_type_check.py | 731 | def test_skip_type_check_does_not_accumulate(tc_session: MontySession): | CODE |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 155 | def test_type_check_disabled_by_default(pool: Monty): | STRING |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 439 | def test_type_check_accumulated(tc_session: MontySession): | STRING |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 454 | def test_type_check_accumulated_catches_type_mismatch(tc_session: MontySession): | STRING |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 511 | def test_type_check_multiple_snippets_sequence(tc_session: MontySession): | STRING |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 528 | def test_type_check_function_define_then_call_wrong_type(tc_session: MontySession): | STRING |
| LOW⚡ | crates/monty-python/tests/test_type_check.py | 652 | def test_type_check_variable_used_across_many_snippets(tc_session: MontySession): | STRING |
| LOW | crates/monty-python/tests/test_type_check.py | 51 | def test_type_check_no_cross_session_state_leak(): | STRING |
| 579 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/monty/test_cases/import__star_error.py | 2 | CODE | |
| LOW | crates/monty/test_cases/mount_fs__ops.py | 4 | CODE | |
| LOW | …ates/monty/test_cases/global__error_assigned_before.py | 20 | CODE | |
| LOW | …ates/monty/test_cases/global__error_assigned_before.py | 26 | CODE | |
| LOW | …ates/monty/test_cases/global__error_assigned_before.py | 32 | CODE | |
| LOW | …ates/monty/test_cases/global__error_assigned_before.py | 38 | CODE | |
| LOW | …tes/monty/test_cases/import__error_module_not_found.py | 1 | CODE | |
| LOW | crates/monty/test_cases/class__annotations.py | 8 | CODE | |
| LOW | …onty/test_cases/import__runtime_error_when_executed.py | 6 | CODE | |
| LOW | …tes/monty/test_cases/import__future_unknown_feature.py | 4 | CODE | |
| LOW | crates/monty/test_cases/import__error_cannot_import.py | 1 | CODE | |
| LOW | …s/monty/test_cases/import__relative_no_module_error.py | 1 | CODE | |
| LOW | crates/monty/test_cases/import__type_checking_guard.py | 7 | CODE | |
| LOW | crates/monty/test_cases/import__type_checking_guard.py | 8 | CODE | |
| LOW | crates/monty/test_cases/import__type_checking_guard.py | 17 | CODE | |
| LOW | crates/monty/test_cases/import__type_checking_guard.py | 27 | CODE | |
| LOW | crates/monty/test_cases/import__type_checking_guard.py | 35 | CODE | |
| LOW | …ates/monty/test_cases/import__relative_future_error.py | 4 | CODE | |
| LOW | crates/monty/test_cases/import__relative_error.py | 1 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/_cli.py | 12 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 1 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 8 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 37 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 37 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 37 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 37 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__init__.py | 37 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/os_access.py | 1 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/_binary.py | 10 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/__main__.py | 3 | CODE | |
| LOW | crates/monty-python/tests/test_type_check.py | 7 | CODE | |
| LOW | crates/monty-python/tests/test_basic.py | 1 | CODE | |
| LOW | crates/monty-python/tests/conftest.py | 3 | CODE | |
| LOW | crates/monty-python/tests/test_inputs.py | 1 | CODE | |
| LOW | crates/monty-python/tests/test_os_calls.py | 8 | CODE | |
| LOW | crates/monty-python/tests/test_print.py | 3 | CODE | |
| LOW | crates/monty-python/tests/test_threading.py | 4 | CODE | |
| LOW | crates/monty-python/tests/test_async.py | 7 | CODE | |
| LOW | crates/monty-python/tests/test_websocket.py | 11 | CODE | |
| LOW | crates/monty-python/tests/test_install_dependencies.py | 8 | CODE | |
| LOW | crates/monty-python/tests/test_exceptions.py | 3 | CODE | |
| LOW | crates/monty-python/tests/test_repl.py | 3 | CODE | |
| LOW | crates/monty-python/tests/test_feed_start.py | 3 | CODE | |
| 14 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/monty-python/python/pydantic_monty/os_access.py | 300 | Read the contents of a file as text. Args: path: The path to the file, either as a `PurePosixPath` | STRING |
| HIGH | crates/monty-python/python/pydantic_monty/os_access.py | 320 | Read the contents of a file as bytes. Args: path: The path to the file, either as a `PurePosixPath` | STRING |
| HIGH | crates/monty-python/python/pydantic_monty/os_access.py | 340 | Write text data to a file. Args: path: The path to the file, either as a `PurePosixPath` (from | STRING |
| HIGH | crates/monty-python/python/pydantic_monty/os_access.py | 361 | Write binary data to a file. Args: path: The path to the file, either as a `PurePosixPath` (from | STRING |
| HIGH | crates/monty-python/python/pydantic_monty/os_access.py | 440 | List the contents of a directory. Args: path: The path to the directory. Returns: | STRING |
| HIGH | crates/monty-python/python/pydantic_monty/os_access.py | 456 | Get file status information. Use file_stat(), dir_stat(), or symlink_stat() helpers to create the return value. | STRING |
| HIGH | crates/monty-python/tests/test_os_access_compat.py | 43 | Run Python code and return the result. The code can use Path('relative/path') and it will be resolved to the | STRING |
| HIGH | examples/sql_playground/external_functions.py | 24 | Execute SQL query on a CSV file using DuckDB. Args: filepath: Path to the CSV file in the virtual f | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/monty-js/__test__/print.spec.ts | 91 | print("Count", i) | CODE |
| HIGH | crates/monty-js/__test__/print.spec.ts | 128 | print(f"Hello, {name}!") | CODE |
| HIGH | crates/monty-js/__test__/print.spec.ts | 142 | print("Inside inner function") | CODE |
| HIGH | crates/monty-js/__test__/print.spec.ts | 156 | print(f"Count: {i}") | CODE |
| HIGH | crates/monty-js/__test__/print.spec.ts | 170 | print("hello") | CODE |
| HIGH | crates/monty-js/__test__/print.spec.ts | 171 | print(func()) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/monty/test_cases/try_except__all.py | 104 | except Exception: | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 443 | except Exception: | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 454 | except Exception: | CODE |
| LOW | crates/monty/test_cases/try_except__all.py | 464 | except Exception: | CODE |
| MEDIUM | crates/monty/test_cases/try_except__all.py | 118 | def try_return_finally(): | CODE |
| LOW | crates/monty-python/exercise.py | 43 | except Exception as e: | CODE |
| LOW | crates/monty-python/tests/test_async.py | 526 | except Exception as e: | STRING |
| LOW | crates/monty-python/tests/test_re.py | 88 | except Exception as e: | CODE |
| LOW | scripts/complete_tests.py | 61 | except Exception as e: | CODE |
| LOW | scripts/bench_json.py | 89 | except Exception as e: | STRING |
| MEDIUM | scripts/run_traceback.py | 192 | print(f'Error: File not found: {file_path}', file=sys.stderr) | CODE |
| MEDIUM | scripts/codecov_diff.py | 201 | print(f'Error: {repository.get("message", "Repository not found")}', file=sys.stderr) | CODE |
| MEDIUM | scripts/codecov_diff.py | 206 | print('Error: Pull request not found', file=sys.stderr) | CODE |
| MEDIUM | scripts/codecov_diff.py | 310 | print(f'Error: Could not fetch coverage for {org}/{repo} PR #{pr_number}') | CODE |
| MEDIUM | scripts/codecov_diff.py | 398 | print('Error: Could not detect repository. Use --org and --repo.', file=sys.stderr) | CODE |
| MEDIUM | scripts/codecov_diff.py | 405 | print('Error: Could not detect PR number. Provide PR number as argument.', file=sys.stderr) | CODE |
| LOW | scripts/run_nasty_code.py | 74 | except Exception as exc: | CODE |
| MEDIUM⚡ | scripts/check_imports.py | 109 | print('Error: Found local `use` statements inside function bodies:', file=sys.stderr) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/monty/test_cases/class__name_error.py | 6 | # line, which Monty does not implement; the traceback harness strips that | COMMENT |
| MEDIUM | …ates/monty/test_cases/global__error_assigned_before.py | 9 | # the harness verifies through the `# Raise=` comment. | COMMENT |
| MEDIUM | crates/monty/test_cases/async__control_flow.py | 8 | # round-trip at every suspension in the test harness). | COMMENT |
| MEDIUM | crates/monty/test_cases/async__ext_call.py | 91 | # CPython the test harness now returns an already-resolved `asyncio.Future`, | COMMENT |
| MEDIUM | crates/monty/test_cases/async__with_args.py | 35 | # `__qualname__` (here the harness's wrapping function), which Monty | COMMENT |
| MEDIUM | crates/monty/tests/resource_limits.rs | 569 | /// generous budget keeps the timing assertion robust on loaded CI. | COMMENT |
| MEDIUM | crates/monty/src/value.rs | 2421 | /// Wraps a `StaticStrings` variant to leverage its string conversion capabilities. | COMMENT |
| LOW | scripts/test_fixtures.py | 307 | # For virtual paths, just return as-is (already absolute) | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 150 | # not depend on `monty` at all), the subprocess stack and the docs harness. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/monty/test_cases/json__module.py | 11 | assert json.loads('{"a": 1, "b": [true, null]}') == { | CODE |
| HIGH | crates/monty/test_cases/json__module.py | 17 | assert json.loads(b'{"a":[1,true,null]}') == {'a': [1, True, None]} | CODE |
| HIGH⚡ | crates/monty-python/tests/test_feed_start.py | 469 | # no entry for `missing` in the (empty) lookup — the name stays undefined, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/monty/test_cases/args__macro_errors.py | 3 | # This file is the source of truth for every error path the macro (and | COMMENT |
| MEDIUM | crates/monty/test_cases/collections__deque.py | 4 | # This file is dual-run against CPython and Monty, so both must agree exactly. | COMMENT |
| MEDIUM | crates/monty-type-checking/tests/bad_types.py | 1 | # This file contains intentional type errors to test the type checker. | COMMENT |
| MEDIUM⚡ | crates/monty-python/tests/test_type_check.py | 668 | # Define a helper that references the stub function — type checking passes | STRING |
| MEDIUM | crates/monty-python/tests/test_os_access_compat.py | 167 | # Create a mock os module with our environ | COMMENT |
| MEDIUM | crates/monty-typeshed/update.py | 273 | # Create a new If node with filtered contents | STRING |
| MEDIUM | examples/web_scraper/example_code.py | 42 | # Create a dictionary for this model | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/monty-fs/tests/fs_security.rs | 1900 | // Step 1: Rename the symlink within the mount. | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 868 | # Step 1: LLM explores what's available | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 872 | # Step 2: LLM filters by category | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 878 | # Step 3: LLM computes stats | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 889 | # Step 4: LLM also checks electronics | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 895 | # Step 5: LLM builds final summary from accumulated state | COMMENT |
| LOW | examples/sql_playground/sandbox_code.py | 15 | # Step 1: Query top 10 customers by total purchases | COMMENT |
| LOW | examples/sql_playground/sandbox_code.py | 27 | # Step 2: Get their Twitter handles from the survey data | STRING |
| LOW⚡ | examples/sql_playground/sandbox_code.py | 41 | # Step 3: Load all tweets | STRING |
| LOW⚡ | examples/sql_playground/sandbox_code.py | 47 | # Step 4: For each customer, find their tweets and analyze sentiment | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/monty-fs/tests/fs_security.rs | 1900 | // Step 1: Rename the symlink within the mount. | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 868 | # Step 1: LLM explores what's available | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 872 | # Step 2: LLM filters by category | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 878 | # Step 3: LLM computes stats | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 889 | # Step 4: LLM also checks electronics | COMMENT |
| LOW⚡ | crates/monty-python/tests/test_async.py | 895 | # Step 5: LLM builds final summary from accumulated state | COMMENT |
| LOW | examples/sql_playground/sandbox_code.py | 15 | # Step 1: Query top 10 customers by total purchases | COMMENT |
| LOW | examples/sql_playground/sandbox_code.py | 27 | # Step 2: Get their Twitter handles from the survey data | STRING |
| LOW⚡ | examples/sql_playground/sandbox_code.py | 41 | # Step 3: Load all tweets | STRING |
| LOW⚡ | examples/sql_playground/sandbox_code.py | 47 | # Step 4: For each customer, find their tweets and analyze sentiment | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/monty-python/tests/test_external_async.py | 0 | try: get_str() result = 'no error' except valueerror: result = 'caught' result | STRING |
| HIGH | crates/monty-python/tests/test_async.py | 0 | try: get_str() result = 'no error' except valueerror: result = 'caught' result | STRING |
| HIGH | crates/monty-python/tests/test_external.py | 0 | try: get_str() result = 'no error' except valueerror: result = 'caught' result | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/monty/test_cases/loop__break_nested_except_clears.py | 21 | CODE | |
| LOW | …onty/test_cases/loop__continue_nested_except_clears.py | 23 | CODE | |
| LOW | crates/monty/test_cases/try_except__all.py | 781 | CODE | |
| LOW | crates/monty-python/exercise.py | 20 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/os_access.py | 855 | CODE | |
| LOW | crates/monty-python/python/pydantic_monty/os_access.py | 972 | CODE | |
| LOW | crates/monty-typeshed/update.py | 221 | CODE | |
| LOW | scripts/complete_tests.py | 19 | CODE | |
| LOW | scripts/bench_json.py | 68 | CODE | |
| LOW | scripts/run_traceback.py | 22 | CODE | |
| LOW | scripts/codecov_diff.py | 236 | CODE | |
| LOW | scripts/codecov_diff.py | 304 | CODE | |
| LOW | scripts/check_imports.py | 123 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/monty/src/builtins/hasattr.rs | 26 | /// hasattr(obj, 'x') # Check if obj.x exists | COMMENT |
| LOW | crates/monty-python/example.py | 28 | # Print output is forwarded to Python stdout | COMMENT |
| LOW | crates/monty-python/tests/test_os_access_raw.py | 105 | # Check if directory is empty | COMMENT |
| LOW | crates/monty-typeshed/update.py | 186 | # Check if already at the right commit | STRING |
| LOW | examples/web_scraper/example_code.py | 53 | # Print the results | COMMENT |
| LOW | examples/expense_analysis/main.py | 61 | # Check if they exceeded standard budget | STRING |
| LOW | examples/expense_analysis/main.py | 71 | # Check if they exceeded their actual budget (standard or custom) | STRING |
| LOW | examples/sql_playground/main.py | 23 | # Read file contents | COMMENT |
| LOW | scripts/test_fixtures.py | 353 | # Check if parent exists | COMMENT |
| LOW⚡ | scripts/test_fixtures.py | 475 | # Check if already patched (happens when module is re-executed in same interpreter) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …tes/monty/test_cases/refcount__gather_nested_cancel.py | 15 | CODE | |
| LOW | crates/monty-python/tests/conftest.py | 23 | CODE | |
| LOW | crates/monty-python/tests/conftest.py | 60 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/monty-python/python/pydantic_monty/os_access.py | 1128 | def _update_paths_recursive(self, tree: Tree, old_prefix: PurePosixPath, new_prefix: PurePosixPath) -> None: | CODE |
| LOW | crates/monty-python/tests/test_os_access_compat.py | 69 | def set_environ(self, environ: dict[str, str]) -> None: | CODE |
| LOW | crates/monty-python/tests/test_os_access_compat.py | 92 | def set_environ(self, environ: dict[str, str]) -> None: | CODE |
| LOW | crates/monty-python/tests/test_os_access_compat.py | 147 | def set_environ(self, environ: dict[str, str]) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/monty/test_cases/async__ext_call.py | 96 | async def helper(future): | CODE |
| LOW | crates/monty/test_cases/decorator__function.py | 314 | def helper(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 54 | # make sure to use relative durations: | COMMENT |