Expected: 20 parts. Old app after rollback: 110 parts.
Run: 108960f5f7da · SHA-256 checksum: f9207ea153b7e878c938576faa74db0f238ad9d6a5e6244d837bfdc6361477dc
Strategy exercised: unsafe ·
Commit: eef3d44d332a4ca93b8f06083ff1ab568072f7eb ·
release.py SHA-256: e7ec2a348aed6d67…
| Check | Result | Expected | Observed |
|---|---|---|---|
| Old version is healthy before candidate rollout | PASS | 10 | 10 |
| Retry across versions is idempotent | PASS | True | True |
| Candidate v2 reads correct parts | PASS | 20 | 20 |
| Old v1 reads candidate-written records safely | FAIL | 20 | 110 |
| Rollback preserves business quantity | FAIL | 20 | 110 |
| Accepted receipt count did not change on retry | PASS | 2 | 2 |
| Stored legacy quantity has carton semantics (108960f5f7da-old-1) | PASS | 1 | 1 |
| Stored legacy quantity has carton semantics (108960f5f7da-new-1) | FAIL | 1 | 10 |
[
{
"operation": "old v1 accepts first carton",
"response": {
"event_id": "108960f5f7da-old-1",
"accepted_parts": 10,
"replayed": false,
"served_by": "v1"
}
},
{
"operation": "v2 candidate accepts second carton",
"response": {
"event_id": "108960f5f7da-new-1",
"accepted_parts": 10,
"replayed": false,
"served_by": "v2"
}
},
{
"operation": "v1 retries the candidate receipt",
"response": {
"event_id": "108960f5f7da-new-1",
"accepted_parts": 10,
"replayed": true,
"served_by": "v1"
}
},
{
"operation": "mixed rollout: v2 reads both receipts",
"response": {
"sku": "SB108960F5F7DA",
"parts": 20,
"receipts": 2,
"served_by": "v2"
}
},
{
"operation": "mixed rollout: v1 reads v2 data",
"response": {
"sku": "SB108960F5F7DA",
"parts": 110,
"receipts": 2,
"served_by": "v1"
}
},
{
"operation": "ROLLBACK: all inventory traffic returns to v1",
"response": {
"sku": "SB108960F5F7DA",
"parts": 110,
"receipts": 2,
"served_by": "v1"
}
}
]
Only the named SKU and test event sequence were checked. Not a guarantee of universal rollback safety.