chore: bump version to 1.4.4 + changelog sync + forge-post

Threading and IPC safety release. Items: F2.1 (Interlocked counter),
F4.1/F4.2/F4.3 (HonorificService threading banners + warning log),
F9.2 (AutoTranslate IsBackground), F3.1 (PrivacyPersistUnknownChannels
default), F3.2 (unknown-ChatType warning).

verify-changelog-sync: yaml/repo.json/forge-post in sync, embed-total
~2699/5500, 3/4 yaml subblocks. verify-version-consistency and
verify-manifest-shape both green.
This commit is contained in:
2026-05-12 10:11:31 +02:00
parent 7eb50e2c8d
commit 0fc88e480a
5 changed files with 94 additions and 7 deletions
+32
View File
@@ -10,6 +10,38 @@ to the release pages for details.
---
## Hellion Chat 1.4.4 — Threading and IPC Safety Polish (2026-05-12)
Fifth sub-patch of the v1.4.x polish-sweep series. Threading assumptions are documented per-method, a hot-path lock
falls away in `AutoTellTabsService`, IPC-cleanup failures become visible, and the privacy filter now speaks up when an
unknown ChatType shows up.
- `AutoTellTabsService.ActiveTempTabCount` switches from a lock-protected LINQ `Count` to an `Interlocked` counter kept
in sync with `Config.Tabs` from inside the existing mutation paths. `Initialize()` seeds the counter from the
persisted Tabs list, and `SaveConfig`'s snapshot-restore path calls a new `ResyncTempTabCounter()` so the mid-step
`RemoveAll` doesn't leave the counter drifting. Pure-helper test mirror lives in the Build-Suite repo
- `HonorificService` per-method threading banners replace the block comment at the bottom of the file. Each IPC
callback (`TryInitialPull`, `OnTitleChanged`, `OnReady`, `OnDisposing`, `TryUnsubscribe`) and the `CurrentTitle`
field carry a one-line `// Thread:` annotation so the framework-thread invariant is visible at the call site
- `TryUnsubscribe` log-level upgraded from `Debug` to `Warning`. A silent unsubscribe failure leaks a live subscription
across plugin reloads, which is exactly the kind of issue that should not be at Debug
- `AutoTranslate.PreloadCache` thread now has `IsBackground = true` and a thread name. Without `IsBackground` the
warmup blocks plugin unload (typically 100-300 ms). Pattern-match to `MessageManager` (F6.1) and `Plugin.RetentionSweep`
(F9.3), both since v1.4.0
- `Configuration.IsAllowedForStorage` adds a one-line `Plugin.Log.Warning` for the first occurrence of any ChatType
that isn't in `PrivacyPersistChannels`. Dedup via a `NonSerialized` `HashSet<ChatType>`, so the warning fires once
per runtime — not once per frame, not once per install. Failsafe routing through `PrivacyPersistUnknownChannels`
is unchanged
- `PrivacyPersistUnknownChannels` field default flipped from `false` to `true` for new installs via a constant in
`PrivacyDefaults`. Existing configs keep their explicit choice — the deserializer overrides the initializer. No
schema bump, no migration, no first-run banner
Modding & support: join Hellion Forge — <https://discord.gg/X9V7Kcv5gR>
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
---
## Hellion Chat 1.4.3 — Plugin-Load Async-Init + Repo-Cutover (2026-05-08)
Plugin lifecycle migrated to Dalamud's `IAsyncDalamudPlugin` API. The constructor now does only the bootstrap-essentials