Skip to content

1.9.8

Choose a tag to compare

@awehttam awehttam released this 20 Jun 15:14
979912b

Web Interface

Admin Controls and Moderation

  • Admin -> Users -> Edit User now includes two separate per-user netecho moderation controls. Allow unmoderated netecho posting is the normal bypass for the global new-user moderation threshold, while Force echomail moderation is an emergency override that pushes all networked echomail posts from a specific user back into the moderation queue.
  • New-user registration approval is now controlled by a dedicated BBS setting. Self-registrations still require manual approval by default, but sysops can now disable that requirement and have new accounts activated immediately. Approved registrations are also retained as history records instead of being deleted from pending_users.

Messaging and FTN Behavior

  • Network and echoarea settings now include a Missing CHRS fallback charset used only when inbound FTN messages arrive without a CHRS kludge. Inbound decode order now prefers the per-area override, then the network fallback, then the legacy guess order. Message charset edits for netmail and echomail now rebuild message_text from raw_message_bytes when raw bytes are available, and a new CLI tool can bulk rebuild stored echomail text for a selected area or domain.
  • Echomail tag validation is now less strict across the web UI, admin echoarea editor, importer, and route matching. Common FTN tag punctuation such as &, !, and % is now accepted in area tags, so names like AT&T_CHAT no longer fail validation.
  • User settings now include a PGP tab where users can upload multiple public keys, choose a preferred key, browse the public keyserver, and use that public-key directory from the netmail compose flow when encrypting outbound mail.
  • BBS-managed private key hosting is available behind a separate sysop toggle and is off by default.
  • Auto Feed sources now have an option to prefix posted echomail subjects with the configured feed name, producing subjects like [2600.network] TITLEOFPOST before the FTN 72-character subject limit is applied.
  • MeshCore repeater adverts are now stored in a dedicated meshcore_node_adverts table keyed by full public key. The CWN map/list and the public PacketBBS node directory still show MeshCore nodes after upgrade, but live advert writes no longer go into cwn_networks.

User Experience and Reader UI

  • The user-facing echoarea subscription manager at /subscriptions now uses a more compact filter layout modeled after /echolist, with network filtering and an option to show only interest groups that currently have message traffic.
  • Subscribing or unsubscribing from an echoarea in /subscriptions now updates in place instead of reloading the page, preserving the current scroll position and active search/filter state.
  • The subscribed echomail message list now avoids duplicate unread-count work, skips unnecessary joins in its pagination count query, and deduplicates overlapping client-side refreshes, which reduces page-load time on systems with large echomail message bases.
  • The browser notification-sound unlock path now respects each user's saved sound settings and no longer primes disabled sounds on first click. This avoids false notification sounds on Safari and Firefox when notification sounds are turned off.
  • Local-only echomail areas now display with an explicit @local suffix in the web reader and compose UI, so area tags appear as CHAT@local instead of looking like a domain-qualified remote echo.

Operations, Imports, and Localization

  • The manual nodelist import page no longer relies on a browser accept filter that attempted to match Zxx archives with .z*. Valid weekly nodelist bundles such as LOVLYNET.Z25 now show up normally in the file chooser instead of requiring users to disable the picker filter by hand.
  • The example nginx config in docs/INSTALL.md now includes cache-control rules for /sw.js, .css, and .js so updated frontend assets are revalidated more reliably. The nginx example remains untested and unsupported.
  • A new Russian interface translation is now bundled under the ru locale, extending BinktermPHP's built-in language coverage for the web UI, API error text, and terminal strings.

Developer / Infrastructure

  • Realtime wake-up signaling now has a small transport abstraction around PostgreSQL LISTEN/NOTIFY. The current implementation is still PostgreSQL-only, but the direct pg_* calls are now concentrated in dedicated realtime classes instead of being spread across BinkStream, the AI bot daemon, and the admin daemon.
  • Database bootstrap now has a minimal platform abstraction for DSN construction, session initialization, and base schema selection. PostgreSQL remains the only supported backend, but connection and setup behavior is no longer hardcoded in one place.
  • .env may now include DB_DRIVER=pgsql. PostgreSQL is still the only supported value today. This setting exists to make future backend setup work easier to isolate if it is ever pursued.
  • .env may now include PIPE_CODE_PARSER_MODE to control how BBS pipe color codes are recognized by the web renderer and terminal bulletin renderer.
  • A new developer reference document, docs/PostgreSQLDependencies.md, tracks intentional PostgreSQL-specific dependencies and where they currently live.
  • BinkP session logging now closes failed session rows more aggressively and retires orphaned active rows whose handler process has already exited, so the admin BinkP session view no longer treats dead pre-handshake sessions as long-running live connections.
  • The user_settings.theme column now allows up to 300 characters instead of 20 so custom theme stylesheet paths and longer theme identifiers can be stored without truncation.