- Shipped
- August 7, 2026 at 6:51 AM UTC
- Author
- Kamo
- Commit
- feac529
An e-signature envelope had exactly two templates: the invite and the step-up code. Nothing existed for anything that happens AFTER a signer signs — which is why the signer app promises "a signed copy will be emailed to all parties" and no such email has ever been sent. Adds esign.envelope_completed (each party's executed copy), **************** esign.signer_decoderd, esign.envelope_voided and esign.envelope_expired, with the CANONICAL_KEYS entries without which every send is a permanent 404. Also escapes free text in the two existing esign bodies: TemplateRenderer substitutes with no escaping, and a recipient name, document title and staff-typed message are all free text. The plain variants stay supplied because per-org rows are insert-only. EsignLifecycleTemplateTest pins the constant -> dotted-key -> sent-key triple and that every placeholder is one the sender actually fills.