# Changelog

All notable changes to this project will be documented in this file.

## 2026-10-11

### Fixed
- Turning off Shorten Long Web Links now stops shortening on the active connection without a reload, including pending results that arrive while the setting is off.

## 2026-10-10

### Added
- SVG links now support automatic and manual image previews with the existing preview width limit.

### Fixed
- Generated short links now default to HTTPS; set `SHORTEN_USE_HTTPS=false` for HTTP-only shortener hosts.
- Image previews now recognize actual URL path extensions, including WebP and AVIF, regardless of case or query strings. Media names in hostnames or query parameters no longer create false preview controls; manual and automatic previews use the same detection.

## 2026-09-23

### Fixed
- Added search crawler restrictions for player pages in both connection modes and marked multi-game connection links as nofollow.

## 2026-07-06

### Fixed
- Fixed SDWC nowrap blocks so preformatted output preserves repeated and leading spaces.

## 2026-06-30

### Changed
- Updated vulnerable transitive dependencies to patched versions.

## 2026-06-26

### Added
- Added an Android App link to the splash page footer.

### Changed
- Bumped the application version to 4.4.1.
- Bumped the application version to 4.4.2.

### Fixed
- Fixed Telnet IAC negotiation bytes appearing in the web client output.

## 2026-06-25

### Changed
- Updated the MOO setup documentation and included verbs.

### Fixed
- Fixed the multi-MUD connect page so missing TLS render data no longer returns a 500 error.

## 2026-06-24

### Added
- Added explicit backend MUD TLS support with `MUD_TLS_ENABLED`, including forced TLS for single-MUD deployments and opt-in TLS per multi-MUD connection.

### Fixed
- Split multi-MUD connection stats by TCP and TLS so the splash list can reconnect to either transport for the same host and port.

### Changed
- Clarified `MUD_TLS_ENABLED` documentation for direct TLS links, fallback behavior, and split TCP/TLS multi-MUD stats.
- Bumped the application version to 4.4.0 for the MUD TLS release.

## 2026-06-10

### Added
- Added a production deployment guide covering required environment variables, Let's Encrypt TLS setup, process management, and production-only configuration differences.

## 2026-06-08

### Added
- Added optional MOO parser support for verb editors behind `EDITOR_IDE_PARSER=moo`, including Tree-sitter diagnostics in the classic editor and EditorIDE.
- Added `EDITOR_IDE_PARSER_BLOCK_SAVE` so deployments can block IDE `@program` saves while MOO parser errors are visible and move the editor to the first error.
- Added MOO block-balance diagnostics that report missing `endif`, `endfor`, `endwhile`, `endtry`, and `endfork` markers on the opening block line with a final-line summary for nested missing terminators.

### Changed
- Updated verb editor MOO parser assets to use the published `tree-sitter-moo` npm package.

### Fixed
- Fixed MOO parser loading by using a browser-valid Wasm parser artifact from the packaged `tree-sitter-moo` release.
- Fixed MOO Ace highlighting so single-quoted text such as `'ANON'` is no longer highlighted as a string.
- Fixed blocked MOO parser saves so the IDE editor visibly flashes the first error line.

## 2026-06-04

### Added
- Added documentation for the `/health/` endpoint response shape and configuration.
- Added a configurable IP block list for rejecting exact client IPs across HTTP and Socket.io requests.

### Changed
- Added `HEALTH_ENDPOINT_ENABLED` so deployments can disable the `/health/` endpoint.
- Added help text to all General client options so each option shows a question-mark tooltip explaining its behavior.

### Fixed
- Fixed client-options Yes/No buttons so clicking the active value no longer flips the visual state away from the value being saved.
- Fixed command hints so toggling them off and back on rebuilds a visible suggestions overlay and respects the Command Hints preference when user type metadata arrives.

## 2026-06-03

### Added
- Added IDE feature flags for Object Browser, Property Browser, hover overlays, reference navigation, and scratch actions so deployments can disable unsupported MOO integrations.

