Repository navigation
The canary release: API v3, rolled out next to v2 (3.1.0) and promoted to 100% by the pipeline.
API v3
/v3/items: every item carriesstockValue, what its stock is worth (quantity × unitPrice), computed on every response and never stored. v1 and v2 never show it, and no request body may set it./api/...without a version serves v3; every resource is served under/v3.- Expand/Contract: v3 changes the API, not the database. It reads the columns v2 reads, so 3.1.0 keeps running on the same schema, untouched, and a rollback loses nothing.
Breaking, hence a major
v3 no longer has the bin location that v3.2.0 added. It lived in a column of its own; a computed field leaves the schema exactly as v2 built it. Removing a field from a published API is incompatible. The pipeline fixes of v3.2.1 and v3.2.2 are all here.
Verified on AWS
| Run | Canary share measured | Canary requests | Outcome |
|---|---|---|---|
| deploy | 0%, reached with x-canary: true |
4.0.0 canary with stockValue, 3.1.0 stable without it |
|
promote, fault=error |
8.9% at stage 1 | 396, all 5xx | gate → ABORT → 0% |
| promote, no fault | 10.0% → 48.6% → 97.4% | 448 → 2,174 → 4,342 | PROMOTE at every stage; stable rebuilt with 4.0.0 |
A price written through v3 while the canary held 0% was read by 3.1.0 at once, and survived the abort and the promotion.