Change live prices without losing history
On this page
An estimator is a persistent identity. Its editable draft is the next configuration you may publish. A published revision is an immutable snapshot. An estimate retains the snapshot and calculated explanation it used.
Distinguish the four kinds of state
| State | Who uses it | What changes it |
|---|---|---|
| Draft | An authorized editor and preview | Saving edits |
| Active published revision | New customer visits and API calculations | Publishing or rollback |
| Open public session | The customer who opened it | Its pinned revision stays fixed for up to 24 hours |
| Retained estimate | The business viewing past quotes | Its historical pricing is retained |
A Save is not a Publish. Editing a live estimator's draft does not change the price customers currently receive.
Test a concrete price update
Start with a published Moving estimator using $2.10 per mile. Submit and retain the known Saturday example: $708.63 for 22 miles.
Now change the draft mileage price to $2.40, save and preview. With the same inputs, distance rises by $6.60 and the weekend-adjusted total rises to $716.22. Before publishing, a new public visit must still use $2.10 and produce $708.63.
Publish the changed draft. A fresh public visit should now produce $716.22. Open the earlier estimate detail: its old distance price, total and revision must remain $2.10, $708.63 and the original revision.
Account for customers already filling out the form
A customer visit is pinned to the revision opened by that session for 24 hours. Publishing during the visit does not switch that customer's pricing halfway through the form. Opening a fresh visit after publication uses the newly active revision.
This distinction can explain two valid quotes with different revisions submitted near the same time. Inspect the retained revision before treating them as a calculation bug.
An API creation request can send revisionId to require the expected currently published revision. A mismatch returns 409 rather than silently applying new prices. See API submissions.
Handle concurrent editors
Draft saves carry an optimistic version. If another editor saves first, a stale save returns a conflict instead of overwriting the newer draft.
When that happens, preserve any unsaved work you need, reload the current draft and reapply the intended changes. Do not repeatedly press Save expecting the conflict to disappear. Publish only after reviewing the current stored configuration.
Roll back publication deliberately
History supports selecting a previous snapshot as the active published revision. Use rollback when the newly published questions or prices are wrong and an older revision is suitable.
Rollback changes what new visits use. It does not rewrite historical estimates, automatically migrate their answers or refund/alter an external transaction. Customers with already pinned sessions still need their retained revision considered.
Stop taking quotes
Unpublish or archive when a calculator should stop accepting submissions. Draft editing alone does not disable the public calculator. Check the public link after changing availability and update any website embed or advertisement that points to it.
A deleted estimator is not a substitute for a customer-data erasure workflow. Immutable pricing history and retention require separate handling; the alpha does not ship automated erasure.
Preserve enough for future explanation
The application retains answers, result and immutable revision. The result includes an Engine version, but that version string alone cannot recreate an old executable after a software upgrade. Retain release artifacts if exact historical recalculation is a business requirement.
PDFs use historical pricing and current business branding/contact details. A PDF regenerated after a logo change can therefore look different while preserving the same price.
See the revision ADR for the domain decision behind this workflow.