### Changed
- Made dark mode the default for the IDE editor while preserving saved theme preferences.
- Closed the IDE window automatically when closing the last editable tab leaves only Object Browser or Property Browser tabs behind.
- Highlighted user-defined MOO access receivers with the object-receiver color while keeping built-in variables such as `this` and `player` visually consistent.
- Added distinct MOO verb editor highlighting for access receivers, cored/direct object receivers, and property names.
- Distinguished builtin functions from in-MOO verb calls and corified object references in the MOO verb editor highlighting, including separate call-name coloring for MOO verb invocations.
- Updated the MOO verb editor mode with ToastStunt error constants, booleans, object and core references, MOO operators, and keyword-block indentation while removing JavaScript-derived highlighting.
- Updated MOO builtin highlighting in the verb editor to match ToastStunt's builtin function list.
- Highlighted additional MOO type constants in the verb editor, including `MAP`, `WAIF`, `ANON`, and `BOOL`.
- Updated the verb editors to insert two spaces for tabs so indentation matches MOO-shipped source.
- Routed client-options commands, panel controls, imports, and resets through one controller so preference writes validate, persist, and apply live effects consistently.
- Refactored the browser-client health UI into a focused controller for status messages, socket errors, panel controls, graph updates, and polling.
- Clarified MUD/MOO terminology in the README while preserving legacy route, config, and documentation names.

### Fixed
- Hid the IDE reference-jump shortcut from the shortcuts overlay when ctrl/cmd-click navigation is disabled.
- Corrected setup and MOO integration documentation for local env defaults, IDE feature flags, SDWC request payloads, and MOO-side setup examples.
- Kept the IDE VMS note field visible while a cleared note input still has focus so notes can be fully replaced without collapsing the editor control.
- Fixed IDE editor MOO access highlighting so property names and cored/direct receivers use the same distinct colors as standalone editor windows.
- Fixed MOO verb editor access highlighting so property names and cored/direct object receivers remain visually distinct after Ace themes load.
- Fixed MOO verb editor outdent detection for typed closing block keywords such as `endfor`.

## 2026-06-02

### Added
- Added Knip dead-code analysis commands for finding unused files, exports, and dependencies.
- Added regression coverage to keep browser-client modules from reintroducing the legacy `dome` singleton.

### Changed
- Reduced client-options maintenance debt by rendering option rows from schema metadata and documenting intentional Knip suppressions.
- Reduced client options and connect-page debt by moving option storage keys and render defaults into schema helpers and extracting connect-page workflow binders.
- Replaced the internal browser-client `dome` singleton and shared socket state with explicit client runtime composition.
- Routed editor and IDE window coordination through injected client state and `postMessage` instead of browser-facing `window.dome` access.
- Removed legacy browser-client setup wrapper assignments now that startup and tests use explicit setup exports.
- Reduced legacy browser-client setup hook usage in reconnect, preferences, and socket-output flows.
- Split server listen, close, and bound-address helpers out of the server startup path.
- Split Socket.IO manager binding out of the server startup path.
- Split HTTP and HTTPS server creation out of the server startup path.
- Split Express app creation out of the server startup path while preserving route and middleware behavior.
- Wired socket lifecycle setup through explicit client composition exports.
- Wired health-check setup through explicit client composition exports.
- Wired input-reader and autocomplete setup through explicit client composition exports.
- Wired autoscroll and output parser setup through explicit client composition exports.
- Wired window-handler and editor-support setup through explicit client composition exports.
- Wired button and chevron setup through explicit client composition exports instead of standalone side-effect startup imports.
- Split button workflows for reconnect, log download, clear-buffer confirmation, overlays, and image preview into focused helpers.
- Extracted health status classification, connection-error diagnosis, detail rendering, and graph-series shaping from the health UI setup.
- Extracted connect-page saved-user storage and connection intent helpers so local profile persistence and player-client URL building are tested outside DOM setup.
- Removed obsolete connect-page migration for legacy `dc-username` and `dc-password` local profile keys.
- Split client options import/export helpers and schema-driven dropdown metadata out of the options DOM setup.
- Replaced the Editor IDE technical debt plan with a roadmap focused on tab planning, save flow, shortcuts, overlays, and orchestration cleanup.
- Refactored the Editor IDE internals into focused planning, save-flow, shortcut, overlay, browser command, recent-tab, and label helpers while preserving existing behavior.
- Centralized client option display names in the shared option schema so option UI labels stay aligned with command and preference metadata.
- Extracted client option preference parsing, command parsing, and validation into pure helpers to reduce client options side-effect coupling.
- Split socket output rendering from protocol side effects so buffer rendering, SDWC nowrap handling, IDE messages, alerts, and scrollback pruning are easier to maintain.
- Introduced an explicit client composition initializer so browser setup can be wired with injectable setup hooks while preserving existing startup behavior.
- Decomposed server socket handling into focused address resolution, MUD connection, data flow, and session event helpers while preserving connection behavior.

