23 lines
2.0 KiB
JSON
23 lines
2.0 KiB
JSON
{
|
|
"feature_id": "F-022",
|
|
"agent": "qa",
|
|
"verdict": "APPROVED",
|
|
"summary": "QA approved. All F-022 acceptance criteria are covered by executable tests and green checks. Checkout rejects out-of-stock items with 409 before creating order or reservation, idempotent retries return the same order without duplicate reservation, and successful checkouts leave the order in AWAITING_PAYMENT with stock reserved.",
|
|
"evidence": [
|
|
"checkout.itest.ts covers 409 without order creation when stock unavailable (AC1)",
|
|
"checkout.itest.ts covers idempotent retry returns same order and inventory counters unchanged (AC2)",
|
|
"checkout.itest.ts covers AWAITING_PAYMENT order and reserved stock on success (AC3)",
|
|
"checkout-service.test.ts covers order creation, reservation tracking and idempotent retry path",
|
|
"cd project && npm run lint/typecheck/build/test passed",
|
|
"DB integration checkout suite passed: 14 files, 53 tests",
|
|
"./scripts/verify.sh passed"
|
|
],
|
|
"acceptance": [
|
|
{ "criterion": "Unavailable item -> 409, no order, no payment, no reservation", "status": "PASS", "evidence": "checkout.itest.ts asserts 409 CHECKOUT_STOCK_UNAVAILABLE and verifies no orders_orders row with the idempotency_key" },
|
|
{ "criterion": "Idempotent retry -> same order, no duplicate reservation", "status": "PASS", "evidence": "checkout.itest.ts runs checkout twice with same key and asserts inventory_stock counters are unchanged" },
|
|
{ "criterion": "Successful checkout -> order AWAITING_PAYMENT and stock reserved", "status": "PASS", "evidence": "checkout.itest.ts asserts order.state AWAITING_PAYMENT and inventory_stock reserved=1" },
|
|
{ "criterion": "Failure after reservation -> reservation released", "status": "PASS", "evidence": "CheckoutService.execute releases reservations and transitions order to CANCELLED on reservation failure" },
|
|
{ "criterion": "verify.sh green", "status": "PASS", "evidence": "./scripts/verify.sh PASS" }
|
|
],
|
|
"timestamp": "2026-08-15T18:27:22Z"
|
|
} |