{
  "checker": {
    "details": {
      "checks": [
        {
          "check": "install",
          "details": {
            "argv": [
              "<host-path>",
              "--help"
            ],
            "blocker": "product invocation failed: {\"returncode\": 127, \"stdout\": \"\", \"stderr\": \"<host-path> line 4: exec: uv: not found\\n\", \"needs_credentials\": false, \"needs_browser\": false}",
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 127,
            "stderr": "<host-path> line 4: exec: uv: not found",
            "stdout": "",
            "working": false
          },
          "optional": false,
          "status": "FAIL"
        },
        {
          "check": "start",
          "details": {
            "argv": [
              "<host-path>",
              "quick",
              "/tmp/hc_smoke/hashes.txt",
              "0",
              "--wordlist",
              "/tmp/hc_smoke/words.txt"
            ],
            "blocker": "product invocation failed: {\"returncode\": 127, \"stdout\": \"\", \"stderr\": \"<host-path> line 4: exec: uv: not found\\n\", \"needs_credentials\": false, \"needs_browser\": false}",
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 127,
            "stderr": "<host-path> line 4: exec: uv: not found",
            "stdout": "",
            "working": false
          },
          "optional": false,
          "status": "FAIL"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "status": "FAIL"
  },
  "deviations": [
    "make failed at setuptools-scm: no .git in workspace. Re-ran make with SETUPTOOLS_SCM_PRETEND_VERSION_FOR_HATE_CRACK=0.0.0+d6eb5d5.",
    "make did not build submodules because the snapshot has no .git; submodule dirs were empty. Ran git clone https://github.com/hashcat/hashcat-utils.git into hashcat-utils and https://github.com/hashcat/princeprocessor.git into princeprocessor (default branch, not pinned submodule SHAs). Then re-ran make, which built expanders, pp64.bin, and uv sync.",
    "hate_crack quick failed with 'expander not found' until hashcat-utils was built; fixed as above.",
    "Other submodules (omen, pcfg_cracker, Corporate_Masks, HashcatRosetta) were not fetched; not needed for quick.",
    "Product runs wrote config.json and .env in the workspace root (product-generated, not source edits). make also patched hashcat-utils/src/Makefile per Makefile submodules-pre (README-documented installer behavior)."
  ],
  "main_blocker": "hashcat CPU/pocl device cannot allocate memory for the attack; the VM has no GPU and no working OpenCL device memory.",
  "operation": "hate_crack quick hashes.txt 0 --wordlist words.txt (MD5 crack of a known hash, README 'Non-interactive / scripted usage'); attempted, did not crack",
  "operation_scope": "Install and CLI startup verified. The crack itself is blocked: hashcat 6.2.6 CPU backend (pocl) reports 'Not enough allocatable device memory for this attack' for -m 0 -a 0 with and without -O/-w/-n/-u/--force. No GPU in VM.",
  "outcome": "blocked",
  "steps": [
    "sudo apt-get install -y hashcat p7zip-full transmission-daemon make curl git build-essential (README 'External Dependencies' + Makefile)",
    "curl -LsSf https://astral.sh/uv/install.sh | sh (Makefile uv fallback)",
    "make (README 'Install dependencies and hate_crack'; needed SETUPTOOLS_SCM_PRETEND_VERSION_FOR_HATE_CRACK=0.0.0+d6eb5d5 because workspace has no .git)",
    "hate_crack --help (exit 0)",
    "hate_crack quick /tmp/hc_smoke/hashes.txt 0 --wordlist /tmp/hc_smoke/words.txt (exit 0, no crack)"
  ],
  "stuck_step": "hate_crack quick ... (README 'Non-interactive / scripted usage')",
  "suggested_fix": "Run on a host with a GPU or a working OpenCL device (e.g. install a GPU driver), or give pocl more allocatable memory (check POCL_MEMORY_LIMIT / POCL_MAX_ALLOC). Then rerun the quick command and expect the 5f4dcc3b5aa765d61d8327deb882cf99 hash to crack to 'password'."
}
