release: bump to v1.4.10
This commit is contained in:
@@ -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>1.4.9</Version>
|
<Version>1.4.10</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 -->
|
||||||
|
|||||||
@@ -35,6 +35,50 @@ tags:
|
|||||||
- Replacement
|
- Replacement
|
||||||
- Privacy
|
- Privacy
|
||||||
changelog: |-
|
changelog: |-
|
||||||
|
**v1.4.10 — Symbol-Picker and Tell-History Fix (2026-05-16)**
|
||||||
|
|
||||||
|
Eleventh and final sub-patch of the v1.4.x polish-sweep series.
|
||||||
|
Symbol picker for the chat input, a tell-history reload fix for
|
||||||
|
users with many active partners, and a closing cleanup sweep
|
||||||
|
before v1.5.0 picks up the DI-container adoption.
|
||||||
|
|
||||||
|
- Symbol picker: a small smile-icon button left of the channel
|
||||||
|
indicator opens a popup with two tabs. The first lists all 161
|
||||||
|
FFXIV PUA glyphs (Dalamud's SeIconChar enum); the second
|
||||||
|
carries 97 server-verified BMP symbols (latin marks, currency,
|
||||||
|
the full Greek alphabet, geometric shapes, suits, notes) —
|
||||||
|
every one of them round-tripped through /echo and /say in a
|
||||||
|
four-round probe so the in-channel render matches what the
|
||||||
|
picker shows. Click drops the glyph at the caret, multi-insert
|
||||||
|
keeps the popup open, and a recent-used strip floats the last
|
||||||
|
sixteen picks across both tabs. Toggle in Settings → Chat →
|
||||||
|
Message behaviour, default on.
|
||||||
|
- Pinned auto-tell tabs reload their full history again: a
|
||||||
|
hidden 500-row scan cap in PreloadHistory used to override the
|
||||||
|
user-configurable AutoTellTabsHistoryPreload setting, so
|
||||||
|
less-frequent pinned partners (rare /tell sessions in an
|
||||||
|
otherwise busy week) lost their backlog. The cap is removed;
|
||||||
|
the (Receiver, Date) index keeps SQL fast, the client-side
|
||||||
|
loop still respects your setting as the upper bound.
|
||||||
|
- Slash-command teardown: /hellion, /hellionView,
|
||||||
|
/hellionDebugger (and #if DEBUG /hellionSeString) wrappers are
|
||||||
|
now cached as private fields. Plugin teardown detaches the
|
||||||
|
live registration instead of re-Register'ing with identical
|
||||||
|
args — closes a latent maintenance hazard from v1.4.9.
|
||||||
|
- v1.4.x polish-sweep wraps up here. The ImGuiListClipper render
|
||||||
|
refactor that was on the v1.4.10 reserve list got dropped
|
||||||
|
after cross-platform smoke showed the scroll rubber-band is a
|
||||||
|
Wine / Linux render-pipeline quirk, not universal — Windows
|
||||||
|
users never saw it. It will get its own platform-targeted
|
||||||
|
spike in a later patch. Next major cycle is v1.5.0 with the
|
||||||
|
DI-container adoption (Microsoft.Extensions.Hosting +
|
||||||
|
ILogger<T>) modelled on Lightless.
|
||||||
|
- Migration v17 stays (no schema bump).
|
||||||
|
|
||||||
|
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
**v1.4.9 — Plugin-Load Render Polish (2026-05-15)**
|
**v1.4.9 — Plugin-Load Render Polish (2026-05-15)**
|
||||||
|
|
||||||
Tenth sub-patch of the v1.4.x polish-sweep series. First-frame
|
Tenth sub-patch of the v1.4.x polish-sweep series. First-frame
|
||||||
@@ -150,43 +194,4 @@ changelog: |-
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**v1.4.6 — Code Hygiene and Refactor (2026-05-12)**
|
|
||||||
|
|
||||||
Maintenance patch. No user-visible behaviour changes; tightens the
|
|
||||||
development feedback loop, fixes two upstream-inherited bugs, and
|
|
||||||
prepares the code for the v1.4.7 backlog cleanup.
|
|
||||||
|
|
||||||
- preflight.sh gains a csharpier reflow check and a markdownlint
|
|
||||||
pass so style drift and markdown violations are caught at the
|
|
||||||
pre-push gate
|
|
||||||
- FontManager fallback catches the full set of atlas-toolkit
|
|
||||||
throws (IO, InvalidOperation, ArgumentException) — a corrupt
|
|
||||||
font config no longer takes down the whole atlas build
|
|
||||||
- BrandingLinks and IntegrationLinks URLs validated on plugin
|
|
||||||
load — a typo in a future URL rotation now throws at startup
|
|
||||||
- Cherry-picked from ChatTwo upstream f35b7d3: Chat.SetChannel
|
|
||||||
no longer leaks the native Utf8String when the linkshell check
|
|
||||||
rejects the channel
|
|
||||||
- Cherry-picked from ChatTwo upstream f35b7d3: Tab.Clone now
|
|
||||||
deep-clones UsedChannel and TellTarget — PopOut and Temp tabs
|
|
||||||
no longer mutate each other's channel state
|
|
||||||
- Active-tab underline scales with DPI and rounds to physical
|
|
||||||
pixels for crisp rendering above 100% scaling
|
|
||||||
- IconButton width parameter no longer subtracts HUD-scaled
|
|
||||||
padding from a raw int (measured width passes through verbatim)
|
|
||||||
- Internal: HellionStyle ChildBgAlpha extracted to a testable
|
|
||||||
helper; Plugin.SaveConfig clones only the temp tabs;
|
|
||||||
SettingsOverview caches the draw-list per frame;
|
|
||||||
Dalamud.Utility.Util surface routed through an IPlatformUtil
|
|
||||||
indirection (MessageStore IsWine probe is now testable in
|
|
||||||
isolation)
|
|
||||||
- Built-in themes: Crystal Nocturne (sapphire and electric
|
|
||||||
magenta over obsidian, by CRYSTALLITE) replaces Moonlit Bloom.
|
|
||||||
Users with Moonlit Bloom selected fall back to Hellion Arctic
|
|
||||||
on first load
|
|
||||||
|
|
||||||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Full history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases
|
Full history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases
|
||||||
|
|||||||
@@ -198,8 +198,8 @@ public sealed class Plugin : IAsyncDalamudPlugin
|
|||||||
if (Config.Version < 16)
|
if (Config.Version < 16)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException(
|
throw new InvalidOperationException(
|
||||||
$"HellionChat v1.4.9 requires config schema v16, got v{Config.Version}. "
|
$"HellionChat v1.4.10 requires config schema v16, got v{Config.Version}. "
|
||||||
+ "Please install v1.4.2 first to migrate the configuration, then upgrade to v1.4.9."
|
+ "Please install v1.4.2 first to migrate the configuration, then upgrade to v1.4.10."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Config.Version = 17;
|
Config.Version = 17;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
[](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/actions/workflows/build.yml)
|
[](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/actions/workflows/build.yml)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
[](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/latest)
|
[](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/latest)
|
||||||
[](https://github.com/goatcorp/Dalamud)
|
[](https://github.com/goatcorp/Dalamud)
|
||||||
[](https://dotnet.microsoft.com/)
|
[](https://dotnet.microsoft.com/)
|
||||||
[](https://www.finalfantasyxiv.com/)
|
[](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 1.4.9** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, built on
|
**Version 1.4.10** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, built on
|
||||||
[Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2).
|
[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
|
Hellion Chat is a privacy-first plugin built on the Chat 2 foundation. The majority of the engine comes from Chat 2
|
||||||
@@ -286,24 +286,23 @@ An optional submission to the Dalamud main plugin repo (in addition to the custo
|
|||||||
|
|
||||||
## Project Status
|
## Project Status
|
||||||
|
|
||||||
**Version 1.4.9** — Plugin-Load Render Polish. First-frame render cost is now well under Dalamud's 100 ms HITCH
|
**Version 1.4.10** — Symbol-Picker and Tell-History Fix. Eleventh and final sub-patch of the v1.4.x polish sweep
|
||||||
warning threshold (~76 ms median, down from ~127 ms). The gain comes from deferring six non-essential rendering
|
series. A new symbol-picker popup hangs off a smile-icon button left of the channel indicator: tab one lists all
|
||||||
sections on the very first Draw — bottom status bar, channel-name SeString chunks, window bounds check, hint
|
161 FFXIV PUA glyphs (Dalamud's `SeIconChar` enum); tab two carries 97 server-verified BMP symbols (latin marks,
|
||||||
banner, autocomplete and input-preview calculation — so the initial ImGui layout cost is spread between frame 0
|
currency, the full Greek alphabet, geometric shapes, suits, notes) — each one round-tripped through `/echo` and
|
||||||
and frame 1 instead of all hitting at once. At 60 fps the user sees those sections one frame (~17 ms) later, which
|
`/say` in a four-round whitelist probe so the in-channel render matches what the picker shows. Click drops the
|
||||||
is invisible inside the post-reload font-atlas build window. Slash commands `/hellion`, `/hellionView`,
|
glyph at the caret, multi-insert keeps the popup open, recent-used strip floats the last sixteen picks across
|
||||||
`/hellionSeString` and `/hellionDebugger` are now registered centrally during plugin load so they work before
|
both tabs. Toggle in Settings → Chat → Message behaviour, default on. Mid-cycle hotfix for pinned auto-tell tabs:
|
||||||
their target window is opened the first time. The configuration-button entry in Dalamud's plugin manager hangs on
|
PreloadHistory had a hidden 500-row SQL scan cap that overrode the user-configurable `AutoTellTabsHistoryPreload`
|
||||||
the same path. Three plugin-load profiling logs (auto-translate warm-up, message-store connect, tab filter) stay
|
setting — active users with many tell partners lost the backlog of less-frequent pinned partners. The cap is
|
||||||
on at Information level as a regression tripwire — if a future change pushes the load past 100 ms again, the cost
|
removed; the `(Receiver, Date)` index keeps SQL fast, the client-side loop respects the user setting as the upper
|
||||||
is right there in `/xllog`. The release also ships a ChatTwo IPC compatibility layer: HellionChat now mirrors
|
bound. Slash-command teardown cleanup: `/hellion`, `/hellionView`, `/hellionDebugger` (and `#if DEBUG /hellionSeString`)
|
||||||
ChatTwo's full IPC surface (`GetChatInputState`, `ChatInputStateChanged`, `Register`, `Unregister`, `Available`,
|
wrappers are cached as private fields so plugin teardown detaches the live registration instead of re-Register'ing
|
||||||
`Invoke`) under the `ChatTwo.*` namespace in addition to our existing `HellionChat.*` provider gates, so
|
with identical args. The original Reserve-A `ImGuiListClipper` refactor for `DrawMessages` was cancelled after
|
||||||
third-party integrations that historically only subscribe to ChatTwo's IPC (Artisan's and AllaganTools' context-
|
cross-platform smoke showed the scroll rubber-band is a Wine/Linux render-pipeline quirk, not universal — Windows
|
||||||
menu hooks are the practical examples) keep working without requiring a code change on their side. Conflict
|
users on v1.4.9 never saw it; the spike that targets the Wine path lives in a later patch. Migration v17 stays
|
||||||
detection prevents ChatTwo from loading in parallel with HellionChat, so there is no slot-collision risk at
|
(no schema bump). v1.4.x polish sweep wraps up here; next major cycle is v1.5.0 with the DI-container adoption
|
||||||
runtime. Migration v17 stays (no schema bump). Tenth sub-patch of the v1.4.x polish sweep series (as of
|
(`Microsoft.Extensions.Hosting` + `ILogger<T>`) modelled on Lightless (as of 2026-05-16).
|
||||||
2026-05-15).
|
|
||||||
|
|
||||||
Hellion Chat is a standalone plugin, no longer a fork in the repository sense. Fully completed:
|
Hellion Chat is a standalone plugin, no longer a fork in the repository sense. Fully completed:
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,31 @@ to the release pages for details.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Hellion Chat 1.4.10 — Symbol-Picker and Tell-History Fix (2026-05-16)
|
||||||
|
|
||||||
|
Eleventh and final sub-patch of the v1.4.x Polish-Sweep series. Symbol picker for the chat input, a tell-history reload fix
|
||||||
|
for users with many active partners, and a closing cleanup sweep before v1.5.0 picks up the DI-container adoption.
|
||||||
|
|
||||||
|
- Symbol picker for the chat input: smile-icon button left of the channel indicator opens a popup with two tabs —
|
||||||
|
161 FFXIV PUA glyphs (Dalamud's SeIconChar enum) and 97 server-verified BMP symbols round-tripped through `/echo` and
|
||||||
|
`/say` in a four-round probe. Cursor-aware splice, multi-insert keeps the popup open, recent-used strip floats the last
|
||||||
|
sixteen picks across both tabs. Toggle in Settings → Chat → Message behaviour, default on.
|
||||||
|
- Pinned auto-tell tabs reload their full history again. PreloadHistory had a hidden 500-row scan cap that overrode the
|
||||||
|
user-configurable `AutoTellTabsHistoryPreload` setting whenever you chatted with many partners; less-frequent pinned
|
||||||
|
partners lost their backlog. The cap is removed.
|
||||||
|
- Slash-command teardown cleanup: `/hellion`, `/hellionView`, `/hellionDebugger` (and `#if DEBUG /hellionSeString`) wrappers
|
||||||
|
are now cached as private fields so plugin teardown detaches the live registration instead of re-Register'ing with
|
||||||
|
identical args (latent maintenance hazard from v1.4.9).
|
||||||
|
- v1.4.x Polish-Sweep wraps up here. The ImGuiListClipper render refactor that was on the v1.4.10 reserve list got dropped
|
||||||
|
after cross-platform smoke showed the scroll rubber-band is a Wine/Linux render-pipeline quirk, not universal — Windows
|
||||||
|
users never saw it. It will get its own platform-targeted spike in a later patch. Next major cycle is v1.5.0 with the
|
||||||
|
DI-container adoption (Microsoft.Extensions.Hosting + ILogger<T>) modelled on Lightless.
|
||||||
|
- Migration v17 stays (no schema bump).
|
||||||
|
|
||||||
|
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Hellion Chat 1.4.9 — Plugin-Load Render Polish (2026-05-15)
|
## Hellion Chat 1.4.9 — Plugin-Load Render Polish (2026-05-15)
|
||||||
|
|
||||||
Tenth sub-patch of the v1.4.x polish-sweep series. First-frame render cost drops from ~127 ms median down to
|
Tenth sub-patch of the v1.4.x polish-sweep series. First-frame render cost drops from ~127 ms median down to
|
||||||
|
|||||||
+22
-9
@@ -10,16 +10,29 @@ the plugin's privacy-first scope during brainstorming.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Next Cycle (v1.4.10)
|
## Next Cycle (v1.5.0)
|
||||||
|
|
||||||
**Render Clipper, Symbol-Picker and Final-Cleanup.** Reserve items inherited from the v1.4.9 plan that did not need to
|
**DI-container adoption.** Microsoft.Extensions.Hosting plus `ILogger<T>` modelled on Lightless's `PluginHostFactory`
|
||||||
land in the HITCH-cut: an `ImGuiListClipper` for variable-height messages in `DrawMessages` (the OtterGui `ImGuiClip.cs`
|
pattern. The v1.4.x Polish-Sweep series is closed; v1.5.0 starts the structural cycle that the smaller F12.x indirection
|
||||||
wrapper is the idiom anchor), a Symbol Picker popup for the chat input (`imgui_demo.cpp` Popups & Modal Windows section
|
shims (`IPluginLogProxy`, `IPlatformUtil`) were paving the way for. After that, the Wine/Linux scroll-rubber-band spike
|
||||||
is the pattern reference), plus the carry-over from v1.4.9: structural First-Frame-Layout rewrite if the v1.4.9 selective
|
deferred from v1.4.10 (Reserve-A cancelled — Windows users never saw it) plus the First-Run-Wizard rework that lets users
|
||||||
defers turn out to be too narrow once user-side regressions surface. Lazy-Window-Init naive is **not** in scope — the
|
opt into the curated defaults instead of just picking a privacy profile.
|
||||||
v1.4.9 Stage-2 diagnose falsified that path (`WindowSystem.windows` is non-thread-safe, Game-Freeze under reload stress,
|
|
||||||
no measurable HITCH delta). A clean DI-container adoption (Lightless `PluginHostFactory` pattern) belongs in v1.5.x and
|
---
|
||||||
will revisit the question with the right threading model.
|
|
||||||
|
## v1.4.10 — Symbol-Picker and Tell-History Fix (released 2026-05-16)
|
||||||
|
|
||||||
|
Eleventh and final sub-patch of the v1.4.x Polish Sweep series. Symbol picker for the chat input — popup with two tabs
|
||||||
|
(161 FFXIV PUA glyphs via Dalamud's SeIconChar plus 97 server-verified BMP symbols probed through `/echo` and `/say` in
|
||||||
|
a four-round whitelist build) — cursor-aware splice, multi-insert, recent-used strip across both tabs, Settings toggle
|
||||||
|
in Chat → Message behaviour. Mid-cycle hotfix for pinned auto-tell tabs: PreloadHistory used to cap the SQL scan at
|
||||||
|
500 rows regardless of the user's `AutoTellTabsHistoryPreload` setting, so active users with many partners lost the
|
||||||
|
backlog of less-frequent pinned partners; the cap is gone, the `(Receiver, Date)` index keeps SQL fast, the client-side
|
||||||
|
loop respects the user setting as the upper bound. Slash-command teardown cleanup wires the v1.4.9 wrappers through
|
||||||
|
private fields so dispose detaches the live registration instead of re-registering with identical args. The original
|
||||||
|
Reserve-A `ImGuiListClipper` refactor for `DrawMessages` was cancelled after cross-platform smoke showed the scroll
|
||||||
|
rubber-band is a Wine/Linux render-pipeline quirk, not universal — Windows-side testing on v1.4.9 confirmed no lag.
|
||||||
|
Migration v17 stays.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user