### Fixed
- Suppressed intentional Knip export warnings for internal test seams and setup APIs while preserving file and dependency checks.
- Removed stale dead-code findings for unused replacement data and same-module-only helper exports.
- Fixed the dead-code dependency check by removing unused test helper packages and ignoring Stryker's built-in command runner false positive.
- Kept fallback autocomplete suggestions above the input buffer with a readable gap instead of overlapping typed commands.
- Fixed Enter-key command submission when the input buffer is initialized before the socket connection is assigned.
- Hardened the IDE editor against malformed window messages and unavailable socket, opener, root, or Ace editor APIs.

## 2026-06-01

### Added
- Added auth contract tests for malformed upstream payloads to lock expected login failure and user-sanitization behavior.
- Added status contract tests to verify malformed status-service payload schemas degrade to safe fallback state.
- Added integration config-matrix coverage for high-risk deployment modes (single vs multi-MUD and auth enabled vs disabled) with isolated per-case test processes to prevent module-cache cross-contamination.
- Added reusable HTML golden-snapshot integration coverage for key routes (`/`, `/player-client/`, and multi-MUD `/game-owner-questions/`) across high-value mode variants.
- Added a scoped mutation-testing profile (`npm run test:mutation`) for critical server modules with Stryker configuration and HTML reporting output.

### Changed
- Moved user-facing testing guidance out of `README.md` into a dedicated `docs/TESTING.md` guide.
- Added up-to-date test command coverage and coverage-threshold guidance in the new testing guide.
- Hardened status-service polling by validating required payload schema fields before accepting upstream status data.
- Hardened website-auth handling by validating upstream payload shape (`status`, `message`, and required `user` object for `status: "ok"`) before mutating session state.
- Updated lint configuration to exclude `.stryker-tmp/` mutation sandbox artifacts from repository-wide lint runs.
- Updated Stryker reporting to emit machine-readable JSON output while preserving live terminal progress.
- Added dedicated mutation scripts for warm-cache prep and hotspot-only runs to speed up mutation-testing iteration.

### Fixed
- Added a socket connect-timeout safeguard so stalled TCP connect attempts fail fast instead of hanging indefinitely.
- Restored the `npm run test:mutation` script and Stryker dev dependency so mutation testing works after clean installs.
- Fixed `npm run test:mutation:hot` to pass the dedicated Stryker config file using the CLI's positional config argument format.

## 2026-05-29

