Signed contracts lock their numbers

Once anyone has signed, the pull-to-live action is refused and the UI tells you to use a change order instead.

What it is

The sync route reports syncable: false when customer_signed_at or counter_signed_at is set, and the POST returns a 409 with the message 'This contract has a signature on it — its numbers are locked. Use a change order or amendment for post-signature changes.' The panel shows the same guidance instead of a button.

Also called: can't change a signed contract · amend instead of edit · contract is evidence

See it
Signed contracts lock their numbers
Prepared for
Sutter Kline
1140 Ridge Line Rd · Fair Play
Shell package$26,914
Concrete & site$7,814
Doors & windows$5,209
Trim & finish$3,473
Total
$43,410
Signature
The alignment panel in its locked state — no button, just the sentence about using a change order. ContractViewModal.tsx. Sample data — no customer information appears here.
How it works
  1. 1GET computes signed = customer_signed_at || counter_signed_at and returns syncable: !signed.
  2. 2The UI renders 'A signature is already on this contract, so its numbers are locked — use a change order to adjust it.'
  3. 3POST re-checks server-side and refuses regardless of what the client sends.
  4. 4apply-template applies the same rule: only 'pending' or 'sent' contracts can be re-rendered.
Why we built it

The route header states the principle without hedging: 'Hard guard: NEVER after anyone has signed. A signed document is evidence; changing its numbers would falsify it. Post-signature changes go through change orders / amendment contracts instead.'

The problem
  • Silent edits to executed agreements
  • No clear instrument for post-signature scope or price changes
Sound familiar?
What you get
Executed documents stay trustworthy
The UI points you to the correct instrument instead of just blocking
Enforced on the server, not just in the interface

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →