chore(release): 2.0.5 -- focus, and a way out

Version, manifests, changelog and the Forge post for the tell-focus and
tab-closing fixes.

The manifest changelog drops the 2.0.1 block to stay inside the four-entry
slim rule; earlier history keeps its link. The roadmap loses the
GlobalScaleSafe item, which is done, and gains two that came out of this
cycle's review: PopoutSlotMap has no synchronisation, and the database
viewer and symbol picker are still English -- 90 Unicode character names
in the picker alone, which is a cycle rather than a patch note.
This commit is contained in:
2026-08-23 02:16:32 +02:00
parent eca566321a
commit 04169ddcf1
7 changed files with 88 additions and 20 deletions
+12
View File
@@ -0,0 +1,12 @@
---
subtitle: "Fokus bleibt, Tabs lassen sich schließen"
versionsnatur: "Bugfix-Release"
---
Zwei Meldungen aus dem Test, beide in derselben Ecke: was ein eintreffendes Flüstern mit dem macht, was du gerade tust — und was du mit einem Tab machen kannst, wenn er erst einmal da ist.
- **Ein Flüstern, das ankam während du geschrieben hast, hat dir die Tastatur weggenommen.** Der Tab wechselte unter dir weg, und in diesem Spiel heißt das, dass die nächsten Tasten deine Figur bewegen statt Text zu schreiben. Schlimmer: Der halb getippte Satz konnte beim Falschen landen. Was du tippst gehört dem Fenster, der Empfänger wird aber von dem Tab gelesen, der beim Enter gerade aktiv ist. Solange du an einer Zeile schreibst, springt jetzt nichts mehr — in keinem Modus. Der Tab taucht trotzdem auf und wartet mit seinem Ungelesen-Punkt.
- **Ein Flüster-Tab ließ sich überhaupt nicht schließen.** Der Eintrag ging beim Fenster-Neubau in 2.0.0 verloren: Er lebte im alten Menü, und das neue hat Umbenennen, Töne, Herauslösen und Anheften zurückgebracht, das Schließen aber nie. Flüster-Tabs sind absichtlich aus dem Einstellungs-Editor ausgenommen, mit einem Verweis auf das Kontextmenü — das sie ebenfalls nicht schließen konnte. Jetzt per Rechtsklick auf jedem Tab. Bei einem angehefteten Flüster-Tab musst du erst die Anheftung lösen, damit ein Fehlklick kein Gespräch beendet, das du behalten wolltest.
- **Zwei Einstellungen entschieden, wo ein Flüstern aufgeht, und die ältere gewann immer.** "Neue /tell-Tabs direkt als Pop-out öffnen" feuerte beim Anlegen des Tabs, einen Tick bevor der Modus darunter überhaupt gefragt wurde — deshalb sah der aus, als täte er nichts. Beide sind jetzt eine. Deine bisherige Wahl wird übernommen.
- **"Aus" ist aus dieser Auswahl verschwunden.** Es hat nie verhindert, dass ein Flüster-Tab entsteht, das macht der Schalter weiter oben. Es hat nur den Sprung dorthin unterbunden, und genau dafür ist der Schalter darunter da.
- **Einen Tab zu schließen konnte ein Pop-out beschädigen, in dem du gerade warst.** Der Fokus sprang immer auf den ersten Tab der Liste, auch wenn der in einem eigenen Fenster offen war, und nahm ihm dabei seine Flüster-Bindung.
- **Kleinkram.** "Pop Out" im Kontextmenü war auf jedem Client englisch, die Modusnamen ebenfalls. Der Hinweis zum Anheft-Limit verwies auf eine Funktion, die im Mai entfernt wurde. Im Spanischen stand ein Wort, das es nicht gibt, im Griechischen ein unübersetztes, im europäischen Portugiesisch eines, das seinem eigenen Knopf widersprach. Und segmentierte Einstellungszeilen haben lange Beschriftungen abgeschnitten.
+1 -1
View File
@@ -1,7 +1,7 @@
<Project Sdk="Dalamud.NET.Sdk/15.0.0"> <Project Sdk="Dalamud.NET.Sdk/15.0.0">
<PropertyGroup> <PropertyGroup>
<!-- Independent versioning; see yaml changelog for upstream Chat 2 base --> <!-- Independent versioning; see yaml changelog for upstream Chat 2 base -->
<Version>2.0.4</Version> <Version>2.0.5</Version>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<!-- Use lock file to pin exact versions --> <!-- Use lock file to pin exact versions -->
+12 -9
View File
@@ -21,6 +21,18 @@ tags:
- Replacement - Replacement
- Privacy - Privacy
changelog: |- changelog: |-
**v2.0.5 — Focus, and a way out (2026-08-23)**
Two tester reports, both about the same corner: what a tell does to what you were doing, and what you can do about a tab once it exists.
- **A tell arriving while you were typing took the keyboard.** The tab switched under you, and in this game that means the next thing you type walks your character around. It could also send your sentence to the wrong person: what you have typed belongs to the window, while the recipient is read off whichever tab is active when you press Enter — so a line meant for one person could leave addressed to whoever had just written. Nothing is revealed now while you are mid-sentence, in any mode. The tab still appears with its unread mark and waits for you.
- **A tell tab could not be closed.** The entry was lost in the 2.0.0 window rebuild: it lived in the old menu, and the rebuilt one restored renaming, sounds, pop-outs and pinning but not this. Tell tabs are kept out of the settings editor on purpose, with a note pointing at the context menu — which could not close them either. Right-click any tab to close it. A pinned tell tab asks you to unpin it first, so one misclick cannot end a conversation you meant to keep.
- **Two settings decided where a tell opens, and the older one always won.** "Open new /tell tabs as a pop-out" fired when the tab was created, a tick before the mode below it was ever asked — which is why that mode looked like it did nothing. They are one setting now and your existing choice carries over. "Off" went with them: it never stopped tell tabs from being created, that is the switch further up, it only stopped the jump to them, which is what the switch below it does.
- **Closing a tab could break a pop-out you were using.** Re-anchoring always jumped to the first tab in the list, even when that tab was open in its own window, and stripped its tell binding on the way there.
- **Smaller things.** "Pop Out" in the context menu was English on every client, as were the tell-open modes. The pinned-tab limit still pointed at a feature removed in May. Spanish had a word that does not exist, Greek had an untranslated one, Portuguese contradicted its own button. Segmented settings rows cut long labels in half. The last compiler warning in the project is gone.
---
**v2.0.4 — Housekeeping (2026-08-20)** **v2.0.4 — Housekeeping (2026-08-20)**
Nothing changes in how the plugin behaves. Two pieces of tidying that were overdue. Nothing changes in how the plugin behaves. Two pieces of tidying that were overdue.
@@ -44,13 +56,4 @@ changelog: |-
- **Five settings descriptions printed `{0}` instead of the plugin name.** All 25 languages were affected, English included — it just hid better there, since "Hide {0} during cutscenes" still scans as a sentence while German puts the placeholder first. A test now walks every resource string with a placeholder and fails if one reaches a widget unformatted. - **Five settings descriptions printed `{0}` instead of the plugin name.** All 25 languages were affected, English included — it just hid better there, since "Hide {0} during cutscenes" still scans as a sentence while German puts the placeholder first. A test now walks every resource string with a placeholder and fails if one reaches a widget unformatted.
- **New preview images.** The ones in the plugin installer were from 8 May and showed the interface as it looked before any of the window rebuilds. - **New preview images.** The ones in the plugin installer were from 8 May and showed the interface as it looked before any of the window rebuilds.
---
**v2.0.1 — Hotfix (2026-08-19)**
A same-day follow-up to 2.0.0 with no user-facing changes. Install it if you picked up 2.0.0 in the first hour; there is nothing new to look at, it just carries a dependency update the 2.0.0 archive was built without.
- MessagePack raised from 3.1.4 to 3.1.7. It handles the payload serialisation behind the message database. The advisories are a recursion-depth limit in `Skip` and a fault in LZ4 decompression, both reachable only through crafted input — this plugin writes and reads its own bytes in a local file, so the practical exposure needs someone who already has write access to it. Lifted anyway, because it costs nothing.
- The release workflow publishes through the Gitea API directly. The 2.0.0 build succeeded and then failed to attach its own archive, which is why that release had to be completed by hand.
Earlier history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases Earlier history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases
+2 -2
View File
@@ -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) [![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) [![License: EUPL-1.2](https://img.shields.io/badge/License-EUPL--1.2-blue.svg)](LICENSE)
[![Latest release](https://img.shields.io/badge/release-v2.0.4-brightgreen)](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/latest) [![Latest release](https://img.shields.io/badge/release-v2.0.5-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) [![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/) [![.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/) [![FFXIV](https://img.shields.io/badge/FFXIV-Dawntrail-c3a37f)](https://www.finalfantasyxiv.com/)
@@ -11,7 +11,7 @@
<img src="docs/images/hellion-forge.png" alt="Hellion Forge" width="180" /> <img src="docs/images/hellion-forge.png" alt="Hellion Forge" width="180" />
</p> </p>
**Version 2.0.4** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, originally **Version 2.0.5** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, originally
forked from [Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2). forked from [Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2).
Hellion Chat is a privacy-first chat plugin that began as a fork of Chat 2. The core it grew from Hellion Chat is a privacy-first chat plugin that began as a fork of Chat 2. The core it grew from
+37
View File
@@ -11,6 +11,43 @@ releases as an overview and links to the release pages for details.
--- ---
## [2.0.5] — 2026-08-23
Two tester reports about the same corner of the plugin: what an incoming tell does
to what you were doing, and what you can do about a tab once it exists.
### Fixed
- A tell arriving while you were typing took the keyboard focus, which in this game
means the next keystrokes reach the character rather than the chat. It could also
send the half-typed line to the wrong person: the text belongs to the window, the
recipient is read off whichever tab is active at Enter. Nothing is revealed now
while an input is in use, in any mode.
- Tell tabs could not be closed at all. The context menu lost its close entry in the
2.0.0 window rebuild, and the settings editor excludes tell tabs by design.
- Closing a tab re-anchored on the first tab in the list even when that tab was open
in a pop-out, stripping its tell binding. With every tab popped out, the seed and
the re-anchor contradicted each other on every frame.
- The pinned-tab limit message pointed at a feature removed in May. Spanish carried a
non-existent word, Greek an untranslated one, and European Portuguese used a verb
that contradicted its own button.
- Segmented settings rows measured a flat 200px and cut off longer labels.
### Changed
- Where a tell opens is one setting now. "Open new /tell tabs as a pop-out" and the
tell-open mode both decided it, and the former won every time because it fired at
tab creation. Config schema 28 carries the existing choice forward.
- The tell-open mode dropped its "Off" option, which never prevented tell tabs — that
is the auto-tell switch — and only suppressed the jump to them, which the switch
below it already does.
- "Pop Out" in the tab context menu and the tell-open mode names were hardcoded
English on every client. They are translated into all 25 languages.
- `Metrics.Scale` no longer calls the obsolete `GlobalScaleSafe`. The project builds
without compiler warnings.
---
## [2.0.4] — 2026-08-20 ## [2.0.4] — 2026-08-20
Housekeeping. Nothing changes in how the plugin behaves. Housekeeping. Nothing changes in how the plugin behaves.
+18 -2
View File
@@ -12,6 +12,16 @@ be a poor fit for the plugin's privacy-first scope during brainstorming.
## Released ## Released
**v2.0.5 — Focus, and a way out (2026-08-23)** came out of two tester reports about
the same corner. A tell arriving mid-sentence took the keyboard, which in this game
sends the next keystrokes to the character; worse, it could address a half-typed line
to the wrong person, since the input buffer belongs to the window while the recipient
is read off whichever tab is active at Enter. Tell tabs, separately, could not be
closed at all — the entry was lost in the 2.0.0 rebuild, and the settings editor
excludes them on purpose. Where a tell opens is one setting now rather than two that
raced each other, and the tell-open modes plus the context menu's Pop Out entry were
the last hardcoded English strings in the plugin.
**v2.0.2 — Emotes out, placeholders fixed (2026-08-19)** removed BetterTTV emote **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 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 where nearly all of them came from; what remained was 54 mostly static images, one
@@ -94,8 +104,14 @@ a later pass rather than rushed into a patch:
- **An orphaned `EmoteCacheV1/` directory** stays on disk for anyone who ran a - **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 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. would be tidier than asking people to delete it by hand.
- **`Metrics.Scale` uses the deprecated `ImGuiHelpers.GlobalScaleSafe`**, which is - **`PopoutSlotMap` is unsynchronised.** A plain dictionary plus a bool array,
the only compiler warning left in the build. written from the draw thread and from the framework thread. Reading a dictionary
while another thread writes it can hang or return the wrong slot. Found during the
2.0.5 review and deliberately left out of a patch release: a lock here needs its
ordering against `TabsListLock` worked out first.
- **The database viewer and the symbol picker are still English.** The symbol picker
alone carries 90 Unicode character names, which is a cycle of its own rather than
an addition to a patch.
--- ---
+6 -6
View File
File diff suppressed because one or more lines are too long