• .gitignore docs/v322_new.md src/sbbs3/js_global.cpp src/xpdev/ini_file

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Tue Jul 28 17:41:51 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/370c9c2390b78eb55b5cb5f5
    Modified Files:
    .gitignore docs/v322_new.md src/sbbs3/js_global.cpp src/xpdev/ini_file.c ini_file.h xtrn/syncarcade/.gitignore
    Log Message:
    xpdev: file_cfgname() prefers a sysop's <name>.local.<ext>

    iniFileName() already picks the most specific configuration file that exists, preferring a per-host or per-platform variation over the plain name. All of those variations are untracked, so a sysop using one is already safe from an upgrade overwriting their edits -- but naming a machine is the wrong shape for "this is my copy of a file Synchronet ships", which is what a sysop editing a bundled door's config actually wants, and which has to keep working when the hostname changes or the install is shared.

    So a `.local` variation is searched between the platform variation and the plain name: below the host and platform ones, which are more specific and should still win where they exist, and above the file we ship. When none of
    the variations exist the plain name is still what comes back, so a caller
    that creates the file writes ours, not a .local.

    The tree-wide gitignore rule is what makes the convention true in practice: a .local file is never tracked, wherever in the tree it sits.

    Nothing changes for an existing install -- the new step can only fire when a .local file exists, and none did before this.

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net