{
  "filename": "reservation.cjs",
  "rule": "- name: reservation-transaction-client\n  where: \"reservation.cjs\"\n  ensure: >-\n    Both inventory and order writes inside pg.transact must use the supplied client, never app.pg.query on a separate connection.",
  "corrected": "async function reserveAndCreateOrder(app, tenantId, sku, quantity) {\n  if (!Number.isSafeInteger(quantity) || quantity <= 0) throw new Error(\"Invalid quantity\");\n  return app.pg.transact(async client => {\n    const stock = await client.query(\n      \"UPDATE inventory SET available=available-$1 WHERE tenant_id=$2 AND sku=$3 AND available >= $1 RETURNING sku\",\n      [quantity, tenantId, sku],\n    );\n    if (stock.rowCount !== 1) throw new Error(\"Insufficient stock\");\n    const order = await client.query(\n      \"INSERT INTO orders (tenant_id, sku, quantity) VALUES ($1,$2,$3) RETURNING id\",\n      [tenantId, sku, quantity],\n    );\n    return order.rows[0].id;\n  });\n}\nmodule.exports = { reserveAndCreateOrder };\n",
  "broken": "async function reserveAndCreateOrder(app, tenantId, sku, quantity) {\n  if (!Number.isSafeInteger(quantity) || quantity <= 0) throw new Error(\"Invalid quantity\");\n  return app.pg.transact(async client => {\n    const stock = await client.query(\n      \"UPDATE inventory SET available=available-$1 WHERE tenant_id=$2 AND sku=$3 AND available >= $1 RETURNING sku\",\n      [quantity, tenantId, sku],\n    );\n    if (stock.rowCount !== 1) throw new Error(\"Insufficient stock\");\n    const order = await app.pg.query(\n      \"INSERT INTO orders (tenant_id, sku, quantity) VALUES ($1,$2,$3) RETURNING id\",\n      [tenantId, sku, quantity],\n    );\n    return order.rows[0].id;\n  });\n}\nmodule.exports = { reserveAndCreateOrder };\n",
  "regression": [
    "const order = await client.query(",
    "const order = await app.pg.query("
  ],
  "test_scenarios": [
    [
      "Both writes succeed",
      "One transaction commits"
    ],
    [
      "Order insert fails",
      "Stock decrement rolls back"
    ],
    [
      "Two last-unit requests",
      "At most one reservation succeeds"
    ],
    [
      "Helper uses pool instead of client",
      "Regression test detects independent write"
    ]
  ],
  "test_source": null,
  "test_command": "node --test tests/reservation.test.cjs"
}