{
  "filename": "app/Actions/ReserveStock.php",
  "rule": "- name: reservation-conditional-write\n  where: \"app/Actions/ReserveStock.php\"\n  ensure: >-\n    The inventory decrement must be conditional on available >= quantity in the same database query.",
  "corrected": "<?php\nnamespace App\\Actions;\nuse App\\Models\\Inventory;\n\nclass ReserveStock {\n    public function handle(int $tenantId, string $sku, int $quantity): void {\n        if ($quantity <= 0) throw new \\InvalidArgumentException('Positive quantity required');\n        $changed = Inventory::where('tenant_id', $tenantId)\n            ->where('sku', $sku)\n            ->where('available', '>=', $quantity)\n            ->decrement('available', $quantity);\n        if ($changed !== 1) throw new \\RuntimeException('Stock not available');\n    }\n}\n",
  "broken": "<?php\nnamespace App\\Actions;\nuse App\\Models\\Inventory;\n\nclass ReserveStock {\n    public function handle(int $tenantId, string $sku, int $quantity): void {\n        if ($quantity <= 0) throw new \\InvalidArgumentException('Positive quantity required');\n        $changed = Inventory::where('tenant_id', $tenantId)\n            ->where('sku', $sku)\n            ->decrement('available', $quantity);\n        if ($changed !== 1) throw new \\RuntimeException('Stock not available');\n    }\n}\n",
  "regression": [
    "            ->where('available', '>=', $quantity)\n",
    ""
  ],
  "test_scenarios": [
    [
      "Two buyers reserve the last unit",
      "Only one changes the row"
    ],
    [
      "Quantity exceeds availability",
      "Zero affected rows and no decrement"
    ],
    [
      "Cross-tenant request",
      "No other tenant row changes"
    ],
    [
      "Order insert fails in outer transaction",
      "Reservation rolls back"
    ]
  ],
  "test_source": null,
  "test_command": "php artisan test --filter=ReserveStockTest"
}