docs: linting Docs
Security / scan (push) Successful in 22s
Build / Build (Release) (push) Successful in 29s

This commit is contained in:
2026-05-12 22:41:54 +02:00
parent 94e4828aeb
commit c8ba8c1cd0
3 changed files with 47 additions and 32 deletions
+25 -10
View File
@@ -3,16 +3,31 @@ subtitle: Code Hygiene and Refactor
versionsnatur: Maintenance-Cycle 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. - **preflight.sh härter**: csharpier-Reflow-Check (Block E) und markdownlint (Block F) laufen jetzt im Pre-Push-Gate,
- **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. statt erst beim Pre-Merge-Review aufzufallen.
- **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. - **FontManager-Fallback robuster**: Atlas-Toolkit-Throws aus kaputten Font-Configs (IO, InvalidOperation,
- **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). ArgumentException) fallen jetzt zuverlässig auf NotoSansCjkRegular, statt den Atlas-Build mitzureißen. Der
- **Cherry-Pick aus ChatTwo `f35b7d3`** — `Tab.Clone()` Deep-cloned jetzt `UsedChannel` und `TellTarget`. Vorher Reference-Share-Bug: PopOut- und Temp-Tabs mutierten sich gegenseitig. Exception-Typ wird im Log mitgegeben für die Diagnose.
- **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. - **URL-Validation beim Plugin-Load**: BrandingLinks (5 URLs) und IntegrationLinks (2 URLs) werden via
- **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. `[ModuleInitializer]` geprüft. Ein Tippfehler bei einer künftigen URL-Rotation wirft jetzt sofort beim Plugin-Load,
- **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. statt still beim Klick zu scheitern.
- **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. - **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). Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
+6 -6
View File
@@ -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 `MD036` so the bilingual forge-post bold-emphasis headings pass linting; the `.claude/` directory is excluded from the
scan scan
- `FontManager.AddFontWithFallback` catch-filter now covers `InvalidOperationException` and `ArgumentException` on top - `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 the existing IO triad. The warning log carries the exception type name, so the diagnostic path knows which class of
of atlas-toolkit throw triggered the NotoSansCjkRegular fallback atlas-toolkit throw triggered the NotoSansCjkRegular fallback
- `BrandingLinks` (5 URLs) and `Integrations/IntegrationLinks` (2 URLs) validate themselves on first module load via - `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 `[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 `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` 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 fixture (full isolated MessageStore construction still pending — `Plugin.Log.Information` in `Migrate0` is a separate
Dalamud-static surface, slated for v1.4.7) Dalamud-static surface, slated for v1.4.7)
- Built-in themes: Crystal Nocturne (royal sapphire and electric magenta over obsidian, by CRYSTALLITE) replaces - Built-in themes: Crystal Nocturne (royal sapphire and electric magenta over obsidian, by CRYSTALLITE) replaces Moonlit
Moonlit Bloom in the built-in roster. Users who had Moonlit Bloom selected fall back to the default Hellion Arctic Bloom in the built-in roster. Users who had Moonlit Bloom selected fall back to the default Hellion Arctic on the
on the first plugin load; an existing custom JSON copy of Moonlit Bloom under `pluginConfigs/HellionChat/themes/` first plugin load; an existing custom JSON copy of Moonlit Bloom under `pluginConfigs/HellionChat/themes/` keeps
keeps working unchanged working unchanged
Modding & support: join Hellion Forge — <https://discord.gg/X9V7Kcv5gR> Modding & support: join Hellion Forge — <https://discord.gg/X9V7Kcv5gR>
+16 -16
View File
@@ -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) ## 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 Seventh sub-patch of the v1.4.x Polish Sweep series. Maintenance patch — no user-visible behaviour changes; tightens the
the development feedback loop and pulls in two ChatTwo upstream bugfixes. `scripts/preflight.sh` gains a csharpier development feedback loop and pulls in two ChatTwo upstream bugfixes. `scripts/preflight.sh` gains a csharpier reflow
reflow check (Block E) and a markdownlint pass (Block F), so style drift and markdown violations are blocked at the check (Block E) and a markdownlint pass (Block F), so style drift and markdown violations are blocked at the pre-push
pre-push gate. `FontManager.AddFontWithFallback` catch-filter now spans `InvalidOperationException` and gate. `FontManager.AddFontWithFallback` catch-filter now spans `InvalidOperationException` and `ArgumentException` on
`ArgumentException` on top of the existing IO triad, with the exception type name in the warning log so the top of the existing IO triad, with the exception type name in the warning log so the diagnostic path can see which
diagnostic path can see which atlas-toolkit throw triggered the fallback. `BrandingLinks` and `IntegrationLinks` run a atlas-toolkit throw triggered the fallback. `BrandingLinks` and `IntegrationLinks` run a `[ModuleInitializer]` URL
`[ModuleInitializer]` URL validation pass on plugin load; a typo in a future URL rotation now throws at startup validation pass on plugin load; a typo in a future URL rotation now throws at startup instead of failing silently when a
instead of failing silently when a user clicks the broken button. Cherry-picked from ChatTwo upstream `f35b7d3`: user clicks the broken button. Cherry-picked from ChatTwo upstream `f35b7d3`: `Chat.SetChannel` no longer leaks the
`Chat.SetChannel` no longer leaks the native `Utf8String` when the linkshell check rejects the channel (rename to native `Utf8String` when the linkshell check rejects the channel (rename to `IsChannelOrExistingLinkshell` plus
`IsChannelOrExistingLinkshell` plus wrap-not-return), and `Tab.Clone` now deep-clones `UsedChannel` and `TellTarget` wrap-not-return), and `Tab.Clone` now deep-clones `UsedChannel` and `TellTarget` (the previous reference copy let PopOut
(the previous reference copy let PopOut and Temp tabs mutate each other's channel state). The `ChatLogWindow` and Temp tabs mutate each other's channel state). The `ChatLogWindow` active-tab underline pill scales with
active-tab underline pill scales with `ImGuiHelpers.GlobalScale` and rounds to physical pixels for crisp rendering `ImGuiHelpers.GlobalScale` and rounds to physical pixels for crisp rendering above 100 % DPI. Internal items:
above 100 % DPI. Internal items: `HellionStyle` ChildBgAlpha extracted to a testable helper, `Plugin.SaveConfig` `HellionStyle` ChildBgAlpha extracted to a testable helper, `Plugin.SaveConfig` clones only the temp-tab subset in the
clones only the temp-tab subset in the snapshot path, `SettingsOverview` caches the draw-list per frame, snapshot path, `SettingsOverview` caches the draw-list per frame, `Dalamud.Utility.Util` static surface routed through
`Dalamud.Utility.Util` static surface routed through an `IPlatformUtil` indirection (`MessageStore`'s `IsWine` probe an `IPlatformUtil` indirection (`MessageStore`'s `IsWine` probe is now testable in isolation). No schema bump, no
is now testable in isolation). No schema bump, no migration. migration.
## v1.4.5 — UX and Robustness (released 2026-05-12) ## v1.4.5 — UX and Robustness (released 2026-05-12)