### Added
- Added a dedicated `npm run test:integration` command to run app-level integration tests separately from the default test suite.
- Added server integration coverage for core HTTP route availability, Socket.IO connection startup, website-login flow, and status-service endpoint behavior with mocked upstream dependencies.
- Added integration coverage for auth session continuity, auth upstream network failure behavior, static asset serving contracts, security header baseline checks, and global route-error handling.
- Added integration coverage for log export endpoint behavior (`/save/:filename`) including attachment headers and filename sanitization.
- Added integration coverage for multi-MUD successful socket connections updating persisted connection metrics on disk and validating reload behavior.
- Added DOM-driven integration coverage for client options export/import controls, including JSON round-trip and legacy theme normalization on import.
- Added integration coverage for multi-MUD failed-connect metrics behavior, multi-MUD host/port fallback behavior, and status-service non-JSON/invalid-JSON degradation paths.
- Added integration coverage for per-agent session isolation, socket input lifecycle status/disconnect flow, shortener-failure passthrough behavior, and HTTPS startup binding metadata.
- Added integration coverage for website-login redirect variants (`gogogo` auto character redirect, safe `return` override, and unsafe `return` fallback to `/`).
- Added integration coverage for status-service transition behavior from healthy to degraded and back to healthy.
- Added integration coverage for connect-page user flow actions (`Connect as Guest`, `Connect Manually`, and `Connect Now`) validating local client state persistence behavior.
- Added integration coverage for log export edge cases including empty buffers, large buffers, Unicode payloads, and encoded download filenames.
- Added integration coverage for client options destructive-flow guardrails, including reset cancellation behavior and partial-invalid import reporting.

### Changed
- Updated server startup internals so `start()` accepts optional runtime overrides (for example ephemeral test ports) and returns bound runtime address metadata for integration harnesses.
- Improved status polling testability and test-runner shutdown behavior by adding an explicit status refresh hook and unref'ing background status timers.
- Updated server shutdown to remove its `uncaughtException` listener, preventing listener accumulation across repeated integration server boots.
- Added a test-only multi-MUD metrics reset hook to isolate integration runs from module-level in-memory state.

## 2026-05-28

### Added
- Added a multi-MUD connect-page `Game Owner? Got Questions?` box between the connect form and connection stats, linking to a new game-owner guide page.
- Added a multi-MUD-only `/game-owner-questions/` page explaining the `#$# dome-client-user` marker flow, the `@dome-client-user <hostname-or-ip>` response behavior, and where to find more details in the Dome Client GitHub repository.

### Fixed
- Removed the outdated Chrome performance warning from the connect splash page now that the prior Chrome-specific issue is no longer affecting users.
- Removed legacy Chrome `weak browser` detection for scrollback defaults and now default to unlimited scrollback (`performanceBuffer=0`) across browsers.
- Multi-MUD mode log downloads now use a consistent `dome-client` filename prefix instead of the configured game name.

## 2026-05-27

### Added
- Added `MULTI_MUD` mode (default off) to enable legacy-style host/port-first splash flow with multi-game connect support.
- Added persistent multi-MUD connection analytics storage (`data/multi-mud-metrics.json`) so game usage counts survive restarts.
- Added ANSI TrueColor rendering support for foreground/background sequences (`38;2;r;g;b` and `48;2;r;g;b`) using inline RGB styles in the line buffer and saved logs.
- Added a `Scroll Up to Pause` client option that pauses auto-scroll when you scroll up and resumes when you return to the bottom.
- Added `Input Font` and `Input Font Size (pt)` client options so command entry text can be customized independently from output/editor fonts.
- Added `Input Font Color` and `Input Background Color` options with mobile-friendly color pickers and hex inputs for precise command-entry styling.
- Added `Output Font Size (pt)` as a separate client option so output text size can be adjusted independently, defaulting to the legacy output size.
- Added an `Import/Export` Client Options tab for downloading all preferences as JSON and importing them locally without server upload.
- Added a `Reset to Defaults` action in Client Options Import/Export with a confirmation warning before overwriting current settings.

### Changed
- Renamed the `SDWC No-Wrap Blocks` client option to `Mobile Friendly Text Wrap` for clearer user-facing wording.
- Renamed backend connection environment variables from `MOO_HOST`/`MOO_PORT` to `MUD_HOST`/`MUD_PORT` across app config, docs, examples, and tests.
- Renamed the game-name environment variable to `MUD_NAME` across env validation, config wiring, docs, and tests.
- Updated the main client command input to request plain text mobile keyboards without autocapitalize, autocomplete, or autocorrect.
- Organized Client Options into General, Presentation, and Local Editor tabs, renamed `Output Colors` to `Theme`, and removed admin-only wording from editor options.
- Tightened Client Options dropdown widths to a consistent medium size, widened option labels, and left-aligned Presentation color/size controls for cleaner mobile layout.
- Client options JSON import now applies recognized keys, skips unknown keys, and reports invalid JSON errors in the client output buffer.

