From c8ba8c1cd04a68fb6cf41cd5bb7df5e3471e4a4d Mon Sep 17 00:00:00 2001 From: Jon Kazama Date: Tue, 12 May 2026 22:41:54 +0200 Subject: [PATCH] docs: linting Docs --- .github/forge-posts/v1.4.6.md | 35 +++++++++++++++++++++++++---------- docs/CHANGELOG.md | 12 ++++++------ docs/ROADMAP.md | 32 ++++++++++++++++---------------- 3 files changed, 47 insertions(+), 32 deletions(-) diff --git a/.github/forge-posts/v1.4.6.md b/.github/forge-posts/v1.4.6.md index 0285ae2..e7f4e39 100644 --- a/.github/forge-posts/v1.4.6.md +++ b/.github/forge-posts/v1.4.6.md @@ -3,16 +3,31 @@ subtitle: Code Hygiene and Refactor versionsnatur: Maintenance-Cycle --- -Wartungs-Patch ohne User-sichtbare Änderungen. Saubere Code-Basis als Vorbereitung auf das v1.4.7-Backlog-Cleanup, plus zwei geerbte Bugfixes aus dem ChatTwo-Upstream `f35b7d3`. +Wartungs-Patch ohne User-sichtbare Änderungen. Saubere Code-Basis als Vorbereitung auf das v1.4.7-Backlog-Cleanup, plus +zwei geerbte Bugfixes aus dem ChatTwo-Upstream `f35b7d3`. -- **preflight.sh härter**: csharpier-Reflow-Check (Block E) und markdownlint (Block F) laufen jetzt im Pre-Push-Gate, statt erst beim Pre-Merge-Review aufzufallen. -- **FontManager-Fallback robuster**: Atlas-Toolkit-Throws aus kaputten Font-Configs (IO, InvalidOperation, ArgumentException) fallen jetzt zuverlässig auf NotoSansCjkRegular, statt den Atlas-Build mitzureißen. Der Exception-Typ wird im Log mitgegeben für die Diagnose. -- **URL-Validation beim Plugin-Load**: BrandingLinks (5 URLs) und IntegrationLinks (2 URLs) werden via `[ModuleInitializer]` geprüft. Ein Tippfehler bei einer künftigen URL-Rotation wirft jetzt sofort beim Plugin-Load, statt still beim Klick zu scheitern. -- **Cherry-Pick aus ChatTwo `f35b7d3`** — Memory-Leak in `Chat.SetChannel`: der native `Utf8String` wird jetzt auch dann freigegeben, wenn der Linkshell-Check den Channel ablehnt (vorher gefangen im early-return). -- **Cherry-Pick aus ChatTwo `f35b7d3`** — `Tab.Clone()` Deep-cloned jetzt `UsedChannel` und `TellTarget`. Vorher Reference-Share-Bug: PopOut- und Temp-Tabs mutierten sich gegenseitig. -- **Aktive-Tab-Underline pixel-perfect bei DPI-Scaling**: Die Underline-Pill skaliert jetzt mit `ImGuiHelpers.GlobalScale` und rundet die DrawList-Koordinaten auf physische Pixel. Kein Sub-Pixel-Blur mehr auf 125/150%-Setups. -- **IconButton-Width-Fix**: der manuelle `width - 2 * CellPadding.X`-Subtract verlor den HUD-Scale (Padding skaliert, der raw int nicht). Gemessene Breite läuft jetzt unverändert durch. -- **Test-Isolation für MessageStore**: `Dalamud.Utility.Util`-Surface (IsWine, OpenLink) läuft jetzt durch eine `IPlatformUtil`-Indirektion. MessageStores `IsWine`-Probe ist isoliert testbar in der Build-Suite. Plus: HellionStyle-ChildBgAlpha als Pure-Helper extrahiert, Plugin.SaveConfig kopiert nur Session-Tabs statt der ganzen Tab-Liste, SettingsOverview cached den DrawList einmal pro Frame. -- **Built-in-Theme-Roster**: Crystal Nocturne (Royal Sapphire + Electric Magenta auf Obsidian, von CRYSTALLITE) ersetzt Moonlit Bloom. User mit Moonlit Bloom als aktivem Theme fallen beim ersten Plugin-Load auf Hellion Arctic zurück. +- **preflight.sh härter**: csharpier-Reflow-Check (Block E) und markdownlint (Block F) laufen jetzt im Pre-Push-Gate, + statt erst beim Pre-Merge-Review aufzufallen. +- **FontManager-Fallback robuster**: Atlas-Toolkit-Throws aus kaputten Font-Configs (IO, InvalidOperation, + ArgumentException) fallen jetzt zuverlässig auf NotoSansCjkRegular, statt den Atlas-Build mitzureißen. Der + Exception-Typ wird im Log mitgegeben für die Diagnose. +- **URL-Validation beim Plugin-Load**: BrandingLinks (5 URLs) und IntegrationLinks (2 URLs) werden via + `[ModuleInitializer]` geprüft. Ein Tippfehler bei einer künftigen URL-Rotation wirft jetzt sofort beim Plugin-Load, + statt still beim Klick zu scheitern. +- **Cherry-Pick aus ChatTwo `f35b7d3`** — Memory-Leak in `Chat.SetChannel`: der native `Utf8String` wird jetzt auch dann + freigegeben, wenn der Linkshell-Check den Channel ablehnt (vorher gefangen im early-return). +- **Cherry-Pick aus ChatTwo `f35b7d3`** — `Tab.Clone()` Deep-cloned jetzt `UsedChannel` und `TellTarget`. Vorher + Reference-Share-Bug: PopOut- und Temp-Tabs mutierten sich gegenseitig. +- **Aktive-Tab-Underline pixel-perfect bei DPI-Scaling**: Die Underline-Pill skaliert jetzt mit + `ImGuiHelpers.GlobalScale` und rundet die DrawList-Koordinaten auf physische Pixel. Kein Sub-Pixel-Blur mehr auf + 125/150%-Setups. +- **IconButton-Width-Fix**: der manuelle `width - 2 * CellPadding.X`-Subtract verlor den HUD-Scale (Padding skaliert, + der raw int nicht). Gemessene Breite läuft jetzt unverändert durch. +- **Test-Isolation für MessageStore**: `Dalamud.Utility.Util`-Surface (IsWine, OpenLink) läuft jetzt durch eine + `IPlatformUtil`-Indirektion. MessageStores `IsWine`-Probe ist isoliert testbar in der Build-Suite. Plus: + HellionStyle-ChildBgAlpha als Pure-Helper extrahiert, Plugin.SaveConfig kopiert nur Session-Tabs statt der ganzen + Tab-Liste, SettingsOverview cached den DrawList einmal pro Frame. +- **Built-in-Theme-Roster**: Crystal Nocturne (Royal Sapphire + Electric Magenta auf Obsidian, von CRYSTALLITE) ersetzt + Moonlit Bloom. User mit Moonlit Bloom als aktivem Theme fallen beim ersten Plugin-Load auf Hellion Arctic zurück. Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2). diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 2374956..8f14bb0 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -20,8 +20,8 @@ upstream-inherited bugs from ChatTwo `f35b7d3`, and prepares the code for the v1 `MD036` so the bilingual forge-post bold-emphasis headings pass linting; the `.claude/` directory is excluded from the scan - `FontManager.AddFontWithFallback` catch-filter now covers `InvalidOperationException` and `ArgumentException` on top - of the existing IO triad. The warning log carries the exception type name, so the diagnostic path knows which class - of atlas-toolkit throw triggered the NotoSansCjkRegular fallback + of the existing IO triad. The warning log carries the exception type name, so the diagnostic path knows which class of + atlas-toolkit throw triggered the NotoSansCjkRegular fallback - `BrandingLinks` (5 URLs) and `Integrations/IntegrationLinks` (2 URLs) validate themselves on first module load via `[ModuleInitializer]` + a shared `UrlValidation.ValidateAll` helper. A malformed URL now throws `InvalidOperationException` at plugin load with the source class and the broken URL in the message @@ -47,10 +47,10 @@ upstream-inherited bugs from ChatTwo `f35b7d3`, and prepares the code for the v1 indirection. `MessageStore`'s `IsWine` probe is now reachable from the xUnit AppDomain via a `FakePlatformUtil` fixture (full isolated MessageStore construction still pending — `Plugin.Log.Information` in `Migrate0` is a separate Dalamud-static surface, slated for v1.4.7) -- Built-in themes: Crystal Nocturne (royal sapphire and electric magenta over obsidian, by CRYSTALLITE) replaces - Moonlit Bloom in the built-in roster. Users who had Moonlit Bloom selected fall back to the default Hellion Arctic - on the first plugin load; an existing custom JSON copy of Moonlit Bloom under `pluginConfigs/HellionChat/themes/` - keeps working unchanged +- Built-in themes: Crystal Nocturne (royal sapphire and electric magenta over obsidian, by CRYSTALLITE) replaces Moonlit + Bloom in the built-in roster. Users who had Moonlit Bloom selected fall back to the default Hellion Arctic on the + first plugin load; an existing custom JSON copy of Moonlit Bloom under `pluginConfigs/HellionChat/themes/` keeps + working unchanged Modding & support: join Hellion Forge — diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 11271a7..ebece1e 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -20,22 +20,22 @@ follow-up scope hinted at in the ChatTwo upstream f35b7d3 cherry-picks). Scope i ## v1.4.6 — Code Hygiene and Refactor (released 2026-05-12) -Seventh sub-patch of the v1.4.x Polish Sweep series. Maintenance patch — no user-visible behaviour changes; tightens -the development feedback loop and pulls in two ChatTwo upstream bugfixes. `scripts/preflight.sh` gains a csharpier -reflow check (Block E) and a markdownlint pass (Block F), so style drift and markdown violations are blocked at the -pre-push gate. `FontManager.AddFontWithFallback` catch-filter now spans `InvalidOperationException` and -`ArgumentException` on top of the existing IO triad, with the exception type name in the warning log so the -diagnostic path can see which atlas-toolkit throw triggered the fallback. `BrandingLinks` and `IntegrationLinks` run a -`[ModuleInitializer]` URL validation pass on plugin load; a typo in a future URL rotation now throws at startup -instead of failing silently when a user clicks the broken button. Cherry-picked from ChatTwo upstream `f35b7d3`: -`Chat.SetChannel` no longer leaks the native `Utf8String` when the linkshell check rejects the channel (rename to -`IsChannelOrExistingLinkshell` plus wrap-not-return), and `Tab.Clone` now deep-clones `UsedChannel` and `TellTarget` -(the previous reference copy let PopOut and Temp tabs mutate each other's channel state). The `ChatLogWindow` -active-tab underline pill scales with `ImGuiHelpers.GlobalScale` and rounds to physical pixels for crisp rendering -above 100 % DPI. Internal items: `HellionStyle` ChildBgAlpha extracted to a testable helper, `Plugin.SaveConfig` -clones only the temp-tab subset in the snapshot path, `SettingsOverview` caches the draw-list per frame, -`Dalamud.Utility.Util` static surface routed through an `IPlatformUtil` indirection (`MessageStore`'s `IsWine` probe -is now testable in isolation). No schema bump, no migration. +Seventh sub-patch of the v1.4.x Polish Sweep series. Maintenance patch — no user-visible behaviour changes; tightens the +development feedback loop and pulls in two ChatTwo upstream bugfixes. `scripts/preflight.sh` gains a csharpier reflow +check (Block E) and a markdownlint pass (Block F), so style drift and markdown violations are blocked at the pre-push +gate. `FontManager.AddFontWithFallback` catch-filter now spans `InvalidOperationException` and `ArgumentException` on +top of the existing IO triad, with the exception type name in the warning log so the diagnostic path can see which +atlas-toolkit throw triggered the fallback. `BrandingLinks` and `IntegrationLinks` run a `[ModuleInitializer]` URL +validation pass on plugin load; a typo in a future URL rotation now throws at startup instead of failing silently when a +user clicks the broken button. Cherry-picked from ChatTwo upstream `f35b7d3`: `Chat.SetChannel` no longer leaks the +native `Utf8String` when the linkshell check rejects the channel (rename to `IsChannelOrExistingLinkshell` plus +wrap-not-return), and `Tab.Clone` now deep-clones `UsedChannel` and `TellTarget` (the previous reference copy let PopOut +and Temp tabs mutate each other's channel state). The `ChatLogWindow` active-tab underline pill scales with +`ImGuiHelpers.GlobalScale` and rounds to physical pixels for crisp rendering above 100 % DPI. Internal items: +`HellionStyle` ChildBgAlpha extracted to a testable helper, `Plugin.SaveConfig` clones only the temp-tab subset in the +snapshot path, `SettingsOverview` caches the draw-list per frame, `Dalamud.Utility.Util` static surface routed through +an `IPlatformUtil` indirection (`MessageStore`'s `IsWine` probe is now testable in isolation). No schema bump, no +migration. ## v1.4.5 — UX and Robustness (released 2026-05-12)