- Shipped
- August 6, 2026 at 12:32 PM UTC
- Author
- Kamo
- Commit
- 1273f5d
submit() validated only consent and step-up; it accepted an empty values list and still marked the recipient SIGNED. Ports validation.ts (esign-core), including the rules that checkbox/toggle need the literal string "true" and multi_select is a JSON array that must be non-empty. **************** is called from submit() with the same signerUid-filtered field list buildSession already builds — that filtering is now extracted into a shared fieldsForSigner() helper so there's one parser, not two. Field ids/types come from the design JSON's real property names **************** confirmed against esign-core's design.ts), not guessed ones. One deviation from the literal brief snippet: signature_box/initial_box fields carry their captured value in signature.imageDataUrl, not value (the wire contract sends value: null for those) — the submitted-map builder now checks signature.imageDataUrl first, falling back to value for every other field type. Following the literal snippet's `v.value()`-only lookup would have made every required signature field permanently "incomplete" and blocked all signing. Recipients with no signerUid (every envelope created before Task 1) derive an empty required set via fieldsForSigner, so missing stays empty and submit proceeds exactly as it does today — verified by direct code trace and by missingRequired's empty-list tests.