{
  "filename": "src/confirm-order.ts",
  "rule": "- name: outbox-transaction-manager\n  where: \"src/confirm-order.ts\"\n  ensure: >-\n    The Order and OutboxEvent writes both use the transaction callback parameter named manager. In particular, OutboxEvent is saved with manager.save(OutboxEvent, ...). Saving it with db.manager.save uses the global manager and violates the shared transaction requirement.",
  "corrected": "import { DataSource } from \"typeorm\";\nimport { Order, OutboxEvent } from \"./entities\";\n\nexport async function confirmOrder(db:DataSource, tenantId:string, id:string) {\n  return db.transaction(async manager => {\n    const order = await manager.findOne(Order, {where:{id,tenantId,status:\"pending\"},lock:{mode:\"pessimistic_write\"}});\n    if (!order) throw new Error(\"Pending order not found\");\n    order.status = \"confirmed\";\n    await manager.save(order);\n    await manager.save(OutboxEvent, {eventKey:`confirmed:${id}`,orderId:id,tenantId});\n    return id;\n  });\n}\n",
  "broken": "import { DataSource } from \"typeorm\";\nimport { Order, OutboxEvent } from \"./entities\";\n\nexport async function confirmOrder(db:DataSource, tenantId:string, id:string) {\n  return db.transaction(async manager => {\n    const order = await manager.findOne(Order, {where:{id,tenantId,status:\"pending\"},lock:{mode:\"pessimistic_write\"}});\n    if (!order) throw new Error(\"Pending order not found\");\n    order.status = \"confirmed\";\n    await manager.save(order);\n    await db.manager.save(OutboxEvent, {eventKey:`confirmed:${id}`,orderId:id,tenantId});\n    return id;\n  });\n}\n",
  "regression": [
    "await manager.save(OutboxEvent,",
    "await db.manager.save(OutboxEvent,"
  ],
  "test_scenarios": [
    [
      "Order and event succeed",
      "One commit"
    ],
    [
      "Event save fails",
      "Order transition rolls back"
    ],
    [
      "Global manager substituted",
      "Integration test exposes independent commit"
    ],
    [
      "Worker retries",
      "Stable event key prevents repeated external effect"
    ]
  ],
  "test_source": null,
  "test_command": "npm test -- --runInBand outbox.integration-spec.ts"
}