Rendered_body is written at creation and is the legally operative text from then on. Every surface that displays a contract — the customer's page, the builder's viewer, the counter-sign modal, the printed PDF — renders that same frozen string. The required-sections manifest is frozen the same way.
Also called: frozen contract · immutable signed copy · contract snapshot · signed copy can't change
- 1createContract() / submit-form write the rendered body onto the contracts row at insert.
- 2Template edits write to contract_templates only; no contract row is touched.
- 3Re-renders are permitted only while the contract is unsigned (pending or sent).
- 4The counter-sign modal renders the frozen body through the same styled markdown component the customer saw, 'so Chris is reviewing exactly what the customer signed (not a code-block approximation).'
Stated at the top of the library: the body is frozen 'so future edits to the template don't rewrite this customer's contract', and again in migration 064 for the initials manifest: 'Frozen on the contract row (like rendered_body) so a later template edit can never desync a signed contract.'
- Template edits retroactively altering signed agreements
- Uncertainty about which wording was in force for a given customer
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 →