From 6e24885241f2b5616c1792895fd22ce14af717a3 Mon Sep 17 00:00:00 2001 From: Jon Kazama Date: Wed, 19 Aug 2026 23:41:23 +0200 Subject: [PATCH] docs: the privacy claim gets stronger, so the documents have to say so Removing BetterTTV took out the plugin's only outbound network call, and five documents were still describing it as present. PRIVACY.md led with "one outbound network call exists by design" -- the opposite of what shipped an hour ago, and the one claim in that file people actually check. PRIVACY.md now opens with none at all. The section that described the call is kept and marked as removed rather than deleted, so the claim can be read against what it replaced: the startup fetch meant BetterTTV saw an IP as soon as the plugin loaded, whether an emote ever appeared or not. Worth leaving visible. BetterTTV also comes out of the third-party table, which now lists only the two parties nobody using this plugin through Dalamud can avoid. SECURITY.md listed the EmoteCache HTTP client as in scope for reports. There is nothing there to report on. THIRD_PARTY_NOTICES.md named the call as current; both entries it has ever carried are now historical. README dropped the pointer to the outbound call and the switch for it, a stability bullet about a crash fix in code that no longer exists, and the line in the Chat 2 migration that moved an emote cache directory nothing reads. ROADMAP gained 2.0.1 and 2.0.2, and a section for what the 2.0.0 push left behind: 47 overlong comment blocks, channel names translated in only ten of the 25 languages, an orphaned EmoteCacheV1 directory on anyone who ran an older build, and the deprecated GlobalScaleSafe call that is the last compiler warning in the build. --- PRIVACY.md | 63 +++++++++++++++---------------------- README.md | 10 ++---- SECURITY.md | 1 - docs/ROADMAP.md | 31 ++++++++++++++++++ docs/THIRD_PARTY_NOTICES.md | 11 +++---- 5 files changed, 64 insertions(+), 52 deletions(-) diff --git a/PRIVACY.md b/PRIVACY.md index a6fedca..5b11a8d 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -20,8 +20,8 @@ Last reviewed: 2026-08-18 (HellionChat v1.12.0). `pluginConfigs/HellionChat/` directory. - The plugin does not phone home. No telemetry, no analytics, no crash reporter, no usage counter, no remote update check beyond what Dalamud itself does. -- One outbound network call exists by design: the BetterTTV emote service (for chat emotes). It is - documented in detail below and can be reasoned about per request. +- As of v2.0.2 the plugin makes **no outbound network requests at all**. The one that existed, the + BetterTTV emote service, was removed along with the feature it served. - You can export every message the plugin has stored, in Markdown, JSON or CSV. You can delete it by channel, by age, or all of it at once. @@ -42,8 +42,9 @@ HellionChat keeps three kinds of state on your machine, all under ExtraChat. Public chat, NPC dialogue, system messages and battle logs are dropped on the storage layer and never written to disk. -3. **Cached emote images** (`EmoteCacheV1/` directory). Image files downloaded from BetterTTV when - an emote appears in a message you receive. See "Outbound network calls" below. +Earlier versions kept a third item here, an `EmoteCacheV1/` directory of images downloaded from +BetterTTV. Nothing writes to it as of v2.0.2. If you used a version before that, the directory is +still on disk and can be deleted by hand; the plugin no longer reads or creates it. There is no shared state with the upstream Chat 2 plugin. `pluginConfigs/HellionChat/` is independent from `pluginConfigs/ChatTwo/`. @@ -73,35 +74,23 @@ turn the retention sweep on in the settings. Until then, stored messages stay un ## Outbound network calls -HellionChat makes one kind of automatic outbound network request, inherited from upstream Chat 2 and -documented here because "GDPR-by-design" means you should know what your client does on your behalf. -The second one this section used to list, the Lodestone font download, was removed in v1.0.4 and the -font is bundled instead. +**None.** As of v2.0.2 the plugin makes no automatic outbound network requests of any kind. Both +calls this section used to describe are gone, and the section is kept so the claim can be checked +against what it replaced rather than simply asserted. -### 1. BetterTTV emote service (`api.betterttv.net`, `cdn.betterttv.net`) +### 1. BetterTTV emote service (removed in v2.0.2) -- **What it does:** When a chat message arrives that references a BetterTTV emote, the plugin asks - the BetterTTV API for the emote metadata and downloads the image from the BetterTTV CDN to display - it inline. -- **What is sent:** A standard HTTPS GET request. Your IP address reaches BetterTTV (unavoidable for - any HTTPS request); the request itself contains no identifying user data, no character name, no - message text. Only the emote ID being looked up is in the URL path. -- **When it triggers:** - - The emote _list_ (global emotes plus the top-1500 community emotes over fifteen API pages) is - fetched from `api.betterttv.net` once per session at plugin startup, provided the **Show - emotes** option is on. This first list-fetch happens before any chat message has arrived. - BetterTTV's edge therefore sees your IP as soon as the plugin loads, not only after an emote is - mentioned. - - The individual emote _images_ on `cdn.betterttv.net` are fetched on demand, only when an - incoming chat message contains a token matching one of the cached IDs. These are cached locally - (`EmoteCacheV1/`) and reused across sessions. -- **Cached:** Yes, in `EmoteCacheV1/`. A given emote is downloaded once per machine and reused. -- **How to opt out:** Turn off the **Show emotes** option in Settings → Chat → Display modes. With - it disabled, the emote cache does not load and no requests to BetterTTV are made for the rest of - the session. -- **BetterTTV's privacy policy:** +Until v2.0.2 the plugin fetched an emote list from `api.betterttv.net` once per session at startup, +and individual images from `cdn.betterttv.net` on demand, caching them in `EmoteCacheV1/`. The +startup fetch meant BetterTTV's edge saw your IP as soon as the plugin loaded, whether or not an +emote ever appeared in your chat. A setting could switch it off, but it was on by default. -Source: `HellionChat/EmoteCache.cs`. +The feature was removed rather than defaulted off: BetterTTV moved its shared-emote endpoint behind +authentication, which left 54 mostly static images from a set of 65, and that is not worth a +connection nobody asked for. The download path, the cache directory and the renderer are gone from +the source. + +Messages already stored with emotes in them remain readable and show the code that was typed. ### 2. Square Enix Lodestone font (removed in v1.0.4) @@ -204,13 +193,12 @@ messages. Existing data needs the retroactive cleanup to apply retroactively, by | Party | Why they appear | What reaches them | Their privacy policy | | ---------------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------- | -| BetterTTV (NightDev LLC) | Optional emote rendering | HTTPS request for an emote ID; your IP | | | Hellion Forge (Gitea, self-hosted by Hellion Online Media) | Plugin distribution via custom repo, issue tracker | Whatever the Gitea instance sees from any HTTPS request to a public repo | | | Dalamud / XIVLauncher (goatcorp) | Plugin loader, font subsystem, repo polling | Whatever Dalamud reports for itself; out of HellionChat's scope | | -The Hellion Forge Gitea instance and the Dalamud/XIVLauncher loader are unavoidable for anyone using -HellionChat through Dalamud at all. BetterTTV is the only third party HellionChat introduces on top -of that baseline, and it is opt-out via settings. +Both are unavoidable for anyone using HellionChat through Dalamud at all. Since v2.0.2 the plugin +introduces no third party on top of that baseline: BetterTTV was the only one, and it left with the +emote feature. --- @@ -223,11 +211,10 @@ plugin pulls in: - `Microsoft.Data.Sqlite`: local SQLite access, no network. - `morelinq`: LINQ helpers, no network. - `Pidgin`: parser combinators, no network. -- `SixLabors.ImageSharp`: image decoding (used for the BetterTTV emote pipeline), no network on its - own. +- `SixLabors.ImageSharp`: image decoding (icon handling), no network on its own. -The single network call listed under "Outbound network calls" is written directly in HellionChat's -own source, not delegated to a dependency. +No dependency opens a connection on the plugin's behalf, and since v2.0.2 the plugin opens none +itself either. --- diff --git a/README.md b/README.md index 9e9a6db..4fa6ba8 100644 --- a/README.md +++ b/README.md @@ -84,9 +84,9 @@ Hellion Chat is developed under **Hellion Forge**, the specialized modding and p - **Export** to Markdown, JSON, or CSV via the Dalamud file dialog (GDPR Art. 15 right of access). Narrow it by channel group, by age in days, or by a substring of the sender's name. - **Full privacy overview** in [`PRIVACY.md`](PRIVACY.md) and third-party components in - [`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md): what is stored, the single outbound - call that exists and how to switch it off (BetterTTV), an explicit no-telemetry statement, - and the mapping of GDPR rights (Art. 15/17/18/20/21) to concrete plugin functions. + [`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md): what is stored, an explicit + no-telemetry statement, and the mapping of GDPR rights (Art. 15/17/18/20/21) to concrete plugin + functions. As of v2.0.2 the plugin makes no outbound network requests at all. ### Onboarding @@ -143,7 +143,6 @@ Deuteranopia/Protanopia-safe (red-green color blindness) based on the Wong/Okabe ### Stability -- BetterTTV cache crash fix (null key handling). - Font atlas build fallback for missing system fonts. - Defensive wrapping of all migration operations. @@ -272,9 +271,6 @@ Linux / XIVLauncher Core: ```bash mv ~/.xlcore/pluginConfigs/ChatTwo/chat-sqlite.db \ ~/.xlcore/pluginConfigs/HellionChat/chat-sqlite.db -[ -d ~/.xlcore/pluginConfigs/ChatTwo/EmoteCacheV1 ] && \ - mv ~/.xlcore/pluginConfigs/ChatTwo/EmoteCacheV1 \ - ~/.xlcore/pluginConfigs/HellionChat/ ``` Windows / XIVLauncher: diff --git a/SECURITY.md b/SECURITY.md index cdd9438..9fd8aa2 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -24,7 +24,6 @@ I respond on weekdays during European business hours. influence) - The privacy filter in `MessageStore.cs` and the export pipeline - The configuration migration logic -- The `EmoteCache` HTTP client and path handling - The Auto-Tell-Tabs spawn logic and history preload ### Out of scope diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 27a348c..dce8c4e 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -12,6 +12,18 @@ be a poor fit for the plugin's privacy-first scope during brainstorming. ## Released +**v2.0.2 — Emotes out, placeholders fixed (2026-08-19)** removed BetterTTV emote +support entirely. Its shared-emote endpoint went behind authentication and that was +where nearly all of them came from; what remained was 54 mostly static images, one +of them animated at 492 frames. With it went the plugin's only outbound network +call. Also fixed five settings descriptions that printed `{0}` instead of the +plugin name, and replaced the preview images, which were older than every cycle in +2.0.0. + +**v2.0.1 — Hotfix (2026-08-19)** lifted MessagePack to 3.1.7 and repaired the +release workflow, which built the 2.0.0 archive successfully and then failed to +attach it. + **v2.0.0 — Rebuilt, Repaired, Reset (2026-08-19)** ships everything that was developed as v1.6.0 through v1.15.0. Those versions were never published on their own: the whole window layer was being rewritten from ImGui defaults to custom @@ -66,6 +78,25 @@ follows. Native-speaker review of the AI-assisted v1.5.3 translations (13 legacy Crowdin locales) runs in parallel as a continuous correction pass, gathered via the Hellion Forge Discord. +### Carried over from the 2.0.x cycle + +Small items that surfaced during the 2.0.0 release and were deliberately left for +a later pass rather than rushed into a patch: + +- **Comment length.** 47 comment blocks run to 12 lines or more, the longest at 41. + The task codes and personal names came out in 2.0.0; trimming the long ones needs + judgement rather than a pattern, since several carry reasoning that is now the + basis of the style reference. +- **Channel names are only translated in 10 of 25 languages.** Spanish had two of + three translated and one left in English, which was corrected. The other 15 sit + fully in English, which is correct for anyone on an English client — FFXIV ships + four client languages — but inconsistent where a language does have its own. +- **An orphaned `EmoteCacheV1/` directory** stays on disk for anyone who ran a + version before 2.0.2. Nothing reads or writes it. A one-time cleanup on load + would be tidier than asking people to delete it by hand. +- **`Metrics.Scale` uses the deprecated `ImGuiHelpers.GlobalScaleSafe`**, which is + the only compiler warning left in the build. + --- ## v1.5.6 — Settings Overhaul + Filter & Notification Polish (released 2026-05-23) diff --git a/docs/THIRD_PARTY_NOTICES.md b/docs/THIRD_PARTY_NOTICES.md index 0cbefd8..c37541e 100644 --- a/docs/THIRD_PARTY_NOTICES.md +++ b/docs/THIRD_PARTY_NOTICES.md @@ -55,13 +55,12 @@ history, including the close of active cherry-picking in the v1.4.x cycle. ## Components that touch the network Of everything listed above, **none** of the bundled or NuGet components opens network connections on -their own. All outbound traffic is initiated explicitly by HellionChat's own source files and is -documented in `PRIVACY.md` under "Outbound network calls": +their own, and as of v2.0.2 neither does HellionChat itself. Both calls this list used to name are +gone: -- `HellionChat/EmoteCache.cs` → BetterTTV API + CDN (opt-out via setting) - -The earlier Square Enix Lodestone font download (`FontManager.cs`) was removed in v1.0.4 — it was a -leftover from upstream's removed webinterface feature and was no longer consumed. +- `HellionChat/EmoteCache.cs` → BetterTTV API + CDN, removed in v2.0.2 along with the emote feature. +- The Square Enix Lodestone font download (`FontManager.cs`), removed in v1.0.4 — a leftover from + upstream's removed webinterface feature that was no longer consumed. ---