docs(changelog): expand v1.0.0 entry with full fix sweep

The original v1.0.0 changelog only documented the rebrand. After the
CodeRabbit pass added 9 follow-up fix commits (3 critical bugs plus
21 major findings, grouped into safety / crash-class / correctness /
threading / resource / performance categories), the changelog needs
to reflect what users are actually receiving.

yaml + repo.json synchronized.
This commit is contained in:
2026-05-03 22:19:05 +02:00
parent 740c7cf1bb
commit e6d25f3e38
2 changed files with 76 additions and 9 deletions
+75 -8
View File
@@ -51,11 +51,13 @@ tags:
changelog: |- changelog: |-
**Hellion Chat 1.0.0 — Standalone Major Release** **Hellion Chat 1.0.0 — Standalone Major Release**
First fully standalone release. Internal cleanup, no user action First fully standalone release. Internal cleanup plus a sweep of
pre-existing correctness, security, threading and resource-leak
fixes carried over from the upstream codebase. No user action
required — auto-update applies cleanly, configuration and database required — auto-update applies cleanly, configuration and database
paths unchanged. paths unchanged.
Internal changes: Standalone identity:
- Code namespace consolidated from ChatTwo.* to HellionChat.* across - Code namespace consolidated from ChatTwo.* to HellionChat.* across
all source files all source files
@@ -66,18 +68,83 @@ changelog: |-
- ImGui popup ID renamed to hellionchat-context-popup - ImGui popup ID renamed to hellionchat-context-popup
- Repository folder restructured (ChatTwo/ → HellionChat/), all CI - Repository folder restructured (ChatTwo/ → HellionChat/), all CI
and build paths updated accordingly and build paths updated accordingly
- Public-facing descriptions reworded from upstream-fork framing to
standalone framing (Chat 2 attribution preserved per EUPL-1.2)
- Colour preset 'ChatTwo Default' is now 'Klassik (Chat 2 Default)'
Safety:
- Plugin now refuses to load when upstream Chat 2 is also active — - Plugin now refuses to load when upstream Chat 2 is also active —
bilingual conflict message in EN/DE, throw before any subsystem bilingual conflict message in EN/DE, throw before any subsystem
initialization, prevents the runtime crash that previously occurred initialization, prevents the runtime crash that previously occurred
when both plugins replaced the same chat window in parallel when both plugins replaced the same chat window in parallel
- SQLite native binary bumped to 3.50.3 (CVE-2025-6965 memory
corruption from aggregate-term overflow, CVE-2025-7709)
- NuGet restore now honors packages.lock.json so transitive
dependencies don't drift between machines or CI runs
Branding: Crash-class fixes (formerly latent in upstream):
- Public-facing descriptions reworded from upstream-fork framing to - MathUtil.HasOverlap now uses a correct AABB test; identical or
standalone framing (Chat 2 attribution preserved per EUPL-1.2) edge-touching rectangles are no longer reported as non-overlapping
- Colour preset 'ChatTwo Default' is now 'Klassik (Chat 2 Default)' - ChatCode.Equals compares fields directly instead of GetHashCode;
- License attribution (NOTICE.md, COPYRIGHT, THIRD_PARTY_NOTICES.md removes the hash-collision anti-pattern
and the Credits section in README) is unchanged - IpcManager.Dispose uses UnregisterAction to match the matching
RegisterAction call; previous mismatch leaked the action
subscription on every plugin reload
- ExtraChat.Dispose now unsubscribes all three IPC subscriptions
(was only the first); leaks closed
- TellTarget.FromTarget guards against a zero IPlayerCharacter.Address
before dereferencing the unsafe Character* cast
- GameFunctions ResolveTextCommandPlaceholderDetour null-checks the
Hook reference instead of using the null-forgiving operator
- Popout.cs and SettingsTabs/Tabs.cs bounds-check list indexing so
a tab drop or empty-worlds list no longer crashes the UI
- Debugger.cs now declares IDisposable so the existing Dispose runs
Correctness fixes:
- GlobalParametersCache.GetValue captures Cache into a local before
the bounds check, so a concurrent Refresh can't slip a different
array between check and read
- IconUtil binary search bounds initialized to entries.Length-1 and
reset on redirect-restart; entries.Length==0 short-circuits
- Sheets.WorldsOnDatacenter now compares DataCenter.RowId (was
Region.RowId) so it actually returns same-DC worlds
- Message.cs back-reference loop iterates the processed Sender/Content
properties so chunks added by CheckMessageContent get Message set
- Language.zh-Hans Webinterface_Start_Success corrected to
"网页界面已启动" (was "网页界面已停止")
Threading and async:
- AutoTranslate Entries/ValidEntries are now serialized behind a
single lock; the preload worker thread and main thread no longer
race on the underlying dictionary/hash set
- Privacy retention and cleanup workers bound their framework-refresh
waits to 5 seconds with a logged timeout; a hung framework tick can
no longer deadlock the background worker
Resource handling:
- EmoteCache reuses the static HttpClient instead of allocating a new
one per call (closed socket leak)
- FontManager wraps HttpClient/HttpResponseMessage in using-blocks
and adds EnsureSuccessStatusCode; failed downloads no longer
silently produce a zero-byte font file
- SearchSelector mixes the row index into the ImGui ID stack so
selectables don't collapse to a single ambiguous ID
- SettingsTabs/Chat blocked-emote add-button now opens its selector
popup on left-click
Performance:
- DbViewer text export caches filteredHistory.Count once instead of
re-enumerating the IEnumerable on every batch (O(N) instead of
O(N²) on large histories)
License attribution (NOTICE.md, COPYRIGHT, THIRD_PARTY_NOTICES.md
and the Credits section in README) is unchanged.
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2). Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
+1 -1
View File
File diff suppressed because one or more lines are too long