{
  "captured": "2026-10-14T19:28:05.070033+00:00",
  "model": "jev-latest",
  "identity": {
    "fixed_sha256": "ce58c2db079c28ae5d9cf80aae81f2261744dfe4da6bc9701e6b82825f82c14c",
    "broken_sha256": "24f9fce2edb5a1f0bbc1d747bcaf418e671f9ca3e396b5288bbb787612440db5",
    "rule_sha256": "34d6a59c7cc670f01fddc79763de1d3ab7c015aca4d2058fc69383cd7ac16737"
  },
  "rule": "The reader must be owned by with-open so it closes when parsing succeeds or throws. A let binding without cleanup breaks this rule.",
  "results": {
    "broken": {
      "command": [
        "perch",
        "check",
        "src/shop/storage.clj",
        "--rules",
        "reader-owned-by-with-open",
        "--json"
      ],
      "exit_code": 3,
      "stdout": "{\n  \"path\": \"src/shop/storage.clj\",\n  \"name\": \"src/shop/storage.clj\",\n  \"line\": 1,\n  \"checked\": 1,\n  \"broken\": [\n    {\n      \"rule\": \"reader-owned-by-with-open\",\n      \"said\": \"The reader must be owned by with-open so it closes when parsing succeeds or throws. A let binding without cleanup breaks this rule.\",\n      \"broken\": 0.77,\n      \"floor\": 0.5\n    }\n  ],\n  \"issues\": null,\n  \"note\": null,\n  \"clean\": false\n}\n",
      "stderr": ""
    },
    "fixed": {
      "command": [
        "perch",
        "check",
        "src/shop/storage.clj",
        "--rules",
        "reader-owned-by-with-open",
        "--json"
      ],
      "exit_code": 0,
      "stdout": "{\n  \"path\": \"src/shop/storage.clj\",\n  \"name\": \"src/shop/storage.clj\",\n  \"line\": 1,\n  \"checked\": 1,\n  \"broken\": [],\n  \"issues\": null,\n  \"note\": null,\n  \"clean\": true\n}\n",
      "stderr": ""
    }
  }
}
