/checkout/quote and /checkout/orders disagree about a priced-but-untitled product:
- quote checks the price only (
packages/service/src/routes/orders.ts), so it answers 200;
- place goes through
createOrderFromCart, whose null-title guard rejects, so it 409s.
A buyer can therefore be quoted a total for a cart that cannot be placed. Nothing pins the
asymmetry in either direction, so it is not currently a decision — it is an accident.
Two things to settle when this is picked up:
- Which behaviour is right — quote should reject too (fail early, consistent), or place should
tolerate a missing title (which contradicts the order-line snapshot invariant, so probably not).
- Pin it with a test either way, so the two endpoints cannot drift again.
Related: the untested title half of the place-side guard is tracked separately.
Source: plans/one-home-per-field.md §7.0, §9.5, §9.7.
/checkout/quoteand/checkout/ordersdisagree about a priced-but-untitled product:packages/service/src/routes/orders.ts), so it answers 200;createOrderFromCart, whose null-title guard rejects, so it 409s.A buyer can therefore be quoted a total for a cart that cannot be placed. Nothing pins the
asymmetry in either direction, so it is not currently a decision — it is an accident.
Two things to settle when this is picked up:
tolerate a missing title (which contradicts the order-line snapshot invariant, so probably not).
Related: the untested title half of the place-side guard is tracked separately.
Source:
plans/one-home-per-field.md§7.0, §9.5, §9.7.