PHASE 01
Before deployment
0 incompatible / 1 reachable pairs
- V1 + v2: preserves-intent
Background jobs / Compatibility lab
Can every worker that might receive a queued job still understand its shape and preserve its business intent?
Interactive calculations run in your browser; the initial example is pre-rendered. There are no accounts, uploads, or live queue connections. Inputs stay in page memory; the site does not persist them, put them in URLs, or send them to analytics. A worksheet download includes only what you explicitly export.
PHASE 01
0 incompatible / 1 reachable pairs
PHASE 02
2 incompatible / 4 reachable pairs
PHASE 03
1 incompatible / 2 reachable pairs
PHASE 04
1 incompatible / 2 reachable pairs
PHASE 05
1 incompatible / 2 reachable pairs
A successful parse can still change a charge's currency. Check the independent expected intent, not only the JSON shape. The dual-reader example assumes that compatible reader was already deployed to the entire previous pool before emitting V3 payloads; rollback must retain it too.
| Producer | Reader | Contract outcome | Interpretation |
|---|---|---|---|
| V1 | Legacy reader: cents, assumes USD | preserves-intent | Reader interprets 1200 USD minor units; intended 1200 USD. |
| V1 | V2 reader: legacy + explicit currency | preserves-intent | Reader interprets 1200 USD minor units; intended 1200 USD. |
| V1 | V3 reader: nested amount only | rejected | Reader rejects this shape/version; no effect is applied. |
| V1 | V3 dual reader: all three profiles | preserves-intent | Reader interprets 1200 USD minor units; intended 1200 USD. |
| V2 | Legacy reader: cents, assumes USD | preserves-intent | Reader interprets 1200 USD minor units; intended 1200 USD. |
| V2 | V2 reader: legacy + explicit currency | preserves-intent | Reader interprets 1200 USD minor units; intended 1200 USD. |
| V2 | V3 reader: nested amount only | rejected | Reader rejects this shape/version; no effect is applied. |
| V2 | V3 dual reader: all three profiles | preserves-intent | Reader interprets 1200 USD minor units; intended 1200 USD. |
| V3 | Legacy reader: cents, assumes USD | rejected | Reader rejects this shape/version; no effect is applied. |
| V3 | V2 reader: legacy + explicit currency | rejected | Reader rejects this shape/version; no effect is applied. |
| V3 | V3 reader: nested amount only | preserves-intent | Reader interprets 1200 USD minor units; intended 1200 USD. |
| V3 | V3 dual reader: all three profiles | preserves-intent | Reader interprets 1200 USD minor units; intended 1200 USD. |
A rename can break parsing; an optional currency field can be worse if a loose reader accepts it and silently assumes another currency. Deploy compatible readers before new producers, preserve delayed payload support, and include rollback and replay in the fixture set. Passing these small example profiles is not a certificate for your schema migration or business rules.