docs: surface the ChatTwo IPC compatibility layer in v1.4.9 patch notes
Adds a "ChatTwo IPC compatibility layer" bullet across all six release-note surfaces so the new behaviour from commits8c4afaaand655c903is visible to users via the manifest installer, the Gitea release page, the README project-status section, the changelog/roadmap docs and the Forge-Discord announcement. Files touched: - HellionChat/HellionChat.yaml: bullet added inside the v1.4.9 changelog block, preserved order so the regression-tripwire line still comes before the migration-stays line. - repo.json: Changelog field kept synchronous (JSON-escaped newlines). - README.md: project-status paragraph extended with a one-sentence recap of the IPC mirror and the conflict-detection caveat. - docs/CHANGELOG.md: bullet inserted between the profiling-logs and migration-stays bullets, code-fenced gate names. - docs/ROADMAP.md: v1.4.9-released section gets the same recap so the cycle history stays self-describing. - .github/forge-posts/v1.4.9.md: German-only bullet for the Discord embed, slotted before the migration-v17 bullet. Char-cap holds — preflight Block C reports the embed total well under 5500 chars. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
655c903cb5
commit
b81894b859
6 files changed
+42
-4
No files matched your search
@@ -23,6 +23,15 @@ versionsnatur: Performance-Patch
|
|||||||
eine zukünftige Änderung die Lade-Zeit wieder über 100 ms drückt, taucht
|
eine zukünftige Änderung die Lade-Zeit wieder über 100 ms drückt, taucht
|
||||||
der Mehrverbrauch direkt im /xllog auf, ohne dass jemand erst den
|
der Mehrverbrauch direkt im /xllog auf, ohne dass jemand erst den
|
||||||
Debug-Filter einschalten muss.
|
Debug-Filter einschalten muss.
|
||||||
|
- ChatTwo-IPC-Kompatibilitäts-Layer: HellionChat spiegelt jetzt die
|
||||||
|
komplette ChatTwo-IPC-Surface (`GetChatInputState`,
|
||||||
|
`ChatInputStateChanged`, `Register`, `Unregister`, `Available`,
|
||||||
|
`Invoke`) zusätzlich zu unseren eigenen `HellionChat.*`-Gates unter
|
||||||
|
dem `ChatTwo.*`-Namensraum. Drittseitige Integrationen die nur auf
|
||||||
|
ChatTwo's IPC reagieren, etwa die Kontextmenü-Hooks von Artisan und
|
||||||
|
AllaganTools, funktionieren damit weiter ohne Code-Änderung auf
|
||||||
|
ihrer Seite. Die Conflict-Detection blockiert das parallele Laden
|
||||||
|
von ChatTwo, daher kein Namensraum-Konflikt im Live-Betrieb.
|
||||||
- Migration v17 unverändert: kein Schema-Bump, kein Config-Migrations-
|
- Migration v17 unverändert: kein Schema-Bump, kein Config-Migrations-
|
||||||
Aufwand. Nach dem Update läuft das Plugin gegen die bestehende
|
Aufwand. Nach dem Update läuft das Plugin gegen die bestehende
|
||||||
v17-Datenbank weiter.
|
v17-Datenbank weiter.
|
||||||
@@ -56,6 +56,17 @@ changelog: |-
|
|||||||
(MessageStore connect/migrate, FilterAllTabs, auto-translate
|
(MessageStore connect/migrate, FilterAllTabs, auto-translate
|
||||||
warmup) as a regression tripwire — a future load past 100 ms
|
warmup) as a regression tripwire — a future load past 100 ms
|
||||||
will show up in /xllog without a Debug filter.
|
will show up in /xllog without a Debug filter.
|
||||||
|
- ChatTwo IPC compatibility layer: HellionChat now mirrors
|
||||||
|
ChatTwo's full IPC surface (GetChatInputState,
|
||||||
|
ChatInputStateChanged, Register, Unregister, Available,
|
||||||
|
Invoke) under the ChatTwo.* namespace in addition to our
|
||||||
|
existing HellionChat.* provider gates. Third-party
|
||||||
|
integrations that historically only subscribe to ChatTwo's
|
||||||
|
IPC — for example Artisan's and AllaganTools' context-menu
|
||||||
|
hooks — keep working without requiring a code change on their
|
||||||
|
side. Conflict detection prevents ChatTwo from loading in
|
||||||
|
parallel with HellionChat, so there is no slot-collision risk
|
||||||
|
at runtime.
|
||||||
- Migration v17 stays (no schema bump).
|
- Migration v17 stays (no schema bump).
|
||||||
|
|
||||||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||||||
|
|||||||
@@ -296,8 +296,14 @@ is invisible inside the post-reload font-atlas build window. Slash commands `/he
|
|||||||
their target window is opened the first time. The configuration-button entry in Dalamud's plugin manager hangs on
|
their target window is opened the first time. The configuration-button entry in Dalamud's plugin manager hangs on
|
||||||
the same path. Three plugin-load profiling logs (auto-translate warm-up, message-store connect, tab filter) stay
|
the same path. Three plugin-load profiling logs (auto-translate warm-up, message-store connect, tab filter) stay
|
||||||
on at Information level as a regression tripwire — if a future change pushes the load past 100 ms again, the cost
|
on at Information level as a regression tripwire — if a future change pushes the load past 100 ms again, the cost
|
||||||
is right there in `/xllog`. Migration v17 stays (no schema bump). Tenth sub-patch of the v1.4.x polish sweep
|
is right there in `/xllog`. The release also ships a ChatTwo IPC compatibility layer: HellionChat now mirrors
|
||||||
series (as of 2026-05-15).
|
ChatTwo's full IPC surface (`GetChatInputState`, `ChatInputStateChanged`, `Register`, `Unregister`, `Available`,
|
||||||
|
`Invoke`) under the `ChatTwo.*` namespace in addition to our existing `HellionChat.*` provider gates, so
|
||||||
|
third-party integrations that historically only subscribe to ChatTwo's IPC (Artisan's and AllaganTools' context-
|
||||||
|
menu hooks are the practical examples) keep working without requiring a code change on their side. Conflict
|
||||||
|
detection prevents ChatTwo from loading in parallel with HellionChat, so there is no slot-collision risk at
|
||||||
|
runtime. Migration v17 stays (no schema bump). Tenth sub-patch of the v1.4.x polish sweep series (as of
|
||||||
|
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:
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,13 @@ Honorific integration).
|
|||||||
- Plugin-load profiling logs stay on: `MessageStore.Connect`, `MessageStore.Migrate`, `FilterAllTabs` and the
|
- Plugin-load profiling logs stay on: `MessageStore.Connect`, `MessageStore.Migrate`, `FilterAllTabs` and the
|
||||||
auto-translate warm-up timing log are now Information level rather than Debug. They serve as a tripwire so a
|
auto-translate warm-up timing log are now Information level rather than Debug. They serve as a tripwire so a
|
||||||
future regression past 100 ms shows up directly in `/xllog` without re-enabling Debug.
|
future regression past 100 ms shows up directly in `/xllog` without re-enabling Debug.
|
||||||
|
- ChatTwo IPC compatibility layer: HellionChat now mirrors ChatTwo's full IPC surface
|
||||||
|
(`GetChatInputState`, `ChatInputStateChanged`, `Register`, `Unregister`, `Available`, `Invoke`) under the
|
||||||
|
`ChatTwo.*` namespace in addition to our existing `HellionChat.*` provider gates. Third-party
|
||||||
|
integrations that historically only subscribe to ChatTwo's IPC — for example Artisan's and AllaganTools'
|
||||||
|
context-menu hooks — keep working without requiring a code change on their side. Conflict detection
|
||||||
|
prevents ChatTwo from loading in parallel with HellionChat, so there is no slot-collision risk at
|
||||||
|
runtime.
|
||||||
- Migration v17 stays (no schema bump).
|
- Migration v17 stays (no schema bump).
|
||||||
- Internal: hypothesis-triage during the R2 cycle falsified three of the four candidate root causes
|
- Internal: hypothesis-triage during the R2 cycle falsified three of the four candidate root causes
|
||||||
(font-atlas sync, theme-apply ABGR-cache init, multiple-window render). Actual cause is `DrawList` setup
|
(font-atlas sync, theme-apply ABGR-cache init, multiple-window render). Actual cause is `DrawList` setup
|
||||||
|
|||||||
+6
-1
@@ -34,7 +34,12 @@ registration moved from individual window constructors to a central `SetupComman
|
|||||||
`Plugin.cs` — `/hellion`, `/hellionView`, `/hellionSeString` and `/hellionDebugger` work before their target windows are
|
`Plugin.cs` — `/hellion`, `/hellionView`, `/hellionSeString` and `/hellionDebugger` work before their target windows are
|
||||||
opened the first time, and Dalamud's plugin-manager `OpenConfigUi` / `OpenMainUi` buttons hang on the same path.
|
opened the first time, and Dalamud's plugin-manager `OpenConfigUi` / `OpenMainUi` buttons hang on the same path.
|
||||||
Plugin-load profiling logs (auto-translate warmup, `MessageStore.Connect`, `MessageStore.Migrate`, `FilterAllTabs`) stay
|
Plugin-load profiling logs (auto-translate warmup, `MessageStore.Connect`, `MessageStore.Migrate`, `FilterAllTabs`) stay
|
||||||
on at Information level as a regression tripwire. Migration v17 stays (no schema bump). Hypothesis-triage falsified
|
on at Information level as a regression tripwire. The release also ships a ChatTwo IPC compatibility layer: HellionChat
|
||||||
|
mirrors ChatTwo's full IPC surface (`GetChatInputState`, `ChatInputStateChanged`, `Register`, `Unregister`, `Available`,
|
||||||
|
`Invoke`) under the `ChatTwo.*` namespace in addition to our existing `HellionChat.*` provider gates, so third-party
|
||||||
|
integrations that only subscribe to ChatTwo's IPC (Artisan, AllaganTools) keep working without a code change on their
|
||||||
|
side. Conflict detection prevents ChatTwo from loading in parallel, so there is no slot-collision risk at runtime.
|
||||||
|
Migration v17 stays (no schema bump). Hypothesis-triage falsified
|
||||||
three of four candidate root causes (font-atlas sync fallback, theme-apply ABGR-cache init, multiple-window render via
|
three of four candidate root causes (font-atlas sync fallback, theme-apply ABGR-cache init, multiple-window render via
|
||||||
lazy-init) — actual cost distributes evenly across ~10 ImGui sections inside ChatLogWindow, so structural rewrite is
|
lazy-init) — actual cost distributes evenly across ~10 ImGui sections inside ChatLogWindow, so structural rewrite is
|
||||||
deferred to v1.5.x DI-container cycle.
|
deferred to v1.5.x DI-container cycle.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"CanUnloadAsync": false,
|
"CanUnloadAsync": false,
|
||||||
"LoadPriority": 0,
|
"LoadPriority": 0,
|
||||||
"Punchline": "A Hellion Forge plugin. Privacy-first chat for FFXIV, built to stay out of your way.",
|
"Punchline": "A Hellion Forge plugin. Privacy-first chat for FFXIV, built to stay out of your way.",
|
||||||
"Changelog": "**v1.4.9 — Plugin-Load Render Polish (2026-05-15)**\n\nTenth sub-patch of the v1.4.x polish-sweep series. First-frame render cost drops from ~127 ms median to ~76 ms median, comfortably under Dalamud's 100 ms HITCH warning threshold.\n\n- First-frame defer: six non-essential rendering sections inside ChatLogWindow skip their first Draw and run one frame later (bottom status bar, channel-name SeString chunks, window bounds check, v0.6.1 hint banner, autocomplete, input-preview calculation). User-visible delay is ~17 ms at 60 fps, hidden inside the post-reload font-atlas build window.\n- Slash-command centralisation: /hellion, /hellionView, /hellionSeString and /hellionDebugger are registered in LoadAsync instead of inside the corresponding window constructors. The plugin-manager Open and configuration buttons hang on the same path.\n- Plugin-load profiling logs stay on at Information level (MessageStore connect/migrate, FilterAllTabs, auto-translate warmup) as a regression tripwire — a future load past 100 ms will show up in /xllog without a Debug filter.\n- Migration v17 stays (no schema bump).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.4.8 — Hook-Layer and Polish Quick-Wins (2026-05-14)**\n\nNinth sub-patch of the v1.4.x polish-sweep series. Hook-layer cluster (DbViewer FTS5 full-text search, ad-block foundation investigation) plus three polish quick-wins.\n\n- DbViewer full-text search: optional FTS5 index across the full chat history. Built asynchronously on first load after the update with a progress toast. The local page-filter remains available as the default mode. Queries match as exact phrases -- multi-word terms must appear together in order; advanced users can opt into raw FTS5 MATCH syntax by wrapping their own double-quotes.\n- Custom theme files now auto-reload when edited while the theme is active -- no need to re-click the theme in the picker.\n- Retention sweep no longer blocks the framework thread, removing the ~194ms mini-hitch per sweep.\n- Status bar renders correctly at Windows display scaling > 100%.\n- Receive-suppressed-tells routing investigated this cycle and postponed to v1.5.x: when other plugins suppress tells via CheckMessageHandled, the FFXIV chat pipeline skips the RaptureLogModule.AddMsgSourceEntry path so HellionChat's ContentIdResolverHook does not fire and tell-partner identification breaks. The fix belongs next to the planned ad-block hook layer where the same patch surface comes up.\n- Internal: messages.Id is declared BLOB but stored as TEXT (Microsoft.Data.Sqlite Guid binding). FTS bulk insert and LoadByGuids match the TEXT storage form on both sides. Migration v17 stays (no schema bump).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.4.7 — Backlog Cleanup and Mid-Features (2026-05-13)**\n\nEighth 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.\n\n- 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 'Angepinnt' / 'Pinned' section in the sidebar with its own divider header\n- 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\n- Sidebar width is now configurable in Theme & Layout (range 44–160 px). Default stays icon-only; widen to fit section headers like 'Aktive Tells (3)' without truncation\n- 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\n- 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\n- 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\n- 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\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.4.6 — Code HygieneLine truncated
|
"Changelog": "**v1.4.9 — Plugin-Load Render Polish (2026-05-15)**\n\nTenth sub-patch of the v1.4.x polish-sweep series. First-frame render cost drops from ~127 ms median to ~76 ms median, comfortably under Dalamud's 100 ms HITCH warning threshold.\n\n- First-frame defer: six non-essential rendering sections inside ChatLogWindow skip their first Draw and run one frame later (bottom status bar, channel-name SeString chunks, window bounds check, v0.6.1 hint banner, autocomplete, input-preview calculation). User-visible delay is ~17 ms at 60 fps, hidden inside the post-reload font-atlas build window.\n- Slash-command centralisation: /hellion, /hellionView, /hellionSeString and /hellionDebugger are registered in LoadAsync instead of inside the corresponding window constructors. The plugin-manager Open and configuration buttons hang on the same path.\n- Plugin-load profiling logs stay on at Information level (MessageStore connect/migrate, FilterAllTabs, auto-translate warmup) as a regression tripwire — a future load past 100 ms will show up in /xllog without a Debug filter.\n- ChatTwo IPC compatibility layer: HellionChat now mirrors ChatTwo's full IPC surface (GetChatInputState, ChatInputStateChanged, Register, Unregister, Available, Invoke) under the ChatTwo.* namespace in addition to our existing HellionChat.* provider gates. Third-party integrations that historically only subscribe to ChatTwo's IPC — for example Artisan's and AllaganTools' context-menu hooks — keep working without requiring a code change on their side. Conflict detection prevents ChatTwo from loading in parallel with HellionChat, so there is no slot-collision risk at runtime.\n- Migration v17 stays (no schema bump).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.4.8 — Hook-Layer and Polish Quick-Wins (2026-05-14)**\n\nNinth sub-patch of the v1.4.x polish-sweep series. Hook-layer cluster (DbViewer FTS5 full-text search, ad-block foundation investigation) plus three polish quick-wins.\n\n- DbViewer full-text search: optional FTS5 index across the full chat history. Built asynchronously on first load after the update with a progress toast. The local page-filter remains available as the default mode. Queries match as exact phrases -- multi-word terms must appear together in order; advanced users can opt into raw FTS5 MATCH syntax by wrapping their own double-quotes.\n- Custom theme files now auto-reload when edited while the theme is active -- no need to re-click the theme in the picker.\n- Retention sweep no longer blocks the framework thread, removing the ~194ms mini-hitch per sweep.\n- Status bar renders correctly at Windows display scaling > 100%.\n- Receive-suppressed-tells routing investigated this cycle and postponed to v1.5.x: when other plugins suppress tells via CheckMessageHandled, the FFXIV chat pipeline skips the RaptureLogModule.AddMsgSourceEntry path so HellionChat's ContentIdResolverHook does not fire and tell-partner identification breaks. The fix belongs next to the planned ad-block hook layer where the same patch surface comes up.\n- Internal: messages.Id is declared BLOB but stored as TEXT (Microsoft.Data.Sqlite Guid binding). FTS bulk insert and LoadByGuids match the TEXT storage form on both sides. Migration v17 stays (no schema bump).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.4.7 — Backlog Cleanup and Mid-Features (2026-05-13)**\n\nEighth 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.\n\n- 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 'Angepinnt' / 'Pinned' section in the sidebar with its own divider header\n- 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\n- Sidebar width is now configurable in Theme & Layout (range 44–160 px). Default stays icon-only; widen to fit section headers like 'Aktive Tells (3)' without truncation\n- 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\n- Util/ImGuiUtil.cs DrawArrows IconButton id now uses (id + 1).ToString() instead of the operator-precedencLine truncated
|
||||||
"AcceptsFeedback": true,
|
"AcceptsFeedback": true,
|
||||||
"DownloadLinkInstall": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.4.9/latest.zip",
|
"DownloadLinkInstall": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.4.9/latest.zip",
|
||||||
"DownloadLinkUpdate": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.4.9/latest.zip",
|
"DownloadLinkUpdate": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.4.9/latest.zip",
|
||||||
|
|||||||
Reference in new issue
Block a user