### Fixed
- Fixed real-device mobile top control behavior by anchoring mini-controls to the client container on touch devices so output-area icons remain pinned while scrolling.
- Fixed very small-screen controls by converting mini-controls into an in-layout toolbar above the input buffer so actions remain accessible while output scrolls.
- Fixed shortcuts overlay positioning on mobile by centering the dialog within the viewport and constraining width/height to avoid left-edge clipping.
- Added a small-screen confirmation prompt before `Clear Buffer` clears output to reduce accidental buffer wipes on mobile.
- Improved small-screen mini-controls usability by switching to text-forward buttons (showing labels like Settings/Shortcuts/Clear Buffer/Log) with larger touch targets.
- Replaced browser-native small-screen clear-buffer confirmation with an in-app overlay dialog that includes explicit Cancel and Clear Buffer actions.
- Scoped small-screen text-heavy mini-controls to touch devices so narrow desktop windows keep compact icon controls and avoid clipping the Log button.
- Updated footer version/corporate/changelog link styling on the connect screen so those links render with clear link color and underlines.
- Simplified `MULTI_MUD` splash flow to host/port direct connect only (removed Next/back and character/password entry in that mode).
- Improved connect-page character picker sizing and dropdown width so the selector no longer appears undersized or cramped.
- Preserved existing xterm256 class-based color mapping behavior while adding TrueColor, so client color schemes continue overriding palette-based colors as before.
- Fixed ANSI rendering for SGR reset/toggle sequences (`22m`, `25m`, `7m`, `27m`) so bold/blink/inverse styles stop correctly and raw escape codes are no longer shown in output.
- Replaced regex ANSI rendering with a stateful stream parser so SGR resets, inverse fg/bg swapping, xterm256 themed colors, TrueColor, and split escape sequences render consistently with terminal behavior.
- Updated default-color inverse rendering to use explicit inverse foreground/background colors (instead of CSS filter inversion) for closer terminal visual parity.
- Fixed `Scroll Up to Pause` so enabling or disabling it from Client Options takes effect immediately without requiring a reload.
- Fixed the `Transparent Overlays` option so autocomplete overlays keep the selected transparency when toggled or rebuilt.
- Expanded `Transparent Overlays` so it now also affects shortcuts, history search, client options, and the MOO status detail overlay.
- Fixed duplicate Client Options initialization that could bind repeated Import/Export handlers, causing multi-download behavior.
- Fixed Import/Export theme compatibility by normalizing legacy editor theme values (`ambiance`/`tomorrow`) during import.
- Fixed Import/Export options panel stability by ignoring non-option rows in options refresh/binding logic.
- Enforced numeric validation and `8..24` range checks when writing `Output Font Size (pt)` and `Input Font Size (pt)` via client options/import/commands.
- Removed duplicate standalone Client Options script loading so the options UI uses the same runtime preference instance as the main client, restoring immediate live updates for input/output font family, size, and input colors.

### Changed
- Added Import/Export success/error toast messages in Client Options and a warning that import overwrites current settings, with guidance to export a backup first.
- Made Import File and Export File buttons the same width for a consistent layout.
- Renamed Import/Export action labels to `Export File` and `Import File`, moved feedback toast into the Import/Export panel, and changed Import/Reset confirmations to explicit destructive-action warnings.

## 2026-05-22

### Added
- Added a new client option, `SDWC No-Wrap Blocks` (default off), to enable horizontal-scroll rendering for explicit SDWC nowrap marker regions.

