docs(changelog): document v12 -> v13 tab reset and pre-v13 backup

Adds a "Default tab layout sharpened" block between the Safety and
Crash-class sections in both yaml and repo.json. Explains the new
five-tab structure, calls out that the reset is one-time, that all
non-tab settings are preserved, and that the live config is backed
up to pluginConfigs/HellionChat.json.pre-v13-backup before the wipe
so users can restore manually.

The actual code change shipped in the previous commit; this commit
is purely the user-facing communication so the in-game migration
notification has matching written context.
This commit is contained in:
JonKazama-Hellion committed 2026-05-03 22:51:06 +02:00
1 parent 4c18b9a62b
commit 17339a12e5
2 files changed
+21 -1

No files matched your search

+20
View File
@@ -83,6 +83,26 @@ changelog: |-
- NuGet restore now honors packages.lock.json so transitive
dependencies don't drift between machines or CI runs
Default tab layout sharpened (one-time tab reset on first start):
The first-run tab layout is reorganized into five thematic tabs
based on external tester feedback. General contains only Say,
Yell and Shout (immediate-surroundings public chat). System
absorbs the gameplay-event streams (NpcDialogue, Loot, Crafting,
Gathering, PF recruitment pings) and announcement noise
(BattleSystem, FreeCompanyAnnouncement, PvpTeamAnnouncement)
that previously lived in General. FreeCompany, Group and
Linkshell each own their channel set. The static Tell tab is
gone — Auto-Tell-Tabs spawns per-conversation tabs on demand.
The Beginner / Novice-Network preset is no longer added by
default but is still available via Settings, Tabs.
This is a one-time tab-layout reset for users on config version
12 or older. Privacy, Retention, Theme and every other setting
is preserved. Your previous tab configuration is written to
pluginConfigs/HellionChat.json.pre-v13-backup so you can restore
it manually if you prefer the old layout.
Crash-class fixes (formerly latent in upstream):
- MathUtil.HasOverlap now uses a correct AABB test; identical or
+1 -1
View File
@@ -20,7 +20,7 @@
"CanUnloadAsync": false,
"LoadPriority": 0,
"Punchline": "Chat replacement with privacy controls aligned to EU, US and JP rules — based on Chat 2 (EUPL-1.2)",
"Changelog": "**Hellion Chat 1.0.0 — Standalone Major Release**\n\nFirst fully standalone release. Internal cleanup plus a sweep of\npre-existing correctness, security, threading and resource-leak\nfixes carried over from the upstream codebase. No user action\nrequired — auto-update applies cleanly, configuration and database\npaths unchanged.\n\nStandalone identity:\n\n- Code namespace consolidated from ChatTwo.* to HellionChat.* across\n all source files\n- IPC channels migrated from ChatTwo.* to HellionChat.* (6 channels:\n Register, Available, Unregister, Invoke, GetChatInputState,\n ChatInputStateChanged) — third-party plugins that bound to the old\n channels need to be updated; none known at release time\n- ImGui popup ID renamed to hellionchat-context-popup\n- Repository folder restructured (ChatTwo/ → HellionChat/), all CI\n and build paths updated accordingly\n- Public-facing descriptions reworded from upstream-fork framing to\n standalone framing (Chat 2 attribution preserved per EUPL-1.2)\n- Colour preset 'ChatTwo Default' is now 'Klassik (Chat 2 Default)'\n\nSafety:\n\n- Plugin now refuses to load when upstream Chat 2 is also active —\n bilingual conflict message in EN/DE, throw before any subsystem\n initialization, prevents the runtime crash that previously occurred\n when both plugins replaced the same chat window in parallel\n- SQLite native binary bumped to 3.50.3 (CVE-2025-6965 memory\n corruption from aggregate-term overflow, CVE-2025-7709)\n- NuGet restore now honors packages.lock.json so transitive\n dependencies don't drift between machines or CI runs\n\nCrash-class fixes (formerly latent in upstream):\n\n- MathUtil.HasOverlap now uses a correct AABB test; identical or\n edge-touching rectangles are no longer reported as non-overlapping\n- ChatCode.Equals compares fields directly instead of GetHashCode;\n removes the hash-collision anti-pattern\n- IpcManager.Dispose uses UnregisterAction to match the matching\n RegisterAction call; previous mismatch leaked the action\n subscription on every plugin reload\n- ExtraChat.Dispose now unsubscribes all three IPC subscriptions\n (was only the first); leaks closed\n- TellTarget.FromTarget guards against a zero IPlayerCharacter.Address\n before dereferencing the unsafe Character* cast\n- GameFunctions ResolveTextCommandPlaceholderDetour null-checks the\n Hook reference instead of using the null-forgiving operator\n- Popout.cs and SettingsTabs/Tabs.cs bounds-check list indexing so\n a tab drop or empty-worlds list no longer crashes the UI\n- Debugger.cs now declares IDisposable so the existing Dispose runs\n\nCorrectness fixes:\n\n- GlobalParametersCache.GetValue captures Cache into a local before\n the bounds check, so a concurrent Refresh can't slip a different\n array between check and read\n- IconUtil binary search bounds initialized to entries.Length-1 and\n reset on redirect-restart; entries.Length==0 short-circuits\n- Sheets.WorldsOnDatacenter now compares DataCenter.RowId (was\n Region.RowId) so it actually returns same-DC worlds\n- Message.cs back-reference loop iterates the processed Sender/Content\n properties so chunks added by CheckMessageContent get Message set\n- Language.zh-Hans Webinterface_Start_Success corrected to\n \"网页界面已启动\" (was \"网页界面已停止\")\n\nThreading and async:\n\n- AutoTranslate Entries/ValidEntries are now serialized behind a\n single lock; the preload worker thread and main thread no longer\n race on the underlying dictionary/hash set\n- Privacy retention and cleanup workers bound their framework-refresh\n waits to 5 seconds with a logged timeout; a hung framework tick can\n no longer deadlock the background worker\n\nResource handling:\n\n- EmoteCache reuses the static HttpClient instead of allocating a new\n one per call (closed socket leak)\n- FontManager wraps HttpClient/HttpResponseMessage in using-blocks\n and adds EnsureSuccessStatusCode; failed downloads no longer\n silently produce a zero-byte font file\n- SearchSelector mixes the row index into the ImGui ID stack so\n selectables don't collapse to a single ambiguous ID\n- SettingsTabs/Chat blocked-emote add-button now opens its selector\n popup on left-click\n\nPerformance:\n\n- DbViewer text export caches filteredHistory.Count once instead of\n re-enumerating the IEnumerable on every batch (O(N) instead of\n O(N²) on large histories)\n\nLicense attribution (NOTICE.md, COPYRIGHT, THIRD_PARTY_NOTICES.md\nand the Credits section in README) is unchanged.\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n**Hellion Chat 0.6.1 — Pop-Out Discoverability & /tell Auto-Pop-Out**\n\n- Pop-out button now visible in the chat header (no more hunting through the right-click menu)\n- One-time hint banner explains pop-out tabs and the right-click shortcut\n- New setting: open new /tell tabs directly as pop-out windows (Settings → Chat → Auto-Tell-Tabs)\n- Pop-out inpuLine truncated
"Changelog": "**Hellion Chat 1.0.0 — Standalone Major Release**\n\nFirst fully standalone release. Internal cleanup plus a sweep of\npre-existing correctness, security, threading and resource-leak\nfixes carried over from the upstream codebase. No user action\nrequired — auto-update applies cleanly, configuration and database\npaths unchanged.\n\nStandalone identity:\n\n- Code namespace consolidated from ChatTwo.* to HellionChat.* across\n all source files\n- IPC channels migrated from ChatTwo.* to HellionChat.* (6 channels:\n Register, Available, Unregister, Invoke, GetChatInputState,\n ChatInputStateChanged) — third-party plugins that bound to the old\n channels need to be updated; none known at release time\n- ImGui popup ID renamed to hellionchat-context-popup\n- Repository folder restructured (ChatTwo/ → HellionChat/), all CI\n and build paths updated accordingly\n- Public-facing descriptions reworded from upstream-fork framing to\n standalone framing (Chat 2 attribution preserved per EUPL-1.2)\n- Colour preset 'ChatTwo Default' is now 'Klassik (Chat 2 Default)'\n\nSafety:\n\n- Plugin now refuses to load when upstream Chat 2 is also active —\n bilingual conflict message in EN/DE, throw before any subsystem\n initialization, prevents the runtime crash that previously occurred\n when both plugins replaced the same chat window in parallel\n- SQLite native binary bumped to 3.50.3 (CVE-2025-6965 memory\n corruption from aggregate-term overflow, CVE-2025-7709)\n- NuGet restore now honors packages.lock.json so transitive\n dependencies don't drift between machines or CI runs\n\nDefault tab layout sharpened (one-time tab reset on first start):\n\nThe first-run tab layout is reorganized into five thematic tabs\nbased on external tester feedback. General contains only Say,\nYell and Shout (immediate-surroundings public chat). System\nabsorbs the gameplay-event streams (NpcDialogue, Loot, Crafting,\nGathering, PF recruitment pings) and announcement noise\n(BattleSystem, FreeCompanyAnnouncement, PvpTeamAnnouncement)\nthat previously lived in General. FreeCompany, Group and\nLinkshell each own their channel set. The static Tell tab is\ngone — Auto-Tell-Tabs spawns per-conversation tabs on demand.\nThe Beginner / Novice-Network preset is no longer added by\ndefault but is still available via Settings, Tabs.\n\nThis is a one-time tab-layout reset for users on config version\n12 or older. Privacy, Retention, Theme and every other setting\nis preserved. Your previous tab configuration is written to\npluginConfigs/HellionChat.json.pre-v13-backup so you can restore\nit manually if you prefer the old layout.\n\nCrash-class fixes (formerly latent in upstream):\n\n- MathUtil.HasOverlap now uses a correct AABB test; identical or\n edge-touching rectangles are no longer reported as non-overlapping\n- ChatCode.Equals compares fields directly instead of GetHashCode;\n removes the hash-collision anti-pattern\n- IpcManager.Dispose uses UnregisterAction to match the matching\n RegisterAction call; previous mismatch leaked the action\n subscription on every plugin reload\n- ExtraChat.Dispose now unsubscribes all three IPC subscriptions\n (was only the first); leaks closed\n- TellTarget.FromTarget guards against a zero IPlayerCharacter.Address\n before dereferencing the unsafe Character* cast\n- GameFunctions ResolveTextCommandPlaceholderDetour null-checks the\n Hook reference instead of using the null-forgiving operator\n- Popout.cs and SettingsTabs/Tabs.cs bounds-check list indexing so\n a tab drop or empty-worlds list no longer crashes the UI\n- Debugger.cs now declares IDisposable so the existing Dispose runs\n\nCorrectness fixes:\n\n- GlobalParametersCache.GetValue captures Cache into a local before\n the bounds check, so a concurrent Refresh can't slip a different\n array between check and read\n- IconUtil binary search bounds initialized to entries.Length-1 and\n reset on redirect-restart; entries.Length==0 short-circuits\n- Sheets.WorldsOnDatacenter now compares DataCenter.RowId (was\n Region.RowId) so it actually returns same-DC worlds\n- Message.cs back-reference loop iterates the processed Sender/Content\n properties so chunks added by CheckMessageContent get Message set\n- Language.zh-Hans Webinterface_Start_Success corrected to\n \"网页界面已启动\" (was \"网页界面已停止\")\n\nThreading and async:\n\n- AutoTranslate Entries/ValidEntries are now serialized behind a\n single lock; the preload worker thread and main thread no longer\n race on the underlying dictionary/hash set\n- Privacy retention and cleanup workers bound their framework-refresh\n waits to 5 seconds with a logged timeout; a hung framework tick can\n no longer deadlock the background worker\n\nResource handling:\n\n- EmoteCache reuses the static HttpClient instead of allocating a new\n one per call (closed socket leak)\n- FontManager wraps HttpClient/HttpResponseMessage in using-blocks\n and addsLine truncated
"AcceptsFeedback": true,
"DownloadLinkInstall": "https://github.com/JonKazama-Hellion/HellionChat/releases/download/v1.0.0/latest.zip",
"DownloadLinkUpdate": "https://github.com/JonKazama-Hellion/HellionChat/releases/download/v1.0.0/latest.zip",