{
  "llm": {
    "conf": 0.005415028,
    "grade": "benign",
    "model": "qwen/qwen3.8-27b",
    "outcome": "benign",
    "interpretation": "Legitimate hostname management gem"
  },
  "ml": {
    "v": "7",
    "eng": "2.8.0",
    "lvl": -1,
    "conf": 0,
    "mods": [
      {
        "cls": 0,
        "raw": 0.008082132,
        "rte": "az",
        "prob": 0.008082132
      },
      {
        "cls": 0,
        "raw": 0.0010363758,
        "rte": "az/gem",
        "prob": 0.0010363758
      }
    ],
    "prob": 0.008082132,
    "files": [
      {
        "id": 0,
        "lvl": -1,
        "conf": 0,
        "prob": 0.0080821318551898,
        "type": "gem"
      },
      {
        "id": 1,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000008483727469865698,
        "type": "tar.gz"
      },
      {
        "id": 2,
        "lvl": -1,
        "conf": 0,
        "prob": 0.00000618894910076051,
        "type": "ruby"
      },
      {
        "id": 3,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000007977087989274878,
        "type": "ruby"
      },
      {
        "id": 4,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000007450580596923828,
        "type": "ruby"
      },
      {
        "id": 11,
        "lvl": -1,
        "conf": 0,
        "prob": 0.000006725390903739026,
        "type": "registry"
      }
    ],
    "version": "v18.18",
    "analyzed_at": "2026-09-04T22:04:46Z"
  },
  "path": "ghost-0.2.4.gem",
  "raw": {
    "files": [
      {
        "id": 0,
        "ctx": [
          {
            "b": "wmoN*e{7Jxe[YFg00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fFCgmhz^k\u003cfFCf",
            "ln": 0
          }
        ],
        "mol": "H₂(DbPo₂)",
        "sha": "9e1404a756b682fac3e49f3e5d6f0a7cf4a7f288a9160b4e1bf93f0fb1d06e7d",
        "path": "ghost-0.2.4.gem",
        "risk": 4,
        "size": 8704,
        "type": "gem",
        "facts": {
          "metrics": {
            "gem": {
              "dependency_count": 0,
              "runtime_dependency_count": 0,
              "development_dependency_count": 0
            },
            "file": {
              "size": 8704,
              "entropy": 6.23
            },
            "binary": {
              "peak_region_bytes": 4096,
              "peak_region_entropy": 7.81
            },
            "archive": {
              "file_count": 2,
              "member_count": 2,
              "script_count": 0,
              "directory_count": 0,
              "executable_count": 0,
              "hidden_file_count": 0,
              "uncompressed_size": 5696,
              "max_filename_length": 11,
              "rtlo_filename_count": 0,
              "format.regular_count": 2,
              "nested_archive_count": 2,
              "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": "ghost",
            "source": "gem.name",
            "verified": false
          },
          "urls": [
            {
              "url": "http://github.com/bjeanes/ghost",
              "kind": "homepage",
              "source": "gem.homepage"
            }
          ],
          "trust": "unsigned",
          "authors": [
            {
              "name": "Bodaniel Jeanes",
              "role": "author",
              "source": "gem.authors"
            }
          ],
          "version": {
            "value": "0.2.4",
            "source": "gem.version",
            "verified": false
          }
        },
        "traits": [
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\""
          },
          {
            "id": "metadata/package/testing/presence/harness::test-directory",
            "conf": 1.0,
            "crit": 2,
            "desc": "File identified as a test by path or name",
            "from": [
              {
                "file": 1
              },
              {
                "file": 9
              },
              {
                "file": 10
              }
            ],
            "uses": [
              6
            ]
          },
          {
            "id": "micro-behaviors/data/source/dynamic/reflect::ruby-send-call",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamically invokes a method with send"
          },
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-subshell-command",
            "conf": 0.93,
            "crit": 3,
            "desc": "Ruby subshell command execution"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-2",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"and\""
          },
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-backtick-command-substitution",
            "conf": 0.88,
            "crit": 3,
            "desc": "Executes a command with Ruby backticks"
          },
          {
            "id": "metadata/package/testing/presence/harness::test-directory-path",
            "conf": 1.0,
            "crit": 1,
            "desc": "File is in common test directory"
          },
          {
            "id": "micro-behaviors/process/exit/terminate::ruby-exit-call",
            "conf": 0.9,
            "crit": 3,
            "desc": "Terminates the Ruby process with exit"
          },
          {
            "id": "metadata/package/testing/presence/harness::spec-path-basename",
            "conf": 1.0,
            "crit": 1,
            "desc": "Spec path basename"
          }
        ]
      },
      {
        "depth": 1,
        "facts": {
          "metrics": {
            "file": {
              "size": 5133,
              "entropy": 7.95
            },
            "parse": {
              "error_count": 1
            },
            "binary": {
              "peak_region_bytes": 5120,
              "peak_region_entropy": 7.8
            }
          }
        },
        "id": 1,
        "mol": "H₂(DbPo₂)",
        "path": "ghost-0.2.4.gem!!data.tar.gz",
        "pid": 0,
        "risk": 4,
        "sha": "6d98534d2689f558baf643c0a20c07ab8a8f94fe19de5efdc68d7bcae02a2d3c",
        "size": 5133,
        "traits": [
          {
            "id": "metadata/package/testing/presence/harness::test-directory",
            "conf": 1.0,
            "crit": 2,
            "desc": "File identified as a test by path or name",
            "from": [
              {
                "file": 9
              },
              {
                "file": 10
              }
            ],
            "uses": [
              8
            ]
          },
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-subshell-command",
            "conf": 0.93,
            "crit": 3,
            "desc": "Ruby subshell command execution"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-2",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"and\""
          },
          {
            "id": "micro-behaviors/process/exit/terminate::ruby-exit-call",
            "conf": 0.9,
            "crit": 3,
            "desc": "Terminates the Ruby process with exit"
          },
          {
            "id": "micro-behaviors/data/source/dynamic/reflect::ruby-send-call",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamically invokes a method with send"
          },
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-backtick-command-substitution",
            "conf": 0.88,
            "crit": 3,
            "desc": "Executes a command with Ruby backticks"
          },
          {
            "id": "metadata/package/testing/presence/harness::spec-path-basename",
            "conf": 1.0,
            "crit": 1,
            "desc": "Spec path basename"
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\""
          },
          {
            "id": "metadata/package/testing/presence/harness::test-directory-path",
            "conf": 1.0,
            "crit": 1,
            "desc": "File is in common test directory"
          }
        ],
        "type": "tar.gz"
      },
      {
        "ctx": [
          {
            "b": "boXZ.B8\u0026{yx(kOnzGWdyBZ/R6bmkUravyfXvru6\u003eayYQslt{yyzFrV#awciNzE)(iz/cWMfFCEri4V\u003cBe^-*Cavy6^D2^RixMLvBv\u003c@JQfFCEsavf*WaAzgexMOqrA+fr6A=#28e^.}{wOkZ{3lQEiwPq\u003cbA+cvvA=\u003e\u0026pxjU}3cKK)9B7ou7awuYZwjpJVz/Mgcar@1DzY\u003c7yvThP$zf3?wzY/",
            "ln": 0,
            "col": 1,
            "line": 1
          },
          {
            "b": "B08UJb2}Mcm[2DYbysGwA+PGmuV6p?wQLXfwmM/BxM4%lzEEx[j%j5(x(Di\u0026gb**te?[$kk3XHrarR^HarR[QB7ol8AcbD8vqPO7az(4cx\u003ezSkjznUOBz+J7wJ?k0x(Dly",
            "ln": 288,
            "col": 6,
            "line": 15
          },
          {
            "b": "bysGwA+PGmuV6p?wQLXjCYmOwBp6ckarR^Har#kOv@=p5Bye]]zdObrx(d*cA=-A^w[=6)j{\u0026FTa{]CnwQ4{hc$NTqByeJ@wmWg%wO#2=3tB8{k#HiNe]$-MwIepuA=je+E0^5vcOo0VefDq(eOFZiA3)gVcUN7cA3[{zx(mA%B.25Fc{Z:3rXv##A=VsK3lQE8wO=r)By/Ys3t13{wGS95arUf5B7DEWqB:+(fKk2daA}HgzxHrn",
            "ln": 542,
            "col": 8,
            "line": 21
          },
          {
            "b": "AXqrNBAnMGlT:\u003eIz/^auC4CYrA+PSbayPdgwQ4{gBzkS9az2CjA^onWrDzZ]BzbkdzeS%0w{CIuBZ!\u003c0zeAZ0wfIv6arR^HarR!rCXImxgytlEarR^HwO#2=arR^HwO=B03lQDlarR^LB97@7A=J^KB-.WEb2\u0026k!ayO!\u003eaAIWmv@Dj3vqYP#A+fj",
            "ln": 932,
            "col": 15,
            "line": 39
          },
          {
            "b": "Aclnzar\u003c=#wGU\u0026dwnbU3aAIWmv@Dj3vqYP#A+flkx(W^aayMyaz/Z2rvqPM#vqYP#vqWhVp+D0\u003ctY7.)arR^HarUuey\u0026A:6wQ5qtgZUuFarUlkwc%C4Cw7M9asyYhy?mZ1cOcw/wmYN8efDrXwO(vewHx2KcVT5K3lQDlazCBgk#HiNe]$-MwGTb",
            "ln": 1330,
            "col": 15,
            "line": 54
          }
        ],
        "depth": 2,
        "facts": {
          "imp": [
            [
              "",
              "require"
            ],
            [
              "",
              "require"
            ],
            [
              "",
              "basename"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "zero?"
            ],
            [
              "",
              "size"
            ],
            [
              "",
              "include?"
            ],
            [
              "",
              "first"
            ],
            [
              "",
              "include?"
            ],
            [
              "",
              "size"
            ],
            [
              "",
              "shift"
            ],
            [
              "",
              "add"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "name"
            ],
            [
              "",
              "ip"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "help_text"
            ],
            [
              "",
              "size"
            ],
            [
              "",
              "shift"
            ],
            [
              "",
              "add"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "name"
            ],
            [
              "",
              "ip"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "help_text"
            ],
            [
              "",
              "size"
            ],
            [
              "",
              "delete"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "help_text"
            ],
            [
              "",
              "size"
            ],
            [
              "",
              "delete_matching"
            ],
            [
              "",
              "empty?"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "each"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "help_text"
            ],
            [
              "",
              "list"
            ],
            [
              "",
              "length"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "max"
            ],
            [
              "",
              "length"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "length"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "size"
            ],
            [
              "",
              "each"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "rjust"
            ],
            [
              "",
              "name"
            ],
            [
              "",
              "ip"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "print"
            ],
            [
              "",
              "empty!"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "list"
            ],
            [
              "",
              "each"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "name"
            ],
            [
              "",
              "ip"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "size"
            ],
            [
              "",
              "foreach"
            ],
            [
              "",
              "split"
            ],
            [
              "",
              "strip"
            ],
            [
              "",
              "add"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "name"
            ],
            [
              "",
              "ip"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "exit"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "help_text"
            ],
            [
              "",
              "puts"
            ],
            [
              "",
              "help_text"
            ],
            [
              "",
              "ghost"
            ],
            [
              "",
              "rubygems"
            ]
          ],
          "mbr": [
            "ARGV.first",
            "ARGV.shift",
            "ARGV.size",
            "ARGV.size.zero?",
            "File.basename",
            "File.foreach",
            "Host.add",
            "Host.delete",
            "Host.delete_matching",
            "Host.empty!",
            "Host.list",
            "a.to_s",
            "a.to_s.length",
            "b.to_s",
            "b.to_s.length",
            "host.ip",
            "host.name",
            "host.name.rjust",
            "hosts.each",
            "hosts.max",
            "hosts.max.to_s",
            "hosts.max.to_s.length",
            "hosts.size",
            "line.strip",
            "line.strip.split",
            "matched.each",
            "matched.empty?"
          ],
          "tgt": [
            "add",
            "basename",
            "delete",
            "delete_matching",
            "each",
            "empty!",
            "empty?",
            "exit",
            "first",
            "foreach",
            "help_text",
            "include?",
            "ip",
            "length",
            "list",
            "max",
            "name",
            "print",
            "puts",
            "require",
            "rjust",
            "shift",
            "size",
            "split",
            "strip",
            "to_s",
            "zero?"
          ],
          "funcs": [
            [
              "help_text",
              221
            ]
          ],
          "metrics": {
            "ast": {
              "op.eq": 4,
              "op.add": 1,
              "op.lor": 1,
              "op.shl": 1,
              "max_depth": 17,
              "op.concat": 55,
              "call_count": 86,
              "node_count": 883,
              "member_count": 27,
              "max_array_len": 3,
              "op_density.eq": 0,
              "op_density.add": 0,
              "op_density.lor": 0,
              "op_density.shl": 0,
              "max_concat_chain": 2,
              "member_depth_max": 4,
              "max_numeric_array": 2,
              "op_density.concat": 0.06
            },
            "file": {
              "size": 3060,
              "entropy": 4.7
            },
            "text": {
              "lines": 121,
              "top_char": 101,
              "max_ws_run": 2,
              "digit_ratio": 0.03,
              "space_count": 775,
              "char_entropy": 4.7,
              "unique_chars": 81,
              "top_char_null": 0,
              "string_density": 0.32,
              "top_char_ratio": 0.07,
              "avg_line_length": 24.29,
              "max_line_length": 86,
              "empty_line_ratio": 0.04,
              "last_line_length": 3,
              "whitespace_ratio": 0.29,
              "identifier_density": 1.36,
              "line_length_stddev": 20.22,
              "normalized_string_count": 3.55,
              "repeated_char_sequences": 3,
              "suspicious_string_ratio": 0.08,
              "trailing_whitespace_lines": 5,
              "suspicious_identifier_ratio": 0.07,
              "normalized_unique_identifiers": 6.07
            },
            "binds": {
              "count": 9
            },
            "binary": {
              "peak_region_bytes": 3060,
              "peak_region_entropy": 4.91
            },
            "source": {
              "function_count": 1
            },
            "imports": {
              "count": 2,
              "third_party_count": 2,
              "third_party_ratio": 1
            },
            "strings": {
              "bytes": 1089,
              "count": 39,
              "avg_length": 27.92,
              "max_length": 307,
              "avg_entropy": 3.08,
              "empty_count": 2,
              "entropy_stddev": 1.21,
              "embedded_code_candidates": 3
            },
            "comments": {
              "chars": 143,
              "count": 5,
              "empty": 1,
              "lines": 4,
              "to_code_ratio": 0.03
            },
            "functions": {
              "count": 1
            },
            "identifiers": {
              "count": 164,
              "unique": 42,
              "avg_length": 5.38,
              "max_length": 15,
              "min_length": 1,
              "avg_entropy": 2.1,
              "reuse_ratio": 0.26,
              "length_stddev": 2.75,
              "sequential_names": 3,
              "single_char_count": 3,
              "single_char_ratio": 0.07,
              "all_lowercase_ratio": 0.81,
              "all_uppercase_ratio": 0.02
            }
          }
        },
        "id": 2,
        "mol": "H(Po)",
        "path": "ghost-0.2.4.gem!!data.tar.gz!!bin/ghost",
        "risk": 2,
        "sha": "e22e69cbccb54ac1a54b631a5afb2aaa2657d123742d445dc05b1ea115e0f015",
        "size": 3060,
        "traits": [
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\"",
            "spans": [
              [
                980,
                0
              ]
            ]
          },
          {
            "id": "metadata/file/profile/language::lang-english--atom-2",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"and\"",
            "spans": [
              [
                1378,
                0
              ]
            ]
          },
          {
            "id": "micro-behaviors/process/exit/terminate::ruby-exit-call",
            "conf": 0.9,
            "crit": 3,
            "desc": "Terminates the Ruby process with exit",
            "spans": [
              [
                606,
                4
              ]
            ]
          }
        ],
        "type": "ruby"
      },
      {
        "ctx": [
          {
            "b": "v@bN{B0a1(B94:iayPwlA:J\u0026#vpS}\u0026auBgOB95@Qi+-Ku3lQE4wO960zFsibvqGU7wHIkgB95@Qx(CHdarR^HkXL7SBrAZ?xM4%l3lQDlav6TWauZ\u0026YA0^ZgwO}",
            "ln": 0,
            "col": 1,
            "line": 1
          },
          {
            "b": "B94:iayP82vriLLzEEx[auBgOB94:iayP82vriLLxM4%lzEEx[auBgOB94:iapoklkTo13B98Fgw[=6)auZ?{fj/lnfkboBBAn/parS{mAaK6bvqYT]ByeZ1B98ECjS)%1z/Z1MzE[2ub5zgcvqGQ}B95PSarR^HarR\u003c.gb**te?![ja$k5IarR^HarR^HarR^HarR^HarR^HarR^$z/Z1MzE[2uu$:F1Bz+J7wNEc2xM4:befDb\u003egb**te?![ja$l!8arUfgvrlGjjuK:cwO+@=arR^HAb](swN/*[wfr{JwP[F7arR^larR^HwmYu}y?W%j3lQDlarR!rzGG]kwPF$Sax@aUarR^HarTc/y?kkqAaJ]nkTo13B98Fgw[=6)dk2guv}U",
            "ln": 187,
            "col": 18,
            "line": 13
          }
        ],
        "depth": 2,
        "facts": {
          "imp": [
            [
              "",
              "attr_reader"
            ],
            [
              "",
              "host"
            ],
            [
              "",
              "ip"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "chomp"
            ],
            [
              "",
              "protected"
            ],
            [
              "",
              "each"
            ],
            [
              "",
              "open"
            ],
            [
              "",
              "split"
            ],
            [
              "",
              "each"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "delete_if"
            ],
            [
              "",
              "include?"
            ],
            [
              "",
              "nil?"
            ],
            [
              "",
              "find_by_host"
            ],
            [
              "",
              "delete"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "write_out!"
            ],
            [
              "",
              "raise"
            ],
            [
              "",
              "find"
            ],
            [
              "",
              "hostname"
            ],
            [
              "",
              "find_all"
            ],
            [
              "",
              "ip"
            ],
            [
              "",
              "write_out!"
            ],
            [
              "",
              "delete_if"
            ],
            [
              "",
              "name"
            ],
            [
              "",
              "write_out!"
            ],
            [
              "",
              "escape"
            ],
            [
              "",
              "select"
            ],
            [
              "",
              "match"
            ],
            [
              "",
              "name"
            ],
            [
              "",
              "each"
            ],
            [
              "",
              "delete"
            ],
            [
              "",
              "name"
            ],
            [
              "",
              "inject"
            ],
            [
              "",
              "ip"
            ],
            [
              "",
              "hostname"
            ],
            [
              "",
              "open"
            ],
            [
              "",
              "print"
            ]
          ],
          "mbr": [
            "@@permanent_hosts.include?",
            "File.open",
            "File.open.each",
            "Host.new",
            "Regexp.escape",
            "entries.delete_if",
            "f.print",
            "h.hostname",
            "h.ip",
            "host.hostname",
            "host.ip",
            "host.name",
            "host.name.match",
            "hosts.delete_if",
            "hosts.each",
            "hosts.inject",
            "list.find",
            "list.find_all",
            "list.select",
            "other.host",
            "other.ip"
          ],
          "tgt": [
            "attr_reader",
            "chomp",
            "delete",
            "delete_if",
            "each",
            "escape",
            "find",
            "find_all",
            "find_by_host",
            "host",
            "hostname",
            "include?",
            "inject",
            "ip",
            "match",
            "name",
            "new",
            "nil?",
            "open",
            "print",
            "protected",
            "raise",
            "select",
            "split",
            "write_out!"
          ],
          "funcs": [
            [
              "initialize",
              39
            ],
            [
              "==",
              105
            ],
            [
              "list",
              439
            ],
            [
              "add",
              815
            ],
            [
              "find_by_host",
              1165
            ],
            [
              "find_by_ip",
              1260
            ],
            [
              "empty!",
              1339
            ],
            [
              "delete",
              1388
            ],
            [
              "delete_matching",
              1523
            ],
            [
              "write_out!",
              1761
            ]
          ],
          "metrics": {
            "ast": {
              "op.eq": 4,
              "op.add": 2,
              "op.lor": 1,
              "op.shl": 2,
              "op.land": 1,
              "max_depth": 18,
              "op.concat": 31,
              "call_count": 40,
              "node_count": 605,
              "member_count": 21,
              "max_array_len": 2,
              "op_density.eq": 0.01,
              "op_density.add": 0,
              "op_density.lor": 0,
              "op_density.shl": 0,
              "op_density.land": 0,
              "max_concat_chain": 2,
              "member_depth_max": 3,
              "op_density.concat": 0.05
            },
            "file": {
              "size": 1988,
              "entropy": 4.34
            },
            "text": {
              "lines": 88,
              "top_char": 101,
              "max_ws_run": 6,
              "digit_ratio": 0.02,
              "space_count": 577,
              "char_entropy": 4.34,
              "unique_chars": 62,
              "top_char_null": 0,
              "string_density": 0.11,
              "top_char_ratio": 0.07,
              "avg_line_length": 21.59,
              "max_line_length": 71,
              "empty_line_ratio": 0.17,
              "last_line_length": 3,
              "whitespace_ratio": 0.33,
              "identifier_density": 1.68,
              "line_length_stddev": 18.15,
              "normalized_string_count": 1.07,
              "repeated_char_sequences": 4,
              "trailing_whitespace_lines": 12,
              "suspicious_identifier_ratio": 0.06,
              "normalized_unique_identifiers": 7.59
            },
            "binds": {
              "count": 16
            },
            "binary": {
              "peak_region_bytes": 1988,
              "peak_region_entropy": 4.36
            },
            "source": {
              "class_count": 1,
              "function_count": 9
            },
            "strings": {
              "bytes": 103,
              "count": 10,
              "ip_count": 3,
              "avg_length": 10.3,
              "max_length": 33,
              "path_count": 1,
              "avg_entropy": 2.18,
              "empty_count": 1,
              "entropy_stddev": 1.31
            },
            "comments": {
              "chars": 31,
              "count": 3,
              "lines": 3,
              "to_code_ratio": 0.04
            },
            "functions": {
              "count": 10
            },
            "identifiers": {
              "count": 148,
              "unique": 49,
              "avg_length": 6.16,
              "max_length": 17,
              "min_length": 1,
              "avg_entropy": 2.21,
              "reuse_ratio": 0.33,
              "length_stddev": 3.35,
              "sequential_names": 3,
              "single_char_count": 3,
              "single_char_ratio": 0.06,
              "all_lowercase_ratio": 0.78
            }
          }
        },
        "id": 3,
        "mol": "H(Po)",
        "path": "ghost-0.2.4.gem!!data.tar.gz!!lib/ghost/linux-host.rb",
        "risk": 1,
        "sha": "73f1850a347808fab0128d4297e3e77a0c74506e065da65c59dbdea9969d87cf",
        "size": 1988,
        "traits": [
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-subshell-command",
            "conf": 0.93,
            "crit": 3,
            "desc": "Ruby subshell command execution",
            "spans": [
              [
                363,
                10
              ]
            ]
          }
        ],
        "type": "ruby"
      },
      {
        "ctx": [
          {
            "b": "v@bN{B0a1(B94:iawuG\u003cBvf[QauZ?\u003ewohl%az+$avqGQ}B95JRy?W%jatlAbv{%gbl$G$sB.(dMnn\u0026M\u003eB09k4cnuXKarTM[vpR-xwfs2Tb4L+8y-)Ljv{%g!z/Z1yePLAhwfrK0z!0i(fgow-vrDydfgZ25BAo8YB09k4cnt",
            "ln": 0,
            "col": 1,
            "line": 1
          },
          {
            "b": "B95JRwmYN*By=NFoMaAHy+Fg/w)]*#Bt3g6B98ERc37g:j%\u00260d3lQC#arUfgvrlGjjuK:cwO+@=arR^HAb](swN/*[wfr{JwP[F7arR^larR^HwmYu}y?W%j3lQDlarR!yx(!wsjS[bSDRwc{Bvf[QEp9y8arR^Haz++kBrAZ?y?W%je]$#Fx(\u003e:EtY7-m3lQDlarR!yx(!wGv@Dg1wN/*8DMWYHz/Z2Fav{A(Bs}DxCpmcyB963AxM4:bdiK3CarR^HwO#2=3lQDlay]4}ayO!\u003ec$)KuBsXLGA3dp^a#7\u0026ie?![ie?[L3azbLjv}u=Cazb4#B7D^carR^HarUxgazbt9wm5!\u003euUBw0Bsp*vB95\u0026-zFr]KaBFLVw]zZ1wEoL5arR^HarU5pDQz*+vru6FzdB+nax@I$B95@Qx(Evau\u003cX20arR^HarUojB-Rjt3lQDlarR^Hazbt9wm5!\u003euUBw0Bsp*vB95\u0026rarR^HarUliB7CX3arR^HarR!Evqf^]ar\u003cfYzxJ?nBrCHBwPA0nx()]ewQ4{gBzkS9aAz46z/Pwj3lQDlarR!rzE:\u003ejarR^H3lQDlaz2C33i",
            "ln": 254,
            "col": 33,
            "line": 5
          },
          {
            "b": "arR^HkXL7SBAnNLD{5Q0Ef}8tarR^HkXL7SBApV1z/Z2aaBFM1ayX[{x(jn2arR^HarR!BB-.OBBrAZ?u)y1@wNPapzdB+naztXmBBvK7arR^HarR1larR^HarR!vw/#2mBz#wAau+e@fj^KIqE%uRA+4{-BvHg\u003ezE+ycarR^HarR^HarUMoyZIpcarR^HarUliB7CX3arR^HarR^HaztXmBrAZ?Aa9^dwNxa?B95*GB-.OBBsvLtarR^HarR^HazC^qjS[X",
            "ln": 757,
            "col": 3,
            "line": 27
          },
          {
            "b": "D(#%hy?mZ1c$\u003e4LEf}8tarR^HzFr[]arR^HwO#2=arR^H3lQDlay]4}ay]51wPRGixM4%ldgdguarR^Hu)y1^wO+}1wKyrBasedzz/Z1MBz\u003eJcEp9y8arR^HazbCjB7=Z7arR^HwO#2=arR^H3lQDlay]4}ay]51wPRG\u003czddJ@xLzu%c#-QpBy/GgdgdguarR^HAa9\u003cgwPzVhjS)TlxjVsbe[G9lvq]^aAa9\u003cgwPzVq3lQDlarR!uz/Z2wauZ\u0026-x(!wGB7Gf0v@@\u0026uaBB",
            "ln": 1138,
            "col": 21,
            "line": 47
          },
          {
            "b": "B1R3vAccv\u00263lQDlarR!uz/Z2w3lQDlaz2C33lQDlapoklarR)KmR)i*xK#lcBzbkdl@3V6lT:FrwEoL5arUiaw/$Y4B-Rjt3lQDlarR!mwohl?v}YB@BzkLleOn*wB7/5(v}YBY3lQDlarR^(xM4%lB09Q*DWMkzarR^HaARTDwEoL5arUlkwc%C4arR1larR!CA=l5hv@#o)3lQDlay]4}aAg+fB7FY(z/Z1Gz/{evB-Y5tarR^HarUSiA=U/0C42ifwHIFtBz#wAefDrrwN/U0wklMIwHw]larR^H",
            "ln": 1464,
            "col": 25,
            "line": 62
          },
          {
            "b": "z/Z1carR^HkXUfWjS[DT3lQE5zE:7%apoklwmYu}xM4%lzEEx[3lQDlav6QUB94:iaz2C33lQE1y?Ws0auBQ.uVNtJxM4%lzEEx[3lQE1y?Ws0auBgOB95J=xM4%lzEEx[3lQE1y?Ws0auByGzdK?JxM4%lzEEx[3lQC#arUiaw/$/b3lQDlav6TWaBFM1aAIagw?EOfvrlGxB7Gl1c]#rQA=U/0x(CQCwoz:ddgdguwO#2=arR1laAhvnC42G73lQE4wO95}B.#78arR^HkXb1OA3fKQjS[bSDS1A-wj7iAasedzz/Z2rvqPO7u\u003cX20wO#2=wO#2=",
            "ln": 1970,
            "col": 14,
            "line": 89
          }
        ],
        "depth": 2,
        "facts": {
          "imp": [
            [
              "",
              "protected"
            ],
            [
              "",
              "split"
            ],
            [
              "",
              "collect"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "chomp"
            ],
            [
              "",
              "nil?"
            ],
            [
              "",
              "find_by_host"
            ],
            [
              "",
              "flush!"
            ],
            [
              "",
              "find_by_host"
            ],
            [
              "",
              "raise"
            ],
            [
              "",
              "parse_host"
            ],
            [
              "",
              "parse_ip"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "each"
            ],
            [
              "",
              "delete"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "flush!"
            ],
            [
              "",
              "escape"
            ],
            [
              "",
              "select"
            ],
            [
              "",
              "match"
            ],
            [
              "",
              "to_s"
            ],
            [
              "",
              "each"
            ],
            [
              "",
              "delete"
            ],
            [
              "",
              "flush!"
            ],
            [
              "",
              "empty?"
            ],
            [
              "",
              "parse_value"
            ],
            [
              "",
              "parse_value"
            ],
            [
              "",
              "match"
            ],
            [
              "",
              "new"
            ],
            [
              "",
              "nil?"
            ],
            [
              "",
              "send"
            ],
            [
              "",
              "class"
            ]
          ],
          "mbr": [
            "Host.new",
            "Regexp.escape",
            "Regexp.new",
            "h.to_s",
            "h.to_s.match",
            "host.chomp",
            "host.to_s",
            "hosts.each",
            "hosts.empty?",
            "list.collect",
            "list.each",
            "list.select",
            "list.split",
            "match.nil?",
            "output.match"
          ],
          "tgt": [
            "chomp",
            "class",
            "collect",
            "delete",
            "each",
            "empty?",
            "escape",
            "find_by_host",
            "flush!",
            "match",
            "new",
            "nil?",
            "parse_host",
            "parse_ip",
            "parse_value",
            "protected",
            "raise",
            "select",
            "send",
            "split",
            "to_s"
          ],
          "funcs": [
            [
              "list",
              342
            ],
            [
              "add",
              471
            ],
            [
              "find_by_host",
              732
            ],
            [
              "find_by_ip",
              1061
            ],
            [
              "empty!",
              1107
            ],
            [
              "delete",
              1179
            ],
            [
              "delete_matching",
              1259
            ],
            [
              "flush!",
              1530
            ],
            [
              "parse_host",
              1633
            ],
            [
              "parse_ip",
              1713
            ],
            [
              "parse_value",
              1790
            ],
            [
              "initialize",
              1928
            ],
            [
              "hostname",
              1998
            ],
            [
              "ip",
              2104
            ],
            [
              "dump",
              2177
            ]
          ],
          "metrics": {
            "ast": {
              "op.lor": 1,
              "op.mod": 4,
              "max_depth": 15,
              "op.concat": 19,
              "call_count": 32,
              "node_count": 573,
              "member_count": 15,
              "max_array_len": 2,
              "op_density.lor": 0,
              "op_density.mod": 0.01,
              "member_depth_max": 3,
              "op_density.concat": 0.03
            },
            "file": {
              "size": 2234,
              "entropy": 4.46
            },
            "text": {
              "lines": 108,
              "top_char": 101,
              "max_ws_run": 1,
              "digit_ratio": 0.01,
              "space_count": 639,
              "char_entropy": 4.46,
              "unique_chars": 71,
              "top_char_null": 0,
              "string_density": 0.09,
              "top_char_ratio": 0.07,
              "avg_line_length": 19.69,
              "max_line_length": 85,
              "empty_line_ratio": 0.17,
              "last_line_length": 3,
              "whitespace_ratio": 0.33,
              "identifier_density": 1.22,
              "line_length_stddev": 17,
              "normalized_string_count": 0.96,
              "repeated_char_sequences": 4,
              "suspicious_string_ratio": 0.4,
              "trailing_whitespace_lines": 18,
              "suspicious_identifier_ratio": 0.02,
              "normalized_unique_identifiers": 7.11
            },
            "binds": {
              "count": 18
            },
            "binary": {
              "peak_region_bytes": 2234,
              "peak_region_entropy": 4.51
            },
            "source": {
              "class_count": 1,
              "function_count": 15
            },
            "strings": {
              "bytes": 296,
              "count": 10,
              "shell": 4,
              "ip_count": 1,
              "avg_length": 29.6,
              "max_length": 69,
              "avg_entropy": 3.23,
              "entropy_stddev": 1.27
            },
            "comments": {
              "chars": 132,
              "count": 7,
              "lines": 7,
              "to_code_ratio": 0.07
            },
            "functions": {
              "count": 16
            },
            "identifiers": {
              "count": 132,
              "unique": 48,
              "avg_length": 6.08,
              "max_length": 15,
              "min_length": 1,
              "avg_entropy": 2.26,
              "reuse_ratio": 0.36,
              "length_stddev": 2.69,
              "sequential_names": 1,
              "single_char_count": 1,
              "single_char_ratio": 0.02,
              "all_lowercase_ratio": 0.71
            }
          }
        },
        "id": 4,
        "mol": "H₂(DbPo)",
        "path": "ghost-0.2.4.gem!!data.tar.gz!!lib/ghost/mac-host.rb",
        "risk": 2,
        "sha": "e9f47712c2058abc2de3856daf8136415053551eb4e444549d5965503e700741",
        "size": 2234,
        "traits": [
          {
            "id": "metadata/file/profile/language::lang-english--atom-1",
            "conf": 0.8,
            "crit": 2,
            "desc": "English function-word token \"the\"",
            "spans": [
              [
                1512,
                0
              ]
            ]
          },
          {
            "id": "micro-behaviors/data/source/dynamic/reflect::ruby-send-call",
            "conf": 0.9,
            "crit": 3,
            "desc": "Ruby dynamically invokes a method with send",
            "spans": [
              [
                2123,
                4
              ]
            ]
          },
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-backtick-command-substitution",
            "conf": 0.88,
            "crit": 3,
            "desc": "Executes a command with Ruby backticks",
            "spans": [
              [
                351,
                25
              ]
            ]
          },
          {
            "id": "micro-behaviors/process/create/shell/lang::ruby-subshell-command",
            "conf": 0.93,
            "crit": 3,
            "desc": "Ruby subshell command execution",
            "spans": [
              [
                364,
                12
              ],
              [
                568,
                27
              ],
              [
                821,
                19
              ],
              [
                1202,
                26
              ],
              [
                1547,
                25
              ],
              [
                2200,
                23
              ]
            ]
          }
        ],
        "type": "ruby"
      },
      {
        "ctx": [
          {
            "b": "DM)3hz/ZhBBy/qkiWeiFz6yIPzEEx[b03]XxM4%la$K{YwPz\u003caz/c:Wa$$S8e\u0026j+6b5?Wly?W%7wN]dRBrS+2gbZ{Bg=m6Ei4MmZxjUBXvr(]riYnVJh.ld?vru74Bn",
            "ln": 0,
            "col": 1,
            "line": 1
          }
        ],
        "depth": 1,
        "facts": {
          "metrics": {
            "file": {
              "size": 889,
              "entropy": 4.79
            },
            "binary": {
              "peak_region_bytes": 889,
              "peak_region_entropy": 4.79
            },
            "registry": {
              "age_days": 6077,
              "published_at": 1263445368,
              "is_deprecated": 0,
              "downloads_total": 991453,
              "downloads_recent": 788983
            }
          }
        },
        "id": 11,
        "path": "ghost@0.2.4.registry.json",
        "pid": 0,
        "rel": "registry",
        "role": "sidecar",
        "sha": "284333933803dda32dad4c05310c66724b4f94b9088ca1d87c469df983bd30db",
        "size": 889,
        "traits": [
          {
            "id": "metadata/registry::widely-installed",
            "conf": 1.0,
            "crit": 1,
            "desc": "Large registry install base (10k+ downloads)",
            "spans": [
              [
                0,
                0
              ]
            ]
          }
        ],
        "type": "registry"
      }
    ],
    "rev": "479f3",
    "v": "8"
  }
}