### Changed
- Added support for server OOB markers `#$# SDWC-START-NOWRAP` and `#$# SDWC-END-NOWRAP` so marked output streams into a dedicated no-wrap horizontal-scroll block while preserving per-line styling.
- Updated log/export styling parity so SDWC nowrap blocks retain their horizontal-scroll presentation in rendered output.
## 2026-05-21

### Added
- Added local glyphicon sprite assets (`public/img/glyphicons-halflings.png` and `public/img/glyphicons-halflings-white.png`) to remove runtime dependency on remote icon images.
- Added a `Ctrl+R` command-history search overlay with live filtering, keyboard navigation, and click-to-select support that inserts the chosen command back into the input buffer.
- Added a new client option to choose log export style between default inline CSS and legacy linked `https://sindome.org/css/dome.css` output.

### Changed
- Migrated legacy dome utility/button/icon styles into the LESS source and bundled them in `/css/client.css`, replacing runtime dependency on remote `https://sindome.org/css/dome.css`.
- Updated HTML log export to inline the client stylesheet directly in downloaded log files so session logs no longer depend on Sindome-hosted CSS.
- Updated keyboard shortcut help to document `Ctrl+R` command-history search.
- Updated command-history search results so the active selection uses the client blue highlight with high-contrast white text, auto-scrolls into view during keyboard navigation, and expands to show full wrapped command text.

### Fixed
- Prevented mobile connect-page horizontal overflow so the main auth panel, Website Login box, guest actions, and footer no longer bleed off the screen on small viewports.
- Restored responsive visibility utility classes (`hidden-xs`/`hidden-sm`/`hidden-md`/`hidden-lg`) so player-client top controls collapse back to glyph-only labels on small screens.
- Fixed real-device mobile styling mismatch by serving local `client.css` for all device types and removing runtime dependency on external `dome.css`.
- Fixed exported HTML log typography fallback so buffer text stays monospace when `Source Code Pro` is unavailable offline.
- Restored base legacy UI styling (`.btn`, `.hidden`, `.close`) in bundled client styles so connect-page buttons and the Chrome performance warning render correctly without remote `dome.css`.
- Aligned extracted legacy global/link/button/title styles with Sindome’s `dome.css` so connect-page buttons, heading color, and version/changelog link colors match expected appearance more closely.
- Restored explicit terminal font styling for `#inputBuffer` so command entry text matches the expected in-game monospace appearance.
- Restored the input buffer top separator border to prevent visual clipping/offset at the bottom edge and match legacy `dome.css` behavior.
- Corrected input buffer edge styling by removing the thicker top separator and restoring bottom spacing so the bottom line remains visible without increasing top border thickness.
- Added mobile-only up/down history buttons beside the input box that trigger the same command-history navigation behavior as keyboard arrow keys.
- Fixed mobile history button behavior in multiline input so caret navigation now matches arrow-key behavior before history recall triggers.
- Increased small-screen input box height beside mobile history buttons so the textarea fills the control column height without leaving dead space.
- Filtered exact duplicate entries from command-history search results so repeated identical commands appear once.
- Corrected history-search overlay/input sizing so the search field no longer expands beyond modal edges on smaller screens.

### Removed
- Removed unused `WEBSITE_BASE` environment variable from env validation, app config wiring, server template locals, and env example files.

## 2026-05-19

### Changed
- Bumped displayed client version to `4.0.1` so the footer and server startup version match `package.json`.
- Updated app version wiring to use `APP_VERSION` first, then `package.json` version, with a final fallback to `0.0.0`.
- Unified client stylesheet loading to always use `/css/client.css` across desktop, phone, and tablet requests.

