Expected: 20 parts. Old app after rollback: 20 parts.
Run: c873b6dc4b3a · SHA-256 checksum: 8aa2f9744c7d0de5472801a884d40b29a7fe49bbe80ce762ad6f5fe47f26cf46
Strategy exercised: compatible ·
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 | PASS | 20 | 20 |
| Rollback preserves business quantity | PASS | 20 | 20 |
| Accepted receipt count did not change on retry | PASS | 2 | 2 |
| Stored legacy quantity has carton semantics (c873b6dc4b3a-old-1) | PASS | 1 | 1 |
| Stored legacy quantity has carton semantics (c873b6dc4b3a-new-1) | PASS | 1 | 1 |
[
{
"operation": "old v1 accepts first carton",
"response": {
"event_id": "c873b6dc4b3a-old-1",
"accepted_parts": 10,
"replayed": false,
"served_by": "v1"
}
},
{
"operation": "v2 candidate accepts second carton",
"response": {
"event_id": "c873b6dc4b3a-new-1",
"accepted_parts": 10,
"replayed": false,
"served_by": "v2"
}
},
{
"operation": "v1 retries the candidate receipt",
"response": {
"event_id": "c873b6dc4b3a-new-1",
"accepted_parts": 10,
"replayed": true,
"served_by": "v1"
}
},
{
"operation": "mixed rollout: v2 reads both receipts",
"response": {
"sku": "SBC873B6DC4B3A",
"parts": 20,
"receipts": 2,
"served_by": "v2"
}
},
{
"operation": "mixed rollout: v1 reads v2 data",
"response": {
"sku": "SBC873B6DC4B3A",
"parts": 20,
"receipts": 2,
"served_by": "v1"
}
},
{
"operation": "ROLLBACK: all inventory traffic returns to v1",
"response": {
"sku": "SBC873B6DC4B3A",
"parts": 20,
"receipts": 2,
"served_by": "v1"
}
}
]
Only the named SKU and test event sequence were checked. Not a guarantee of universal rollback safety.