在 Mudlet 上游玩身临其境的多人纯文本 RPG 游戏。
随处游玩。
Mudlet 可运行于 Windows、macOS 和 Linux 平台。在一台计算机上所撰写的脚本可在其他计算机上无缝运行,您可通过 Dropbox 分享您的档案。
快速。
从 Mudlet 出生起就已定义其卓越性能。自定义文本显示及 Lua 脚本系统将易如反掌地处理最大的难题。
100% 可模组化。
Mudlet 的整个用户页面被设计为均可修改 – 从窗口内的大小至客户端本身的外观。为您自己制作一个前往文本世界的美丽传送门。
免费且开源。
Mudlet 完全免费,您可自由下载、修改并拓展功能。在坚强的基底之上构建,加入我们使制作 MUD 的流程变得无与伦比。
什么是 MUD?
MUD (/ˈmʌd/;起初意为多用户地牢 (Multi-User Dungeon),随后产生称为多用户维度 (Multi-User Dimension) 及多用户领域 (Multi-User Domain) 的变体)[1][2] 是一个多人实时在线的虚拟世界,通常基于文字。MUD 结合了角色扮演游戏、砍杀游戏、 玩家对战游戏、交互式小说及在线聊天等元素。玩家可阅读或预览房间、物体、其他玩家、非玩家角色及在虚拟世界中所作行为的描述。玩家通常通过输入与自然语言相似的命令和玩家与世界交互。- 维基百科
这是一种你会爱上的游戏,它能叙述故事,或是进行史诗般的突袭,又或是进行尔虞我诈的政治斗争,亦或与您的朋友度过美好时光。
Mudlet 新闻
Public Test Build
Changes since last PTB (Mudlet-4.20.1-ptb-2026-05-30-c5767179)
Added:
– selectAll function #8971
Fixed:
– text wrapping uses full available column width on resize #9280
Full changelog since last release (Mudlet-4.20.1)
##### Added:
– selectAll function [#8971](https://github.com/Mudlet/Mudlet/pull/8971)
– Icesus connection option [#9264](https://github.com/Mudlet/Mudlet/pull/9264)
– Lua memory introspection functions [#9241](https://github.com/Mudlet/Mudlet/pull/9241)
– smart command suggestions in the tutorial for new players [#9188](https://github.com/Mudlet/Mudlet/pull/9188)
– lpeg parsing library [#9212](https://github.com/Mudlet/Mudlet/pull/9212)
– Pkuxkx as a predefined default MUD [#9161](https://github.com/Mudlet/Mudlet/pull/9161)
– Mudlet.ini option to control high DPI scale factor rounding policy [#9164](https://github.com/Mudlet/Mudlet/pull/9164)
– right-click option to hide default profiles in connection dialog [#9123](https://github.com/Mudlet/Mudlet/pull/9123)
– selectAll function with optional window support [#9166](https://github.com/Mudlet/Mudlet/pull/9166)
– telnets:// link support for secure TLS connections [#9153](https://github.com/Mudlet/Mudlet/pull/9153)
– getKeyCode function to return key code and any modifiers of a key-binding [#8435](https://github.com/Mudlet/Mudlet/pull/8435)
– `telnet://` URI scheme support for one-click MUD connections [#8601](https://github.com/Mudlet/Mudlet/pull/8601)
– separate border size control and player room marker improvements [#8975](https://github.com/Mudlet/Mudlet/pull/8975)
– OSC 8 context menu title support [#8910](https://github.com/Mudlet/Mudlet/pull/8910)
– DragonfireMUD and VoidMUD [#8783](https://github.com/Mudlet/Mudlet/pull/8783)
– 3rd party definition files for Lua [#8966](https://github.com/Mudlet/Mudlet/pull/8966)
– Starmourn and update IRE game profiles [#9076](https://github.com/Mudlet/Mudlet/pull/9076)
– embeddable TextEdit widget (Geyser.TextEdit) [#8986](https://github.com/Mudlet/Mudlet/pull/8986)
– MudMaster Chat Protocol (MMCP) [#7765](https://github.com/Mudlet/Mudlet/pull/7765)
– blinking/flashing text support [#8983](https://github.com/Mudlet/Mudlet/pull/8983)
– timeout for (Linux) Build xcb-util-cursor [#8978](https://github.com/Mudlet/Mudlet/pull/8978)
– timeout for macos (Install Dependencies) [#8977](https://github.com/Mudlet/Mudlet/pull/8977)
– data loss guard on constraint migration [#8850](https://github.com/Mudlet/Mudlet/pull/8850)
– GNOME Software-style navigation in Package Manager [#8846](https://github.com/Mudlet/Mudlet/pull/8846)
– room description matching to generic mapper [#8649](https://github.com/Mudlet/Mudlet/pull/8649)
– hidden rooms [#8443](https://github.com/Mudlet/Mudlet/pull/8443)
– Multi-file selection in import dialogs [#8796](https://github.com/Mudlet/Mudlet/pull/8796)
– Map label support in 3D mapper [#8793](https://github.com/Mudlet/Mudlet/pull/8793)
– multiple note tabs to the notepad [#8757](https://github.com/Mudlet/Mudlet/pull/8757)
– multiple map views support [#8743](https://github.com/Mudlet/Mudlet/pull/8743)
– muteMediaScript and muteMediaGame options to [getConfig](https://wiki.mudlet.org/w/Manual:Lua_Functions#getConfig)/[setConfig](https://wiki.mudlet.org/w/Manual:Lua_Functions#setConfig) [#8764](https://github.com/Mudlet/Mudlet/pull/8764)
– “Whole word” search option in the script editor [#8722](https://github.com/Mudlet/Mudlet/pull/8722)
– per-room border color and thickness [#8758](https://github.com/Mudlet/Mudlet/pull/8758)
– more safeguards against profile settings being lost [#8742](https://github.com/Mudlet/Mudlet/pull/8742)
– permExactMatchTrigger Lua API function [#8745](https://github.com/Mudlet/Mudlet/pull/8745)
– per-room border color and thickness
– NAWS protocol toggle setting [#8700](https://github.com/Mudlet/Mudlet/pull/8700)
– getBorderColor() Lua API function [#8688](https://github.com/Mudlet/Mudlet/pull/8688)
– MXP FRAME and DEST tag support for multi-window layouts [#8577](https://github.com/Mudlet/Mudlet/pull/8577)
– Optional static analysis during build [#8708](https://github.com/Mudlet/Mudlet/pull/8708)
– OSC 8 hyperlink visibility, selection, and compact syntax enhancements [#8677](https://github.com/Mudlet/Mudlet/pull/8677)
– Sentry license to about dialog [#8660](https://github.com/Mudlet/Mudlet/pull/8660)
– undo/redo for Mudlet editor [#8469](https://github.com/Mudlet/Mudlet/pull/8469)
– [getRoomsByPosition1](https://wiki.mudlet.org/w/Manual:Lua_Functions#getRoomsByPosition1)() function [#8619](https://github.com/Mudlet/Mudlet/pull/8619)
– functional GUI tests using QTest [#8572](https://github.com/Mudlet/Mudlet/pull/8572)
– Enable spellcheck in the composer window [#8447](https://github.com/Mudlet/Mudlet/pull/8447)
– setExitWeightFilter function to alter room/exits weights/locks [#8487](https://github.com/Mudlet/Mudlet/pull/8487)
##### Improved:
– remove dead messages from dlgTriggerEditor class [#9279](https://github.com/Mudlet/Mudlet/pull/9279)
– remove white styling from round rooms [#9252](https://github.com/Mudlet/Mudlet/pull/9252)
– improve memory safety by using smart pointers [#9239](https://github.com/Mudlet/Mudlet/pull/9239)
– show telnet protocol negotiation status in `Statistics` [#9226](https://github.com/Mudlet/Mudlet/pull/9226)
– read tooltips aloud without HTML tags in profile preferences [#9228](https://github.com/Mudlet/Mudlet/pull/9228)
– ARIA accessibility for OSC 8 hyperlinks in caret mode [#9206](https://github.com/Mudlet/Mudlet/pull/9206)
– inline map download dialog [#9204](https://github.com/Mudlet/Mudlet/pull/9204)
– 2D mapper rendering speed on single-Z-level areas [#9209](https://github.com/Mudlet/Mudlet/pull/9209)
– simplify long tooltips [#8416](https://github.com/Mudlet/Mudlet/pull/8416)
– Make spacing between widgets in the connection dialog more consistent [#9198](https://github.com/Mudlet/Mudlet/pull/9198)
– Auto-switch code editor theme with app appearance [#9167](https://github.com/Mudlet/Mudlet/pull/9167)
– handling of rooms having their hidden property changed [#8947](https://github.com/Mudlet/Mudlet/pull/8947)
– guard mudlet::self() in cTelnet destructor [#9020](https://github.com/Mudlet/Mudlet/pull/9020)
– use raw IP address if provided with one [#9066](https://github.com/Mudlet/Mudlet/pull/9066)
– Give players full control over Discord Rich Presence [#9116](https://github.com/Mudlet/Mudlet/pull/9116)
– show version scope in PTB release changelogs [#9148](https://github.com/Mudlet/Mudlet/pull/9148)
– hidden rooms – allow storage in map versions < 22 and other things [#8930](https://github.com/Mudlet/Mudlet/pull/8930)
– change label highlight from overlay to outline [#9132](https://github.com/Mudlet/Mudlet/pull/9132)
– internal code in regards to memory use [#9015](https://github.com/Mudlet/Mudlet/pull/9015)
– saving a key with no binding set shows an error [#9114](https://github.com/Mudlet/Mudlet/pull/9114)
– Add smooth pulsing effect for blinking text [#9104](https://github.com/Mudlet/Mudlet/pull/9104)
– remove AI/llamafile integration [#9108](https://github.com/Mudlet/Mudlet/pull/9108)
– error message when saving MMP-downloaded map [#9107](https://github.com/Mudlet/Mudlet/pull/9107)
– Automatic audio device switching support [#9026](https://github.com/Mudlet/Mudlet/pull/9026)
– only mark map as dirty if room hidden status is changed [#8946](https://github.com/Mudlet/Mudlet/pull/8946)
– Reduce memory usage for text decorations [#9052](https://github.com/Mudlet/Mudlet/pull/9052)
– Remove debug [print](https://wiki.mudlet.org/w/Manual:Lua_Functions#print) from deleteAll function [#9061](https://github.com/Mudlet/Mudlet/pull/9061)
– add defensive coding to internal code related to the TMediaPlayer [#9017](https://github.com/Mudlet/Mudlet/pull/9017)
– Script Editor search code quality and maintainability [#9028](https://github.com/Mudlet/Mudlet/pull/9028)
– Code quality in TBuffer.cpp [#9029](https://github.com/Mudlet/Mudlet/pull/9029)
– show feedback when manually checking for updates fails [#9004](https://github.com/Mudlet/Mudlet/pull/9004)
– add better error reporting to GMCP merge handler [#9018](https://github.com/Mudlet/Mudlet/pull/9018)
– adjust [getTime](https://wiki.mudlet.org/w/Manual:Lua_Functions#getTime)() table size hint to match 7 entries [#9019](https://github.com/Mudlet/Mudlet/pull/9019)
– Don't [echo](https://wiki.mudlet.org/w/Manual:Lua_Functions#echo) OSC 8 [send](https://wiki.mudlet.org/w/Manual:Lua_Functions#send): hyperlink commands by default [#8957](https://github.com/Mudlet/Mudlet/pull/8957)
– Detection of character-at-a-time mode in server connections [#8825](https://github.com/Mudlet/Mudlet/pull/8825)
– Add more context to media playback events [#8953](https://github.com/Mudlet/Mudlet/pull/8953)
– luarocks busted install instructions version flag [#8950](https://github.com/Mudlet/Mudlet/pull/8950)
– Add macOS clang-format path to AI instructions [#8926](https://github.com/Mudlet/Mudlet/pull/8926)
– Make MNES and NEW-ENVIRON mutually exclusive in UI [#8893](https://github.com/Mudlet/Mudlet/pull/8893)
– update Astaria banner [#8900](https://github.com/Mudlet/Mudlet/pull/8900)
– New Crowdin updates [#8253](https://github.com/Mudlet/Mudlet/pull/8253)
– macOS build instructions use absolute path [#8860](https://github.com/Mudlet/Mudlet/pull/8860)
– nixed rex_prce2 check in lua [#8848](https://github.com/Mudlet/Mudlet/pull/8848)
– Faster map rendering when zoomed in by skipping off-screen rooms [#8797](https://github.com/Mudlet/Mudlet/pull/8797)
– Allow nil to clear label callbacks [#8799](https://github.com/Mudlet/Mudlet/pull/8799)
– keep small map areas fully visible in viewport [#8766](https://github.com/Mudlet/Mudlet/pull/8766)
– Enable PCRE2 JIT compilation for triggers and aliases [#8762](https://github.com/Mudlet/Mudlet/pull/8762)
– open IRC with Lua functions not via UI anymore [#8123](https://github.com/Mudlet/Mudlet/pull/8123)
– Auto-link Lua function names in changelog [#8744](https://github.com/Mudlet/Mudlet/pull/8744)
– add error handling with clear error messages [#8736](https://github.com/Mudlet/Mudlet/pull/8736)
– error message visibility in module creation dialog [#8738](https://github.com/Mudlet/Mudlet/pull/8738)
– Memory management for console hyperlinks [#8725](https://github.com/Mudlet/Mudlet/pull/8725)
– AI assistant guidance for modern C++ loops [#8741](https://github.com/Mudlet/Mudlet/pull/8741)
– error messages for easier troubleshooting [#8721](https://github.com/Mudlet/Mudlet/pull/8721)
– highlight search terms in editor when using global search [#8687](https://github.com/Mudlet/Mudlet/pull/8687)
– Show a warning icon when map autosave fails [#8689](https://github.com/Mudlet/Mudlet/pull/8689)
– Simplify internal tree widget code [#8706](https://github.com/Mudlet/Mudlet/pull/8706)
– remove outdated comment for special exits MMP import [#8707](https://github.com/Mudlet/Mudlet/pull/8707)
– Enable OSC 8 hyperlink visibility by default [#8699](https://github.com/Mudlet/Mudlet/pull/8699)
– Fix compiler warnings about potential data loss in type conversions [#8715](https://github.com/Mudlet/Mudlet/pull/8715)
– Remove outdated FIXME comment from msleep call [#8695](https://github.com/Mudlet/Mudlet/pull/8695)
– Modernize color trigger dialog button handling [#8693](https://github.com/Mudlet/Mudlet/pull/8693)
– Reduce Windows install size by ~135MB [#8685](https://github.com/Mudlet/Mudlet/pull/8685)
– show error message when variable can't be moved in the trigger editor [#8683](https://github.com/Mudlet/Mudlet/pull/8683)
– Add error handling to unexpected scenarios [#8682](https://github.com/Mudlet/Mudlet/pull/8682)
– Auto-recover from stuck password masking during login [#8628](https://github.com/Mudlet/Mudlet/pull/8628)
– OSC 8 hyperlink styling with direct JSON parsing [#8641](https://github.com/Mudlet/Mudlet/pull/8641)
– use platform-native key names in UI text [#8591](https://github.com/Mudlet/Mudlet/pull/8591)
– add a crash reporter for Linux / macOS / Windows [#8540](https://github.com/Mudlet/Mudlet/pull/8540)
– Migrate C++ regex engine from PCRE to PCRE2 [#8533](https://github.com/Mudlet/Mudlet/pull/8533)
– Limit saved Lua table variables to 10,000 items [#8581](https://github.com/Mudlet/Mudlet/pull/8581)
– Remove directional navigation buttons from mapper [#8574](https://github.com/Mudlet/Mudlet/pull/8574)
– – two seconds is longer than you think [#8570](https://github.com/Mudlet/Mudlet/pull/8570)
– Cleanup system efficiency for triggers, aliases, and keys [#8559](https://github.com/Mudlet/Mudlet/pull/8559)
– small Style Cleanup in main.cpp [#8562](https://github.com/Mudlet/Mudlet/pull/8562)
– Remove accessible description from trigger pattern editor [#8546](https://github.com/Mudlet/Mudlet/pull/8546)
– remove navigation shortcuts widget from trigger editor [#8530](https://github.com/Mudlet/Mudlet/pull/8530)
##### Fixed:
– text wrapping uses full available column width on resize [#9280](https://github.com/Mudlet/Mudlet/pull/9280)
– make [loadProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#loadProfile) case-insensitive for built-in and user profiles [#9283](https://github.com/Mudlet/Mudlet/pull/9283)
– [echo](https://wiki.mudlet.org/w/Manual:Lua_Functions#echo) ignoring newlines after [deleteLine](https://wiki.mudlet.org/w/Manual:Lua_Functions#deleteLine)() and [echo](https://wiki.mudlet.org/w/Manual:Lua_Functions#echo) inserting symbol for carriage return [#9218](https://github.com/Mudlet/Mudlet/pull/9218)
– prevent crashes on removing multiple buttons/menus/toolbars in editor [#9274](https://github.com/Mudlet/Mudlet/pull/9274)
– missing headers and string creation issues for 6.8.2 [#9251](https://github.com/Mudlet/Mudlet/pull/9251)
– heap-use-after-free in TriggerUnit::processDataStream [#9267](https://github.com/Mudlet/Mudlet/pull/9267)
– Regression of [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile) handling of labels [#9255](https://github.com/Mudlet/Mudlet/pull/9255)
– misc memory handling/safety fixes [#9240](https://github.com/Mudlet/Mudlet/pull/9240)
– set main connection to be low latency [#9250](https://github.com/Mudlet/Mudlet/pull/9250)
– connection status indicators causing tab padding issues on macOS [#9231](https://github.com/Mudlet/Mudlet/pull/9231)
– Clazy warnings part 8 – sanitize-inline-keyword [#9242](https://github.com/Mudlet/Mudlet/pull/9242)
– Text wrapping incorrectly after switching profile tabs [#9227](https://github.com/Mudlet/Mudlet/pull/9227)
– improve media player stability [#9237](https://github.com/Mudlet/Mudlet/pull/9237)
– stop scripted package installs from stealing window focus [#9236](https://github.com/Mudlet/Mudlet/pull/9236)
– link to CONTRIBUTING.md in ai-instructions.md [#9225](https://github.com/Mudlet/Mudlet/pull/9225)
– low-contrast input fields in dark mode on macOS [#9233](https://github.com/Mudlet/Mudlet/pull/9233)
– make FontManager track fonts per-profile [#9238](https://github.com/Mudlet/Mudlet/pull/9238)
– stop re-prompting to set Mudlet as the telnet:// link handler after declining [#9229](https://github.com/Mudlet/Mudlet/pull/9229)
– Clazy warnings part 7 – isempty-vs-count [#9235](https://github.com/Mudlet/Mudlet/pull/9235)
– Clazy warnings part 1A (more) – range-loop-detach [#9232](https://github.com/Mudlet/Mudlet/pull/9232)
– Clazy warnings part 6 – use-static-qregularexpression [#9211](https://github.com/Mudlet/Mudlet/pull/9211)
– Clazy warnings part 5 – fully-qualified-moc-types [#9210](https://github.com/Mudlet/Mudlet/pull/9210)
– prevent use-after-free in TRoom::setArea dirty-area tracking [#9217](https://github.com/Mudlet/Mudlet/pull/9217)
– Clazy warnings part 4 – range-loop-reference [#9207](https://github.com/Mudlet/Mudlet/pull/9207)
– correct use of forward declared type items in headers [#9208](https://github.com/Mudlet/Mudlet/pull/9208)
– Clazy warnings part 3 – qstring-arg [#9197](https://github.com/Mudlet/Mudlet/pull/9197)
– unify and translate some Map Errors [#9189](https://github.com/Mudlet/Mudlet/pull/9189)
– avoid bogus "new Toolbar" and "new Menu" items creation on profile load [#9194](https://github.com/Mudlet/Mudlet/pull/9194)
– Clazy warnings part 2 – detaching-temporary [#9196](https://github.com/Mudlet/Mudlet/pull/9196)
– Clazy warnings part 1 – range-loop-detach [#9195](https://github.com/Mudlet/Mudlet/pull/9195)
– strip whitespace formatting marks when copying trigger patterns [#9149](https://github.com/Mudlet/Mudlet/pull/9149)
– several [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() bugs [#9083](https://github.com/Mudlet/Mudlet/pull/9083)
– prevent update download from being canceled when checking for updates [#9185](https://github.com/Mudlet/Mudlet/pull/9185)
– changelog rendering in PTB update dialog [#9182](https://github.com/Mudlet/Mudlet/pull/9182)
– package edit warning incorrectly showing for module items [#9168](https://github.com/Mudlet/Mudlet/pull/9168)
– Cancel on trigger highlight color picker no longer changes the color [#9013](https://github.com/Mudlet/Mudlet/pull/9013)
– Respect explicit theme choice on Linux [#8897](https://github.com/Mudlet/Mudlet/pull/8897)
– memory leaks in map info contributors, deleting labels [#9141](https://github.com/Mudlet/Mudlet/pull/9141)
– increase TelnetTextDisplayedTest timeouts for CI [#9184](https://github.com/Mudlet/Mudlet/pull/9184)
– review fixes for font handling rework [#9135](https://github.com/Mudlet/Mudlet/pull/9135)
– Better handling of package-supplied fonts during unloading/reloading of packages [#9115](https://github.com/Mudlet/Mudlet/pull/9115)
– [selectCaptureGroup](https://wiki.mudlet.org/w/Manual:Lua_Functions#selectCaptureGroup)() selecting wrong capture [#9133](https://github.com/Mudlet/Mudlet/pull/9133)
– resolve CodeQL stack-address-escape warnings [#9080](https://github.com/Mudlet/Mudlet/pull/9080)
– [insertText](https://wiki.mudlet.org/w/Manual:Lua_Functions#insertText) newline regression [#9022](https://github.com/Mudlet/Mudlet/pull/9022)
– updater to work with github releases [#9125](https://github.com/Mudlet/Mudlet/pull/9125)
– memory leaks in sound player, dialogs [#9142](https://github.com/Mudlet/Mudlet/pull/9142)
– crash when importing non-Mudlet zip with XML containing element [#9146](https://github.com/Mudlet/Mudlet/pull/9146)
– handle over/underflows in (int) TLuaInterpreter::getVerifiedInt(…) [#8924](https://github.com/Mudlet/Mudlet/pull/8924)
– crash when [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() is called while downloads are in-progress [#9138](https://github.com/Mudlet/Mudlet/pull/9138)
– scaling map image labels showing text instead of image [#9121](https://github.com/Mudlet/Mudlet/pull/9121)
– label move in 2D map [#9131](https://github.com/Mudlet/Mudlet/pull/9131)
– correct icon names for two recently added predefined MUDs [#9129](https://github.com/Mudlet/Mudlet/pull/9129)
– handle CMake aliasing problems when PCRE2::8BIT is itself an alias [#9128](https://github.com/Mudlet/Mudlet/pull/9128)
– crash when user cancels map download [#9085](https://github.com/Mudlet/Mudlet/pull/9085)
– small memory leaks in package/object management [#9111](https://github.com/Mudlet/Mudlet/pull/9111)
– small memory leaks when closing/reopening profiles [#9110](https://github.com/Mudlet/Mudlet/pull/9110)
– small leak in [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() for the Lua state, label, and scrollbox [#9109](https://github.com/Mudlet/Mudlet/pull/9109)
– stale characters during horizontal scrolling with wide fonts [#9099](https://github.com/Mudlet/Mudlet/pull/9099)
– Ctrl+End in caret mode hides the cursor [#9101](https://github.com/Mudlet/Mudlet/pull/9101)
– Toolbar visibility not persisted when toggled via right-click menu [#9053](https://github.com/Mudlet/Mudlet/pull/9053)
– typo in mPlayerRoomColorGradentStops member name [#9112](https://github.com/Mudlet/Mudlet/pull/9112)
– OSC 8 hyperlinks strip config/preset only when features are advertised [#9106](https://github.com/Mudlet/Mudlet/pull/9106)
– Miniconsole text cutoff after switching profiles [#8853](https://github.com/Mudlet/Mudlet/pull/8853)
– Refactor and fix logic handling chat name change from GUI preferences dialog [#9025](https://github.com/Mudlet/Mudlet/pull/9025)
– use correct variable for Discord starttime string parsing [#9100](https://github.com/Mudlet/Mudlet/pull/9100)
– Copy Map to inactive profiles losing player room position [#9091](https://github.com/Mudlet/Mudlet/pull/9091)
– use right format type for errors in playSoundFileAsOrderedArguments [#9086](https://github.com/Mudlet/Mudlet/pull/9086)
– Tabs not respecting dark mode [#8996](https://github.com/Mudlet/Mudlet/pull/8996) [#8999](https://github.com/Mudlet/Mudlet/pull/8999)
– map info "Short" always re-added on profile load [#8963](https://github.com/Mudlet/Mudlet/pull/8963)
– Module Manager shortcut uses wrong key sequence when menu bar hidden [#9097](https://github.com/Mudlet/Mudlet/pull/9097)
– setSaveCommandHistory inverting the boolean when a command line name is given [#9098](https://github.com/Mudlet/Mudlet/pull/9098)
– Fix QFutureWatcher memory leaks across the codebase [#9095](https://github.com/Mudlet/Mudlet/pull/9095)
– Color swatch buttons washed out on macOS and not showing at all in Light mode [#8970](https://github.com/Mudlet/Mudlet/pull/8970)
– Text with < characters disappearing on games with MXP enabled [#8918](https://github.com/Mudlet/Mudlet/pull/8918)
– [saveWindowLayout](https://wiki.mudlet.org/w/Manual:Lua_Functions#saveWindowLayout)/[loadWindowLayout](https://wiki.mudlet.org/w/Manual:Lua_Functions#loadWindowLayout) now retains user window positions [#9056](https://github.com/Mudlet/Mudlet/pull/9056)
– memory leak when deleting areas in a map [#9092](https://github.com/Mudlet/Mudlet/pull/9092)
– clickable links losing their URL query parameters [#9073](https://github.com/Mudlet/Mudlet/pull/9073)
– Garbled error messages when passing wrong argument types to popup functions [#9090](https://github.com/Mudlet/Mudlet/pull/9090)
– map exits corrupted when loading maps with invalid room IDs [#9089](https://github.com/Mudlet/Mudlet/pull/9089)
– Correct call() return value so timer error handling reads correctly [#9088](https://github.com/Mudlet/Mudlet/pull/9088)
– Show SSL error messages when secure connection fails [#9055](https://github.com/Mudlet/Mudlet/pull/9055)
– ansi_color table loading order [#9084](https://github.com/Mudlet/Mudlet/pull/9084)
– crash when keychain operation times out [#9072](https://github.com/Mudlet/Mudlet/pull/9072)
– Updater crash on Windows when download URL is unavailable [#9067](https://github.com/Mudlet/Mudlet/pull/9067)
– Changing one profile's password no longer affects others [#9049](https://github.com/Mudlet/Mudlet/pull/9049)
– custom map events not firing when placed in submenus [#8998](https://github.com/Mudlet/Mudlet/pull/8998)
– [timeframe](https://wiki.mudlet.org/w/Manual:Lua_Functions#timeframe) failing if third arg is nil [#8964](https://github.com/Mudlet/Mudlet/pull/8964)
– PasswordMigrationTest to build [#9032](https://github.com/Mudlet/Mudlet/pull/9032)
– Separate user and MXP borders so [reconnect](https://wiki.mudlet.org/w/Manual:Lua_Functions#reconnect) doesn't reset user borders [#9016](https://github.com/Mudlet/Mudlet/pull/9016)
– Restore password loading from portable file in connection dialog [#8993](https://github.com/Mudlet/Mudlet/pull/8993)
– Clear package list before repopulating in Package Exporter [#8892](https://github.com/Mudlet/Mudlet/pull/8892)
– Input bar height changes unexpectedly when switching profiles [#8958](https://github.com/Mudlet/Mudlet/pull/8958)
– Room symbols not rescaling when map is resized [#8974](https://github.com/Mudlet/Mudlet/pull/8974)
– Prevent crash when closing detached windows [#8934](https://github.com/Mudlet/Mudlet/pull/8934)
– Restore sound playback on macOS [#8949](https://github.com/Mudlet/Mudlet/pull/8949)
– Update ssh IP for Geyser upload workflow [#8995](https://github.com/Mudlet/Mudlet/pull/8995)
– Correct TestMask to exclude internal flags [#8954](https://github.com/Mudlet/Mudlet/pull/8954)
– mudlet does not close after running lua tests [#8979](https://github.com/Mudlet/Mudlet/pull/8979)
– Clang-format hash in .git-blame-ignore-revs [#8882](https://github.com/Mudlet/Mudlet/pull/8882)
– [#6964] [spairs](https://wiki.mudlet.org/w/Manual:Lua_Functions#spairs) chokes on mixed keys [#8868](https://github.com/Mudlet/Mudlet/pull/8868)
– align MSDP negotiation to specs [#8905](https://github.com/Mudlet/Mudlet/pull/8905)
– Crash when removing default MUD profiles from welcome window [#8916](https://github.com/Mudlet/Mudlet/pull/8916)
– MXP not working on some MUDs [#8915](https://github.com/Mudlet/Mudlet/pull/8915)
– clean up comments and related translation things [#8914](https://github.com/Mudlet/Mudlet/pull/8914)
– Command history not working when password masking is disabled [#8902](https://github.com/Mudlet/Mudlet/pull/8902)
– Revert default map format to 20 in PTB / `development` [#8891](https://github.com/Mudlet/Mudlet/pull/8891)
– Make main console default to opaque text background, allow user to customize [#8887](https://github.com/Mudlet/Mudlet/pull/8887)
– Delay MXP TEMP_SECURE mode reset to allow tag handling [#8889](https://github.com/Mudlet/Mudlet/pull/8889)
– PTB crash on some Linux systems due to libxcb-cursor bug [#8866](https://github.com/Mudlet/Mudlet/pull/8866)
– Player shown on far side of map when mapper window is wide [#8869](https://github.com/Mudlet/Mudlet/pull/8869)
– db:_coerce_sheet backwards compatibility [#8861](https://github.com/Mudlet/Mudlet/pull/8861)
– Map labels appearing bold after profile reload [#8865](https://github.com/Mudlet/Mudlet/pull/8865)
– macOS color buttons not showing colors in settings [#8847](https://github.com/Mudlet/Mudlet/pull/8847)
– Make update dialog release notes keyboard accessible [#8849](https://github.com/Mudlet/Mudlet/pull/8849)
– Restore desktop shortcut creation on Windows install [#8841](https://github.com/Mudlet/Mudlet/pull/8841)
– Crash when drawing map labels at small zoom levels [#8836](https://github.com/Mudlet/Mudlet/pull/8836)
– Disable AddressSanitizer for release builds [#8826](https://github.com/Mudlet/Mudlet/pull/8826)
– Remember scroll position and cursor position in script editor [#8410](https://github.com/Mudlet/Mudlet/pull/8410)
– Use custom dark theme on all Windows versions [#8819](https://github.com/Mudlet/Mudlet/pull/8819)
– Map area centering displaying areas off-screen [#8814](https://github.com/Mudlet/Mudlet/pull/8814)
– Crash when nested alias/trigger processing runs cleanup prematurely [#8818](https://github.com/Mudlet/Mudlet/pull/8818)
– table.update no longer errors when replacing non-table with table [#8694](https://github.com/Mudlet/Mudlet/pull/8694) [#8751](https://github.com/Mudlet/Mudlet/pull/8751)
– Editor actions not working on initial open [#7482](https://github.com/Mudlet/Mudlet/pull/7482) [#8753](https://github.com/Mudlet/Mudlet/pull/8753)
– Revert map rendering optimization causing issues [#8809](https://github.com/Mudlet/Mudlet/pull/8809)
– Medievia encoding showing error in preferences dropdown [#8811](https://github.com/Mudlet/Mudlet/pull/8811)
– MXP FRAME close tags appearing as literal text [#8808](https://github.com/Mudlet/Mudlet/pull/8808)
– Timer groups [display](https://wiki.mudlet.org/w/Manual:Lua_Functions#display) correct icons when drag-dropped [#8802](https://github.com/Mudlet/Mudlet/pull/8802)
– Map labels appear crisp at all zoom levels [#8795](https://github.com/Mudlet/Mudlet/pull/8795)
– honor 'disable automatic updates' setting when installer is already downloaded [#8409](https://github.com/Mudlet/Mudlet/pull/8409)
– OSC sequences with BEL terminator no longer swallow output [#3912](https://github.com/Mudlet/Mudlet/pull/3912) [#8750](https://github.com/Mudlet/Mudlet/pull/8750)
– Windows crash when saving profile config [#8427](https://github.com/Mudlet/Mudlet/pull/8427) [#8428](https://github.com/Mudlet/Mudlet/pull/8428)
– Big5 and East Asian text encodings not working on Linux [#8787](https://github.com/Mudlet/Mudlet/pull/8787)
– compile in latest development due to map update changes [#8800](https://github.com/Mudlet/Mudlet/pull/8800)
– Improve error handling in [setLabelStyleSheet](https://wiki.mudlet.org/w/Manual:Lua_Functions#setLabelStyleSheet)() [#8446](https://github.com/Mudlet/Mudlet/pull/8446)
– Add outline to area exit arrows for visibility on matching backgrounds [#8794](https://github.com/Mudlet/Mudlet/pull/8794)
– mapper not reopenable after closing via X button [#8401](https://github.com/Mudlet/Mudlet/pull/8401)
– Disable 'Activate' button in Variables view [#8441](https://github.com/Mudlet/Mudlet/pull/8441)
– Prevent crash in MXP watchdog callback [#8785](https://github.com/Mudlet/Mudlet/pull/8785)
– Memory leaks in ScriptUnit and ActionUnit (8,856 bytes) when opening/closing profile [#8781](https://github.com/Mudlet/Mudlet/pull/8781)
– Potential crash during automatic update download [#8776](https://github.com/Mudlet/Mudlet/pull/8776)
– Include full version in Sentry crash reports for PTB builds [#8779](https://github.com/Mudlet/Mudlet/pull/8779)
– Improve build documentation clarity for terminal execution [#8774](https://github.com/Mudlet/Mudlet/pull/8774)
– Regex triggers now respect 'keep' background color setting [#8402](https://github.com/Mudlet/Mudlet/pull/8402)
– Remove unnecessary allocation in filter trigger matching [#8763](https://github.com/Mudlet/Mudlet/pull/8763)
– default new profiles to UTF-8 encoding instead of ASCII [#8759](https://github.com/Mudlet/Mudlet/pull/8759)
– Accessibility crash with out-of-range offset [#8310](https://github.com/Mudlet/Mudlet/pull/8310) [#8752](https://github.com/Mudlet/Mudlet/pull/8752)
– named captures indexed incorrectly in multimatches with special line types [#8748](https://github.com/Mudlet/Mudlet/pull/8748)
– Update trigger icons immediately when dragging in editor [#8746](https://github.com/Mudlet/Mudlet/pull/8746)
– connections to MMapper [#8730](https://github.com/Mudlet/Mudlet/pull/8730)
– prevent module autosave from overwriting failed-to-load modules [#8696](https://github.com/Mudlet/Mudlet/pull/8696)
– GMCP media finish parameter not working [#8740](https://github.com/Mudlet/Mudlet/pull/8740)
– Modules not loading when reopening a profile [#8739](https://github.com/Mudlet/Mudlet/pull/8739)
– Package Exporter unable to export packages [#8629](https://github.com/Mudlet/Mudlet/pull/8629) [#8630](https://github.com/Mudlet/Mudlet/pull/8630)
– Memory leaks in core components [#8716](https://github.com/Mudlet/Mudlet/pull/8716)
– Windows installer failing after update [#8710](https://github.com/Mudlet/Mudlet/pull/8710)
– Down arrow saves typed text before clearing [#8705](https://github.com/Mudlet/Mudlet/pull/8705)
– Restore Windows application icon [#8703](https://github.com/Mudlet/Mudlet/pull/8703)
– set enableMXP when MXP is autodetected [#8701](https://github.com/Mudlet/Mudlet/pull/8701)
– 8 CodeQL 'comparison result is always the same' warnings [#8691](https://github.com/Mudlet/Mudlet/pull/8691)
– CodeQL inconsistent nullness check errors in temp trigger functions [#8690](https://github.com/Mudlet/Mudlet/pull/8690)
– restrict MXP auto-detection to ESC sequences only [#8692](https://github.com/Mudlet/Mudlet/pull/8692)
– Windows Start Menu shortcut missing after install [#8686](https://github.com/Mudlet/Mudlet/pull/8686)
– Use fixed delay instead of waiting for crashpad [#8679](https://github.com/Mudlet/Mudlet/pull/8679)
– Windows updates failing due to locked folder [#8678](https://github.com/Mudlet/Mudlet/pull/8678)
– Wait for crashpad_handler.exe to exit before running installer [#8676](https://github.com/Mudlet/Mudlet/pull/8676)
– [copy](https://wiki.mudlet.org/w/Manual:Lua_Functions#copy) downloaded installer instead of moving file on Windows [#8675](https://github.com/Mudlet/Mudlet/pull/8675)
– Create shortcuts when handling Squirrel install events [#8672](https://github.com/Mudlet/Mudlet/pull/8672)
– Wait for Mudlet to exit before running installer on Windows [#8673](https://github.com/Mudlet/Mudlet/pull/8673)
– Handle Squirrel installer startup commands on Windows to prevent Mudlet getting closed [#8666](https://github.com/Mudlet/Mudlet/pull/8666)
– Prevent crashpad_handler from getting a Windows Start Menu entry [#8659](https://github.com/Mudlet/Mudlet/pull/8659)
– Windows updater file lock issue in dblsqd (prevented updates) [#8661](https://github.com/Mudlet/Mudlet/pull/8661)
– Windows updater launch using batch file to avoid quoting issues when updating PTBs [#8663](https://github.com/Mudlet/Mudlet/pull/8663)
– Mudlet freeze when receiving large amounts of data [#8644](https://github.com/Mudlet/Mudlet/pull/8644)
– Container overflow crash when processing text [#8647](https://github.com/Mudlet/Mudlet/pull/8647)
– Build failures after dependency updates [#8645](https://github.com/Mudlet/Mudlet/pull/8645)
– package manager loses title on uninstall [#8625](https://github.com/Mudlet/Mudlet/pull/8625)
– Windows updater deleting itself during update [#8622](https://github.com/Mudlet/Mudlet/pull/8622)
– crash in bi-daily update check [#8620](https://github.com/Mudlet/Mudlet/pull/8620)
– crash in bi-daily update check
– clicking on stacked rooms selects all of them [#8616](https://github.com/Mudlet/Mudlet/pull/8616)
– use-after-free crash when calling [registerMapInfo](https://wiki.mudlet.org/w/Manual:Lua_Functions#registerMapInfo) [#8609](https://github.com/Mudlet/Mudlet/pull/8609)
– Prevent crash during Mudlet shutdown when closing profiles [#8606](https://github.com/Mudlet/Mudlet/pull/8606)
– Forward secrets.SENTRY_DSN to CMake on Windows [#8615](https://github.com/Mudlet/Mudlet/pull/8615)
– Static fonts configured in 4.19.1 continue working after upgrade [#8545](https://github.com/Mudlet/Mudlet/pull/8545)
– convert raw Qt pointers to QPointer to prevent use-after-free [#8610](https://github.com/Mudlet/Mudlet/pull/8610)
– maintain backwards compatibility when loading rex_pcre2 [#8599](https://github.com/Mudlet/Mudlet/pull/8599)
– missing encodings in dropdown for Qt6 [#8605](https://github.com/Mudlet/Mudlet/pull/8605)
– Medievia encoding error in preferences dropdown [#8608](https://github.com/Mudlet/Mudlet/pull/8608)
– load PCRE2 in LuaGlobal [#8598](https://github.com/Mudlet/Mudlet/pull/8598)
– fix inconsistent nullness checks [#8586](https://github.com/Mudlet/Mudlet/pull/8586)
– Test builds now use keychain for password storage [#8589](https://github.com/Mudlet/Mudlet/pull/8589)
– Heap-use-after-free crash when closing profiles with active triggers [#8567](https://github.com/Mudlet/Mudlet/pull/8567)
– heap-use-after-free when cleanup runs during alias/trigger/key processing [#8571](https://github.com/Mudlet/Mudlet/pull/8571)
– potential issue in area image export [#8585](https://github.com/Mudlet/Mudlet/pull/8585)
– Restore Qt5 Core5Compat for third-party dependencies [#8578](https://github.com/Mudlet/Mudlet/pull/8578)
– Reduce redundant UTF-8 conversions in trigger processing [#8560](https://github.com/Mudlet/Mudlet/pull/8560)
– Improve performance of hyperlink style parsing [#8558](https://github.com/Mudlet/Mudlet/pull/8558)
– Remove duplicate context menu on AdjustableContainer title bar [#8569](https://github.com/Mudlet/Mudlet/pull/8569)
– Copy from console now works when command line has focus [#8551](https://github.com/Mudlet/Mudlet/pull/8551)
– Remove deprecated Qt5 Core5Compat dependency [#8550](https://github.com/Mudlet/Mudlet/pull/8550)
– crash when rapidly reloading plugins due to thread-safety issue in XML export [#8542](https://github.com/Mudlet/Mudlet/pull/8542)
– switch to FFMPEG audio backend on Windows to allow playback of .ogg and .opus audio files [#8329](https://github.com/Mudlet/Mudlet/pull/8329)
– Debug console crash when host is deleted [#8549](https://github.com/Mudlet/Mudlet/pull/8549)
– Special exit text unreadable when editing [#8543](https://github.com/Mudlet/Mudlet/pull/8543)
– Comprehensive package installation crash prevention [#8541](https://github.com/Mudlet/Mudlet/pull/8541)
– Auto-activate new triggers/aliases/scripts/keys on save [#8529](https://github.com/Mudlet/Mudlet/pull/8529)
– Unicode characters [display](https://wiki.mudlet.org/w/Manual:Lua_Functions#display) correctly in unhandled MXP tags [#8532](https://github.com/Mudlet/Mudlet/pull/8532)
##### Infrastructure:
– Bump 3rdparty/qtkeychain from `e3b2e83` to `7718d0a` [#9275](https://github.com/Mudlet/Mudlet/pull/9275)
– rename local variables to reflect their type in `TAction` class [#9271](https://github.com/Mudlet/Mudlet/pull/9271)
– align CLAUDE.md et all with contributing guidelines [#9265](https://github.com/Mudlet/Mudlet/pull/9265)
– disable Sentry on PTB builds to test update-stall hypothesis [#9263](https://github.com/Mudlet/Mudlet/pull/9263)
– Bump 3rdparty/sentry-native from `87f25f2` to `c0e5f07` [#9260](https://github.com/Mudlet/Mudlet/pull/9260)
– Bump 3rdparty/qtkeychain from `708d099` to `e3b2e83` [#9259](https://github.com/Mudlet/Mudlet/pull/9259)
– Update bundled mpkg.mpackage to latest upstream [#9253](https://github.com/Mudlet/Mudlet/pull/9253)
– Bump 3rdparty/qtkeychain from `53a8e6a` to `708d099` [#9249](https://github.com/Mudlet/Mudlet/pull/9249)
– Swap out QtConcurrent module header for sub-module ones [#9246](https://github.com/Mudlet/Mudlet/pull/9246)
– update CONTRIBUTING.md with AI coding guidelines [#9224](https://github.com/Mudlet/Mudlet/pull/9224)
– Bump lukka/get-cmake from 4.3.1 to 4.3.2 [#9221](https://github.com/Mudlet/Mudlet/pull/9221)
– Bump leafo/gh-actions-lua from 12 to 13 [#9222](https://github.com/Mudlet/Mudlet/pull/9222)
– Bump 3rdparty/sentry-native from `848fd4c` to `87f25f2` [#9220](https://github.com/Mudlet/Mudlet/pull/9220)
– apply clang-format style to tests too [#9201](https://github.com/Mudlet/Mudlet/pull/9201)
– Bump 3rdparty/sentry-native from `93c4e32` to `848fd4c` [#9202](https://github.com/Mudlet/Mudlet/pull/9202)
– Bump carlosperate/download-file-action from 2.0.2 to 2.0.3 [#9203](https://github.com/Mudlet/Mudlet/pull/9203)
– fix flaky TelnetTextDisplayedTest in CI [#9193](https://github.com/Mudlet/Mudlet/pull/9193)
– fix partial PTB releases not triggering when push build [exists](https://wiki.mudlet.org/w/Manual:Lua_Functions#exists) at same SHA [#9192](https://github.com/Mudlet/Mudlet/pull/9192)
– fix Windows SHA256 missing from PTB releases [#9191](https://github.com/Mudlet/Mudlet/pull/9191)
– allow partial PTB releases when not all platforms succeed [#9163](https://github.com/Mudlet/Mudlet/pull/9163)
– migrate undo/redo tests to QTest framework [#8867](https://github.com/Mudlet/Mudlet/pull/8867)
– stop deleting and recreating GitHub releases on every build [#9176](https://github.com/Mudlet/Mudlet/pull/9176)
– skip duplicate PTB builds when no new commits exist [#9175](https://github.com/Mudlet/Mudlet/pull/9175)
– sync edbee-lib submodule to fork master [#9183](https://github.com/Mudlet/Mudlet/pull/9183)
– Bump actions/download-artifact from 4 to 8 [#9179](https://github.com/Mudlet/Mudlet/pull/9179)
– Bump actions/github-script from 7 to 9 [#9181](https://github.com/Mudlet/Mudlet/pull/9181)
– Bump 3rdparty/sentry-native from `6ebd29b` to `93c4e32` [#9178](https://github.com/Mudlet/Mudlet/pull/9178)
– fix Windows and macOS nightly build failures [#9173](https://github.com/Mudlet/Mudlet/pull/9173)
– add missing statuses:write permission to DangerJS workflow [#9172](https://github.com/Mudlet/Mudlet/pull/9172)
– fix DangerJS workflow vulnerability to malicious PRs [#9143](https://github.com/Mudlet/Mudlet/pull/9143)
– add non-compileable files to CMake project file [#8780](https://github.com/Mudlet/Mudlet/pull/8780)
– update sentry-native to 0.13.5 [#9158](https://github.com/Mudlet/Mudlet/pull/9158)
– update edbee-lib submodule & use system oniguruma if present [#9156](https://github.com/Mudlet/Mudlet/pull/9156)
– fix PTB registration by reverting installer filename convention [#9155](https://github.com/Mudlet/Mudlet/pull/9155)
– show changelogs both from last release and last PTB [#9151](https://github.com/Mudlet/Mudlet/pull/9151)
– fix CI bugs in PTB registration, macOS updater linking, and portable ZIP upload [#9154](https://github.com/Mudlet/Mudlet/pull/9154)
– fix Windows release asset upload and appcast SCP paths [#9152](https://github.com/Mudlet/Mudlet/pull/9152)
– fix Windows PTB registration failing after installer rename [#9150](https://github.com/Mudlet/Mudlet/pull/9150)
– release workflow failing due to PR build triggers and checkout wiping assets [#9145](https://github.com/Mudlet/Mudlet/pull/9145)
– add CI workflow to create GitHub Releases for updater [#9127](https://github.com/Mudlet/Mudlet/pull/9127)
– Update text for translation in Crowdin [#9136](https://github.com/Mudlet/Mudlet/pull/9136)
– Bump lukka/get-cmake from 4.3.0 to 4.3.1 [#9139](https://github.com/Mudlet/Mudlet/pull/9139)
– Add comprehensive variable editor tests [#9103](https://github.com/Mudlet/Mudlet/pull/9103)
– add comprehensive [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() test suite [#9082](https://github.com/Mudlet/Mudlet/pull/9082)
– add cross-reference comments to duplicate build workflows [#9069](https://github.com/Mudlet/Mudlet/pull/9069)
– remove disabled clang-tidy workflows [#9113](https://github.com/Mudlet/Mudlet/pull/9113)
– Bump 3rdparty/qtkeychain from `6e90eda` to `53a8e6a` [#9126](https://github.com/Mudlet/Mudlet/pull/9126)
– Update text for translation in Crowdin [#9124](https://github.com/Mudlet/Mudlet/pull/9124)
– speed up OSC tests with data-driven approach [#9120](https://github.com/Mudlet/Mudlet/pull/9120)
– Add Copilot skill for opening pull requests [#9105](https://github.com/Mudlet/Mudlet/pull/9105)
– Bump 3rdparty/qtkeychain from `844beb4` to `6e90eda` [#8973](https://github.com/Mudlet/Mudlet/pull/8973)
– Update text for translation in Crowdin [#9077](https://github.com/Mudlet/Mudlet/pull/9077)
– disable CodeQL poorly-documented-function query [#9079](https://github.com/Mudlet/Mudlet/pull/9079)
– Bump webfactory/ssh-agent from 0.9.1 to 0.10.0 [#9047](https://github.com/Mudlet/Mudlet/pull/9047)
– restore xcb-util-cursor resiliency changes [#9074](https://github.com/Mudlet/Mudlet/pull/9074)
– Bump lukka/get-cmake from 4.2.3 to 4.3.0 [#9087](https://github.com/Mudlet/Mudlet/pull/9087)
– Fix macOS CI: use AppleClang instead of Homebrew LLVM [#9078](https://github.com/Mudlet/Mudlet/pull/9078)
– remove leftover qgridlayout ordering script [#9075](https://github.com/Mudlet/Mudlet/pull/9075)
– enable set -e in Linux CI deploy script to catch failures [#9059](https://github.com/Mudlet/Mudlet/pull/9059)
– install `libspeechd-dev` for Linux CI to fix AppImage creation [#9058](https://github.com/Mudlet/Mudlet/pull/9058)
– Migrate to clang64 msys2 environment for Windows builds [#9064](https://github.com/Mudlet/Mudlet/pull/9064)
– remove ccache mutex locks [#9043](https://github.com/Mudlet/Mudlet/pull/9043)
– add retries to brew install to handle hangs [#9045](https://github.com/Mudlet/Mudlet/pull/9045)
– remove CodeQL CI's concurrency [#9044](https://github.com/Mudlet/Mudlet/pull/9044)
– Fix windows builds in `development` [#9042](https://github.com/Mudlet/Mudlet/pull/9042)
– Bump development version to 4.20.1 [#9050](https://github.com/Mudlet/Mudlet/pull/9050)
– Update text for translation in Crowdin [#9040](https://github.com/Mudlet/Mudlet/pull/9040)
– remove qgridlayout ordering workflow [#9038](https://github.com/Mudlet/Mudlet/pull/9038)
– Update autocompletion data in Mudlet [#9041](https://github.com/Mudlet/Mudlet/pull/9041)
– update target path for file upload in geyser-docs workflow [#9030](https://github.com/Mudlet/Mudlet/pull/9030)
– Change SCP target host for file uploads [#9003](https://github.com/Mudlet/Mudlet/pull/9003)
– Dedicated workflow for prs [#9033](https://github.com/Mudlet/Mudlet/pull/9033)
– Remove unnecessary null checks after new [#9014](https://github.com/Mudlet/Mudlet/pull/9014)
– speed up compilation of Mudlet by 25% [#9021](https://github.com/Mudlet/Mudlet/pull/9021)
– Enable TTS in macOS builds [#8921](https://github.com/Mudlet/Mudlet/pull/8921)
– make xcb-util-cursor download more resilient [#9012](https://github.com/Mudlet/Mudlet/pull/9012)
– re-introduce path stripping in geyser-docs.yaml [#9023](https://github.com/Mudlet/Mudlet/pull/9023)
– ccache key should be per pr/branch [#9010](https://github.com/Mudlet/Mudlet/pull/9010)
– use release-signing for releases, test-signing for PTBs [#9007](https://github.com/Mudlet/Mudlet/pull/9007)
– always run build ci in core branches [#9008](https://github.com/Mudlet/Mudlet/pull/9008)
– Update text for translation in Crowdin [#9009](https://github.com/Mudlet/Mudlet/pull/9009)
– increase SignPath signing timeout to 1 hour [#9002](https://github.com/Mudlet/Mudlet/pull/9002)
– Refactor geyser doc upload workflow [#9001](https://github.com/Mudlet/Mudlet/pull/9001)
– run undo/redo tests in test mode [#8992](https://github.com/Mudlet/Mudlet/pull/8992)
– fix unintended ccache collisions [#8991](https://github.com/Mudlet/Mudlet/pull/8991)
– Bump actions/upload-artifact from 6 to 7 [#8989](https://github.com/Mudlet/Mudlet/pull/8989)
– CI concurrency logic [#8990](https://github.com/Mudlet/Mudlet/pull/8990)
– Bump ZedThree/clang-tidy-review from 0.23.0 to 0.23.1 [#8988](https://github.com/Mudlet/Mudlet/pull/8988)
– Update text for translation in Crowdin [#8940](https://github.com/Mudlet/Mudlet/pull/8940)
– [ImgBot] Optimize images [#8925](https://github.com/Mudlet/Mudlet/pull/8925)
– Bump development version to 4.20.0 [#8919](https://github.com/Mudlet/Mudlet/pull/8919)
– Bump 3rdparty/sentry-native from `c80e793` to `383ccad` [#8913](https://github.com/Mudlet/Mudlet/pull/8913)
– Add SignPath Foundation attribution to README [#8895](https://github.com/Mudlet/Mudlet/pull/8895)
– Update autocompletion data in Mudlet [#8903](https://github.com/Mudlet/Mudlet/pull/8903)
– Update text for translation in Crowdin [#8901](https://github.com/Mudlet/Mudlet/pull/8901)
– use pcre2grep in CI validation [#8878](https://github.com/Mudlet/Mudlet/pull/8878)
– set next-next release to be 4.21.0 [#8883](https://github.com/Mudlet/Mudlet/pull/8883)
– disable signing MudletCrashReporter.exe temporarily [#8880](https://github.com/Mudlet/Mudlet/pull/8880)
– add qtkeychain-qt6-dev to Linux workflows [#8876](https://github.com/Mudlet/Mudlet/pull/8876)
– switch qtkeychain submodule to upstream [#8870](https://github.com/Mudlet/Mudlet/pull/8870)
– detect Lua test failures on macOS CI [#8852](https://github.com/Mudlet/Mudlet/pull/8852)
– Remove x64 from Windows PTB desktop shortcut name [#8845](https://github.com/Mudlet/Mudlet/pull/8845)
– Bump lukka/get-cmake from 4.2.2 to 4.2.3 [#8844](https://github.com/Mudlet/Mudlet/pull/8844)
– Bump 3rdparty/sentry-native from `08b1374` to `c80e793` [#8843](https://github.com/Mudlet/Mudlet/pull/8843)
– Update text for translation in Crowdin [#8839](https://github.com/Mudlet/Mudlet/pull/8839)
– Fix SignPath code signing policy configuration [#8834](https://github.com/Mudlet/Mudlet/pull/8834)
– Revert uploading debug symbols to Sentry for PR builds [#8832](https://github.com/Mudlet/Mudlet/pull/8832)
– Fix Windows code signing by adding SignPath v2 policy file [#8831](https://github.com/Mudlet/Mudlet/pull/8831)
– Upload debug symbols to Sentry for PR builds [#8830](https://github.com/Mudlet/Mudlet/pull/8830)
– Remove unused QKeychain forward declarations from CredentialManager.h [#8829](https://github.com/Mudlet/Mudlet/pull/8829)
– Remove dead CMake code in Sentry configuration [#8828](https://github.com/Mudlet/Mudlet/pull/8828)
– Bump lukka/get-cmake from 3.30.3 to 4.2.2 [#8822](https://github.com/Mudlet/Mudlet/pull/8822)
– Bump actions/upload-artifact from 4 to 6 [#8823](https://github.com/Mudlet/Mudlet/pull/8823)
– Bump actions/cache from 4 to 5 [#8821](https://github.com/Mudlet/Mudlet/pull/8821)
– Bump 3rdparty/sentry-native from `bbccfad` to `08b1374` [#8820](https://github.com/Mudlet/Mudlet/pull/8820)
– Cache sentry-native builds in CI [#8807](https://github.com/Mudlet/Mudlet/pull/8807)
– Add .git-blame-ignore-revs for formatting commits [#8805](https://github.com/Mudlet/Mudlet/pull/8805)
– Update text for translation in Crowdin [#8816](https://github.com/Mudlet/Mudlet/pull/8816)
– update plural american english translations [#8478](https://github.com/Mudlet/Mudlet/pull/8478)
– add clang-format instructions to AI guidelines [#8806](https://github.com/Mudlet/Mudlet/pull/8806)
– Apply clang-format to all CPP files [#8804](https://github.com/Mudlet/Mudlet/pull/8804)
– Add SignPath code signing for Windows builds [#8786](https://github.com/Mudlet/Mudlet/pull/8786)
– update clang-format style to match Mudlets as much as possible [#8380](https://github.com/Mudlet/Mudlet/pull/8380)
– Enable Qt breadcrumbs in Sentry crash reports [#8791](https://github.com/Mudlet/Mudlet/pull/8791)
– Fix Windows nightly build failure when no new commits [#8790](https://github.com/Mudlet/Mudlet/pull/8790)
– Bump 3rdparty/sentry-native from `11832e4` to `bbccfad` [#8792](https://github.com/Mudlet/Mudlet/pull/8792)
– upload Qt module debug symbols to Sentry using cv2pdb [#8782](https://github.com/Mudlet/Mudlet/pull/8782)
– Update autocompletion data in Mudlet [#8789](https://github.com/Mudlet/Mudlet/pull/8789)
– Update text for translation in Crowdin [#8788](https://github.com/Mudlet/Mudlet/pull/8788)
– Upload Qt debug symbols to Sentry for better crash reports [#8777](https://github.com/Mudlet/Mudlet/pull/8777)
– Remove Azure trusted signing from Windows builds [#8778](https://github.com/Mudlet/Mudlet/pull/8778)
– Bump 3rdparty/edbee-lib from `cf7f0ba` to `7e7c0f6` [#8770](https://github.com/Mudlet/Mudlet/pull/8770)
– Bump 3rdparty/sentry-native from `4f983bb` to `11832e4` [#8771](https://github.com/Mudlet/Mudlet/pull/8771)
– remove `travis.` [prefix](https://wiki.mudlet.org/w/Manual:Lua_Functions#prefix) from CI files [#8375](https://github.com/Mudlet/Mudlet/pull/8375)
– Update autocompletion data in Mudlet [#8769](https://github.com/Mudlet/Mudlet/pull/8769)
– Update text for translation in Crowdin [#8767](https://github.com/Mudlet/Mudlet/pull/8767)
– Update bundled mpkg.mpackage to latest upstream [#8768](https://github.com/Mudlet/Mudlet/pull/8768)
– reduce Mudlet build times by 30s [#8403](https://github.com/Mudlet/Mudlet/pull/8403)
– Add Claude Code slash command for creating PRs [#8761](https://github.com/Mudlet/Mudlet/pull/8761)
– Guard undo/redo debug messages behind compile flag [#8760](https://github.com/Mudlet/Mudlet/pull/8760)
– Simplify profile loading code [#8756](https://github.com/Mudlet/Mudlet/pull/8756)
– Improve code readability with cleaner empty checks [#8755](https://github.com/Mudlet/Mudlet/pull/8755)
– Reduce noise in automated code review comments [#8754](https://github.com/Mudlet/Mudlet/pull/8754)
– simplify CI 3rd party update workflow [#8737](https://github.com/Mudlet/Mudlet/pull/8737)
– improve safety of internal text handling [#8724](https://github.com/Mudlet/Mudlet/pull/8724)
– uppercase settings key in config [#8246](https://github.com/Mudlet/Mudlet/pull/8246)
– Simplify build system by removing unused QMake files [#8731](https://github.com/Mudlet/Mudlet/pull/8731)
– modernize loop syntax across codebase [#8733](https://github.com/Mudlet/Mudlet/pull/8733)
– simplify cmake build configuration [#8732](https://github.com/Mudlet/Mudlet/pull/8732)
– simplify network connection handling [#8735](https://github.com/Mudlet/Mudlet/pull/8735)
– Add a security policy for reporting vulnerabilities [#8723](https://github.com/Mudlet/Mudlet/pull/8723)
– Update text for translation in Crowdin [#8728](https://github.com/Mudlet/Mudlet/pull/8728)
– Update autocompletion data in Mudlet [#8729](https://github.com/Mudlet/Mudlet/pull/8729)
– revise displayed Copyright year to 2026 [#8727](https://github.com/Mudlet/Mudlet/pull/8727)
– eliminate remains of qt-ordered-map from Mudlet [#8720](https://github.com/Mudlet/Mudlet/pull/8720)
– Clarify CI build option label [#8714](https://github.com/Mudlet/Mudlet/pull/8714)
– allow CMake `initGitSubmodule.cmake` to act recursively [#8717](https://github.com/Mudlet/Mudlet/pull/8717)
– run memory leak checks as part of CI pipeline [#8316](https://github.com/Mudlet/Mudlet/pull/8316)
– remove debug logging from undo/redo feature [#8713](https://github.com/Mudlet/Mudlet/pull/8713)
– Update text for translation in Crowdin [#8698](https://github.com/Mudlet/Mudlet/pull/8698)
– check for sentry-native submodule when Sentry enabled [#8669](https://github.com/Mudlet/Mudlet/pull/8669)
– address feedback in event handling from no-op operations [#8667](https://github.com/Mudlet/Mudlet/pull/8667)
– Add telnet processing speed benchmark [#8658](https://github.com/Mudlet/Mudlet/pull/8658)
– Replace foreach with C++17 structured bindings [#8664](https://github.com/Mudlet/Mudlet/pull/8664)
– Add ccache stats to Windows build workflow [#8671](https://github.com/Mudlet/Mudlet/pull/8671)
– Fix Windows PTB rebuild versioning for Squirrel [#8670](https://github.com/Mudlet/Mudlet/pull/8670)
– allow Windows PTB builds to be re-done on the same day [#8668](https://github.com/Mudlet/Mudlet/pull/8668)
– fix crashes in undo/redo tests [#8665](https://github.com/Mudlet/Mudlet/pull/8665)
– add proper Qt event propagation in all events [#8444](https://github.com/Mudlet/Mudlet/pull/8444)
– Bump actions/upload-artifact from 5 to 6 [#8657](https://github.com/Mudlet/Mudlet/pull/8657)
– Ignore lcf submodule in Dependabot, remove vcpkg [#8654](https://github.com/Mudlet/Mudlet/pull/8654)
– Bump ZedThree/clang-tidy-review from 0.22.2 to 0.22.3 [#8656](https://github.com/Mudlet/Mudlet/pull/8656)
– Update Lua code formatter to latest upstream branch [#8653](https://github.com/Mudlet/Mudlet/pull/8653)
– Bump 3rdparty/sentry-native from `67a9f8e` to `4f983bb` [#8637](https://github.com/Mudlet/Mudlet/pull/8637)
– Bump peter-evans/create-pull-request from 7 to 8 [#8638](https://github.com/Mudlet/Mudlet/pull/8638)
– Bump 3rdparty/lcf from `4aa2502` to `55aaf85` [#8639](https://github.com/Mudlet/Mudlet/pull/8639)
– Bump actions/cache from 4 to 5 [#8636](https://github.com/Mudlet/Mudlet/pull/8636)
– Update autocompletion data in Mudlet [#8634](https://github.com/Mudlet/Mudlet/pull/8634)
– Update text for translation in Crowdin [#8633](https://github.com/Mudlet/Mudlet/pull/8633)
– SENTRY_AUTH_TOKEN diagnostic checks environment variable [#8618](https://github.com/Mudlet/Mudlet/pull/8618)
– Bump 3rdparty/sentry-native from `c5416e6` to `67a9f8e` [#8617](https://github.com/Mudlet/Mudlet/pull/8617)
– Update text for translation in Crowdin [#8613](https://github.com/Mudlet/Mudlet/pull/8613)
– add workaround clang-tidy-review directory bug [#8597](https://github.com/Mudlet/Mudlet/pull/8597)
– update communi to qt6 [#8584](https://github.com/Mudlet/Mudlet/pull/8584)
– more fixes to clang-tidy workflow [#8596](https://github.com/Mudlet/Mudlet/pull/8596)
– fix clang-tidy workflow [#8595](https://github.com/Mudlet/Mudlet/pull/8595)
– update Qtkeychain submodule from master to main branch [#8579](https://github.com/Mudlet/Mudlet/pull/8579)
– Bump ZedThree/clang-tidy-review from 0.22.1 to 0.22.2 [#8594](https://github.com/Mudlet/Mudlet/pull/8594)
– ignore macOS keychain for telnet functional test [#8592](https://github.com/Mudlet/Mudlet/pull/8592)
– complete devcontainer setup [#8587](https://github.com/Mudlet/Mudlet/pull/8587)
– Update text for translation in Crowdin [#8590](https://github.com/Mudlet/Mudlet/pull/8590)
– remove item check in saveSelectedItem [#8583](https://github.com/Mudlet/Mudlet/pull/8583)
– Remove else-after-return anti-pattern [#8575](https://github.com/Mudlet/Mudlet/pull/8575)
– update devcontainer to work [#8321](https://github.com/Mudlet/Mudlet/pull/8321)
– Bump ZedThree/clang-tidy-review from 0.22.0 to 0.22.1 [#8564](https://github.com/Mudlet/Mudlet/pull/8564)
– Bump actions/checkout from 5 to 6 [#8565](https://github.com/Mudlet/Mudlet/pull/8565)
– Bump 3rdparty/edbee-lib from `165edc0` to `cf7f0ba` [#8563](https://github.com/Mudlet/Mudlet/pull/8563)
– Update text for translation in Crowdin [#8561](https://github.com/Mudlet/Mudlet/pull/8561)
– Update AI instructions with comments and git guidelines [#8531](https://github.com/Mudlet/Mudlet/pull/8531)
– Fix CMake CMP0167 warning for Boost [#8538](https://github.com/Mudlet/Mudlet/pull/8538)
– Add NINJA_STATUS to Windows build [#8539](https://github.com/Mudlet/Mudlet/pull/8539)
– update Noto Color Emoji font to Unicode 17.0 v2.051 [#8535](https://github.com/Mudlet/Mudlet/pull/8535)
– Add regex busted tests for PCRE library [#8537](https://github.com/Mudlet/Mudlet/pull/8537)
##### Other:
– Revert "Add per-room border color and thickness"
– Revert "Fix crash in bi-daily update check"
Public Test Build
Changes since last PTB (Mudlet-4.20.1-ptb-2026-05-25-34a3f727)
Fixed:
– make loadProfile case-insensitive for built-in and user profiles #9283
– echo ignoring newlines after deleteLine() and echo inserting symbol for carriage return #9218
– prevent crashes on removing multiple buttons/menus/toolbars in editor #9274
Full changelog since last release (Mudlet-4.20.1)
##### Added:
– Lua memory introspection functions [#9241](https://github.com/Mudlet/Mudlet/pull/9241)
– smart command suggestions in the tutorial for new players [#9188](https://github.com/Mudlet/Mudlet/pull/9188)
– lpeg parsing library [#9212](https://github.com/Mudlet/Mudlet/pull/9212)
– Pkuxkx as a predefined default MUD [#9161](https://github.com/Mudlet/Mudlet/pull/9161)
– Mudlet.ini option to control high DPI scale factor rounding policy [#9164](https://github.com/Mudlet/Mudlet/pull/9164)
– right-click option to hide default profiles in connection dialog [#9123](https://github.com/Mudlet/Mudlet/pull/9123)
– selectAll function with optional window support [#9166](https://github.com/Mudlet/Mudlet/pull/9166)
– telnets:// link support for secure TLS connections [#9153](https://github.com/Mudlet/Mudlet/pull/9153)
– getKeyCode function to return key code and any modifiers of a key-binding [#8435](https://github.com/Mudlet/Mudlet/pull/8435)
– `telnet://` URI scheme support for one-click MUD connections [#8601](https://github.com/Mudlet/Mudlet/pull/8601)
– separate border size control and player room marker improvements [#8975](https://github.com/Mudlet/Mudlet/pull/8975)
– OSC 8 context menu title support [#8910](https://github.com/Mudlet/Mudlet/pull/8910)
– DragonfireMUD and VoidMUD [#8783](https://github.com/Mudlet/Mudlet/pull/8783)
– 3rd party definition files for Lua [#8966](https://github.com/Mudlet/Mudlet/pull/8966)
– Starmourn and update IRE game profiles [#9076](https://github.com/Mudlet/Mudlet/pull/9076)
– embeddable TextEdit widget (Geyser.TextEdit) [#8986](https://github.com/Mudlet/Mudlet/pull/8986)
– MudMaster Chat Protocol (MMCP) [#7765](https://github.com/Mudlet/Mudlet/pull/7765)
– blinking/flashing text support [#8983](https://github.com/Mudlet/Mudlet/pull/8983)
– timeout for (Linux) Build xcb-util-cursor [#8978](https://github.com/Mudlet/Mudlet/pull/8978)
– timeout for macos (Install Dependencies) [#8977](https://github.com/Mudlet/Mudlet/pull/8977)
– data loss guard on constraint migration [#8850](https://github.com/Mudlet/Mudlet/pull/8850)
– GNOME Software-style navigation in Package Manager [#8846](https://github.com/Mudlet/Mudlet/pull/8846)
– room description matching to generic mapper [#8649](https://github.com/Mudlet/Mudlet/pull/8649)
– hidden rooms [#8443](https://github.com/Mudlet/Mudlet/pull/8443)
– Multi-file selection in import dialogs [#8796](https://github.com/Mudlet/Mudlet/pull/8796)
– Map label support in 3D mapper [#8793](https://github.com/Mudlet/Mudlet/pull/8793)
– multiple note tabs to the notepad [#8757](https://github.com/Mudlet/Mudlet/pull/8757)
– multiple map views support [#8743](https://github.com/Mudlet/Mudlet/pull/8743)
– muteMediaScript and muteMediaGame options to [getConfig](https://wiki.mudlet.org/w/Manual:Lua_Functions#getConfig)/[setConfig](https://wiki.mudlet.org/w/Manual:Lua_Functions#setConfig) [#8764](https://github.com/Mudlet/Mudlet/pull/8764)
– “Whole word” search option in the script editor [#8722](https://github.com/Mudlet/Mudlet/pull/8722)
– per-room border color and thickness [#8758](https://github.com/Mudlet/Mudlet/pull/8758)
– more safeguards against profile settings being lost [#8742](https://github.com/Mudlet/Mudlet/pull/8742)
– permExactMatchTrigger Lua API function [#8745](https://github.com/Mudlet/Mudlet/pull/8745)
– per-room border color and thickness
– NAWS protocol toggle setting [#8700](https://github.com/Mudlet/Mudlet/pull/8700)
– getBorderColor() Lua API function [#8688](https://github.com/Mudlet/Mudlet/pull/8688)
– MXP FRAME and DEST tag support for multi-window layouts [#8577](https://github.com/Mudlet/Mudlet/pull/8577)
– Optional static analysis during build [#8708](https://github.com/Mudlet/Mudlet/pull/8708)
– OSC 8 hyperlink visibility, selection, and compact syntax enhancements [#8677](https://github.com/Mudlet/Mudlet/pull/8677)
– Sentry license to about dialog [#8660](https://github.com/Mudlet/Mudlet/pull/8660)
– undo/redo for Mudlet editor [#8469](https://github.com/Mudlet/Mudlet/pull/8469)
– [getRoomsByPosition1](https://wiki.mudlet.org/w/Manual:Lua_Functions#getRoomsByPosition1)() function [#8619](https://github.com/Mudlet/Mudlet/pull/8619)
– functional GUI tests using QTest [#8572](https://github.com/Mudlet/Mudlet/pull/8572)
– Enable spellcheck in the composer window [#8447](https://github.com/Mudlet/Mudlet/pull/8447)
– setExitWeightFilter function to alter room/exits weights/locks [#8487](https://github.com/Mudlet/Mudlet/pull/8487)
##### Improved:
– remove dead messages from dlgTriggerEditor class [#9279](https://github.com/Mudlet/Mudlet/pull/9279)
– remove white styling from round rooms [#9252](https://github.com/Mudlet/Mudlet/pull/9252)
– improve memory safety by using smart pointers [#9239](https://github.com/Mudlet/Mudlet/pull/9239)
– show telnet protocol negotiation status in `Statistics` [#9226](https://github.com/Mudlet/Mudlet/pull/9226)
– read tooltips aloud without HTML tags in profile preferences [#9228](https://github.com/Mudlet/Mudlet/pull/9228)
– ARIA accessibility for OSC 8 hyperlinks in caret mode [#9206](https://github.com/Mudlet/Mudlet/pull/9206)
– inline map download dialog [#9204](https://github.com/Mudlet/Mudlet/pull/9204)
– 2D mapper rendering speed on single-Z-level areas [#9209](https://github.com/Mudlet/Mudlet/pull/9209)
– simplify long tooltips [#8416](https://github.com/Mudlet/Mudlet/pull/8416)
– Make spacing between widgets in the connection dialog more consistent [#9198](https://github.com/Mudlet/Mudlet/pull/9198)
– Auto-switch code editor theme with app appearance [#9167](https://github.com/Mudlet/Mudlet/pull/9167)
– handling of rooms having their hidden property changed [#8947](https://github.com/Mudlet/Mudlet/pull/8947)
– guard mudlet::self() in cTelnet destructor [#9020](https://github.com/Mudlet/Mudlet/pull/9020)
– use raw IP address if provided with one [#9066](https://github.com/Mudlet/Mudlet/pull/9066)
– Give players full control over Discord Rich Presence [#9116](https://github.com/Mudlet/Mudlet/pull/9116)
– show version scope in PTB release changelogs [#9148](https://github.com/Mudlet/Mudlet/pull/9148)
– hidden rooms – allow storage in map versions < 22 and other things [#8930](https://github.com/Mudlet/Mudlet/pull/8930)
– change label highlight from overlay to outline [#9132](https://github.com/Mudlet/Mudlet/pull/9132)
– internal code in regards to memory use [#9015](https://github.com/Mudlet/Mudlet/pull/9015)
– saving a key with no binding set shows an error [#9114](https://github.com/Mudlet/Mudlet/pull/9114)
– Add smooth pulsing effect for blinking text [#9104](https://github.com/Mudlet/Mudlet/pull/9104)
– remove AI/llamafile integration [#9108](https://github.com/Mudlet/Mudlet/pull/9108)
– error message when saving MMP-downloaded map [#9107](https://github.com/Mudlet/Mudlet/pull/9107)
– Automatic audio device switching support [#9026](https://github.com/Mudlet/Mudlet/pull/9026)
– only mark map as dirty if room hidden status is changed [#8946](https://github.com/Mudlet/Mudlet/pull/8946)
– Reduce memory usage for text decorations [#9052](https://github.com/Mudlet/Mudlet/pull/9052)
– Remove debug [print](https://wiki.mudlet.org/w/Manual:Lua_Functions#print) from deleteAll function [#9061](https://github.com/Mudlet/Mudlet/pull/9061)
– add defensive coding to internal code related to the TMediaPlayer [#9017](https://github.com/Mudlet/Mudlet/pull/9017)
– Script Editor search code quality and maintainability [#9028](https://github.com/Mudlet/Mudlet/pull/9028)
– Code quality in TBuffer.cpp [#9029](https://github.com/Mudlet/Mudlet/pull/9029)
– show feedback when manually checking for updates fails [#9004](https://github.com/Mudlet/Mudlet/pull/9004)
– add better error reporting to GMCP merge handler [#9018](https://github.com/Mudlet/Mudlet/pull/9018)
– adjust [getTime](https://wiki.mudlet.org/w/Manual:Lua_Functions#getTime)() table size hint to match 7 entries [#9019](https://github.com/Mudlet/Mudlet/pull/9019)
– Don't [echo](https://wiki.mudlet.org/w/Manual:Lua_Functions#echo) OSC 8 [send](https://wiki.mudlet.org/w/Manual:Lua_Functions#send): hyperlink commands by default [#8957](https://github.com/Mudlet/Mudlet/pull/8957)
– Detection of character-at-a-time mode in server connections [#8825](https://github.com/Mudlet/Mudlet/pull/8825)
– Add more context to media playback events [#8953](https://github.com/Mudlet/Mudlet/pull/8953)
– luarocks busted install instructions version flag [#8950](https://github.com/Mudlet/Mudlet/pull/8950)
– Add macOS clang-format path to AI instructions [#8926](https://github.com/Mudlet/Mudlet/pull/8926)
– Make MNES and NEW-ENVIRON mutually exclusive in UI [#8893](https://github.com/Mudlet/Mudlet/pull/8893)
– update Astaria banner [#8900](https://github.com/Mudlet/Mudlet/pull/8900)
– New Crowdin updates [#8253](https://github.com/Mudlet/Mudlet/pull/8253)
– macOS build instructions use absolute path [#8860](https://github.com/Mudlet/Mudlet/pull/8860)
– nixed rex_prce2 check in lua [#8848](https://github.com/Mudlet/Mudlet/pull/8848)
– Faster map rendering when zoomed in by skipping off-screen rooms [#8797](https://github.com/Mudlet/Mudlet/pull/8797)
– Allow nil to clear label callbacks [#8799](https://github.com/Mudlet/Mudlet/pull/8799)
– keep small map areas fully visible in viewport [#8766](https://github.com/Mudlet/Mudlet/pull/8766)
– Enable PCRE2 JIT compilation for triggers and aliases [#8762](https://github.com/Mudlet/Mudlet/pull/8762)
– open IRC with Lua functions not via UI anymore [#8123](https://github.com/Mudlet/Mudlet/pull/8123)
– Auto-link Lua function names in changelog [#8744](https://github.com/Mudlet/Mudlet/pull/8744)
– add error handling with clear error messages [#8736](https://github.com/Mudlet/Mudlet/pull/8736)
– error message visibility in module creation dialog [#8738](https://github.com/Mudlet/Mudlet/pull/8738)
– Memory management for console hyperlinks [#8725](https://github.com/Mudlet/Mudlet/pull/8725)
– AI assistant guidance for modern C++ loops [#8741](https://github.com/Mudlet/Mudlet/pull/8741)
– error messages for easier troubleshooting [#8721](https://github.com/Mudlet/Mudlet/pull/8721)
– highlight search terms in editor when using global search [#8687](https://github.com/Mudlet/Mudlet/pull/8687)
– Show a warning icon when map autosave fails [#8689](https://github.com/Mudlet/Mudlet/pull/8689)
– Simplify internal tree widget code [#8706](https://github.com/Mudlet/Mudlet/pull/8706)
– remove outdated comment for special exits MMP import [#8707](https://github.com/Mudlet/Mudlet/pull/8707)
– Enable OSC 8 hyperlink visibility by default [#8699](https://github.com/Mudlet/Mudlet/pull/8699)
– Fix compiler warnings about potential data loss in type conversions [#8715](https://github.com/Mudlet/Mudlet/pull/8715)
– Remove outdated FIXME comment from msleep call [#8695](https://github.com/Mudlet/Mudlet/pull/8695)
– Modernize color trigger dialog button handling [#8693](https://github.com/Mudlet/Mudlet/pull/8693)
– Reduce Windows install size by ~135MB [#8685](https://github.com/Mudlet/Mudlet/pull/8685)
– show error message when variable can't be moved in the trigger editor [#8683](https://github.com/Mudlet/Mudlet/pull/8683)
– Add error handling to unexpected scenarios [#8682](https://github.com/Mudlet/Mudlet/pull/8682)
– Auto-recover from stuck password masking during login [#8628](https://github.com/Mudlet/Mudlet/pull/8628)
– OSC 8 hyperlink styling with direct JSON parsing [#8641](https://github.com/Mudlet/Mudlet/pull/8641)
– use platform-native key names in UI text [#8591](https://github.com/Mudlet/Mudlet/pull/8591)
– add a crash reporter for Linux / macOS / Windows [#8540](https://github.com/Mudlet/Mudlet/pull/8540)
– Migrate C++ regex engine from PCRE to PCRE2 [#8533](https://github.com/Mudlet/Mudlet/pull/8533)
– Limit saved Lua table variables to 10,000 items [#8581](https://github.com/Mudlet/Mudlet/pull/8581)
– Remove directional navigation buttons from mapper [#8574](https://github.com/Mudlet/Mudlet/pull/8574)
– – two seconds is longer than you think [#8570](https://github.com/Mudlet/Mudlet/pull/8570)
– Cleanup system efficiency for triggers, aliases, and keys [#8559](https://github.com/Mudlet/Mudlet/pull/8559)
– small Style Cleanup in main.cpp [#8562](https://github.com/Mudlet/Mudlet/pull/8562)
– Remove accessible description from trigger pattern editor [#8546](https://github.com/Mudlet/Mudlet/pull/8546)
– remove navigation shortcuts widget from trigger editor [#8530](https://github.com/Mudlet/Mudlet/pull/8530)
##### Fixed:
– make [loadProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#loadProfile) case-insensitive for built-in and user profiles [#9283](https://github.com/Mudlet/Mudlet/pull/9283)
– [echo](https://wiki.mudlet.org/w/Manual:Lua_Functions#echo) ignoring newlines after [deleteLine](https://wiki.mudlet.org/w/Manual:Lua_Functions#deleteLine)() and [echo](https://wiki.mudlet.org/w/Manual:Lua_Functions#echo) inserting symbol for carriage return [#9218](https://github.com/Mudlet/Mudlet/pull/9218)
– prevent crashes on removing multiple buttons/menus/toolbars in editor [#9274](https://github.com/Mudlet/Mudlet/pull/9274)
– missing headers and string creation issues for 6.8.2 [#9251](https://github.com/Mudlet/Mudlet/pull/9251)
– heap-use-after-free in TriggerUnit::processDataStream [#9267](https://github.com/Mudlet/Mudlet/pull/9267)
– Regression of [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile) handling of labels [#9255](https://github.com/Mudlet/Mudlet/pull/9255)
– misc memory handling/safety fixes [#9240](https://github.com/Mudlet/Mudlet/pull/9240)
– set main connection to be low latency [#9250](https://github.com/Mudlet/Mudlet/pull/9250)
– connection status indicators causing tab padding issues on macOS [#9231](https://github.com/Mudlet/Mudlet/pull/9231)
– Clazy warnings part 8 – sanitize-inline-keyword [#9242](https://github.com/Mudlet/Mudlet/pull/9242)
– Text wrapping incorrectly after switching profile tabs [#9227](https://github.com/Mudlet/Mudlet/pull/9227)
– improve media player stability [#9237](https://github.com/Mudlet/Mudlet/pull/9237)
– stop scripted package installs from stealing window focus [#9236](https://github.com/Mudlet/Mudlet/pull/9236)
– link to CONTRIBUTING.md in ai-instructions.md [#9225](https://github.com/Mudlet/Mudlet/pull/9225)
– low-contrast input fields in dark mode on macOS [#9233](https://github.com/Mudlet/Mudlet/pull/9233)
– make FontManager track fonts per-profile [#9238](https://github.com/Mudlet/Mudlet/pull/9238)
– stop re-prompting to set Mudlet as the telnet:// link handler after declining [#9229](https://github.com/Mudlet/Mudlet/pull/9229)
– Clazy warnings part 7 – isempty-vs-count [#9235](https://github.com/Mudlet/Mudlet/pull/9235)
– Clazy warnings part 1A (more) – range-loop-detach [#9232](https://github.com/Mudlet/Mudlet/pull/9232)
– Clazy warnings part 6 – use-static-qregularexpression [#9211](https://github.com/Mudlet/Mudlet/pull/9211)
– Clazy warnings part 5 – fully-qualified-moc-types [#9210](https://github.com/Mudlet/Mudlet/pull/9210)
– prevent use-after-free in TRoom::setArea dirty-area tracking [#9217](https://github.com/Mudlet/Mudlet/pull/9217)
– Clazy warnings part 4 – range-loop-reference [#9207](https://github.com/Mudlet/Mudlet/pull/9207)
– correct use of forward declared type items in headers [#9208](https://github.com/Mudlet/Mudlet/pull/9208)
– Clazy warnings part 3 – qstring-arg [#9197](https://github.com/Mudlet/Mudlet/pull/9197)
– unify and translate some Map Errors [#9189](https://github.com/Mudlet/Mudlet/pull/9189)
– avoid bogus "new Toolbar" and "new Menu" items creation on profile load [#9194](https://github.com/Mudlet/Mudlet/pull/9194)
– Clazy warnings part 2 – detaching-temporary [#9196](https://github.com/Mudlet/Mudlet/pull/9196)
– Clazy warnings part 1 – range-loop-detach [#9195](https://github.com/Mudlet/Mudlet/pull/9195)
– strip whitespace formatting marks when copying trigger patterns [#9149](https://github.com/Mudlet/Mudlet/pull/9149)
– several [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() bugs [#9083](https://github.com/Mudlet/Mudlet/pull/9083)
– prevent update download from being canceled when checking for updates [#9185](https://github.com/Mudlet/Mudlet/pull/9185)
– changelog rendering in PTB update dialog [#9182](https://github.com/Mudlet/Mudlet/pull/9182)
– package edit warning incorrectly showing for module items [#9168](https://github.com/Mudlet/Mudlet/pull/9168)
– Cancel on trigger highlight color picker no longer changes the color [#9013](https://github.com/Mudlet/Mudlet/pull/9013)
– Respect explicit theme choice on Linux [#8897](https://github.com/Mudlet/Mudlet/pull/8897)
– memory leaks in map info contributors, deleting labels [#9141](https://github.com/Mudlet/Mudlet/pull/9141)
– increase TelnetTextDisplayedTest timeouts for CI [#9184](https://github.com/Mudlet/Mudlet/pull/9184)
– review fixes for font handling rework [#9135](https://github.com/Mudlet/Mudlet/pull/9135)
– Better handling of package-supplied fonts during unloading/reloading of packages [#9115](https://github.com/Mudlet/Mudlet/pull/9115)
– [selectCaptureGroup](https://wiki.mudlet.org/w/Manual:Lua_Functions#selectCaptureGroup)() selecting wrong capture [#9133](https://github.com/Mudlet/Mudlet/pull/9133)
– resolve CodeQL stack-address-escape warnings [#9080](https://github.com/Mudlet/Mudlet/pull/9080)
– [insertText](https://wiki.mudlet.org/w/Manual:Lua_Functions#insertText) newline regression [#9022](https://github.com/Mudlet/Mudlet/pull/9022)
– updater to work with github releases [#9125](https://github.com/Mudlet/Mudlet/pull/9125)
– memory leaks in sound player, dialogs [#9142](https://github.com/Mudlet/Mudlet/pull/9142)
– crash when importing non-Mudlet zip with XML containing element [#9146](https://github.com/Mudlet/Mudlet/pull/9146)
– handle over/underflows in (int) TLuaInterpreter::getVerifiedInt(…) [#8924](https://github.com/Mudlet/Mudlet/pull/8924)
– crash when [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() is called while downloads are in-progress [#9138](https://github.com/Mudlet/Mudlet/pull/9138)
– scaling map image labels showing text instead of image [#9121](https://github.com/Mudlet/Mudlet/pull/9121)
– label move in 2D map [#9131](https://github.com/Mudlet/Mudlet/pull/9131)
– correct icon names for two recently added predefined MUDs [#9129](https://github.com/Mudlet/Mudlet/pull/9129)
– handle CMake aliasing problems when PCRE2::8BIT is itself an alias [#9128](https://github.com/Mudlet/Mudlet/pull/9128)
– crash when user cancels map download [#9085](https://github.com/Mudlet/Mudlet/pull/9085)
– small memory leaks in package/object management [#9111](https://github.com/Mudlet/Mudlet/pull/9111)
– small memory leaks when closing/reopening profiles [#9110](https://github.com/Mudlet/Mudlet/pull/9110)
– small leak in [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() for the Lua state, label, and scrollbox [#9109](https://github.com/Mudlet/Mudlet/pull/9109)
– stale characters during horizontal scrolling with wide fonts [#9099](https://github.com/Mudlet/Mudlet/pull/9099)
– Ctrl+End in caret mode hides the cursor [#9101](https://github.com/Mudlet/Mudlet/pull/9101)
– Toolbar visibility not persisted when toggled via right-click menu [#9053](https://github.com/Mudlet/Mudlet/pull/9053)
– typo in mPlayerRoomColorGradentStops member name [#9112](https://github.com/Mudlet/Mudlet/pull/9112)
– OSC 8 hyperlinks strip config/preset only when features are advertised [#9106](https://github.com/Mudlet/Mudlet/pull/9106)
– Miniconsole text cutoff after switching profiles [#8853](https://github.com/Mudlet/Mudlet/pull/8853)
– Refactor and fix logic handling chat name change from GUI preferences dialog [#9025](https://github.com/Mudlet/Mudlet/pull/9025)
– use correct variable for Discord starttime string parsing [#9100](https://github.com/Mudlet/Mudlet/pull/9100)
– Copy Map to inactive profiles losing player room position [#9091](https://github.com/Mudlet/Mudlet/pull/9091)
– use right format type for errors in playSoundFileAsOrderedArguments [#9086](https://github.com/Mudlet/Mudlet/pull/9086)
– Tabs not respecting dark mode [#8996](https://github.com/Mudlet/Mudlet/pull/8996) [#8999](https://github.com/Mudlet/Mudlet/pull/8999)
– map info "Short" always re-added on profile load [#8963](https://github.com/Mudlet/Mudlet/pull/8963)
– Module Manager shortcut uses wrong key sequence when menu bar hidden [#9097](https://github.com/Mudlet/Mudlet/pull/9097)
– setSaveCommandHistory inverting the boolean when a command line name is given [#9098](https://github.com/Mudlet/Mudlet/pull/9098)
– Fix QFutureWatcher memory leaks across the codebase [#9095](https://github.com/Mudlet/Mudlet/pull/9095)
– Color swatch buttons washed out on macOS and not showing at all in Light mode [#8970](https://github.com/Mudlet/Mudlet/pull/8970)
– Text with < characters disappearing on games with MXP enabled [#8918](https://github.com/Mudlet/Mudlet/pull/8918)
– [saveWindowLayout](https://wiki.mudlet.org/w/Manual:Lua_Functions#saveWindowLayout)/[loadWindowLayout](https://wiki.mudlet.org/w/Manual:Lua_Functions#loadWindowLayout) now retains user window positions [#9056](https://github.com/Mudlet/Mudlet/pull/9056)
– memory leak when deleting areas in a map [#9092](https://github.com/Mudlet/Mudlet/pull/9092)
– clickable links losing their URL query parameters [#9073](https://github.com/Mudlet/Mudlet/pull/9073)
– Garbled error messages when passing wrong argument types to popup functions [#9090](https://github.com/Mudlet/Mudlet/pull/9090)
– map exits corrupted when loading maps with invalid room IDs [#9089](https://github.com/Mudlet/Mudlet/pull/9089)
– Correct call() return value so timer error handling reads correctly [#9088](https://github.com/Mudlet/Mudlet/pull/9088)
– Show SSL error messages when secure connection fails [#9055](https://github.com/Mudlet/Mudlet/pull/9055)
– ansi_color table loading order [#9084](https://github.com/Mudlet/Mudlet/pull/9084)
– crash when keychain operation times out [#9072](https://github.com/Mudlet/Mudlet/pull/9072)
– Updater crash on Windows when download URL is unavailable [#9067](https://github.com/Mudlet/Mudlet/pull/9067)
– Changing one profile's password no longer affects others [#9049](https://github.com/Mudlet/Mudlet/pull/9049)
– custom map events not firing when placed in submenus [#8998](https://github.com/Mudlet/Mudlet/pull/8998)
– [timeframe](https://wiki.mudlet.org/w/Manual:Lua_Functions#timeframe) failing if third arg is nil [#8964](https://github.com/Mudlet/Mudlet/pull/8964)
– PasswordMigrationTest to build [#9032](https://github.com/Mudlet/Mudlet/pull/9032)
– Separate user and MXP borders so [reconnect](https://wiki.mudlet.org/w/Manual:Lua_Functions#reconnect) doesn't reset user borders [#9016](https://github.com/Mudlet/Mudlet/pull/9016)
– Restore password loading from portable file in connection dialog [#8993](https://github.com/Mudlet/Mudlet/pull/8993)
– Clear package list before repopulating in Package Exporter [#8892](https://github.com/Mudlet/Mudlet/pull/8892)
– Input bar height changes unexpectedly when switching profiles [#8958](https://github.com/Mudlet/Mudlet/pull/8958)
– Room symbols not rescaling when map is resized [#8974](https://github.com/Mudlet/Mudlet/pull/8974)
– Prevent crash when closing detached windows [#8934](https://github.com/Mudlet/Mudlet/pull/8934)
– Restore sound playback on macOS [#8949](https://github.com/Mudlet/Mudlet/pull/8949)
– Update ssh IP for Geyser upload workflow [#8995](https://github.com/Mudlet/Mudlet/pull/8995)
– Correct TestMask to exclude internal flags [#8954](https://github.com/Mudlet/Mudlet/pull/8954)
– mudlet does not close after running lua tests [#8979](https://github.com/Mudlet/Mudlet/pull/8979)
– Clang-format hash in .git-blame-ignore-revs [#8882](https://github.com/Mudlet/Mudlet/pull/8882)
– [#6964] [spairs](https://wiki.mudlet.org/w/Manual:Lua_Functions#spairs) chokes on mixed keys [#8868](https://github.com/Mudlet/Mudlet/pull/8868)
– align MSDP negotiation to specs [#8905](https://github.com/Mudlet/Mudlet/pull/8905)
– Crash when removing default MUD profiles from welcome window [#8916](https://github.com/Mudlet/Mudlet/pull/8916)
– MXP not working on some MUDs [#8915](https://github.com/Mudlet/Mudlet/pull/8915)
– clean up comments and related translation things [#8914](https://github.com/Mudlet/Mudlet/pull/8914)
– Command history not working when password masking is disabled [#8902](https://github.com/Mudlet/Mudlet/pull/8902)
– Revert default map format to 20 in PTB / `development` [#8891](https://github.com/Mudlet/Mudlet/pull/8891)
– Make main console default to opaque text background, allow user to customize [#8887](https://github.com/Mudlet/Mudlet/pull/8887)
– Delay MXP TEMP_SECURE mode reset to allow tag handling [#8889](https://github.com/Mudlet/Mudlet/pull/8889)
– PTB crash on some Linux systems due to libxcb-cursor bug [#8866](https://github.com/Mudlet/Mudlet/pull/8866)
– Player shown on far side of map when mapper window is wide [#8869](https://github.com/Mudlet/Mudlet/pull/8869)
– db:_coerce_sheet backwards compatibility [#8861](https://github.com/Mudlet/Mudlet/pull/8861)
– Map labels appearing bold after profile reload [#8865](https://github.com/Mudlet/Mudlet/pull/8865)
– macOS color buttons not showing colors in settings [#8847](https://github.com/Mudlet/Mudlet/pull/8847)
– Make update dialog release notes keyboard accessible [#8849](https://github.com/Mudlet/Mudlet/pull/8849)
– Restore desktop shortcut creation on Windows install [#8841](https://github.com/Mudlet/Mudlet/pull/8841)
– Crash when drawing map labels at small zoom levels [#8836](https://github.com/Mudlet/Mudlet/pull/8836)
– Disable AddressSanitizer for release builds [#8826](https://github.com/Mudlet/Mudlet/pull/8826)
– Remember scroll position and cursor position in script editor [#8410](https://github.com/Mudlet/Mudlet/pull/8410)
– Use custom dark theme on all Windows versions [#8819](https://github.com/Mudlet/Mudlet/pull/8819)
– Map area centering displaying areas off-screen [#8814](https://github.com/Mudlet/Mudlet/pull/8814)
– Crash when nested alias/trigger processing runs cleanup prematurely [#8818](https://github.com/Mudlet/Mudlet/pull/8818)
– table.update no longer errors when replacing non-table with table [#8694](https://github.com/Mudlet/Mudlet/pull/8694) [#8751](https://github.com/Mudlet/Mudlet/pull/8751)
– Editor actions not working on initial open [#7482](https://github.com/Mudlet/Mudlet/pull/7482) [#8753](https://github.com/Mudlet/Mudlet/pull/8753)
– Revert map rendering optimization causing issues [#8809](https://github.com/Mudlet/Mudlet/pull/8809)
– Medievia encoding showing error in preferences dropdown [#8811](https://github.com/Mudlet/Mudlet/pull/8811)
– MXP FRAME close tags appearing as literal text [#8808](https://github.com/Mudlet/Mudlet/pull/8808)
– Timer groups [display](https://wiki.mudlet.org/w/Manual:Lua_Functions#display) correct icons when drag-dropped [#8802](https://github.com/Mudlet/Mudlet/pull/8802)
– Map labels appear crisp at all zoom levels [#8795](https://github.com/Mudlet/Mudlet/pull/8795)
– honor 'disable automatic updates' setting when installer is already downloaded [#8409](https://github.com/Mudlet/Mudlet/pull/8409)
– OSC sequences with BEL terminator no longer swallow output [#3912](https://github.com/Mudlet/Mudlet/pull/3912) [#8750](https://github.com/Mudlet/Mudlet/pull/8750)
– Windows crash when saving profile config [#8427](https://github.com/Mudlet/Mudlet/pull/8427) [#8428](https://github.com/Mudlet/Mudlet/pull/8428)
– Big5 and East Asian text encodings not working on Linux [#8787](https://github.com/Mudlet/Mudlet/pull/8787)
– compile in latest development due to map update changes [#8800](https://github.com/Mudlet/Mudlet/pull/8800)
– Improve error handling in [setLabelStyleSheet](https://wiki.mudlet.org/w/Manual:Lua_Functions#setLabelStyleSheet)() [#8446](https://github.com/Mudlet/Mudlet/pull/8446)
– Add outline to area exit arrows for visibility on matching backgrounds [#8794](https://github.com/Mudlet/Mudlet/pull/8794)
– mapper not reopenable after closing via X button [#8401](https://github.com/Mudlet/Mudlet/pull/8401)
– Disable 'Activate' button in Variables view [#8441](https://github.com/Mudlet/Mudlet/pull/8441)
– Prevent crash in MXP watchdog callback [#8785](https://github.com/Mudlet/Mudlet/pull/8785)
– Memory leaks in ScriptUnit and ActionUnit (8,856 bytes) when opening/closing profile [#8781](https://github.com/Mudlet/Mudlet/pull/8781)
– Potential crash during automatic update download [#8776](https://github.com/Mudlet/Mudlet/pull/8776)
– Include full version in Sentry crash reports for PTB builds [#8779](https://github.com/Mudlet/Mudlet/pull/8779)
– Improve build documentation clarity for terminal execution [#8774](https://github.com/Mudlet/Mudlet/pull/8774)
– Regex triggers now respect 'keep' background color setting [#8402](https://github.com/Mudlet/Mudlet/pull/8402)
– Remove unnecessary allocation in filter trigger matching [#8763](https://github.com/Mudlet/Mudlet/pull/8763)
– default new profiles to UTF-8 encoding instead of ASCII [#8759](https://github.com/Mudlet/Mudlet/pull/8759)
– Accessibility crash with out-of-range offset [#8310](https://github.com/Mudlet/Mudlet/pull/8310) [#8752](https://github.com/Mudlet/Mudlet/pull/8752)
– named captures indexed incorrectly in multimatches with special line types [#8748](https://github.com/Mudlet/Mudlet/pull/8748)
– Update trigger icons immediately when dragging in editor [#8746](https://github.com/Mudlet/Mudlet/pull/8746)
– connections to MMapper [#8730](https://github.com/Mudlet/Mudlet/pull/8730)
– prevent module autosave from overwriting failed-to-load modules [#8696](https://github.com/Mudlet/Mudlet/pull/8696)
– GMCP media finish parameter not working [#8740](https://github.com/Mudlet/Mudlet/pull/8740)
– Modules not loading when reopening a profile [#8739](https://github.com/Mudlet/Mudlet/pull/8739)
– Package Exporter unable to export packages [#8629](https://github.com/Mudlet/Mudlet/pull/8629) [#8630](https://github.com/Mudlet/Mudlet/pull/8630)
– Memory leaks in core components [#8716](https://github.com/Mudlet/Mudlet/pull/8716)
– Windows installer failing after update [#8710](https://github.com/Mudlet/Mudlet/pull/8710)
– Down arrow saves typed text before clearing [#8705](https://github.com/Mudlet/Mudlet/pull/8705)
– Restore Windows application icon [#8703](https://github.com/Mudlet/Mudlet/pull/8703)
– set enableMXP when MXP is autodetected [#8701](https://github.com/Mudlet/Mudlet/pull/8701)
– 8 CodeQL 'comparison result is always the same' warnings [#8691](https://github.com/Mudlet/Mudlet/pull/8691)
– CodeQL inconsistent nullness check errors in temp trigger functions [#8690](https://github.com/Mudlet/Mudlet/pull/8690)
– restrict MXP auto-detection to ESC sequences only [#8692](https://github.com/Mudlet/Mudlet/pull/8692)
– Windows Start Menu shortcut missing after install [#8686](https://github.com/Mudlet/Mudlet/pull/8686)
– Use fixed delay instead of waiting for crashpad [#8679](https://github.com/Mudlet/Mudlet/pull/8679)
– Windows updates failing due to locked folder [#8678](https://github.com/Mudlet/Mudlet/pull/8678)
– Wait for crashpad_handler.exe to exit before running installer [#8676](https://github.com/Mudlet/Mudlet/pull/8676)
– [copy](https://wiki.mudlet.org/w/Manual:Lua_Functions#copy) downloaded installer instead of moving file on Windows [#8675](https://github.com/Mudlet/Mudlet/pull/8675)
– Create shortcuts when handling Squirrel install events [#8672](https://github.com/Mudlet/Mudlet/pull/8672)
– Wait for Mudlet to exit before running installer on Windows [#8673](https://github.com/Mudlet/Mudlet/pull/8673)
– Handle Squirrel installer startup commands on Windows to prevent Mudlet getting closed [#8666](https://github.com/Mudlet/Mudlet/pull/8666)
– Prevent crashpad_handler from getting a Windows Start Menu entry [#8659](https://github.com/Mudlet/Mudlet/pull/8659)
– Windows updater file lock issue in dblsqd (prevented updates) [#8661](https://github.com/Mudlet/Mudlet/pull/8661)
– Windows updater launch using batch file to avoid quoting issues when updating PTBs [#8663](https://github.com/Mudlet/Mudlet/pull/8663)
– Mudlet freeze when receiving large amounts of data [#8644](https://github.com/Mudlet/Mudlet/pull/8644)
– Container overflow crash when processing text [#8647](https://github.com/Mudlet/Mudlet/pull/8647)
– Build failures after dependency updates [#8645](https://github.com/Mudlet/Mudlet/pull/8645)
– package manager loses title on uninstall [#8625](https://github.com/Mudlet/Mudlet/pull/8625)
– Windows updater deleting itself during update [#8622](https://github.com/Mudlet/Mudlet/pull/8622)
– crash in bi-daily update check [#8620](https://github.com/Mudlet/Mudlet/pull/8620)
– crash in bi-daily update check
– clicking on stacked rooms selects all of them [#8616](https://github.com/Mudlet/Mudlet/pull/8616)
– use-after-free crash when calling [registerMapInfo](https://wiki.mudlet.org/w/Manual:Lua_Functions#registerMapInfo) [#8609](https://github.com/Mudlet/Mudlet/pull/8609)
– Prevent crash during Mudlet shutdown when closing profiles [#8606](https://github.com/Mudlet/Mudlet/pull/8606)
– Forward secrets.SENTRY_DSN to CMake on Windows [#8615](https://github.com/Mudlet/Mudlet/pull/8615)
– Static fonts configured in 4.19.1 continue working after upgrade [#8545](https://github.com/Mudlet/Mudlet/pull/8545)
– convert raw Qt pointers to QPointer to prevent use-after-free [#8610](https://github.com/Mudlet/Mudlet/pull/8610)
– maintain backwards compatibility when loading rex_pcre2 [#8599](https://github.com/Mudlet/Mudlet/pull/8599)
– missing encodings in dropdown for Qt6 [#8605](https://github.com/Mudlet/Mudlet/pull/8605)
– Medievia encoding error in preferences dropdown [#8608](https://github.com/Mudlet/Mudlet/pull/8608)
– load PCRE2 in LuaGlobal [#8598](https://github.com/Mudlet/Mudlet/pull/8598)
– fix inconsistent nullness checks [#8586](https://github.com/Mudlet/Mudlet/pull/8586)
– Test builds now use keychain for password storage [#8589](https://github.com/Mudlet/Mudlet/pull/8589)
– Heap-use-after-free crash when closing profiles with active triggers [#8567](https://github.com/Mudlet/Mudlet/pull/8567)
– heap-use-after-free when cleanup runs during alias/trigger/key processing [#8571](https://github.com/Mudlet/Mudlet/pull/8571)
– potential issue in area image export [#8585](https://github.com/Mudlet/Mudlet/pull/8585)
– Restore Qt5 Core5Compat for third-party dependencies [#8578](https://github.com/Mudlet/Mudlet/pull/8578)
– Reduce redundant UTF-8 conversions in trigger processing [#8560](https://github.com/Mudlet/Mudlet/pull/8560)
– Improve performance of hyperlink style parsing [#8558](https://github.com/Mudlet/Mudlet/pull/8558)
– Remove duplicate context menu on AdjustableContainer title bar [#8569](https://github.com/Mudlet/Mudlet/pull/8569)
– Copy from console now works when command line has focus [#8551](https://github.com/Mudlet/Mudlet/pull/8551)
– Remove deprecated Qt5 Core5Compat dependency [#8550](https://github.com/Mudlet/Mudlet/pull/8550)
– crash when rapidly reloading plugins due to thread-safety issue in XML export [#8542](https://github.com/Mudlet/Mudlet/pull/8542)
– switch to FFMPEG audio backend on Windows to allow playback of .ogg and .opus audio files [#8329](https://github.com/Mudlet/Mudlet/pull/8329)
– Debug console crash when host is deleted [#8549](https://github.com/Mudlet/Mudlet/pull/8549)
– Special exit text unreadable when editing [#8543](https://github.com/Mudlet/Mudlet/pull/8543)
– Comprehensive package installation crash prevention [#8541](https://github.com/Mudlet/Mudlet/pull/8541)
– Auto-activate new triggers/aliases/scripts/keys on save [#8529](https://github.com/Mudlet/Mudlet/pull/8529)
– Unicode characters [display](https://wiki.mudlet.org/w/Manual:Lua_Functions#display) correctly in unhandled MXP tags [#8532](https://github.com/Mudlet/Mudlet/pull/8532)
##### Infrastructure:
– Bump 3rdparty/qtkeychain from `e3b2e83` to `7718d0a` [#9275](https://github.com/Mudlet/Mudlet/pull/9275)
– rename local variables to reflect their type in `TAction` class [#9271](https://github.com/Mudlet/Mudlet/pull/9271)
– align CLAUDE.md et all with contributing guidelines [#9265](https://github.com/Mudlet/Mudlet/pull/9265)
– disable Sentry on PTB builds to test update-stall hypothesis [#9263](https://github.com/Mudlet/Mudlet/pull/9263)
– Bump 3rdparty/sentry-native from `87f25f2` to `c0e5f07` [#9260](https://github.com/Mudlet/Mudlet/pull/9260)
– Bump 3rdparty/qtkeychain from `708d099` to `e3b2e83` [#9259](https://github.com/Mudlet/Mudlet/pull/9259)
– Update bundled mpkg.mpackage to latest upstream [#9253](https://github.com/Mudlet/Mudlet/pull/9253)
– Bump 3rdparty/qtkeychain from `53a8e6a` to `708d099` [#9249](https://github.com/Mudlet/Mudlet/pull/9249)
– Swap out QtConcurrent module header for sub-module ones [#9246](https://github.com/Mudlet/Mudlet/pull/9246)
– update CONTRIBUTING.md with AI coding guidelines [#9224](https://github.com/Mudlet/Mudlet/pull/9224)
– Bump lukka/get-cmake from 4.3.1 to 4.3.2 [#9221](https://github.com/Mudlet/Mudlet/pull/9221)
– Bump leafo/gh-actions-lua from 12 to 13 [#9222](https://github.com/Mudlet/Mudlet/pull/9222)
– Bump 3rdparty/sentry-native from `848fd4c` to `87f25f2` [#9220](https://github.com/Mudlet/Mudlet/pull/9220)
– apply clang-format style to tests too [#9201](https://github.com/Mudlet/Mudlet/pull/9201)
– Bump 3rdparty/sentry-native from `93c4e32` to `848fd4c` [#9202](https://github.com/Mudlet/Mudlet/pull/9202)
– Bump carlosperate/download-file-action from 2.0.2 to 2.0.3 [#9203](https://github.com/Mudlet/Mudlet/pull/9203)
– fix flaky TelnetTextDisplayedTest in CI [#9193](https://github.com/Mudlet/Mudlet/pull/9193)
– fix partial PTB releases not triggering when push build [exists](https://wiki.mudlet.org/w/Manual:Lua_Functions#exists) at same SHA [#9192](https://github.com/Mudlet/Mudlet/pull/9192)
– fix Windows SHA256 missing from PTB releases [#9191](https://github.com/Mudlet/Mudlet/pull/9191)
– allow partial PTB releases when not all platforms succeed [#9163](https://github.com/Mudlet/Mudlet/pull/9163)
– migrate undo/redo tests to QTest framework [#8867](https://github.com/Mudlet/Mudlet/pull/8867)
– stop deleting and recreating GitHub releases on every build [#9176](https://github.com/Mudlet/Mudlet/pull/9176)
– skip duplicate PTB builds when no new commits exist [#9175](https://github.com/Mudlet/Mudlet/pull/9175)
– sync edbee-lib submodule to fork master [#9183](https://github.com/Mudlet/Mudlet/pull/9183)
– Bump actions/download-artifact from 4 to 8 [#9179](https://github.com/Mudlet/Mudlet/pull/9179)
– Bump actions/github-script from 7 to 9 [#9181](https://github.com/Mudlet/Mudlet/pull/9181)
– Bump 3rdparty/sentry-native from `6ebd29b` to `93c4e32` [#9178](https://github.com/Mudlet/Mudlet/pull/9178)
– fix Windows and macOS nightly build failures [#9173](https://github.com/Mudlet/Mudlet/pull/9173)
– add missing statuses:write permission to DangerJS workflow [#9172](https://github.com/Mudlet/Mudlet/pull/9172)
– fix DangerJS workflow vulnerability to malicious PRs [#9143](https://github.com/Mudlet/Mudlet/pull/9143)
– add non-compileable files to CMake project file [#8780](https://github.com/Mudlet/Mudlet/pull/8780)
– update sentry-native to 0.13.5 [#9158](https://github.com/Mudlet/Mudlet/pull/9158)
– update edbee-lib submodule & use system oniguruma if present [#9156](https://github.com/Mudlet/Mudlet/pull/9156)
– fix PTB registration by reverting installer filename convention [#9155](https://github.com/Mudlet/Mudlet/pull/9155)
– show changelogs both from last release and last PTB [#9151](https://github.com/Mudlet/Mudlet/pull/9151)
– fix CI bugs in PTB registration, macOS updater linking, and portable ZIP upload [#9154](https://github.com/Mudlet/Mudlet/pull/9154)
– fix Windows release asset upload and appcast SCP paths [#9152](https://github.com/Mudlet/Mudlet/pull/9152)
– fix Windows PTB registration failing after installer rename [#9150](https://github.com/Mudlet/Mudlet/pull/9150)
– release workflow failing due to PR build triggers and checkout wiping assets [#9145](https://github.com/Mudlet/Mudlet/pull/9145)
– add CI workflow to create GitHub Releases for updater [#9127](https://github.com/Mudlet/Mudlet/pull/9127)
– Update text for translation in Crowdin [#9136](https://github.com/Mudlet/Mudlet/pull/9136)
– Bump lukka/get-cmake from 4.3.0 to 4.3.1 [#9139](https://github.com/Mudlet/Mudlet/pull/9139)
– Add comprehensive variable editor tests [#9103](https://github.com/Mudlet/Mudlet/pull/9103)
– add comprehensive [resetProfile](https://wiki.mudlet.org/w/Manual:Lua_Functions#resetProfile)() test suite [#9082](https://github.com/Mudlet/Mudlet/pull/9082)
– add cross-reference comments to duplicate build workflows [#9069](https://github.com/Mudlet/Mudlet/pull/9069)
– remove disabled clang-tidy workflows [#9113](https://github.com/Mudlet/Mudlet/pull/9113)
– Bump 3rdparty/qtkeychain from `6e90eda` to `53a8e6a` [#9126](https://github.com/Mudlet/Mudlet/pull/9126)
– Update text for translation in Crowdin [#9124](https://github.com/Mudlet/Mudlet/pull/9124)
– speed up OSC tests with data-driven approach [#9120](https://github.com/Mudlet/Mudlet/pull/9120)
– Add Copilot skill for opening pull requests [#9105](https://github.com/Mudlet/Mudlet/pull/9105)
– Bump 3rdparty/qtkeychain from `844beb4` to `6e90eda` [#8973](https://github.com/Mudlet/Mudlet/pull/8973)
– Update text for translation in Crowdin [#9077](https://github.com/Mudlet/Mudlet/pull/9077)
– disable CodeQL poorly-documented-function query [#9079](https://github.com/Mudlet/Mudlet/pull/9079)
– Bump webfactory/ssh-agent from 0.9.1 to 0.10.0 [#9047](https://github.com/Mudlet/Mudlet/pull/9047)
– restore xcb-util-cursor resiliency changes [#9074](https://github.com/Mudlet/Mudlet/pull/9074)
– Bump lukka/get-cmake from 4.2.3 to 4.3.0 [#9087](https://github.com/Mudlet/Mudlet/pull/9087)
– Fix macOS CI: use AppleClang instead of Homebrew LLVM [#9078](https://github.com/Mudlet/Mudlet/pull/9078)
– remove leftover qgridlayout ordering script [#9075](https://github.com/Mudlet/Mudlet/pull/9075)
– enable set -e in Linux CI deploy script to catch failures [#9059](https://github.com/Mudlet/Mudlet/pull/9059)
– install `libspeechd-dev` for Linux CI to fix AppImage creation [#9058](https://github.com/Mudlet/Mudlet/pull/9058)
– Migrate to clang64 msys2 environment for Windows builds [#9064](https://github.com/Mudlet/Mudlet/pull/9064)
– remove ccache mutex locks [#9043](https://github.com/Mudlet/Mudlet/pull/9043)
– add retries to brew install to handle hangs [#9045](https://github.com/Mudlet/Mudlet/pull/9045)
– remove CodeQL CI's concurrency [#9044](https://github.com/Mudlet/Mudlet/pull/9044)
– Fix windows builds in `development` [#9042](https://github.com/Mudlet/Mudlet/pull/9042)
– Bump development version to 4.20.1 [#9050](https://github.com/Mudlet/Mudlet/pull/9050)
– Update text for translation in Crowdin [#9040](https://github.com/Mudlet/Mudlet/pull/9040)
– remove qgridlayout ordering workflow [#9038](https://github.com/Mudlet/Mudlet/pull/9038)
– Update autocompletion data in Mudlet [#9041](https://github.com/Mudlet/Mudlet/pull/9041)
– update target path for file upload in geyser-docs workflow [#9030](https://github.com/Mudlet/Mudlet/pull/9030)
– Change SCP target host for file uploads [#9003](https://github.com/Mudlet/Mudlet/pull/9003)
– Dedicated workflow for prs [#9033](https://github.com/Mudlet/Mudlet/pull/9033)
– Remove unnecessary null checks after new [#9014](https://github.com/Mudlet/Mudlet/pull/9014)
– speed up compilation of Mudlet by 25% [#9021](https://github.com/Mudlet/Mudlet/pull/9021)
– Enable TTS in macOS builds [#8921](https://github.com/Mudlet/Mudlet/pull/8921)
– make xcb-util-cursor download more resilient [#9012](https://github.com/Mudlet/Mudlet/pull/9012)
– re-introduce path stripping in geyser-docs.yaml [#9023](https://github.com/Mudlet/Mudlet/pull/9023)
– ccache key should be per pr/branch [#9010](https://github.com/Mudlet/Mudlet/pull/9010)
– use release-signing for releases, test-signing for PTBs [#9007](https://github.com/Mudlet/Mudlet/pull/9007)
– always run build ci in core branches [#9008](https://github.com/Mudlet/Mudlet/pull/9008)
– Update text for translation in Crowdin [#9009](https://github.com/Mudlet/Mudlet/pull/9009)
– increase SignPath signing timeout to 1 hour [#9002](https://github.com/Mudlet/Mudlet/pull/9002)
– Refactor geyser doc upload workflow [#9001](https://github.com/Mudlet/Mudlet/pull/9001)
– run undo/redo tests in test mode [#8992](https://github.com/Mudlet/Mudlet/pull/8992)
– fix unintended ccache collisions [#8991](https://github.com/Mudlet/Mudlet/pull/8991)
– Bump actions/upload-artifact from 6 to 7 [#8989](https://github.com/Mudlet/Mudlet/pull/8989)
– CI concurrency logic [#8990](https://github.com/Mudlet/Mudlet/pull/8990)
– Bump ZedThree/clang-tidy-review from 0.23.0 to 0.23.1 [#8988](https://github.com/Mudlet/Mudlet/pull/8988)
– Update text for translation in Crowdin [#8940](https://github.com/Mudlet/Mudlet/pull/8940)
– [ImgBot] Optimize images [#8925](https://github.com/Mudlet/Mudlet/pull/8925)
– Bump development version to 4.20.0 [#8919](https://github.com/Mudlet/Mudlet/pull/8919)
– Bump 3rdparty/sentry-native from `c80e793` to `383ccad` [#8913](https://github.com/Mudlet/Mudlet/pull/8913)
– Add SignPath Foundation attribution to README [#8895](https://github.com/Mudlet/Mudlet/pull/8895)
– Update autocompletion data in Mudlet [#8903](https://github.com/Mudlet/Mudlet/pull/8903)
– Update text for translation in Crowdin [#8901](https://github.com/Mudlet/Mudlet/pull/8901)
– use pcre2grep in CI validation [#8878](https://github.com/Mudlet/Mudlet/pull/8878)
– set next-next release to be 4.21.0 [#8883](https://github.com/Mudlet/Mudlet/pull/8883)
– disable signing MudletCrashReporter.exe temporarily [#8880](https://github.com/Mudlet/Mudlet/pull/8880)
– add qtkeychain-qt6-dev to Linux workflows [#8876](https://github.com/Mudlet/Mudlet/pull/8876)
– switch qtkeychain submodule to upstream [#8870](https://github.com/Mudlet/Mudlet/pull/8870)
– detect Lua test failures on macOS CI [#8852](https://github.com/Mudlet/Mudlet/pull/8852)
– Remove x64 from Windows PTB desktop shortcut name [#8845](https://github.com/Mudlet/Mudlet/pull/8845)
– Bump lukka/get-cmake from 4.2.2 to 4.2.3 [#8844](https://github.com/Mudlet/Mudlet/pull/8844)
– Bump 3rdparty/sentry-native from `08b1374` to `c80e793` [#8843](https://github.com/Mudlet/Mudlet/pull/8843)
– Update text for translation in Crowdin [#8839](https://github.com/Mudlet/Mudlet/pull/8839)
– Fix SignPath code signing policy configuration [#8834](https://github.com/Mudlet/Mudlet/pull/8834)
– Revert uploading debug symbols to Sentry for PR builds [#8832](https://github.com/Mudlet/Mudlet/pull/8832)
– Fix Windows code signing by adding SignPath v2 policy file [#8831](https://github.com/Mudlet/Mudlet/pull/8831)
– Upload debug symbols to Sentry for PR builds [#8830](https://github.com/Mudlet/Mudlet/pull/8830)
– Remove unused QKeychain forward declarations from CredentialManager.h [#8829](https://github.com/Mudlet/Mudlet/pull/8829)
– Remove dead CMake code in Sentry configuration [#8828](https://github.com/Mudlet/Mudlet/pull/8828)
– Bump lukka/get-cmake from 3.30.3 to 4.2.2 [#8822](https://github.com/Mudlet/Mudlet/pull/8822)
– Bump actions/upload-artifact from 4 to 6 [#8823](https://github.com/Mudlet/Mudlet/pull/8823)
– Bump actions/cache from 4 to 5 [#8821](https://github.com/Mudlet/Mudlet/pull/8821)
– Bump 3rdparty/sentry-native from `bbccfad` to `08b1374` [#8820](https://github.com/Mudlet/Mudlet/pull/8820)
– Cache sentry-native builds in CI [#8807](https://github.com/Mudlet/Mudlet/pull/8807)
– Add .git-blame-ignore-revs for formatting commits [#8805](https://github.com/Mudlet/Mudlet/pull/8805)
– Update text for translation in Crowdin [#8816](https://github.com/Mudlet/Mudlet/pull/8816)
– update plural american english translations [#8478](https://github.com/Mudlet/Mudlet/pull/8478)
– add clang-format instructions to AI guidelines [#8806](https://github.com/Mudlet/Mudlet/pull/8806)
– Apply clang-format to all CPP files [#8804](https://github.com/Mudlet/Mudlet/pull/8804)
– Add SignPath code signing for Windows builds [#8786](https://github.com/Mudlet/Mudlet/pull/8786)
– update clang-format style to match Mudlets as much as possible [#8380](https://github.com/Mudlet/Mudlet/pull/8380)
– Enable Qt breadcrumbs in Sentry crash reports [#8791](https://github.com/Mudlet/Mudlet/pull/8791)
– Fix Windows nightly build failure when no new commits [#8790](https://github.com/Mudlet/Mudlet/pull/8790)
– Bump 3rdparty/sentry-native from `11832e4` to `bbccfad` [#8792](https://github.com/Mudlet/Mudlet/pull/8792)
– upload Qt module debug symbols to Sentry using cv2pdb [#8782](https://github.com/Mudlet/Mudlet/pull/8782)
– Update autocompletion data in Mudlet [#8789](https://github.com/Mudlet/Mudlet/pull/8789)
– Update text for translation in Crowdin [#8788](https://github.com/Mudlet/Mudlet/pull/8788)
– Upload Qt debug symbols to Sentry for better crash reports [#8777](https://github.com/Mudlet/Mudlet/pull/8777)
– Remove Azure trusted signing from Windows builds [#8778](https://github.com/Mudlet/Mudlet/pull/8778)
– Bump 3rdparty/edbee-lib from `cf7f0ba` to `7e7c0f6` [#8770](https://github.com/Mudlet/Mudlet/pull/8770)
– Bump 3rdparty/sentry-native from `4f983bb` to `11832e4` [#8771](https://github.com/Mudlet/Mudlet/pull/8771)
– remove `travis.` [prefix](https://wiki.mudlet.org/w/Manual:Lua_Functions#prefix) from CI files [#8375](https://github.com/Mudlet/Mudlet/pull/8375)
– Update autocompletion data in Mudlet [#8769](https://github.com/Mudlet/Mudlet/pull/8769)
– Update text for translation in Crowdin [#8767](https://github.com/Mudlet/Mudlet/pull/8767)
– Update bundled mpkg.mpackage to latest upstream [#8768](https://github.com/Mudlet/Mudlet/pull/8768)
– reduce Mudlet build times by 30s [#8403](https://github.com/Mudlet/Mudlet/pull/8403)
– Add Claude Code slash command for creating PRs [#8761](https://github.com/Mudlet/Mudlet/pull/8761)
– Guard undo/redo debug messages behind compile flag [#8760](https://github.com/Mudlet/Mudlet/pull/8760)
– Simplify profile loading code [#8756](https://github.com/Mudlet/Mudlet/pull/8756)
– Improve code readability with cleaner empty checks [#8755](https://github.com/Mudlet/Mudlet/pull/8755)
– Reduce noise in automated code review comments [#8754](https://github.com/Mudlet/Mudlet/pull/8754)
– simplify CI 3rd party update workflow [#8737](https://github.com/Mudlet/Mudlet/pull/8737)
– improve safety of internal text handling [#8724](https://github.com/Mudlet/Mudlet/pull/8724)
– uppercase settings key in config [#8246](https://github.com/Mudlet/Mudlet/pull/8246)
– Simplify build system by removing unused QMake files [#8731](https://github.com/Mudlet/Mudlet/pull/8731)
– modernize loop syntax across codebase [#8733](https://github.com/Mudlet/Mudlet/pull/8733)
– simplify cmake build configuration [#8732](https://github.com/Mudlet/Mudlet/pull/8732)
– simplify network connection handling [#8735](https://github.com/Mudlet/Mudlet/pull/8735)
– Add a security policy for reporting vulnerabilities [#8723](https://github.com/Mudlet/Mudlet/pull/8723)
– Update text for translation in Crowdin [#8728](https://github.com/Mudlet/Mudlet/pull/8728)
– Update autocompletion data in Mudlet [#8729](https://github.com/Mudlet/Mudlet/pull/8729)
– revise displayed Copyright year to 2026 [#8727](https://github.com/Mudlet/Mudlet/pull/8727)
– eliminate remains of qt-ordered-map from Mudlet [#8720](https://github.com/Mudlet/Mudlet/pull/8720)
– Clarify CI build option label [#8714](https://github.com/Mudlet/Mudlet/pull/8714)
– allow CMake `initGitSubmodule.cmake` to act recursively [#8717](https://github.com/Mudlet/Mudlet/pull/8717)
– run memory leak checks as part of CI pipeline [#8316](https://github.com/Mudlet/Mudlet/pull/8316)
– remove debug logging from undo/redo feature [#8713](https://github.com/Mudlet/Mudlet/pull/8713)
– Update text for translation in Crowdin [#8698](https://github.com/Mudlet/Mudlet/pull/8698)
– check for sentry-native submodule when Sentry enabled [#8669](https://github.com/Mudlet/Mudlet/pull/8669)
– address feedback in event handling from no-op operations [#8667](https://github.com/Mudlet/Mudlet/pull/8667)
– Add telnet processing speed benchmark [#8658](https://github.com/Mudlet/Mudlet/pull/8658)
– Replace foreach with C++17 structured bindings [#8664](https://github.com/Mudlet/Mudlet/pull/8664)
– Add ccache stats to Windows build workflow [#8671](https://github.com/Mudlet/Mudlet/pull/8671)
– Fix Windows PTB rebuild versioning for Squirrel [#8670](https://github.com/Mudlet/Mudlet/pull/8670)
– allow Windows PTB builds to be re-done on the same day [#8668](https://github.com/Mudlet/Mudlet/pull/8668)
– fix crashes in undo/redo tests [#8665](https://github.com/Mudlet/Mudlet/pull/8665)
– add proper Qt event propagation in all events [#8444](https://github.com/Mudlet/Mudlet/pull/8444)
– Bump actions/upload-artifact from 5 to 6 [#8657](https://github.com/Mudlet/Mudlet/pull/8657)
– Ignore lcf submodule in Dependabot, remove vcpkg [#8654](https://github.com/Mudlet/Mudlet/pull/8654)
– Bump ZedThree/clang-tidy-review from 0.22.2 to 0.22.3 [#8656](https://github.com/Mudlet/Mudlet/pull/8656)
– Update Lua code formatter to latest upstream branch [#8653](https://github.com/Mudlet/Mudlet/pull/8653)
– Bump 3rdparty/sentry-native from `67a9f8e` to `4f983bb` [#8637](https://github.com/Mudlet/Mudlet/pull/8637)
– Bump peter-evans/create-pull-request from 7 to 8 [#8638](https://github.com/Mudlet/Mudlet/pull/8638)
– Bump 3rdparty/lcf from `4aa2502` to `55aaf85` [#8639](https://github.com/Mudlet/Mudlet/pull/8639)
– Bump actions/cache from 4 to 5 [#8636](https://github.com/Mudlet/Mudlet/pull/8636)
– Update autocompletion data in Mudlet [#8634](https://github.com/Mudlet/Mudlet/pull/8634)
– Update text for translation in Crowdin [#8633](https://github.com/Mudlet/Mudlet/pull/8633)
– SENTRY_AUTH_TOKEN diagnostic checks environment variable [#8618](https://github.com/Mudlet/Mudlet/pull/8618)
– Bump 3rdparty/sentry-native from `c5416e6` to `67a9f8e` [#8617](https://github.com/Mudlet/Mudlet/pull/8617)
– Update text for translation in Crowdin [#8613](https://github.com/Mudlet/Mudlet/pull/8613)
– add workaround clang-tidy-review directory bug [#8597](https://github.com/Mudlet/Mudlet/pull/8597)
– update communi to qt6 [#8584](https://github.com/Mudlet/Mudlet/pull/8584)
– more fixes to clang-tidy workflow [#8596](https://github.com/Mudlet/Mudlet/pull/8596)
– fix clang-tidy workflow [#8595](https://github.com/Mudlet/Mudlet/pull/8595)
– update Qtkeychain submodule from master to main branch [#8579](https://github.com/Mudlet/Mudlet/pull/8579)
– Bump ZedThree/clang-tidy-review from 0.22.1 to 0.22.2 [#8594](https://github.com/Mudlet/Mudlet/pull/8594)
– ignore macOS keychain for telnet functional test [#8592](https://github.com/Mudlet/Mudlet/pull/8592)
– complete devcontainer setup [#8587](https://github.com/Mudlet/Mudlet/pull/8587)
– Update text for translation in Crowdin [#8590](https://github.com/Mudlet/Mudlet/pull/8590)
– remove item check in saveSelectedItem [#8583](https://github.com/Mudlet/Mudlet/pull/8583)
– Remove else-after-return anti-pattern [#8575](https://github.com/Mudlet/Mudlet/pull/8575)
– update devcontainer to work [#8321](https://github.com/Mudlet/Mudlet/pull/8321)
– Bump ZedThree/clang-tidy-review from 0.22.0 to 0.22.1 [#8564](https://github.com/Mudlet/Mudlet/pull/8564)
– Bump actions/checkout from 5 to 6 [#8565](https://github.com/Mudlet/Mudlet/pull/8565)
– Bump 3rdparty/edbee-lib from `165edc0` to `cf7f0ba` [#8563](https://github.com/Mudlet/Mudlet/pull/8563)
– Update text for translation in Crowdin [#8561](https://github.com/Mudlet/Mudlet/pull/8561)
– Update AI instructions with comments and git guidelines [#8531](https://github.com/Mudlet/Mudlet/pull/8531)
– Fix CMake CMP0167 warning for Boost [#8538](https://github.com/Mudlet/Mudlet/pull/8538)
– Add NINJA_STATUS to Windows build [#8539](https://github.com/Mudlet/Mudlet/pull/8539)
– update Noto Color Emoji font to Unicode 17.0 v2.051 [#8535](https://github.com/Mudlet/Mudlet/pull/8535)
– Add regex busted tests for PCRE library [#8537](https://github.com/Mudlet/Mudlet/pull/8537)
##### Other:
– Revert "Add per-room border color and thickness"
– Revert "Fix crash in bi-daily update check"
Public Test Build
Added:
– Lua memory introspection functions #9241
– smart command suggestions in the tutorial for new players #9188
– lpeg parsing library #9212
– Pkuxkx as a predefined default MUD #9161
– Mudlet.ini option to control high DPI scale factor rounding policy #9164
– right-click option to hide default profiles in connection dialog #9123
– selectAll function with optional window support #9166
– telnets:// link support for secure TLS connections #9153
– getKeyCode function to return key code and any modifiers of a key-binding #8435
– telnet:// URI scheme support for one-click MUD connections #8601
– separate border size control and player room marker improvements #8975
– OSC 8 context menu title support #8910
– DragonfireMUD and VoidMUD #8783
– 3rd party definition files for Lua #8966
– Starmourn and update IRE game profiles #9076
– embeddable TextEdit widget (Geyser.TextEdit) #8986
– MudMaster Chat Protocol (MMCP) #7765
– blinking/flashing text support #8983
– timeout for (Linux) Build xcb-util-cursor #8978
– timeout for macos (Install Dependencies) #8977
– data loss guard on constraint migration #8850
– GNOME Software-style navigation in Package Manager #8846
– room description matching to generic mapper #8649
– hidden rooms #8443
– Multi-file selection in import dialogs #8796
– Map label support in 3D mapper #8793
– multiple note tabs to the notepad #8757
– multiple map views support #8743
– muteMediaScript and muteMediaGame options to getConfig/setConfig #8764
– "Whole word" search option in the script editor #8722
– per-room border color and thickness #8758
– more safeguards against profile settings being lost #8742
– permExactMatchTrigger Lua API function #8745
– per-room border color and thickness
– NAWS protocol toggle setting #8700
– getBorderColor() Lua API function #8688
– MXP FRAME and DEST tag support for multi-window layouts #8577
– Optional static analysis during build #8708
– OSC 8 hyperlink visibility, selection, and compact syntax enhancements #8677
– Sentry license to about dialog #8660
– undo/redo for Mudlet editor #8469
– getRoomsByPosition1() function #8619
– functional GUI tests using QTest #8572
– Enable spellcheck in the composer window #8447
– setExitWeightFilter function to alter room/exits weights/locks #8487
Improved:
– remove dead messages from dlgTriggerEditor class #9279
– remove white styling from round rooms #9252
– improve memory safety by using smart pointers #9239
– show telnet protocol negotiation status in Statistics #9226
– read tooltips aloud without HTML tags in profile preferences #9228
– ARIA accessibility for OSC 8 hyperlinks in caret mode #9206
– inline map download dialog #9204
– 2D mapper rendering speed on single-Z-level areas #9209
– simplify long tooltips #8416
– Make spacing between widgets in the connection dialog more consistent #9198
– Auto-switch code editor theme with app appearance #9167
– handling of rooms having their hidden property changed #8947
– guard mudlet::self() in cTelnet destructor #9020
– use raw IP address if provided with one #9066
– Give players full control over Discord Rich Presence #9116
– show version scope in PTB release changelogs #9148
– hidden rooms – allow storage in map versions < 22 and other things #8930
– change label highlight from overlay to outline #9132
– internal code in regards to memory use #9015
– saving a key with no binding set shows an error #9114
– Add smooth pulsing effect for blinking text #9104
– remove AI/llamafile integration #9108
– error message when saving MMP-downloaded map #9107
– Automatic audio device switching support #9026
– only mark map as dirty if room hidden status is changed #8946
– Reduce memory usage for text decorations #9052
– Remove debug print from deleteAll function #9061
– add defensive coding to internal code related to the TMediaPlayer #9017
– Script Editor search code quality and maintainability #9028
– Code quality in TBuffer.cpp #9029
– show feedback when manually checking for updates fails #9004
– add better error reporting to GMCP merge handler #9018
– adjust getTime() table size hint to match 7 entries #9019
– Don’t echo OSC 8 send: hyperlink commands by default #8957
– Detection of character-at-a-time mode in server connections #8825
– Add more context to media playback events #8953
– luarocks busted install instructions version flag #8950
– Add macOS clang-format path to AI instructions #8926
– Make MNES and NEW-ENVIRON mutually exclusive in UI #8893
– update Astaria banner #8900
– New Crowdin updates #8253
– macOS build instructions use absolute path #8860
– nixed rex_prce2 check in lua #8848
– Faster map rendering when zoomed in by skipping off-screen rooms #8797
– Allow nil to clear label callbacks #8799
– keep small map areas fully visible in viewport #8766
– Enable PCRE2 JIT compilation for triggers and aliases #8762
– open IRC with Lua functions not via UI anymore #8123
– Auto-link Lua function names in changelog #8744
– add error handling with clear error messages #8736
– error message visibility in module creation dialog #8738
– Memory management for console hyperlinks #8725
– AI assistant guidance for modern C++ loops #8741
– error messages for easier troubleshooting #8721
– highlight search terms in editor when using global search #8687
– Show a warning icon when map autosave fails #8689
– Simplify internal tree widget code #8706
– remove outdated comment for special exits MMP import #8707
– Enable OSC 8 hyperlink visibility by default #8699
– Fix compiler warnings about potential data loss in type conversions #8715
– Remove outdated FIXME comment from msleep call #8695
– Modernize color trigger dialog button handling #8693
– Reduce Windows install size by ~135MB #8685
– show error message when variable can’t be moved in the trigger editor #8683
– Add error handling to unexpected scenarios #8682
– Auto-recover from stuck password masking during login #8628
– OSC 8 hyperlink styling with direct JSON parsing #8641
– use platform-native key names in UI text #8591
– add a crash reporter for Linux / macOS / Windows #8540
– Migrate C++ regex engine from PCRE to PCRE2 #8533
– Limit saved Lua table variables to 10,000 items #8581
– Remove directional navigation buttons from mapper #8574
– – two seconds is longer than you think #8570
– Cleanup system efficiency for triggers, aliases, and keys #8559
– small Style Cleanup in main.cpp #8562
– Remove accessible description from trigger pattern editor #8546
– remove navigation shortcuts widget from trigger editor #8530
Fixed:
– missing headers and string creation issues for 6.8.2 #9251
– heap-use-after-free in TriggerUnit::processDataStream #9267
– Regression of resetProfile handling of labels #9255
– misc memory handling/safety fixes #9240
– set main connection to be low latency #9250
– connection status indicators causing tab padding issues on macOS #9231
– Clazy warnings part 8 – sanitize-inline-keyword #9242
– Text wrapping incorrectly after switching profile tabs #9227
– improve media player stability #9237
– stop scripted package installs from stealing window focus #9236
– link to CONTRIBUTING.md in ai-instructions.md #9225
– low-contrast input fields in dark mode on macOS #9233
– make FontManager track fonts per-profile #9238
– stop re-prompting to set Mudlet as the telnet:// link handler after declining #9229
– Clazy warnings part 7 – isempty-vs-count #9235
– Clazy warnings part 1A (more) – range-loop-detach #9232
– Clazy warnings part 6 – use-static-qregularexpression #9211
– Clazy warnings part 5 – fully-qualified-moc-types #9210
– prevent use-after-free in TRoom::setArea dirty-area tracking #9217
– Clazy warnings part 4 – range-loop-reference #9207
– correct use of forward declared type items in headers #9208
– Clazy warnings part 3 – qstring-arg #9197
– unify and translate some Map Errors #9189
– avoid bogus "new Toolbar" and "new Menu" items creation on profile load #9194
– Clazy warnings part 2 – detaching-temporary #9196
– Clazy warnings part 1 – range-loop-detach #9195
– strip whitespace formatting marks when copying trigger patterns #9149
– several resetProfile() bugs #9083
– prevent update download from being canceled when checking for updates #9185
– changelog rendering in PTB update dialog #9182
– package edit warning incorrectly showing for module items #9168
– Cancel on trigger highlight color picker no longer changes the color #9013
– Respect explicit theme choice on Linux #8897
– memory leaks in map info contributors, deleting labels #9141
– increase TelnetTextDisplayedTest timeouts for CI #9184
– review fixes for font handling rework #9135
– Better handling of package-supplied fonts during unloading/reloading of packages #9115
– selectCaptureGroup() selecting wrong capture #9133
– resolve CodeQL stack-address-escape warnings #9080
– insertText newline regression #9022
– updater to work with github releases #9125
– memory leaks in sound player, dialogs #9142
– crash when importing non-Mudlet zip with XML containing element #9146
– handle over/underflows in (int) TLuaInterpreter::getVerifiedInt(…) #8924
– crash when resetProfile() is called while downloads are in-progress #9138
– scaling map image labels showing text instead of image #9121
– label move in 2D map #9131
– correct icon names for two recently added predefined MUDs #9129
– handle CMake aliasing problems when PCRE2::8BIT is itself an alias #9128
– crash when user cancels map download #9085
– small memory leaks in package/object management #9111
– small memory leaks when closing/reopening profiles #9110
– small leak in resetProfile() for the Lua state, label, and scrollbox #9109
– stale characters during horizontal scrolling with wide fonts #9099
– Ctrl+End in caret mode hides the cursor #9101
– Toolbar visibility not persisted when toggled via right-click menu #9053
– typo in mPlayerRoomColorGradentStops member name #9112
– OSC 8 hyperlinks strip config/preset only when features are advertised #9106
– Miniconsole text cutoff after switching profiles #8853
– Refactor and fix logic handling chat name change from GUI preferences dialog #9025
– use correct variable for Discord starttime string parsing #9100
– Copy Map to inactive profiles losing player room position #9091
– use right format type for errors in playSoundFileAsOrderedArguments #9086
– Tabs not respecting dark mode #8996 #8999
– map info "Short" always re-added on profile load #8963
– Module Manager shortcut uses wrong key sequence when menu bar hidden #9097
– setSaveCommandHistory inverting the boolean when a command line name is given #9098
– Fix QFutureWatcher memory leaks across the codebase #9095
– Color swatch buttons washed out on macOS and not showing at all in Light mode #8970
– Text with < characters disappearing on games with MXP enabled #8918
– saveWindowLayout/loadWindowLayout now retains user window positions #9056
– memory leak when deleting areas in a map #9092
– clickable links losing their URL query parameters #9073
– Garbled error messages when passing wrong argument types to popup functions #9090
– map exits corrupted when loading maps with invalid room IDs #9089
– Correct call() return value so timer error handling reads correctly #9088
– Show SSL error messages when secure connection fails #9055
– ansi_color table loading order #9084
– crash when keychain operation times out #9072
– Updater crash on Windows when download URL is unavailable #9067
– Changing one profile’s password no longer affects others #9049
– custom map events not firing when placed in submenus #8998
– timeframe failing if third arg is nil #8964
– PasswordMigrationTest to build #9032
– Separate user and MXP borders so reconnect doesn’t reset user borders #9016
– Restore password loading from portable file in connection dialog #8993
– Clear package list before repopulating in Package Exporter #8892
– Input bar height changes unexpectedly when switching profiles #8958
– Room symbols not rescaling when map is resized #8974
– Prevent crash when closing detached windows #8934
– Restore sound playback on macOS #8949
– Update ssh IP for Geyser upload workflow #8995
– Correct TestMask to exclude internal flags #8954
– mudlet does not close after running lua tests #8979
– Clang-format hash in .git-blame-ignore-revs #8882
– [#6964] spairs chokes on mixed keys #8868
– align MSDP negotiation to specs #8905
– Crash when removing default MUD profiles from welcome window #8916
– MXP not working on some MUDs #8915
– clean up comments and related translation things #8914
– Command history not working when password masking is disabled #8902
– Revert default map format to 20 in PTB / development #8891
– Make main console default to opaque text background, allow user to customize #8887
– Delay MXP TEMP_SECURE mode reset to allow tag handling #8889
– PTB crash on some Linux systems due to libxcb-cursor bug #8866
– Player shown on far side of map when mapper window is wide #8869
– db:_coerce_sheet backwards compatibility #8861
– Map labels appearing bold after profile reload #8865
– macOS color buttons not showing colors in settings #8847
– Make update dialog release notes keyboard accessible #8849
– Restore desktop shortcut creation on Windows install #8841
– Crash when drawing map labels at small zoom levels #8836
– Disable AddressSanitizer for release builds #8826
– Remember scroll position and cursor position in script editor #8410
– Use custom dark theme on all Windows versions #8819
– Map area centering displaying areas off-screen #8814
– Crash when nested alias/trigger processing runs cleanup prematurely #8818
– table.update no longer errors when replacing non-table with table #8694 #8751
– Editor actions not working on initial open #7482 #8753
– Revert map rendering optimization causing issues #8809
– Medievia encoding showing error in preferences dropdown #8811
– MXP FRAME close tags appearing as literal text #8808
– Timer groups display correct icons when drag-dropped #8802
– Map labels appear crisp at all zoom levels #8795
– honor ‘disable automatic updates’ setting when installer is already downloaded #8409
– OSC sequences with BEL terminator no longer swallow output #3912 #8750
– Windows crash when saving profile config #8427 #8428
– Big5 and East Asian text encodings not working on Linux #8787
– compile in latest development due to map update changes #8800
– Improve error handling in setLabelStyleSheet() #8446
– Add outline to area exit arrows for visibility on matching backgrounds #8794
– mapper not reopenable after closing via X button #8401
– Disable ‘Activate’ button in Variables view #8441
– Prevent crash in MXP watchdog callback #8785
– Memory leaks in ScriptUnit and ActionUnit (8,856 bytes) when opening/closing profile #8781
– Potential crash during automatic update download #8776
– Include full version in Sentry crash reports for PTB builds #8779
– Improve build documentation clarity for terminal execution #8774
– Regex triggers now respect ‘keep’ background color setting #8402
– Remove unnecessary allocation in filter trigger matching #8763
– default new profiles to UTF-8 encoding instead of ASCII #8759
– Accessibility crash with out-of-range offset #8310 #8752
– named captures indexed incorrectly in multimatches with special line types #8748
– Update trigger icons immediately when dragging in editor #8746
– connections to MMapper #8730
– prevent module autosave from overwriting failed-to-load modules #8696
– GMCP media finish parameter not working #8740
– Modules not loading when reopening a profile #8739
– Package Exporter unable to export packages #8629 #8630
– Memory leaks in core components #8716
– Windows installer failing after update #8710
– Down arrow saves typed text before clearing #8705
– Restore Windows application icon #8703
– set enableMXP when MXP is autodetected #8701
– 8 CodeQL ‘comparison result is always the same’ warnings #8691
– CodeQL inconsistent nullness check errors in temp trigger functions #8690
– restrict MXP auto-detection to ESC sequences only #8692
– Windows Start Menu shortcut missing after install #8686
– Use fixed delay instead of waiting for crashpad #8679
– Windows updates failing due to locked folder #8678
– Wait for crashpad_handler.exe to exit before running installer #8676
– copy downloaded installer instead of moving file on Windows #8675
– Create shortcuts when handling Squirrel install events #8672
– Wait for Mudlet to exit before running installer on Windows #8673
– Handle Squirrel installer startup commands on Windows to prevent Mudlet getting closed #8666
– Prevent crashpad_handler from getting a Windows Start Menu entry #8659
– Windows updater file lock issue in dblsqd (prevented updates) #8661
– Windows updater launch using batch file to avoid quoting issues when updating PTBs #8663
– Mudlet freeze when receiving large amounts of data #8644
– Container overflow crash when processing text #8647
– Build failures after dependency updates #8645
– package manager loses title on uninstall #8625
– Windows updater deleting itself during update #8622
– crash in bi-daily update check #8620
– crash in bi-daily update check
– clicking on stacked rooms selects all of them #8616
– use-after-free crash when calling registerMapInfo #8609
– Prevent crash during Mudlet shutdown when closing profiles #8606
– Forward secrets.SENTRY_DSN to CMake on Windows #8615
– Static fonts configured in 4.19.1 continue working after upgrade #8545
– convert raw Qt pointers to QPointer to prevent use-after-free #8610
– maintain backwards compatibility when loading rex_pcre2 #8599
– missing encodings in dropdown for Qt6 #8605
– Medievia encoding error in preferences dropdown #8608
– load PCRE2 in LuaGlobal #8598
– fix inconsistent nullness checks #8586
– Test builds now use keychain for password storage #8589
– Heap-use-after-free crash when closing profiles with active triggers #8567
– heap-use-after-free when cleanup runs during alias/trigger/key processing #8571
– potential issue in area image export #8585
– Restore Qt5 Core5Compat for third-party dependencies #8578
– Reduce redundant UTF-8 conversions in trigger processing #8560
– Improve performance of hyperlink style parsing #8558
– Remove duplicate context menu on AdjustableContainer title bar #8569
– Copy from console now works when command line has focus #8551
– Remove deprecated Qt5 Core5Compat dependency #8550
– crash when rapidly reloading plugins due to thread-safety issue in XML export #8542
– switch to FFMPEG audio backend on Windows to allow playback of .ogg and .opus audio files #8329
– Debug console crash when host is deleted #8549
– Special exit text unreadable when editing #8543
– Comprehensive package installation crash prevention #8541
– Auto-activate new triggers/aliases/scripts/keys on save #8529
– Unicode characters display correctly in unhandled MXP tags #8532
Infrastructure:
– Bump 3rdparty/qtkeychain from e3b2e83 to 7718d0a #9275
– rename local variables to reflect their type in TAction class #9271
– align CLAUDE.md et all with contributing guidelines #9265
– disable Sentry on PTB builds to test update-stall hypothesis #9263
– Bump 3rdparty/sentry-native from 87f25f2 to c0e5f07 #9260
– Bump 3rdparty/qtkeychain from 708d099 to e3b2e83 #9259
– Update bundled mpkg.mpackage to latest upstream #9253
– Bump 3rdparty/qtkeychain from 53a8e6a to 708d099 #9249
– Swap out QtConcurrent module header for sub-module ones #9246
– update CONTRIBUTING.md with AI coding guidelines #9224
– Bump lukka/get-cmake from 4.3.1 to 4.3.2 #9221
– Bump leafo/gh-actions-lua from 12 to 13 #9222
– Bump 3rdparty/sentry-native from 848fd4c to 87f25f2 #9220
– apply clang-format style to tests too #9201
– Bump 3rdparty/sentry-native from 93c4e32 to 848fd4c #9202
– Bump carlosperate/download-file-action from 2.0.2 to 2.0.3 #9203
– fix flaky TelnetTextDisplayedTest in CI #9193
– fix partial PTB releases not triggering when push build exists at same SHA #9192
– fix Windows SHA256 missing from PTB releases #9191
– allow partial PTB releases when not all platforms succeed #9163
– migrate undo/redo tests to QTest framework #8867
– stop deleting and recreating GitHub releases on every build #9176
– skip duplicate PTB builds when no new commits exist #9175
– sync edbee-lib submodule to fork master #9183
– Bump actions/download-artifact from 4 to 8 #9179
– Bump actions/github-script from 7 to 9 #9181
– Bump 3rdparty/sentry-native from 6ebd29b to 93c4e32 #9178
– fix Windows and macOS nightly build failures #9173
– add missing statuses:write permission to DangerJS workflow #9172
– fix DangerJS workflow vulnerability to malicious PRs #9143
– add non-compileable files to CMake project file #8780
– update sentry-native to 0.13.5 #9158
– update edbee-lib submodule & use system oniguruma if present #9156
– fix PTB registration by reverting installer filename convention #9155
– show changelogs both from last release and last PTB #9151
– fix CI bugs in PTB registration, macOS updater linking, and portable ZIP upload #9154
– fix Windows release asset upload and appcast SCP paths #9152
– fix Windows PTB registration failing after installer rename #9150
– release workflow failing due to PR build triggers and checkout wiping assets #9145
– add CI workflow to create GitHub Releases for updater #9127
– Update text for translation in Crowdin #9136
– Bump lukka/get-cmake from 4.3.0 to 4.3.1 #9139
– Add comprehensive variable editor tests #9103
– add comprehensive resetProfile() test suite #9082
– add cross-reference comments to duplicate build workflows #9069
– remove disabled clang-tidy workflows #9113
– Bump 3rdparty/qtkeychain from 6e90eda to 53a8e6a #9126
– Update text for translation in Crowdin #9124
– speed up OSC tests with data-driven approach #9120
– Add Copilot skill for opening pull requests #9105
– Bump 3rdparty/qtkeychain from 844beb4 to 6e90eda #8973
– Update text for translation in Crowdin #9077
– disable CodeQL poorly-documented-function query #9079
– Bump webfactory/ssh-agent from 0.9.1 to 0.10.0 #9047
– restore xcb-util-cursor resiliency changes #9074
– Bump lukka/get-cmake from 4.2.3 to 4.3.0 #9087
– Fix macOS CI: use AppleClang instead of Homebrew LLVM #9078
– remove leftover qgridlayout ordering script #9075
– enable set -e in Linux CI deploy script to catch failures #9059
– install libspeechd-dev for Linux CI to fix AppImage creation #9058
– Migrate to clang64 msys2 environment for Windows builds #9064
– remove ccache mutex locks #9043
– add retries to brew install to handle hangs #9045
– remove CodeQL CI’s concurrency #9044
– Fix windows builds in development #9042
– Bump development version to 4.20.1 #9050
– Update text for translation in Crowdin #9040
– remove qgridlayout ordering workflow #9038
– Update autocompletion data in Mudlet #9041
– update target path for file upload in geyser-docs workflow #9030
– Change SCP target host for file uploads #9003
– Dedicated workflow for prs #9033
– Remove unnecessary null checks after new #9014
– speed up compilation of Mudlet by 25% #9021
– Enable TTS in macOS builds #8921
– make xcb-util-cursor download more resilient #9012
– re-introduce path stripping in geyser-docs.yaml #9023
– ccache key should be per pr/branch #9010
– use release-signing for releases, test-signing for PTBs #9007
– always run build ci in core branches #9008
– Update text for translation in Crowdin #9009
– increase SignPath signing timeout to 1 hour #9002
– Refactor geyser doc upload workflow #9001
– run undo/redo tests in test mode #8992
– fix unintended ccache collisions #8991
– Bump actions/upload-artifact from 6 to 7 #8989
– CI concurrency logic #8990
– Bump ZedThree/clang-tidy-review from 0.23.0 to 0.23.1 #8988
– Update text for translation in Crowdin #8940
– [ImgBot] Optimize images #8925
– Bump development version to 4.20.0 #8919
– Bump 3rdparty/sentry-native from c80e793 to 383ccad #8913
– Add SignPath Foundation attribution to README #8895
– Update autocompletion data in Mudlet #8903
– Update text for translation in Crowdin #8901
– use pcre2grep in CI validation #8878
– set next-next release to be 4.21.0 #8883
– disable signing MudletCrashReporter.exe temporarily #8880
– add qtkeychain-qt6-dev to Linux workflows #8876
– switch qtkeychain submodule to upstream #8870
– detect Lua test failures on macOS CI #8852
– Remove x64 from Windows PTB desktop shortcut name #8845
– Bump lukka/get-cmake from 4.2.2 to 4.2.3 #8844
– Bump 3rdparty/sentry-native from 08b1374 to c80e793 #8843
– Update text for translation in Crowdin #8839
– Fix SignPath code signing policy configuration #8834
– Revert uploading debug symbols to Sentry for PR builds #8832
– Fix Windows code signing by adding SignPath v2 policy file #8831
– Upload debug symbols to Sentry for PR builds #8830
– Remove unused QKeychain forward declarations from CredentialManager.h #8829
– Remove dead CMake code in Sentry configuration #8828
– Bump lukka/get-cmake from 3.30.3 to 4.2.2 #8822
– Bump actions/upload-artifact from 4 to 6 #8823
– Bump actions/cache from 4 to 5 #8821
– Bump 3rdparty/sentry-native from bbccfad to 08b1374 #8820
– Cache sentry-native builds in CI #8807
– Add .git-blame-ignore-revs for formatting commits #8805
– Update text for translation in Crowdin #8816
– update plural american english translations #8478
– add clang-format instructions to AI guidelines #8806
– Apply clang-format to all CPP files #8804
– Add SignPath code signing for Windows builds #8786
– update clang-format style to match Mudlets as much as possible #8380
– Enable Qt breadcrumbs in Sentry crash reports #8791
– Fix Windows nightly build failure when no new commits #8790
– Bump 3rdparty/sentry-native from 11832e4 to bbccfad #8792
– upload Qt module debug symbols to Sentry using cv2pdb #8782
– Update autocompletion data in Mudlet #8789
– Update text for translation in Crowdin #8788
– Upload Qt debug symbols to Sentry for better crash reports #8777
– Remove Azure trusted signing from Windows builds #8778
– Bump 3rdparty/edbee-lib from cf7f0ba to 7e7c0f6 #8770
– Bump 3rdparty/sentry-native from 4f983bb to 11832e4 #8771
– remove travis. prefix from CI files #8375
– Update autocompletion data in Mudlet #8769
– Update text for translation in Crowdin #8767
– Update bundled mpkg.mpackage to latest upstream #8768
– reduce Mudlet build times by 30s #8403
– Add Claude Code slash command for creating PRs #8761
– Guard undo/redo debug messages behind compile flag #8760
– Simplify profile loading code #8756
– Improve code readability with cleaner empty checks #8755
– Reduce noise in automated code review comments #8754
– simplify CI 3rd party update workflow #8737
– improve safety of internal text handling #8724
– uppercase settings key in config #8246
– Simplify build system by removing unused QMake files #8731
– modernize loop syntax across codebase #8733
– simplify cmake build configuration #8732
– simplify network connection handling #8735
– Add a security policy for reporting vulnerabilities #8723
– Update text for translation in Crowdin #8728
– Update autocompletion data in Mudlet #8729
– revise displayed Copyright year to 2026 #8727
– eliminate remains of qt-ordered-map from Mudlet #8720
– Clarify CI build option label #8714
– allow CMake initGitSubmodule.cmake to act recursively #8717
– run memory leak checks as part of CI pipeline #8316
– remove debug logging from undo/redo feature #8713
– Update text for translation in Crowdin #8698
– check for sentry-native submodule when Sentry enabled #8669
– address feedback in event handling from no-op operations #8667
– Add telnet processing speed benchmark #8658
– Replace foreach with C++17 structured bindings #8664
– Add ccache stats to Windows build workflow #8671
– Fix Windows PTB rebuild versioning for Squirrel #8670
– allow Windows PTB builds to be re-done on the same day #8668
– fix crashes in undo/redo tests #8665
– add proper Qt event propagation in all events #8444
– Bump actions/upload-artifact from 5 to 6 #8657
– Ignore lcf submodule in Dependabot, remove vcpkg #8654
– Bump ZedThree/clang-tidy-review from 0.22.2 to 0.22.3 #8656
– Update Lua code formatter to latest upstream branch #8653
– Bump 3rdparty/sentry-native from 67a9f8e to 4f983bb #8637
– Bump peter-evans/create-pull-request from 7 to 8 #8638
– Bump 3rdparty/lcf from 4aa2502 to 55aaf85 #8639
– Bump actions/cache from 4 to 5 #8636
– Update autocompletion data in Mudlet #8634
– Update text for translation in Crowdin #8633
– SENTRY_AUTH_TOKEN diagnostic checks environment variable #8618
– Bump 3rdparty/sentry-native from c5416e6 to 67a9f8e #8617
– Update text for translation in Crowdin #8613
– add workaround clang-tidy-review directory bug #8597
– update communi to qt6 #8584
– more fixes to clang-tidy workflow #8596
– fix clang-tidy workflow #8595
– update Qtkeychain submodule from master to main branch #8579
– Bump ZedThree/clang-tidy-review from 0.22.1 to 0.22.2 #8594
– ignore macOS keychain for telnet functional test #8592
– complete devcontainer setup #8587
– Update text for translation in Crowdin #8590
– remove item check in saveSelectedItem #8583
– Remove else-after-return anti-pattern #8575
– update devcontainer to work #8321
– Bump ZedThree/clang-tidy-review from 0.22.0 to 0.22.1 #8564
– Bump actions/checkout from 5 to 6 #8565
– Bump 3rdparty/edbee-lib from 165edc0 to cf7f0ba #8563
– Update text for translation in Crowdin #8561
– Update AI instructions with comments and git guidelines #8531
– Fix CMake CMP0167 warning for Boost #8538
– Add NINJA_STATUS to Windows build #8539
– update Noto Color Emoji font to Unicode 17.0 v2.051 #8535
– Add regex busted tests for PCRE library #8537
Other:
– Revert "Add per-room border color and thickness"
– Revert "Fix crash in bi-daily update check"
立即加入!
即刻安装 Mudlet 并成为庞大世界中的一员!