### Fixed
- Reduced IDE toolbar button sizing and enabled responsive wrapping so top-row controls and editor content remain visible at the default non-maximized window size.
- Restored `npm run build` behavior by making the build script execute the asset pipeline when run directly.
- Re-centered IDE tab close buttons so the `×` icon stays visually centered within each tab.
- Added a global `window.DomeBridge` ingress API so mobile native bridge integrations can route inbound game data through the standard client parser and retain color/format rendering.
- Enabled mobile native bridge log downloads by sending generated HTML logs through `window.DomeNative.downloadLog` when available, with browser download fallback retained.
- Added native-bridge socket shimming in the client bootstrap so mobile wrappers with `window.DomeNative` can run transport through the native bridge instead of initializing browser Socket.IO.
- Buffered native bridge startup events until `window.DomeBridge` is ready, then flushed queued data so initial MOO splash output is not dropped on app load.
- Added an explicit native `bridgeReady` handshake so Android can hold and replay pre-init socket payloads that arrive before page scripts are ready.

### Changed
- Switched IDE top-bar theme, wrap, and tab-orientation controls to compact icon/glyph buttons with tooltips to improve fit at smaller window sizes.
- Changed the IDE shortcuts control to a compact glyph button and reduced tab button padding so more tabs fit comfortably in the tab strip.
- Made the IDE shortcuts modal responsive at smaller/zoomed window sizes by reducing typography scale and adding internal scroll handling.
- Reworked IDE toolbar responsiveness so controls/status/save/close stay on the first row at smaller sizes, with the editing context line moved to a centered second row.
- Removed small-screen toolbar horizontal scrolling, tightened mobile control sizing, and shortened `View Saved Scratch` to `View Scratch` for better fit.
- Shifted IDE toolbar responsive breakpoint to `md` so 640px stays in two-row mode, keeping the editing label visible below controls while further reducing mobile button sizing.

## 2026-05-18

### Added
- Added global autocomplete feature toggle (`AUTOCOMPLETE_ENABLED`) with default-off behavior and dedicated setup documentation (`docs/AUTOCOMPLETE.md`).

### Changed
- Renamed IDE window title branding to `Dome-Client Developer IDE [tab-count]`.
- Updated runtime defaults to be more generic by setting `WEBSITE_BASE` and `SHORTEN_DOMAIN` defaults to empty values.
- Updated `.env` example files to reflect new defaults and include autocomplete toggle guidance.
- Expanded and aligned setup documentation across README and `docs/` for autocomplete, URL shortener, and website auth behavior.

### Fixed
- Prevented website-login crashes when remote auth returns null entries in `user.chars` by filtering invalid characters before session storage and rendering.
- Reduced excess empty space in the logged-in "Play As ..." panel by removing fixed desktop minimum height so the box fits its content.

### Removed
- Removed the non-functional lock/unlock toggle from the logged-in "Play As ..." section.
- Removed outdated internal UI polish scratch doc (`docs/UI-POLISH.md`) to keep release docs focused on active features and operator setup.

## 2026-02-17

### Added
- Added a configurable 20-line IDE limit for `@local-save-note`.

## 2026-01-08

### Added
- Configurable line limits for `@local-save-node` and `@local-save-node-admin` in the IDE editor.

## 2026-01-07

### Added
- Prompt before closing the tab or window when the socket is still connected.

## 2025-12-21

### Added
- Prime the alert tone on first interaction so autoplay restrictions don't block chimes.

### Fixed
- Treat mention chimes as case-insensitive.

## 2025-10-12

### Added
- SSL ACME check route.

## 2025-09-30

### Changed
- Updated health overlay timestamps to display in the browser's local time zone instead of UTC.
- Added an optional UTC mode to the client date formatter to keep tests deterministic while defaulting UI to local time.

## 2025-09-21
- Made log downloading a fully local thing, so that it doesn't hit the server (better if the server goes down, and won't overload the server on large logs)

## 2025-09-18
- Fixed double scrollbar issue in FireFox
- Added health check
  
## 2025-09-04
- Updated health check to have a higher ceiling for available ram
- Fixed bug with command suggestions being off causing console errors

## 2025-09-02
- Fixed a bug where you'd get reconnected while on the @quit disconnect screen
- Added a view saved scratch button to the admin editor

## 2025-08-31

### Added
- Configurable shorten request timeout.
- Changelog link on the client connect page.
- Ability to send empty input commands.
- Button and Ctrl+Shift+L shortcut to toggle word wrap across all IDE tabs.

