Versions Detect Stale Writes; Product Locks Serialize Local Changes
Context
Setup checks read product pricing, and deletion checks setup protection. Row locks stabilize those reads while versions detect stale client edits.
Decision
Existing replacements and product lifecycle actions compare read versions, product and setup writers share a product lock, bulk writers acquire those locks in key order, and kind defaults use their own rows without versioned deletion.
Alternatives Considered
Use version checks without a common product lock. A setup could validate against a price changed before its transaction finishes.
Accept whichever request arrives last. A later request could silently overwrite someone else's edits.
Consequences
These locks protect one product's local mutation boundary. They do not serialize the whole bundle graph, couple tax-default edits to products, or revalidate shares after a product price change.