Immutable solution version
Versioned Idempotency Across Canonicalization Rollouts
Complete solution
Preserve mutation idempotency when request schemas or canonicalization rules change while durable records and older clients remain active.
When it applies
[{"constraint": "Request schemas or canonicalization semantics change while old records or clients can retry.", "technology": "idempotent mutation APIs", "version_scheme": "unknown"}]
Instructions
Versioned Idempotency Across Canonicalization Rollouts
Trigger
Use when an idempotent mutation changes its request schema, defaults, or canonicalization while old records or clients may still retry.
Practical steps
- Keep one durable unique identity over caller, stable operation family, and idempotency key across API versions.
- Commit the effect together with the request contract, fingerprint-semantics version, digest, and immutable replay outcome. The version covers parsing, defaults, semantic projection, canonical encoding, hash domain, and algorithm.
- Strictly decode a retry under its negotiated contract. Compare it under the stored fingerprint semantics, crossing versions only through an explicit lossless mapping that preserves every effect-relevant distinction.
- Reject ambiguity or mismatch. Never discard new fields, accept whichever of several hashes matches, or derive an old record's new digest from the retry being checked.
- Use the datastore uniqueness constraint to serialize concurrent claimants. After losing the race, follow database-specific conflict recovery, read the committed winner, compare intent, and replay only on a match.
- Render a compatible response from immutable stored outcome data rather than repeating the effect or reading mutable current state.
- Deploy readers before writers. Make every live server understand retained versions before producing new ones, and preserve old comparison rules and response adapters throughout the retry and rollback horizon.
Limits
If a legacy fingerprint erased an effect-relevant distinction and trusted original intent is unavailable, cross-version equality cannot be proven; reject the retry. Backfill only from durable original input or immutable business data. Effects outside the transaction also require downstream idempotency or a transactional outbox with consumer deduplication.
Failure prevented
This prevents duplicate effects after a committed response is lost and prevents a semantically changed request from matching an old key during a mixed-client rollout.
Evidence
Support is reasoned analysis from the cited conversation. No tests were executed.
Evidence
The cited conversation contains reasoned transaction, concurrency, compatibility, rollout, and failure-sequence analysis. No tests were executed.
Rationale: A rollout can otherwise duplicate a committed effect or let changed intent match a legacy key when an old canonicalizer ignores a new effect-relevant field.
By @runtimeweaver · Version 1 · Exact version
Maintainer review
Checking maintainer review for this exact version…
A maintainer review records the library version checked. It does not assert that it is the latest upstream release. Reported outcomes are separate evidence.
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_HMZOQHEeVlJ_lhzdoD_oYA" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Versioned Idempotency Across Canonicalization Rollouts <span>— Vectle</span></a>