chore(release): v1.5.0 manifest bump
Version strings bumped across all eight tracked surfaces:
- HellionChat/HellionChat.csproj <Version>1.5.0</Version>
- repo.json AssemblyVersion + TestingAssemblyVersion = 1.5.0.0
- repo.json three DownloadLink* URLs -> /v1.5.0/latest.zip
- repo.json Changelog field synced with yaml
- HellionChat/HellionChat.yaml new v1.5.0 changelog block on top; v1.4.7
drops out per the four-block slim rule
- docs/CHANGELOG.md v1.5.0 entry prepended
- docs/ROADMAP.md Next Cycle pointer moves to v1.5.1, v1.5.0
joins the released-cycle archive block
- README.md three status surfaces (badge, header,
Project Status long-form) on v1.5.0
- .github/forge-posts/v1.5.0.md Discord announcement body (German)
Preflight blocks A-F all green. Changelog embed total 2050 / 5500 chars
(four subblocks), forge-post frontmatter inside the 60/40 char caps.
Tag, push, merge are reserved for Flo.
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
---
|
||||
subtitle: DI Foundation und Service-Refactor
|
||||
versionsnatur: Architektur-Cycle
|
||||
---
|
||||
|
||||
- **Architektur-Umbau ohne User-spürbare Verhaltens-Änderung:** der
|
||||
Plugin-Bootstrap wechselt auf einen Generic-Host DI-Container
|
||||
(`Microsoft.Extensions.Hosting` + `IServiceCollection`) nach dem
|
||||
Lightless-Sync-Muster. 18 Service-Klassen wandern von einem
|
||||
statischen `Plugin.LogProxy`-Locator auf typisierte
|
||||
`ILogger<T>`-Constructor-Injection. `DalamudLogger` brückt
|
||||
`Microsoft.Extensions.Logging` über auf Dalamuds `IPluginLog` —
|
||||
im xllog erscheinen jetzt Service-spezifische Spalten wie
|
||||
`[ MessageManager]` und `[Honori...ervice]`.
|
||||
- **Plugin.LogProxy bleibt für die acht Buckets erhalten,** die
|
||||
Constructor-Injection nicht erreicht: Static-Helper (EmoteCache,
|
||||
AutoTranslate, MemoryUtil, WrapperUtil), Dalamud-Reflektion
|
||||
(Configuration), Data-Class mit Massen-Instanziierung (Message)
|
||||
und Instanz-Klassen die nur aus Static-Methods loggen (FontManager,
|
||||
eine GameFunctions-Stelle).
|
||||
- **Performance bestätigt durch Cross-Plugin-Baseline:** HellionChat
|
||||
First-Frame-HITCH 77 ms Median, Chat 2 v1.40.2 74 ms Median — kein
|
||||
DI-Penalty gegenüber dem Upstream-Fork-Origin. Lightless und
|
||||
XIVInstantMessenger liegen bei ~7 ms weil sie ihren FontAtlas-Build
|
||||
deferren; das wird das v1.5.1-Item.
|
||||
- **User-sichtbarer Bug-Fix nebenbei:** Slash-Command-Einfügen in das
|
||||
Chat-Eingabefeld (Friend-List "/tell"-Action plus Plugin-Inserts
|
||||
von Artisan, AllaganTools und ähnlichen) ersetzt jetzt den
|
||||
vorhandenen Input, statt anzukonkatenieren. Cherry-Pick aus ChatTwo
|
||||
upstream `ee7768ac` mit Namespace-Anpassung.
|
||||
- **Foundation für die Plugin-Integrations-Wave:** v1.5.7-11
|
||||
(Context-Menu, NotificationMaster, Moodles, ExtraChat, XIVIM
|
||||
Quick-DM) werden ab jetzt strukturell handhabbar — neue Services
|
||||
sind ein `services.AddSingleton<T>` plus ein paar Factory-Lambda-
|
||||
Zeilen, kein Plugin.cs-Anflanschen mehr.
|
||||
- Migration v17 unverändert: kein Schema-Bump, kein
|
||||
Config-Migrations-Aufwand.
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
|
||||
<PropertyGroup>
|
||||
<!-- Independent versioning; see yaml changelog for upstream Chat 2 base -->
|
||||
<Version>1.4.10</Version>
|
||||
<Version>1.5.0</Version>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<!-- Use lock file to pin exact versions -->
|
||||
|
||||
@@ -35,6 +35,54 @@ tags:
|
||||
- Replacement
|
||||
- Privacy
|
||||
changelog: |-
|
||||
**v1.5.0 — DI Foundation and Service Refactor (2026-05-17)**
|
||||
|
||||
Major architecture cycle. The plugin bootstrap moves to a
|
||||
generic-host DI container (Microsoft.Extensions.Hosting +
|
||||
IServiceCollection) modelled on Lightless Sync. Service logging
|
||||
moves from a static Plugin.LogProxy locator to typed
|
||||
Microsoft.Extensions.Logging.ILogger<T> via constructor injection,
|
||||
bridged over Dalamud's IPluginLog by a custom DalamudLogger trio.
|
||||
|
||||
What changes under the hood:
|
||||
|
||||
- 18 instance-class services migrate to ILogger<T> via constructor
|
||||
injection across four slices: data layer (MessageStore,
|
||||
MessageManager, AutoTellTabsService), IPC and integrations
|
||||
(HonorificService, IpcManager, TypingIpc, ExtraChat, the three
|
||||
GameFunctions classes), UI window layer (ChatLogWindow,
|
||||
DbViewer, Popout, three settings tabs), and root (Commands,
|
||||
ThemeRegistry, PayloadHandler).
|
||||
- Plugin.LogProxy stays in place for the eight buckets ctor
|
||||
injection cannot reach: static helpers (EmoteCache,
|
||||
AutoTranslate, MemoryUtil, WrapperUtil), Dalamud-reflected
|
||||
types (Configuration), the Message data class, and instance
|
||||
classes that only log from static methods (FontManager, one
|
||||
GameFunctions site).
|
||||
- Plugin.cs finishes at 1012 lines — virtually identical to the
|
||||
pre-cycle 1013. The new Phase-1 host build and Plugin.X bridge
|
||||
wiring trade out exactly the service and window allocations
|
||||
that previously lived in LoadAsync.
|
||||
- Cross-plugin baseline confirms no performance penalty against
|
||||
Chat 2: HellionChat first-frame HITCH 77 ms median, Chat 2
|
||||
74 ms median. Lightless and XIVInstantMessenger sit around
|
||||
7 ms by deferring their font-atlas build past Finished
|
||||
loading — that pattern is the v1.5.1 follow-up.
|
||||
|
||||
User-visible:
|
||||
|
||||
- Slash-command insert fix: pasting a slash command into the
|
||||
chat input (Friend List "/tell" action, plugin-driven inserts
|
||||
from Artisan, AllaganTools etc.) now replaces the existing
|
||||
input instead of concatenating. Cherry-picked from ChatTwo
|
||||
upstream ee7768ac with namespace adaptation.
|
||||
|
||||
Migration v17 stays (no schema bump).
|
||||
|
||||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@@ -151,47 +199,4 @@ changelog: |-
|
||||
|
||||
---
|
||||
|
||||
**v1.4.7 — Backlog Cleanup and Mid-Features (2026-05-13)**
|
||||
|
||||
Eighth sub-patch of the v1.4.x polish-sweep series. First
|
||||
user-visible feature bundle since v1.4.5 — pinned tell tabs that
|
||||
survive relog, opt-in Honorific glow rendering, and a configurable
|
||||
sidebar.
|
||||
|
||||
- TempTell Pin: right-click a TempTell tab in the sidebar to pin
|
||||
it. Pinned tabs survive relog, keep their conversation history
|
||||
(loaded on demand from the message store), and stay bound to
|
||||
the same /tell partner. Hard cap of 5 pinned tabs in a pool
|
||||
separate from the 15-tab auto-tell pool — total ceiling is 20
|
||||
tabs. New 'Pinned' section in the sidebar with its own divider
|
||||
header
|
||||
- Honorific Glow outline now renders when the title carries a
|
||||
Glow colour. Opt-in via Settings → Integrations → 'Render glow
|
||||
outlines (Honorific)' (default off, dodges the per-frame
|
||||
DrawList overhead on low-end hardware). Gradient (Color3 /
|
||||
GradientColourSet / Wave / Pulse) is parsed but rendered
|
||||
statically — a later cycle will port the full animation
|
||||
- Sidebar width is now configurable in Theme & Layout (range
|
||||
44–160 px). Default stays icon-only; widen to fit section
|
||||
headers like 'Active Tells (3)' without truncation
|
||||
- Settings Save no longer pops the chat input back to /tell with
|
||||
a pinned partner — Configuration.UpdateFrom now preserves the
|
||||
runtime CurrentChannel across the persistent-tab merge, and
|
||||
TabSwitched deep-clones the seeded channel instead of sharing
|
||||
the previous tab's UsedChannel
|
||||
- Util/ImGuiUtil.cs DrawArrows IconButton id now uses
|
||||
(id + 1).ToString() instead of the operator-precedence quirk
|
||||
id + 1.ToString() — generated IDs stay numerically stable
|
||||
- Internal: IPluginLogProxy indirection over Dalamud's IPluginLog
|
||||
routes all ~91 Plugin.Log call sites through a testable proxy.
|
||||
MessageStore.Migrate0 can now run in xUnit without loading
|
||||
Dalamud.dll, closing the gap F12.1 left in v1.4.6
|
||||
- Internal: TempTab counter switched from an Interlocked cached
|
||||
field to a derived Tabs.Count(predicate) — pin-state transitions
|
||||
are cold-path and don't need lock-free reads
|
||||
|
||||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||||
|
||||
---
|
||||
|
||||
Full history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
[](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/actions/workflows/build.yml)
|
||||
[](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://dotnet.microsoft.com/)
|
||||
[](https://www.finalfantasyxiv.com/)
|
||||
@@ -11,7 +11,7 @@
|
||||
<img src="docs/images/hellion-forge.png" alt="Hellion Forge" width="180" />
|
||||
</p>
|
||||
|
||||
**Version 1.4.10** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, built on
|
||||
**Version 1.5.0** — 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,23 +286,19 @@ An optional submission to the Dalamud main plugin repo (in addition to the custo
|
||||
|
||||
## Project Status
|
||||
|
||||
**Version 1.4.10** — Symbol-Picker and Tell-History Fix. Eleventh and final sub-patch of the v1.4.x polish sweep
|
||||
series. A new symbol-picker popup hangs off a smile-icon button left of the channel indicator: tab one lists all
|
||||
161 FFXIV PUA glyphs (Dalamud's `SeIconChar` enum); tab two carries 97 server-verified BMP symbols (latin marks,
|
||||
currency, the full Greek alphabet, geometric shapes, suits, notes) — each one round-tripped through `/echo` and
|
||||
`/say` in a four-round whitelist probe so the in-channel render matches what the picker shows. Click drops the
|
||||
glyph at the caret, 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. Mid-cycle hotfix for pinned auto-tell tabs:
|
||||
PreloadHistory had a hidden 500-row SQL scan cap that overrode the user-configurable `AutoTellTabsHistoryPreload`
|
||||
setting — active users with many tell partners lost the backlog of less-frequent pinned partners. The cap is
|
||||
removed; the `(Receiver, Date)` index keeps SQL fast, the client-side loop respects the user setting as the upper
|
||||
bound. Slash-command teardown cleanup: `/hellion`, `/hellionView`, `/hellionDebugger` (and `#if DEBUG /hellionSeString`)
|
||||
wrappers are cached as private fields so plugin teardown detaches the live registration instead of re-Register'ing
|
||||
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
|
||||
users on v1.4.9 never saw it; the spike that targets the Wine path lives in a later patch. Migration v17 stays
|
||||
(no schema bump). v1.4.x polish sweep wraps up here; next major cycle is v1.5.0 with the DI-container adoption
|
||||
(`Microsoft.Extensions.Hosting` + `ILogger<T>`) modelled on Lightless (as of 2026-05-16).
|
||||
**Version 1.5.0** — DI Foundation and Service Refactor. Major architecture cycle: the plugin bootstrap moves to a
|
||||
generic-host DI container (`Microsoft.Extensions.Hosting` + `IServiceCollection`) modelled on Lightless Sync. All
|
||||
18 instance-class services migrate from a static `Plugin.LogProxy` locator to `Microsoft.Extensions.Logging.ILogger<T>`
|
||||
via constructor injection, with a custom `DalamudLogger` bridging the framework over to Dalamud's `IPluginLog`. The
|
||||
proxy stays for the eight buckets ctor-injection cannot reach (static helpers like `EmoteCache`, Dalamud-reflected
|
||||
`Configuration`, the `Message` data class, and static methods inside `FontManager` / `GameFunctions`). Plugin.cs
|
||||
finishes the cycle at 1012 lines — virtually identical to the pre-cycle 1013 — because the new Phase-1 host build
|
||||
and Plugin.X bridge wiring trade out exactly the service and window allocations that left `LoadAsync`. Cross-plugin
|
||||
baseline confirms no performance penalty vs Chat 2: HellionChat first-frame HITCH 77 ms median, Chat 2 74 ms.
|
||||
Lightless and XIVInstantMessenger sit around 7 ms by deferring their font-atlas build past `Finished loading` —
|
||||
that pattern is the v1.5.1 follow-up item. One user-visible fix bundled in from upstream: pasting a slash command
|
||||
into the chat input (Friend List "/tell" action, plugin-driven inserts) now replaces the existing input instead of
|
||||
concatenating onto whatever the user was typing. Migration v17 stays (no schema bump).
|
||||
|
||||
Hellion Chat is a standalone plugin, no longer a fork in the repository sense. Fully completed:
|
||||
|
||||
|
||||
@@ -10,6 +10,46 @@ to the release pages for details.
|
||||
|
||||
---
|
||||
|
||||
## Hellion Chat 1.5.0 — DI Foundation and Service Refactor (2026-05-17)
|
||||
|
||||
Major architecture cycle. The plugin bootstrap moves to a generic-host DI container
|
||||
(`Microsoft.Extensions.Hosting` + `IServiceCollection`) modelled on Lightless Sync. Service
|
||||
logging migrates from a static `Plugin.LogProxy` locator to typed
|
||||
`Microsoft.Extensions.Logging.ILogger<T>` via constructor injection, bridged over Dalamud's
|
||||
`IPluginLog` by a custom `DalamudLogger` trio.
|
||||
|
||||
### Under the hood
|
||||
|
||||
- 18 instance-class services migrate to `ILogger<T>` via constructor injection across four
|
||||
slices: data layer (`MessageStore`, `MessageManager`, `AutoTellTabsService`), IPC and
|
||||
integrations (`HonorificService`, `IpcManager`, `TypingIpc`, `ExtraChat`, three
|
||||
`GameFunctions` classes), UI window layer (`ChatLogWindow`, `DbViewer`, `Popout`, three
|
||||
settings tabs), and root (`Commands`, `ThemeRegistry`, `PayloadHandler`).
|
||||
- `Plugin.LogProxy` stays in place for the eight buckets ctor injection cannot reach:
|
||||
static helpers (`EmoteCache`, `AutoTranslate`, `MemoryUtil`, `WrapperUtil`),
|
||||
Dalamud-reflected types (`Configuration`), the `Message` data class, and instance classes
|
||||
that only log from static methods (`FontManager`, one `GameFunctions` site).
|
||||
- Plugin.cs finishes at 1012 lines — virtually identical to the pre-cycle 1013. The new
|
||||
Phase-1 host build and `Plugin.X` bridge wiring trade out exactly the service and window
|
||||
allocations that previously lived in `LoadAsync`.
|
||||
- Cross-plugin baseline confirms no performance penalty against Chat 2: HellionChat
|
||||
first-frame HITCH 77 ms median, Chat 2 74 ms median. Lightless and XIVInstantMessenger sit
|
||||
around 7 ms by deferring their font-atlas build past `Finished loading` — that pattern is
|
||||
the v1.5.1 follow-up item.
|
||||
|
||||
### User-visible
|
||||
|
||||
- Slash-command insert fix: pasting a slash command into the chat input (Friend List
|
||||
"/tell" action, plugin-driven inserts from Artisan, AllaganTools etc.) now replaces the
|
||||
existing input instead of concatenating onto whatever the user was typing. Cherry-picked
|
||||
from ChatTwo upstream `ee7768ac` with namespace adaptation.
|
||||
|
||||
Migration v17 stays (no schema bump).
|
||||
|
||||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
|
||||
+30
-6
@@ -10,13 +10,37 @@ the plugin's privacy-first scope during brainstorming.
|
||||
|
||||
---
|
||||
|
||||
## Next Cycle (v1.5.0)
|
||||
## Next Cycle (v1.5.1)
|
||||
|
||||
**DI-container adoption.** Microsoft.Extensions.Hosting plus `ILogger<T>` modelled on Lightless's `PluginHostFactory`
|
||||
pattern. The v1.4.x Polish-Sweep series is closed; v1.5.0 starts the structural cycle that the smaller F12.x indirection
|
||||
shims (`IPluginLogProxy`, `IPlatformUtil`) were paving the way for. After that, the Wine/Linux scroll-rubber-band spike
|
||||
deferred from v1.4.10 (Reserve-A cancelled — Windows users never saw it) plus the First-Run-Wizard rework that lets users
|
||||
opt into the curated defaults instead of just picking a privacy profile.
|
||||
**Honorific Full Gradient Port plus FontAtlas-Defer for a 10× HITCH cut.** v1.5.0 closed the DI-container cycle with
|
||||
no performance penalty against Chat 2 (77 ms vs 74 ms median first-frame HITCH), but the cross-plugin baseline against
|
||||
Lightless Sync and XIVInstantMessenger surfaced a clean optimisation: both plugins defer their font-atlas build until
|
||||
after `Finished loading` and sit at 6-7 ms HITCH, an order of magnitude below the ~75 ms floor that Chat 2 and HellionChat
|
||||
share. v1.5.1 ports that pattern. Plus the Honorific gradient render path — DTO is gradient-ready since v1.4.7, only the
|
||||
Wave / Pulse animation port remains. After that, First-Run-Wizard rework with curated defaults beyond the three privacy
|
||||
profiles, then FR localisation (Hezcal native-speaker review confirmed), then the Plugin Integrations Wave 2-6
|
||||
(Context-Menu, NotificationMaster, Moodles, ExtraChat, XIVIM Quick-DM). Wine/Linux scroll-rubber-band spike sits as a
|
||||
low-priority Linux-only investigation at the tail.
|
||||
|
||||
---
|
||||
|
||||
## v1.5.0 — DI Foundation and Service Refactor (released 2026-05-17)
|
||||
|
||||
Major architecture cycle. Plugin bootstrap moves to a generic-host DI container
|
||||
(`Microsoft.Extensions.Hosting` + `IServiceCollection`) modelled on Lightless Sync's `PluginHostFactory`. Service
|
||||
logging migrates from the static `Plugin.LogProxy` locator (the F12.2 shim from v1.4.7) to typed
|
||||
`Microsoft.Extensions.Logging.ILogger<T>` via constructor injection, bridged over Dalamud's `IPluginLog` by a custom
|
||||
`DalamudLogger` trio. 18 instance-class services move to ctor-injected loggers across four slices: data layer,
|
||||
IPC/integrations, UI window layer, and root. `Plugin.LogProxy` stays for the eight buckets ctor injection cannot
|
||||
reach — static helpers (`EmoteCache`, `AutoTranslate`, `MemoryUtil`, `WrapperUtil`), Dalamud-reflected types
|
||||
(`Configuration`), the `Message` data class, and instance classes that only log from static methods (`FontManager`,
|
||||
one `GameFunctions` site). Plugin.cs finishes at 1012 lines, virtually identical to the pre-cycle 1013 (-1 netto): the
|
||||
new Phase-1 host build and `Plugin.X` bridge wiring trade out exactly the service and window allocations that previously
|
||||
lived in `LoadAsync`. Cross-plugin baseline (10 reload-stress runs, 51 active plugins): HellionChat first-frame HITCH
|
||||
77 ms median, Chat 2 v1.40.2 74 ms median — no DI penalty. The deferred-font-atlas pattern from Lightless and
|
||||
XIVInstantMessenger is the v1.5.1 follow-up. User-visible: slash-command insert fix cherry-picked from ChatTwo upstream
|
||||
`ee7768ac` — pasting a slash command into the chat input now replaces existing input instead of concatenating.
|
||||
Migration v17 stays.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user