From 1987d745d8a1a6a21dad638b601ea22a52a8b739 Mon Sep 17 00:00:00 2001 From: Jon Kazama Date: Tue, 18 Aug 2026 21:51:15 +0200 Subject: [PATCH] docs: hold the documentation against the code Every claim in the user-facing docs, checked against what the plugin actually does after A2 to A5. The two GDPR sections in PRIVACY.md describe features that only exist again as of this cycle, so they now name the screens they live on and say what the cleanup does with a channel this build does not recognise. The export sentence promised a date range; the form offers an age in days. PRIVACY.md also named "Show emotes" in Settings as the way to stop the one outbound call the plugin makes. That switch has had no control since May, and a documented opt-out that only exists in the JSON is not an opt-out, so the toggle is back in the chat tab. Both its strings were already translated. Dead paths: the README source tree still listed a file deleted in May, docs/IPC.md cited a window that no longer exists, the first-run wizard pointed at the same removed file, and the theme authoring guide sent readers to a Themes tab that is called Appearance. The changelog lost two double blank lines that were failing markdownlint and holding preflight red. Preflight is green again. Historical documents keep their old paths on purpose: the changelog and the AI disclosure describe what was true when they were written. --- .../Ui/Components/Settings/Tabs/ChatTab.cs | 11 ++++++++++ HellionChat/Ui/FirstRunWizard.cs | 4 +++- PRIVACY.md | 22 ++++++++++++++----- README.md | 7 +++--- docs/CHANGELOG.md | 2 -- docs/IPC.md | 4 ++-- docs/THEME-AUTHORING.md | 10 ++++----- 7 files changed, 41 insertions(+), 19 deletions(-) diff --git a/HellionChat/Ui/Components/Settings/Tabs/ChatTab.cs b/HellionChat/Ui/Components/Settings/Tabs/ChatTab.cs index 36f1fd6..eab173a 100644 --- a/HellionChat/Ui/Components/Settings/Tabs/ChatTab.cs +++ b/HellionChat/Ui/Components/Settings/Tabs/ChatTab.cs @@ -34,6 +34,17 @@ internal sealed class ChatTab v => Plugin.Config.Use24HourClock = v ); + // PRIVACY.md names this switch as the way to stop the one outbound + // call the plugin makes, and it has had no control since May. A + // documented opt-out that only exists in the JSON is not an opt-out. + _w.ToggleRow( + ImGui.GetID("chat.display.emotes"u8), + Language.Options_ShowEmotes_Name, + Language.Options_ShowEmotes_Desc, + () => Plugin.Config.ShowEmotes, + v => Plugin.Config.ShowEmotes = v + ); + // Descriptions move out of the help markers and onto the row. They // were written to be read; a (?) the user has to hover is where an // explanation goes to be ignored. diff --git a/HellionChat/Ui/FirstRunWizard.cs b/HellionChat/Ui/FirstRunWizard.cs index 91a5510..da28c30 100644 --- a/HellionChat/Ui/FirstRunWizard.cs +++ b/HellionChat/Ui/FirstRunWizard.cs @@ -368,7 +368,9 @@ public sealed class FirstRunWizard : Window // Mirror the DataAndPrivacy coupling: turning load-previous on // also turns filter-include on (otherwise old messages bypass // the filter chain), and turning filter-include off forces - // load-previous off. Same idiom as Ui/SettingsTabs/DataAndPrivacy.cs. + // load-previous off. The settings tab that used to hold the same + // pairing was removed in May; the coupling lives here alone until + // the two checkboxes are reachable again. if (loadPrev) _state.PendingFilterIncludePreviousSessions = true; } diff --git a/PRIVACY.md b/PRIVACY.md index 214186f..6ee5570 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -95,7 +95,7 @@ does on your behalf. incoming chat message contains a token matching one of the cached IDs. These are cached locally (`emoteCache/`) and reused across sessions. - **Cached:** Yes, in `emoteCache/`. A given emote is downloaded once per machine and reused. -- **How to opt out:** Turn off the **Show emotes** option in Settings → Chat. With it disabled, the +- **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:** @@ -148,17 +148,27 @@ locally, those rights translate directly into plugin features: ### Right to access (Art. 15) -Use the export feature in the plugin settings. You can export to **Markdown**, **JSON** or **CSV**, -filtered by channel, date range or sender substring. The export goes through a Dalamud file dialog -and writes wherever you point it, on your machine. +Settings → Data & Privacy → Export. You can export to **Markdown**, **JSON** or **CSV**, narrowed +by channel group, by age in days, or by a substring of the sender's name. The export goes through a +Dalamud file dialog and writes wherever you point it, on your machine. It reads the database on its +own connection and writes to a temporary file first, so a run that is interrupted leaves the +previous export in place rather than a file that looks complete and is not. ### Right to erasure (Art. 17) Two options: -1. **Targeted deletion.** The "retroactive cleanup" feature lets you apply your current whitelist to - the existing database. It shows a preview of what will be removed before you confirm with +1. **Targeted deletion.** Settings → Data & Privacy → Cleanup applies your current channel list to + the messages already stored. It shows a preview of what will be removed before you confirm with Ctrl+Shift, runs in the background, and calls `VACUUM` afterwards to actually shrink the file. + Channels this build does not recognise -- ones a game patch added after the plugin was released + -- survive the cleanup while "save unknown channel types" is on, for the same reason they are + stored in the first place: so the decision about them stays yours. + + The cleanup is only offered when it can mean something. With the privacy filter off, every + channel is stored and nothing contradicts your settings; with no channel selected, a cleanup + would delete everything, and that is what the clear button is for. Both cases say so instead of + offering a button that does not do what it looks like. 2. **Full deletion.** Close the game and delete the `pluginConfigs/HellionChat/` directory. The next plugin start will produce a fresh, empty configuration. diff --git a/README.md b/README.md index 51dce2a..6022dce 100644 --- a/README.md +++ b/README.md @@ -169,9 +169,10 @@ HellionChat/ │ └── Language*.resx # Upstream localization (Crowdin) ├── Ui/ │ ├── FirstRunWizard.cs # Three-profile onboarding -│ ├── HellionStyle.cs # ImGui theme push (local and global) -│ └── SettingsTabs/ -│ └── DataAndPrivacy.cs # Data & Privacy tab (filters, retention, cleanup, export) +│ ├── StyleEngine/ # Tokens, widgets and the theme push +│ ├── Windows/ # Main, settings, popouts, DB viewer +│ └── Components/Settings/Tabs/ +│ └── DataPrivacyTab.cs # Data & Privacy tab (filters, retention, cleanup, export) ├── Ipc/ # IPC channels, migrated to HellionChat.* in v1.0.0 ├── ChatTwoConflictDetector.cs # Blocks plugin load if upstream Chat 2 is active ├── images/ diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 00d2802..cbda130 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -130,7 +130,6 @@ release stays at v1.5.6. - Test suite 829 → 892, and `StatusBarCacheTests` is back in the build after sitting in the exclusion block. - ## [1.9.0] — unreleased (local only) Polish, tester-beta preparation and a concurrency hardening pass. **Not published** — the public @@ -164,7 +163,6 @@ the assembly version reads 1.9.0. - Removed `DeferredSaveFrames`: the debounce was fully wired but never armed. - Test suite 812 → 829, including migration and query-plan coverage. - ## Hellion Chat 1.5.6 — Settings Overhaul + Filter & Notification Polish (2026-05-23) - Settings window reorganised: ten tabs down to seven (General, Appearance, Chat, Window, Channels, Data & Privacy, About). Each tab now uses collapsible sections grouped by control type. Sections start collapsed every time you open a tab — less noise, easier to find what you need. diff --git a/docs/IPC.md b/docs/IPC.md index c851b8f..f0a5de9 100755 --- a/docs/IPC.md +++ b/docs/IPC.md @@ -169,8 +169,8 @@ the same tuple: `ChannelType` is the `HellionChat.Code.ChatType` enum value representing the target channel for the current submission. It is sourced from the active tab's `UsedChannel` (`HellionChat/Configuration.cs`), which the plugin keeps in sync by hooking the in-game shell -(`HellionChat/GameFunctions/Chat.cs`) and by resolving temporary overrides inside the chat UI -(`HellionChat/Ui/ChatLogWindow.cs:597`). `InputChannel` values are converted into the exported +(`HellionChat/GameFunctions/Chat.cs`) and by resolving temporary overrides in the input bar +(`HellionChat/Ui/Components/InputBar.cs`). `InputChannel` values are converted into the exported `ChatType` via `HellionChat/Code/InputChannelExt.ToChatType`. ### Behavior diff --git a/docs/THEME-AUTHORING.md b/docs/THEME-AUTHORING.md index e6da235..6556268 100644 --- a/docs/THEME-AUTHORING.md +++ b/docs/THEME-AUTHORING.md @@ -10,11 +10,11 @@ ## TL;DR -1. Open Settings → Themes → **Open themes folder** +1. Open Settings → Appearance → **Open themes folder** 2. Copy `example-theme.json` to `.json` in the same folder 3. Edit the file with any text editor 4. Reload the plugin (toggle off/on in `/xlplugins`) -5. Your theme appears in the Custom-Themes section in Settings → Themes +5. Your theme appears in the Custom-Themes section in Settings → Appearance That's the whole loop. The rest of this document is reference. @@ -24,7 +24,7 @@ That's the whole loop. The rest of this document is reference. %APPDATA%\XIVLauncher\pluginConfigs\HellionChat\themes\ ``` -(or the equivalent path on Linux/macOS — Settings → Themes → "Open themes folder" opens it +(or the equivalent path on Linux/macOS — Settings → Appearance → "Open themes folder" opens it directly). Each `*.json` file in this folder is loaded as one theme. The `example-theme.json` that HellionChat @@ -179,11 +179,11 @@ Check `/xllog` after a plugin reload to see what loaded and what didn't. 1. Edit the JSON, save the file. 2. Reload the plugin: `/xlplugins` → toggle HellionChat off, then on. -3. Settings → Themes → click your theme card. +3. Settings → Appearance → click your theme card. 4. Watch every plugin window (chat, settings, pop-out) and pick something to fix. 5. Tweak. Reload. Repeat. -Tip: the **Settings → Themes** picker shows a mini-mockup per theme — your colors are visible before +Tip: the **Settings → Appearance** picker shows a mini-mockup per theme — your colors are visible before you switch. ## Sharing themes