Sign-up support: Cashier now sells plans on the registration page of Sign-up 1.0+ (MediaLab Works) as well as
IDRegister 2.1+. RegistrationBridge replaces IdRegisterBridge; RegistrationAccountProvisioner (generic)
replaces IdRegisterAccountProvisioner; the checkout records reg_app/reg_token (IDRegister checkouts keep
idreg_token too, and 1.1 checkouts still provision through IDRegister). New checkout route
/registration/{app}/checkout (/idregister/checkout kept). Rules → "Paid sign-up page" chooses where Cashier's own
links go when both apps can sell. Contract: docs/REGISTRATION-CONTRACT.md.
Accounts created by Sign-up keep the password chosen in its form: Cashier's welcome e-mail no longer asks them to
set one, and is skipped when Sign-up already sent its own.
Suspension rule per account: the registration app can ask for unpaid accounts to be suspended (Sign-up does by
default) whatever Cashier's global after-grace rule; a payment restores them immediately. Grace period can be 0.
Subscriber e-mails: new invoice (renewals, invoice.finalized), receipt (invoice.paid), plus the existing
payment failed / suspended / active again messages, which now say explicitly that nothing is deleted. Existing
webhooks get the new event automatically (background job); Rules → "E-mail the subscribers about their invoices".
"Pay an overdue invoice" public page (/billing), exempt from the licence: e-mails a suspended subscriber the
link to Stripe's hosted page of the open invoice; the same answer for every address.
Licence classes are resolved lazily outside the controllers (jobs, listener, settings, setup checks, webhook
processor): a removed or changed licence module stops new business cleanly and never breaks cron or the settings
page. Licence template updated (tampered state on the License section).
Setup check "Cashier (registration page)" replaces "Cashier (IDRegister)"; Romanian translations for everything new.