{
  "ml": {
    "v": "7",
    "eng": "2.8.0",
    "lvl": -1,
    "conf": 0,
    "mods": [
      {
        "cls": 0,
        "raw": 0.000007996957,
        "rte": "az",
        "prob": 0.000007996957
      },
      {
        "cls": 0,
        "raw": 0.0005660057,
        "rte": "az/tar",
        "prob": 0.0005660057
      }
    ],
    "prob": 0.0000084837275,
    "files": [
      {
        "id": 0,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000008483727469865698,
        "type": "gem"
      },
      {
        "id": 1,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000007569789886474609,
        "type": "tar.gz"
      },
      {
        "id": 2,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000006030003078194568,
        "type": "ruby"
      },
      {
        "id": 3,
        "lvl": -1,
        "conf": 0,
        "prob": 0.0000058313212321081664,
        "type": "ruby"
      },
      {
        "id": 16,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000006427367679862073,
        "type": "registry"
      }
    ],
    "version": "v18.18",
    "analyzed_at": "2026-08-25T05:31:57Z"
  },
  "path": "bumbler-0.8.0.gem",
  "raw": {
    "files": [
      {
        "id": 0,
        "ctx": [
          {
            "b": "zdN/$wmoN*e[YFg00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fFCgmg=d2?fFCgmfA",
            "ln": 0
          }
        ],
        "mol": "H₃(DbPoU)",
        "sha": "a0659f1a0a1eb07e488951d557b15574c26f8a12a8fa35e844b3b71b5c76d3cf",
        "path": "bumbler-0.8.0.gem",
        "risk": 3,
        "size": 9216,
        "type": "gem",
        "facts": {
          "metrics": {
            "gem": {
              "dependency_count": 4,
              "runtime_dependency_count": 0,
              "development_dependency_count": 4
            },
            "file": {
              "size": 9216,
              "entropy": 6.23
            },
            "binary": {
              "peak_region_bytes": 5120,
              "peak_region_entropy": 7.8
            },
            "archive": {
              "file_count": 3,
              "member_count": 3,
              "script_count": 0,
              "directory_count": 0,
              "executable_count": 0,
              "hidden_file_count": 0,
              "uncompressed_size": 5947,
              "max_filename_length": 17,
              "rtlo_filename_count": 0,
              "format.regular_count": 3,
              "nested_archive_count": 3,
              "path_traversal_count": 0,
              "symlink_escape_count": 0,
              "security.setgid_count": 0,
              "security.setuid_count": 0,
              "security.sticky_count": 0,
              "double_extension_count": 0,
              "security.symlink_count": 0,
              "unicode_filename_count": 0,
              "homoglyph_filename_count": 0,
              "timing.mtime_unique_count": 1,
              "misplaced_executable_count": 0,
              "timing.mtime_spread_seconds": 0,
              "security.world_writable_count": 0
            }
          }
        },
        "ident": {
          "name": {
            "value": "bumbler",
            "source": "gem.name",
            "verified": false
          },
          "urls": [
            {
              "url": "https://github.com/nevir/Bumbler",
              "kind": "homepage",
              "source": "gem.homepage"
            }
          ],
          "trust": "unsigned",
          "authors": [
            {
              "name": "Ian MacLeod",
              "role": "author",
              "source": "gem.authors"
            }
          ],
          "version": {
            "value": "0.8.0",
            "source": "gem.version",
            "verified": false
          }
        },
        "traits": [
          {
            "id": "micro-behaviors/data/source/language::ruby-dynamic-method-definition",
            "conf": 0.8,
            "crit": 3,
            "desc": "Ruby defines methods dynamically"
          },
          {
            "id": "micro-behaviors/ui/help::script-usage-screen",
            "conf": 0.9,
            "crit": 3,
            "desc": "Script prints a CLI usage screen"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-5",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"for\""
          },
          {
            "id": "micro-behaviors/process/interpreter/eval::ruby-module-eval",
            "atk": "T1059",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby module_eval call"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-7",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"this\""
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\""
          }
        ]
      },
      {
        "depth": 1,
        "facts": {
          "metrics": {
            "file": {
              "size": 5010,
              "entropy": 7.95
            },
            "parse": {
              "error_count": 1
            },
            "binary": {
              "peak_region_bytes": 5010,
              "peak_region_entropy": 7.8
            }
          }
        },
        "id": 1,
        "mol": "H₃(DbPoU)",
        "path": "bumbler-0.8.0.gem!!data.tar.gz",
        "pid": 0,
        "risk": 3,
        "sha": "5166819a1081467131e185a596c0d3f2d3ed6110cf97bcf24d3c79f9389297e6",
        "size": 5010,
        "traits": [
          {
            "id": "micro-behaviors/process/interpreter/eval::ruby-module-eval",
            "atk": "T1059",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby module_eval call"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-5",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"for\""
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\""
          },
          {
            "id": "micro-behaviors/data/source/language::ruby-dynamic-method-definition",
            "conf": 0.8,
            "crit": 3,
            "desc": "Ruby defines methods dynamically"
          },
          {
            "id": "micro-behaviors/ui/help::script-usage-screen",
            "conf": 0.9,
            "crit": 3,
            "desc": "Script prints a CLI usage screen"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-7",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"this\""
          }
        ],
        "type": "tar.gz"
      },
      {
        "ctx": [
          {
            "b": "boQPsz*C#juVQsfx(mM\u003cy?X05A:-=BaARTDwEro)wozZ1avpi/vR/Q@3lQEdz!a0bwGTJZz!\u003cz3arR^HkYZ:WCvbD9A+fr9z!@@bjS(EkfFk3^arR^HkY.3QA=.",
            "ln": 0,
            "col": 1,
            "line": 1
          },
          {
            "b": "arR^Kaw3D=wN/*8z/{7yv%8\u003cmz/3RgvqYQ(x(mMaz!pbjwPq\u003cbA+cwczGG!tBzbkdoj-cYwO-$aarR^HarUiaw/$=9z!\u0026Z2wPq\u003cbA+cy3arR^HarR^HxM4*8uUKz0Byx5%wNxE?ADL#owG.y6arR^HarR!uz/oz#B7]J8y?mZbzEmA}ADL#owG.x",
            "ln": 281,
            "col": 4,
            "line": 14
          },
          {
            "b": "vqYN^uVGZ$B.L(caQPtmarR^HarS{.z/oA9zF9r\u003czGx]dzEWl+A+flkx(W=cjS[\u0026!B.7)!arR^HarR^HiYY]BA=bD8e]tJqB.\u003eR@wP?G#ay]x$arR^HarR^HarUPyx\u003eH^!zGx]dzEWl+A+flkx(W=cjS[DRB97\u0026dv}x1:wPRQ7wgfGVwPq\u003cbA+cWbarR^HarR^HarUiaw[=c]uU%v@xM4Afi=X!KB.L(cdiJetaBFcpBz9iFdQ^vgB9[rqarR^HarR^HarR^/iZN$avR/Q@iYY/Iz!\u003czDxKL^?y?l%]wPq\u003cbA+cUrvrufiay]x$arR^HarR^HarR^HarUPyx\u003eH^!zGx]dzEWl+A+flkx(W=qvRGZ\u003cd05%ow*]uxvqG:dAa9\u003c4",
            "ln": 458,
            "col": 20,
            "line": 20
          },
          {
            "b": "arR^HarR)KnPV7?B8AvEaAhvjC4\u003e(qB8laAwmYv!zE)u3x(k4^wPzW1y+u?Mra]#!ay/tjy?aU$wGUz7vRG{bwmov*wPzZiB1wCQxM53axF6SmarR^HarR^Hay]4}aAIagw?E}iBzbP6uTWFQwN)iawPRQ7wm6j.zdLmvdQMR8xlbHearR^HarR^H",
            "ln": 1570,
            "col": 5,
            "line": 56
          },
          {
            "b": "xjU{!zEEx[t{8oMBAhIn3jm)#arR^HarU=uzdLmvA+frmy\u0026*^.ayX]1v}YZ/A+^7xvruflaspMlz!0Mi3jm)#arR^HarR)Kr8k[TiV@3MAV/7rwO(GhCwhejaz(mqBzkYgwGU@2Bzb.rCv.[mwO2x{Bz\u0026pgwmM*8xK@rdx(dB53lQDlarR^Havpi/vR/Q@iYYPIzE^M{AXqxzADL#owNx4-zFsf9wN)i4wO\u003e^(vqPNbaAg+h",
            "ln": 2781,
            "col": 24,
            "line": 90
          }
        ],
        "depth": 2,
        "facts": {
          "imp": [
            [
              "",
              "attr_writer"
            ],
            [
              "",
              "attr_reader"
            ],
            [
              "",
              "hook_instance_require!"
            ],
            [
              "",
              "hook_singleton_require!"
            ],
            [
              "",
              "module_eval"
            ],
            [
              "",
              "instance_method"
            ],
            [
              "",
              "define_method"
            ],
            [
              "",
              "handle_require"
            ],
            [
              "",
              "call"
            ],
            [
              "",
              "bind"
            ],
            [
              "",
              "private"
            ],
            [
              "",
              "module_eval"
            ],
            [
              "",
              "public_method"
            ],
            [
              "",
              "define_method"
            ],
            [
              "",
              "handle_require"
            ],
            [
              "",
              "call"
            ],
            [
              "",
              "module_eval"
            ],
            [
              "",
              "hooking_instance_require?"
            ],
            [
              "",
              "hook_instance_require!"
            ],
            [
              "",
              "hooking_singleton_require?"
            ],
            [
              "",
              "hook_singleton_require!"
            ],
            [
              "",
              "gem_for_require"
            ],
            [
              "",
              "require_started"
            ],
            [
              "",
              "benchmark"
            ],
            [
              "",
              "require_finished"
            ],
            [
              "",
              "clock_gettime"
            ],
            [
              "",
              "clock_gettime"
            ]
          ],
          "mbr": [
            "Kernel.public_method",
            "Process.clock_gettime",
            "orig_instance_require.bind",
            "orig_instance_require.bind.call",
            "orig_public_require.call"
          ],
          "tgt": [
            "attr_reader",
            "attr_writer",
            "benchmark",
            "bind",
            "call",
            "clock_gettime",
            "define_method",
            "gem_for_require",
            "handle_require",
            "hook_instance_require!",
            "hook_singleton_require!",
            "hooking_instance_require?",
            "hooking_singleton_require?",
            "instance_method",
            "module_eval",
            "private",
            "public_method",
            "require_finished",
            "require_started"
          ],
          "funcs": [
            [
              "hook_require!",
              347
            ],
            [
              "hook_instance_require!",
              445
            ],
            [
              "hook_singleton_require!",
              953
            ],
            [
              "watch_require!",
              1515
            ],
            [
              "method_added",
              1667
            ],
            [
              "singleton_method_added",
              1889
            ],
            [
              "hooking_instance_require?",
              2141
            ],
            [
              "hooking_singleton_require?",
              2222
            ],
            [
              "handle_require",
              2357
            ],
            [
              "benchmark",
              3025
            ]
          ],
          "metrics": {
            "ast": {
              "op.eq": 3,
              "op.gt": 1,
              "op.mul": 1,
              "op.sub": 1,
              "op.land": 2,
              "op.lnot": 2,
              "max_depth": 23,
              "op.concat": 18,
              "call_count": 27,
              "node_count": 538,
              "member_count": 5,
              "max_array_len": 2,
              "op_density.eq": 0.01,
              "op_density.gt": 0,
              "op_density.mul": 0,
              "op_density.sub": 0,
              "op_density.land": 0,
              "op_density.lnot": 0,
              "member_depth_max": 3,
              "op_density.concat": 0.03
            },
            "file": {
              "size": 3328,
              "entropy": 4.4
            },
            "text": {
              "lines": 109,
              "top_char": 101,
              "max_ws_run": 2,
              "digit_ratio": 0,
              "space_count": 896,
              "char_entropy": 4.4,
              "unique_chars": 67,
              "top_char_null": 0,
              "top_char_ratio": 0.09,
              "avg_line_length": 29.53,
              "max_line_length": 90,
              "empty_line_ratio": 0.18,
              "last_line_length": 3,
              "whitespace_ratio": 0.3,
              "identifier_density": 1.19,
              "line_length_stddev": 25.13,
              "repeated_char_sequences": 26,
              "suspicious_comment_ratio": 0.08,
              "normalized_unique_identifiers": 6.94
            },
            "binds": {
              "count": 14
            },
            "binary": {
              "peak_region_bytes": 3328,
              "peak_region_entropy": 4.6
            },
            "source": {
              "class_count": 2,
              "function_count": 10
            },
            "comments": {
              "chars": 538,
              "count": 12,
              "lines": 12,
              "base64": 1,
              "todo_count": 1,
              "to_code_ratio": 0.12
            },
            "functions": {
              "count": 12
            },
            "identifiers": {
              "count": 130,
              "unique": 47,
              "avg_length": 12.36,
              "max_length": 26,
              "min_length": 3,
              "avg_entropy": 2.93,
              "reuse_ratio": 0.36,
              "length_stddev": 6.65,
              "high_entropy_count": 11,
              "high_entropy_ratio": 0.23,
              "all_lowercase_ratio": 0.62,
              "all_uppercase_ratio": 0.02,
              "underscore_prefix_count": 1
            }
          }
        },
        "id": 2,
        "mol": "H₂(DbPo)",
        "path": "bumbler-0.8.0.gem!!data.tar.gz!!lib/bumbler/hooks.rb",
        "risk": 2,
        "sha": "6e85be62459d73fadd03efeecb291c4cd6b7635907547f9d2bd453b714122619",
        "size": 3328,
        "traits": [
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\"",
            "spans": [
              [
                329,
                0
              ]
            ]
          },
          {
            "id": "micro-behaviors/data/source/language::ruby-dynamic-method-definition",
            "conf": 0.8,
            "crit": 3,
            "desc": "Ruby defines methods dynamically",
            "spans": [
              [
                616,
                22
              ]
            ]
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-5",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"for\"",
            "spans": [
              [
                2863,
                0
              ]
            ]
          },
          {
            "id": "micro-behaviors/process/interpreter/eval::ruby-module-eval",
            "atk": "T1059",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby module_eval call",
            "spans": [
              [
                522,
                11
              ]
            ]
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-7",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"this\"",
            "spans": [
              [
                1618,
                0
              ]
            ]
          }
        ],
        "type": "ruby"
      },
      {
        "ctx": [
          {
            "b": "boXZ.B8\u0026{yx(kOnzGWdyBZ/R6boQPsz*C#juVQsfx(mM\u003cy?X05A:-=BaARTDwEn+?azCZov{%B\u0026aA}xtwQ4=@B-.gqC4\u003ewce?ZWFzvf/.wm6d\u003evpS.:vruf9jS\u003c",
            "ln": 0,
            "col": 1,
            "line": 1
          },
          {
            "b": "CYm8ewm6p:Bz96Ie?O![x\u003c@CvaywF^x(WM/dgdgubUR01l%\u0026+Rr7Fb]jrODUv{%gXy?Wu3B-82bB8@DHoIW@xuR\u003c3/ng[Q]v@co#wJ}qNz!0i(uU\u003cB=3t19=3sNEQuU\u003cT?wm6p:Bn",
            "ln": 124,
            "col": 21,
            "line": 6
          },
          {
            "b": "B.$P7wPw]mxM59oaztXqaz+$lxcq2evpT7\u0026xcqFrB-FQlB-7-awGUG3ze:AhwO#QhaAR4cwIaq%arR^HrDzOYwJyevarR^HarR!oB.$P7wPwa+arR^HpJgz\u0026z/fRS3lQDTk#7fzqvjJ?Aa9^dwPxzwzyuXXBrSmUa$Ux*xMvW9xM4Y$awCB3oI5eKlR*DBqZ9+nnP5SYxjV9mar\u003c=#A+fr9z!@@bx(k5gB0bNyayX[8y?W%jwN(](B0bKuz*9xOaBtkUBBkiHAcb/jzGx2yBzbYaB7/Gd",
            "ln": 354,
            "col": 6,
            "line": 17
          },
          {
            "b": "vqG:=auZ\u0026?A=\u003e}oEf}8tAa9^dwPxzwzyuXXxD!#Ia$UxWwO=rfefDcnxM58qBzbxfe*q.!DMWoIBAnNzvrcB2AYUyPCXImxEf}8tAa9^dwPxzwzyu\u003e:B%!*-cOl][wPz\u003caz/c{Nasy93z*9s8wPz\u003caz/c{KaBtkIB-.WEluNcOy?mSFi-XWEq+o+W",
            "ln": 744,
            "col": 56,
            "line": 26
          }
        ],
        "depth": 2,
        "facts": {
          "imp": [
            [
              "",
              "expand_path"
            ],
            [
              "",
              "include?"
            ],
            [
              "",
              "call"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "parse!"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "banner"
            ],
            [
              "",
              "on"
            ],
            [
              "",
              "on"
            ],
            [
              "",
              "on"
            ],
            [
              "",
              "on"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "on"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "abort"
            ],
            [
              "",
              "empty?"
            ],
            [
              "",
              "slow_threshold"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "call"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "exist?"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "call"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "groups"
            ],
            [
              "",
              "definition"
            ],
            [
              "",
              "print_overview"
            ],
            [
              "",
              "print_tracked_items"
            ],
            [
              "",
              "print_slow_items"
            ],
            [
              "",
              "./config/application"
            ],
            [
              "",
              "./config/environment"
            ],
            [
              "",
              "bumbler"
            ],
            [
              "",
              "bumbler/go"
            ],
            [
              "",
              "bumbler/track_initializers"
            ],
            [
              "",
              "optparse"
            ]
          ],
          "mbr": [
            "ARGV.empty?",
            "Bundler.definition",
            "Bundler.definition.groups",
            "Bundler.require",
            "File.exist?",
            "File.expand_path",
            "OptionParser.new",
            "OptionParser.new.parse!",
            "add_load_path.call",
            "parser.banner",
            "parser.on"
          ],
          "tgt": [
            "abort",
            "banner",
            "call",
            "definition",
            "empty?",
            "exist?",
            "expand_path",
            "groups",
            "include?",
            "new",
            "on",
            "parse!",
            "print_overview",
            "print_slow_items",
            "print_tracked_items",
            "puts",
            "require",
            "slow_threshold"
          ],
          "metrics": {
            "ast": {
              "op.shl": 1,
              "max_depth": 11,
              "op.concat": 22,
              "call_count": 33,
              "node_count": 409,
              "member_count": 11,
              "op_density.shl": 0,
              "member_depth_max": 3,
              "op_density.concat": 0.05
            },
            "file": {
              "size": 1567,
              "entropy": 5.08
            },
            "text": {
              "lines": 54,
              "top_char": 101,
              "max_ws_run": 1,
              "space_count": 176,
              "char_entropy": 5.08,
              "unique_chars": 71,
              "top_char_null": 0,
              "string_density": 0.46,
              "top_char_ratio": 0.07,
              "avg_line_length": 28.02,
              "max_line_length": 126,
              "empty_line_ratio": 0.17,
              "last_line_length": 3,
              "whitespace_ratio": 0.15,
              "identifier_density": 1.44,
              "line_length_stddev": 26.82,
              "normalized_string_count": 3.4,
              "suspicious_identifier_ratio": 0.03,
              "normalized_unique_identifiers": 5.91
            },
            "binds": {
              "count": 4
            },
            "binary": {
              "peak_region_bytes": 1567,
              "peak_region_entropy": 5.11
            },
            "imports": {
              "count": 6,
              "relative": 2,
              "relative_ratio": 0.33,
              "third_party_count": 6,
              "third_party_ratio": 1
            },
            "strings": {
              "bytes": 459,
              "count": 25,
              "avg_length": 18.36,
              "max_length": 115,
              "path_count": 5,
              "avg_entropy": 2.97,
              "entropy_stddev": 0.95
            },
            "comments": {
              "chars": 117,
              "count": 5,
              "lines": 5,
              "to_code_ratio": 0.1
            },
            "identifiers": {
              "count": 78,
              "unique": 34,
              "avg_length": 7.41,
              "max_length": 19,
              "min_length": 1,
              "avg_entropy": 2.4,
              "reuse_ratio": 0.44,
              "length_stddev": 4.02,
              "sequential_names": 1,
              "single_char_count": 1,
              "single_char_ratio": 0.03,
              "high_entropy_count": 1,
              "high_entropy_ratio": 0.03,
              "all_lowercase_ratio": 0.62,
              "all_uppercase_ratio": 0.06,
              "double_underscore_count": 1,
              "underscore_prefix_count": 1
            }
          }
        },
        "id": 3,
        "mol": "H(U)",
        "path": "bumbler-0.8.0.gem!!data.tar.gz!!bin/bumbler",
        "risk": 2,
        "sha": "4a7b453521aff70568bebaa40bc6e2306533aea44308c3d1cc69600d1d0a65fc",
        "size": 1567,
        "traits": [
          {
            "id": "micro-behaviors/ui/help::script-usage-screen",
            "conf": 0.9,
            "crit": 3,
            "desc": "Script prints a CLI usage screen",
            "spans": [
              [
                418,
                36
              ]
            ]
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-7",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"this\"",
            "spans": [
              [
                792,
                0
              ]
            ]
          }
        ],
        "type": "ruby"
      },
      {
        "id": 16,
        "sha": "d8935e7b25735e9ba2dd2f89fe3a8466cbd995892b76709fd2db4eb2107197b2",
        "path": "bumbler@0.8.0.registry.json",
        "size": 867,
        "type": "registry",
        "depth": 1
      }
    ],
    "omitted_files": 1,
    "rev": "d5c9e",
    "v": "8"
  }
}