diff --git a/HellionChat/Plugin.cs b/HellionChat/Plugin.cs index 0a33a1c..b3a8e5e 100755 --- a/HellionChat/Plugin.cs +++ b/HellionChat/Plugin.cs @@ -154,13 +154,13 @@ public sealed class Plugin : IAsyncDalamudPlugin Config = Interface.GetPluginConfig() as Configuration ?? new Configuration(); - // Schema gate: v1.4.3 requires config v16. Users on older schemas + // Schema gate: v1.4.x requires config v16. Users on older schemas // must install v1.4.2 first to run the migration chain. if (Config.Version < 16) { throw new InvalidOperationException( - $"HellionChat v1.4.3 requires config schema v16, got v{Config.Version}. " - + "Please install v1.4.2 first to migrate the configuration, then upgrade to v1.4.3." + $"HellionChat v1.4.4 requires config schema v16, got v{Config.Version}. " + + "Please install v1.4.2 first to migrate the configuration, then upgrade to v1.4.4." ); } diff --git a/README.md b/README.md index 10d416c..9ca9a87 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/actions/workflows/build.yml/badge.svg?branch=main)](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/actions/workflows/build.yml) [![License: EUPL-1.2](https://img.shields.io/badge/License-EUPL--1.2-blue.svg)](LICENSE) -[![Latest release](https://img.shields.io/badge/release-v1.4.3-brightgreen)](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/latest) +[![Latest release](https://img.shields.io/badge/release-v1.4.4-brightgreen)](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/latest) [![Dalamud API](https://img.shields.io/badge/Dalamud-API_15-purple)](https://github.com/goatcorp/Dalamud) [![.NET](https://img.shields.io/badge/.NET-10.0-512BD4)](https://dotnet.microsoft.com/) [![FFXIV](https://img.shields.io/badge/FFXIV-Dawntrail-c3a37f)](https://www.finalfantasyxiv.com/) @@ -11,7 +11,7 @@ Hellion Forge

-**Version 1.4.3** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, built on +**Version 1.4.4** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, built on [Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2). Hellion Chat is a privacy-first plugin built on the Chat 2 foundation. The majority of the engine comes from Chat 2 @@ -286,14 +286,16 @@ An optional submission to the Dalamud main plugin repo (in addition to the custo ## Project Status -**Version 1.4.3** — Plugin-load async init plus repo cutover: the plugin has been migrated to Dalamud's -`IAsyncDalamudPlugin` API. The constructor now handles only bootstrap essentials (config load, language init, conflict -detection); migrations, service allocations, window construction, and hook subscriptions move into `LoadAsync`, allowing -Dalamud to keep the UI responsive during heavy lifting. A schema gate replaces the v9 → v16 migration chain; configs at -schema v16+ load directly, older configs trigger an "install v1.4.2 first" error message. Custom repo URL migrated to -`gitea.hellion-forge.cloud`; the GitHub repo remains as a frozen v1.4.2 snapshot. Plugin load time is ~3.7 s median (5 -reloads), comparable to v1.4.2 — the async migration is the foundation for v1.4.4 lazy-init optimizations, not a direct -user-facing win. Fourth sub-patch of the v1.4.x polish sweep series (as of 2026-05-08). +**Version 1.4.4** — Threading and IPC safety polish on top of the v1.4.3 async-load foundation. The +`AutoTellTabsService` hot-path getter now reads from an `Interlocked` counter instead of taking a lock on every +render frame, with a resync hook for the snapshot-restore path in `SaveConfig` and a pure-helper test mirror in the +Build-Suite repo. The Honorific integration carries per-method threading banners so the framework-thread invariant is +visible at the call site, and an unsubscribe failure now logs at Warning instead of Debug — a leaked subscription +across plugin reloads is exactly the kind of thing that should not be silent. The AutoTranslate warmup thread is +finally marked `IsBackground = true`, matching the pattern used in `MessageManager` and `Plugin.RetentionSweep` since +v1.4.0. The privacy filter logs once per unknown ChatType so a future patch's added channel does not drop off the +radar, and new installs default `PrivacyPersistUnknownChannels` to `true` as a failsafe; existing configs keep their +explicit choice. No schema bump, no migration. Fifth sub-patch of the v1.4.x polish sweep series (as of 2026-05-12). Hellion Chat is a standalone plugin, no longer a fork in the repository sense. Fully completed: