First exercise of the bin/rebrand-sync workflow. Upstream 3.0.0
(merge-base 528a1216, 15 commits) brought:
Auto-merged cleanly (no conflict):
- New controllers/routes: submissions_resend_email (route added by
hand to config/routes.rb since fork's routes diverged elsewhere),
template_documents, templates_clone_and_replace, templates_folders,
templates_restore, templates_versions, submissions_unarchive
- PDF optimizations and signing-form completion-button refactor
(e378025a, 04129ded, 7fe56941)
- Percent formatting (99ca0136), area-box clamping (41604008),
validation message rephrasings (abd498dd)
Conflicts resolved (rerere now caches these for next sync):
- "take ours" for files where the fork stripped freemium gates
(Plans/Console/Upgrade, ENTERPRISE_PATHS, multitenant guards on
esign default sig, reminder durations, decline/delegate toggles,
BCC and send-on-completion, Pro upsell placeholders for SMS/SSO/
bulk-send/payment/conditions/formula/phone-field)
- "take ours" for per-account branding helpers
(Wabosign.branded_product_name vs Wabosign.product_name) across
mailers, MFA, MCP, audit-trail PDFs, page titles
- "take ours" for fork brand URLs (sign.wabo.cc, Wabosign::PRODUCT_URL,
Wabosign::GITHUB_URL) over upstream's hardcoded wabosign.com
- "take ours" for the webhook User-Agent ("WaboSign Webhook" not
"WaboSign.com Webhook") and X-Wabosign-Signature header
- "take theirs" for submitters_send_email's defensive authorize!(:update)
(security improvement from upstream commit e52830c9)
- Hybrid resolution in lib/send_webhook_request.rb — keep fork's
USER_AGENT, take upstream's "don't override custom webhook header"
blank-check (a7891f89)
- 22 "deleted by us" files (Pro upsell controllers/views, removed
docs/api/*, deleted newsletter feature) confirmed deleted
Known gaps to fix as follow-ups:
- config/locales/i18n.yml — taken ours wholesale; missing upstream's
three new resend-email keys (re_send_emails,
are_you_sure_you_want_to_re_send_email_to_n_recipients,
emails_have_been_sent_to_n_recipients) across all 14 languages.
English fallback works for those strings until translated.
- Gemfile.lock — taken ours; needs `bundle install` to regenerate
with upstream's gem updates from 37d4a8e8.
- yarn.lock — same; needs `yarn install`.
- bin/rebrand-sync — the `\bdocuseal_` rule misses `_docuseal_` inside
identifiers (e.g. `unlock_with_docuseal_pro` i18n keys). Widening
to `docuseal_` (no leading word boundary) would catch those. Tracked
as a script refinement before the next sync.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
complete_all_required_fields_to_proceed_with_identity_verification:'Complete all required fields to proceed with identity verification.',
complete_all_required_fields_to_proceed_with_identity_verification:'Complete all required fields to proceed with identity verification.',
verify_id:'Verify ID',
verify_id:'Verify ID',
identity_verification:'Identity verification',
identity_verification:'Identity verification',
@ -116,6 +123,13 @@ const es = {
kba:'KBA',
kba:'KBA',
please_upload_an_image_file:'Por favor, sube un archivo de imagen',
please_upload_an_image_file:'Por favor, sube un archivo de imagen',
must_be_characters_length:'Debe tener {number} caracteres de longitud',
must_be_characters_length:'Debe tener {number} caracteres de longitud',
must_be_valid_ssn:'Debe ser un SSN válido (XXX-XX-XXXX)',
must_be_valid_ein:'Debe ser un EIN válido (XX-XXXXXXX)',
must_be_valid_email:'Debe ser una dirección de correo electrónico válida',
must_be_valid_url:'Debe ser una URL válida (que comience con http:// o https://)',
must_be_valid_zip:'Debe ser un ZIP válido (XXXXX o XXXXX-XXXX)',
must_contain_numbers_only:'Debe contener solo números',
must_contain_letters_only:'Debe contener solo letras',
complete_all_required_fields_to_proceed_with_identity_verification:'Complete todos los campos requeridos para continuar con la verificación de identidad.',
complete_all_required_fields_to_proceed_with_identity_verification:'Complete todos los campos requeridos para continuar con la verificación de identidad.',
verify_id:'Verificar ID',
verify_id:'Verificar ID',
identity_verification:'Verificación de identidad',
identity_verification:'Verificación de identidad',
@ -225,6 +239,13 @@ const it = {
kba:'KBA',
kba:'KBA',
please_upload_an_image_file:'Per favore carica un file immagine',
please_upload_an_image_file:'Per favore carica un file immagine',
must_be_characters_length:'Deve essere lungo {number} caratteri',
must_be_characters_length:'Deve essere lungo {number} caratteri',
must_be_valid_ssn:'Deve essere un SSN valido (XXX-XX-XXXX)',
must_be_valid_ein:'Deve essere un EIN valido (XX-XXXXXXX)',
must_be_valid_email:'Deve essere un indirizzo email valido',
must_be_valid_url:'Deve essere un URL valido (che inizia con http:// o https://)',
must_be_valid_zip:'Deve essere uno ZIP valido (XXXXX o XXXXX-XXXX)',
must_contain_numbers_only:'Deve contenere solo numeri',
must_contain_letters_only:'Deve contenere solo lettere',
complete_all_required_fields_to_proceed_with_identity_verification:"Compila tutti i campi obbligatori per procedere con la verifica dell'identità.",
complete_all_required_fields_to_proceed_with_identity_verification:"Compila tutti i campi obbligatori per procedere con la verifica dell'identità.",
verify_id:'Verifica ID',
verify_id:'Verifica ID',
identity_verification:"Verifica dell'identità",
identity_verification:"Verifica dell'identità",
@ -334,6 +355,13 @@ const de = {
kba:'KBA',
kba:'KBA',
please_upload_an_image_file:'Bitte laden Sie eine Bilddatei hoch',
please_upload_an_image_file:'Bitte laden Sie eine Bilddatei hoch',
must_be_characters_length:'Muss {number} Zeichen lang sein',
must_be_characters_length:'Muss {number} Zeichen lang sein',
must_be_valid_ssn:'Muss eine gültige SSN sein (XXX-XX-XXXX)',
must_be_valid_ein:'Muss eine gültige EIN sein (XX-XXXXXXX)',
must_be_valid_email:'Muss eine gültige E-Mail-Adresse sein',
must_be_valid_url:'Muss eine gültige URL sein (beginnend mit http:// oder https://)',
must_be_valid_zip:'Muss eine gültige ZIP sein (XXXXX oder XXXXX-XXXX)',
must_contain_numbers_only:'Darf nur Zahlen enthalten',
must_contain_letters_only:'Darf nur Buchstaben enthalten',
complete_all_required_fields_to_proceed_with_identity_verification:'Füllen Sie alle Pflichtfelder aus, um mit der Identitätsprüfung fortzufahren.',
complete_all_required_fields_to_proceed_with_identity_verification:'Füllen Sie alle Pflichtfelder aus, um mit der Identitätsprüfung fortzufahren.',
verify_id:'ID überprüfen',
verify_id:'ID überprüfen',
identity_verification:'Identitätsprüfung',
identity_verification:'Identitätsprüfung',
@ -443,6 +471,13 @@ const fr = {
kba:'KBA',
kba:'KBA',
please_upload_an_image_file:'Veuillez téléverser un fichier image',
please_upload_an_image_file:'Veuillez téléverser un fichier image',
must_be_valid_ssn:'Doit être un SSN valide (XXX-XX-XXXX)',
must_be_valid_ein:'Doit être un EIN valide (XX-XXXXXXX)',
must_be_valid_email:'Doit être une adresse e-mail valide',
must_be_valid_url:'Doit être une URL valide (commençant par http:// ou https://)',
must_be_valid_zip:'Doit être un ZIP valide (XXXXX ou XXXXX-XXXX)',
must_contain_numbers_only:'Doit contenir uniquement des chiffres',
must_contain_letters_only:'Doit contenir uniquement des lettres',
complete_all_required_fields_to_proceed_with_identity_verification:"Veuillez remplir tous les champs obligatoires pour poursuivre la vérification d'identité.",
complete_all_required_fields_to_proceed_with_identity_verification:"Veuillez remplir tous les champs obligatoires pour poursuivre la vérification d'identité.",
must_be_characters_length:'Musí mít délku {number} znaků',
must_be_characters_length:'Musí mít délku {number} znaků',
must_be_valid_ssn:'Musí být platné SSN (XXX-XX-XXXX)',
must_be_valid_ein:'Musí být platné EIN (XX-XXXXXXX)',
must_be_valid_email:'Musí být platná e-mailová adresa',
must_be_valid_url:'Musí být platná URL (začínající http:// nebo https://)',
must_be_valid_zip:'Musí být platný ZIP (XXXXX nebo XXXXX-XXXX)',
must_contain_numbers_only:'Musí obsahovat pouze čísla',
must_contain_letters_only:'Musí obsahovat pouze písmena',
complete_all_required_fields_to_proceed_with_identity_verification:'Vyplňte všechna povinná pole, abyste mohli pokračovat v ověření identity.',
complete_all_required_fields_to_proceed_with_identity_verification:'Vyplňte všechna povinná pole, abyste mohli pokračovat v ověření identity.',
verify_id:'Ověřit ID',
verify_id:'Ověřit ID',
identity_verification:'Ověření identity',
identity_verification:'Ověření identity',
@ -879,6 +935,13 @@ const pt = {
kba:'KBA',
kba:'KBA',
please_upload_an_image_file:'Por favor, envie um arquivo de imagem',
please_upload_an_image_file:'Por favor, envie um arquivo de imagem',
must_be_characters_length:'Deve ter {number} caracteres',
must_be_characters_length:'Deve ter {number} caracteres',
must_be_valid_ssn:'Deve ser um SSN válido (XXX-XX-XXXX)',
must_be_valid_ein:'Deve ser um EIN válido (XX-XXXXXXX)',
must_be_valid_email:'Deve ser um endereço de e-mail válido',
must_be_valid_url:'Deve ser uma URL válida (começando com http:// ou https://)',
must_be_valid_zip:'Deve ser um ZIP válido (XXXXX ou XXXXX-XXXX)',
must_contain_numbers_only:'Deve conter apenas números',
must_contain_letters_only:'Deve conter apenas letras',
complete_all_required_fields_to_proceed_with_identity_verification:'Preencha todos os campos obrigatórios para prosseguir com a verificação de identidade.',
complete_all_required_fields_to_proceed_with_identity_verification:'Preencha todos os campos obrigatórios para prosseguir com a verificação de identidade.',
verify_id:'Verificar ID',
verify_id:'Verificar ID',
identity_verification:'Verificação de identidade',
identity_verification:'Verificação de identidade',
@ -988,6 +1051,13 @@ const he = {
kba:'KBA',
kba:'KBA',
please_upload_an_image_file:'אנא העלה קובץ תמונה',
please_upload_an_image_file:'אנא העלה קובץ תמונה',
must_be_characters_length:'חייב להיות באורך של {number} תווים',
must_be_characters_length:'חייב להיות באורך של {number} תווים',
must_be_valid_ssn:'חייב להיות SSN חוקי (XXX-XX-XXXX)',
must_be_valid_ein:'חייב להיות EIN חוקי (XX-XXXXXXX)',
must_be_valid_email:'חייבת להיות כתובת אימייל חוקית',
must_be_valid_url:'חייבת להיות כתובת URL חוקית (המתחילה ב-http:// או https://)',
must_be_valid_zip:'חייב להיות ZIP חוקי (XXXXX או XXXXX-XXXX)',
must_contain_numbers_only:'חייב להכיל מספרים בלבד',