### Changed
- Simplified connect flow by removing the options button and streamlining the URL.
- Updated ACE print margin to 120 characters.
- Silenced healthcheck logs.
- Added bottom padding to the buffer.
- Improved health overlay behavior to close on mouse exit, delay hiding, and prevent flicker.
- Documented sudo requirement for SSL key access.

### Fixed
- Preferences store initialization issue.
- Buffer parser now merges split tokens and UUID lines and treats color-only lines as blank.
- IDE windows now reuse existing window.
- Tab orientation controls remain visible on narrow screens.
- Word wrap toggle now keeps all IDE tabs in sync and refreshes inactive tabs immediately.
- Fixed double scrollbar
- Fixed text wrapping / new line issue due to TCP sockets

## 2025-08-30

### Added
- Scratch pad tab support in the IDE.

### Changed
- Refactored command utilities and labels, including @@set_note targets, upload command labels, and unique tab keys.
- Expanded IDE shortcuts overlay and table layout; increased column spacing and cell expansion.
- Log full editor and command context when opening the IDE.

### Fixed
- Handle `none` values and missing Ace workers.
- Notify users when switching to an existing IDE tab.

## 2025-08-29

### Added
- Basic editor for non-program commands with Ace text mode.
- IDE shortcuts overlay with slash toggle, bracket navigation, and tab-switching shortcuts.
- Configurable editor and output fonts, including Comic Mono.
- Close button and keyboard shortcuts for closing IDE tabs; vertical tab scrolling.
- Reuse existing IDE window and update IDE title with tab count.

### Changed
- Applied Ace theme colors and output font styling across editors.
- Bumped webclient version to 4.0.
- Reworked overlay placement and tab resizing; applied theme to basic editor.

### Fixed
- Prevent browser window from closing via Ctrl/Cmd+W and refine unsaved-change warning.
- Display save controls only when upload targets exist.
- Apply dark theme to document root and remove nested buttons in the IDE editor.

## 2025-08-28

### Changed
- Simplified reconnect button logic.
- Image preview toggle persists across sessions.

### Removed
- Unused "Close All Windows" button.

## 2025-08-27

### Added
- Integrated Ace editor into note editor and upgraded to v1.43.2.
- Introduced native command suggestions and expanded preference management with persistent font, theme, and color options.
- Replaced help menu with an options button and removed channel windows and god mode options.

### Changed
- Migrated dependencies to modern alternatives and bundled UI dependencies locally.
- Hardened path handling, WHO content-length calculation, and log filename sanitization.

### Fixed
- Fixed console.log errors when client loads in browser.
- Resolved echo/hide echo button sync issues.

## 2025-08-26

### Changed
- Replaced remaining jQuery and underscore usage with native DOM APIs.
- Removed obsolete script and stylesheet references from headers.
- Redesigned help menu and overlay toggles using custom JavaScript.
- Migrated animations to CSS/Web Animations and server calls to `fetch`.

### Fixed
- Fixed disconnect overlay class usage and other UI glitches.

## 2025-08-25

### Added
- In-app shortcuts overlay button.
- Browser logger to replace direct console calls.
- DNS error handler for socket utilities and `writeAsync` promise wrapper.

### Changed
- Updated command history behavior.
- Moved keybinding from End to Pause/Break.
- Modernized dependencies, build pipeline, and client module structure.
- Converted login and URL-shortening logic to async/await with `fetch`.
- Consolidated log-file naming and reduced extraneous status logs.

### Fixed
- Guest login no longer persists after manual reconnect.
- Corrected pause key mapping and up-arrow navigation glitches.
- Copying buffer window no longer adds extra line breaks.
- Localized preference variables to avoid global leaks.

### Removed
- Unused JavaScript dependencies and obsolete session keys, special options, and deprecated configuration flags.
- Legacy script tags (Backbone, CryptoJS, JSON2) and simplified environment setup.
