{
  "captured": "2026-10-14T19:51:22.353928+00:00",
  "model": "jev-latest",
  "identity": {
    "fixed_sha256": "3995a8174097b8b8b9476e291f2fdc1d75d079732853f02f89002313459364bf",
    "broken_sha256": "f0ced99f4a44cb46a1892aaaa2fe2faada46e31bf9bc4eff186ea76986bd3869",
    "rule_sha256": "a561cf986ee3f9f21dad3558e6cd13158160e4423387013d0d84135e320366fe"
  },
  "rule": "The order-confirmation job is explicitly deferred until the surrounding database transaction commits: SendOrderConfirmation::dispatch($order->id) is chained with ->afterCommit(). Plain dispatch inside the transaction does not meet this requirement.",
  "results": {
    "broken": {
      "command": [
        "perch",
        "check",
        "app/Actions/ConfirmOrder.php",
        "--rules",
        "job-after-commit",
        "--json"
      ],
      "exit_code": 3,
      "stdout": "{\n  \"path\": \"app/Actions/ConfirmOrder.php\",\n  \"name\": \"app/Actions/ConfirmOrder.php\",\n  \"line\": 1,\n  \"checked\": 1,\n  \"broken\": [\n    {\n      \"rule\": \"job-after-commit\",\n      \"said\": \"The order-confirmation job is explicitly deferred until the surrounding database transaction commits: SendOrderConfirmation::dispatch($order->id) is chained with ->afterCommit(). Plain dispatch inside the transaction does not meet this requirement.\",\n      \"broken\": 0.96,\n      \"floor\": 0.5\n    }\n  ],\n  \"issues\": null,\n  \"note\": null,\n  \"clean\": false\n}\n",
      "stderr": ""
    },
    "fixed": {
      "command": [
        "perch",
        "check",
        "app/Actions/ConfirmOrder.php",
        "--rules",
        "job-after-commit",
        "--json"
      ],
      "exit_code": 0,
      "stdout": "{\n  \"path\": \"app/Actions/ConfirmOrder.php\",\n  \"name\": \"app/Actions/ConfirmOrder.php\",\n  \"line\": 1,\n  \"checked\": 1,\n  \"broken\": [],\n  \"issues\": null,\n  \"note\": null,\n  \"clean\": true\n}\n",
      "stderr": ""
    }
  }
}
