• Allow new user registration questions to be optional

    From Rob Swindell@1:103/705 to GitLab issue in main/sbbs on Mon Nov 9 12:50:56 2026
    open https://gitlab.synchro.net/main/sbbs/-/work_items/1331

    Sysops should have more control over what personal information is collected during new user registration. Each new user question can currently only be set to one of two states in SCFG:

    - **No**: never asked
    - **Yes**: asked, and an answer is mandatory. The terminal prompts for address, location, zip/postal code, phone, gender and birthdate repeat until they are answered or registration is cancelled.

    There is no way to ask a question while letting the user decline to answer it.

    ## Proposal

    Make each personal-information question three-state: **No / Optional / Required**.

    Keep the existing `UQ_*` bits (`questions` in `main.ini`) meaning "ask", and add a second bitmask (for example `questions_optional`) meaning "may be left blank". It defaults to 0, so existing configurations keep their current behavior with no migration. SCFG's New User Prompts menu would cycle each applicable item through the three values, and JS would get a matching read-only `system` property.

    ## What has to change with it

    - **Logon re-prompts:** `logon.js` asks again at every logon for any enabled field that is blank, so it must skip optional fields or a declined question is asked forever.
    - **Terminal prompts:** the `get_*()` functions in `user_info_prompts.js` need a way to accept an empty answer when the field is optional. They are shared with the logon and user-defaults paths.
    - **Real name:** must remain required when aliases are disabled, since it is then the user's name on the system.
    - **Web registration:** webv4 (`000-register.xjs`, `api/register.ssjs`), `web/root/newuser.ssjs` and `ecwebv3` each implement their own required-field logic and all need updating.

    ## Open question

    Should this stop at collection, or also cover what is retained and displayed afterward? For example, `user_info_to_sysop.js` includes the birthdate. Starting with collection seems sufficient, since a field that is never collected has nothing to expose later.

    Related: #326 (partial birthdates), which needs its own precision setting alongside this one.

    -- *Authored by Claude (Claude Code), on behalf of @rswindell*
    --- SBBSecho 3.38-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)