chore: reflow drift from v1.4.4 closure

Whitespace and line-reflow artefacts from auto-formatter passes plus a
packages.lock.json indent normalisation. No content changes.
This commit is contained in:
2026-05-12 13:08:59 +02:00
parent 61d5a33683
commit 3e4601a0c8
4 changed files with 137 additions and 138 deletions
+10 -11
View File
@@ -17,19 +17,18 @@ spricht jetzt bei unbekannten ChatTypes.
IPC-Callback-Methode jetzt einen 1-Zeilen-Banner darüber, der den Thread-Kontext direkt am Call-Site benennt
(framework only, framework scheduled, any). Mehr Hilfe für künftige Reviews als ein abstraktes Threading-Kapitel
- **Unsubscribe-Failure ist jetzt sichtbar.** `TryUnsubscribe` hat ein Honorific-Unsubscribe-Failure bisher als Debug
geloggt, was bei Standard-Loglevel verschluckt wurde. Eine geleakte Subscription kann den Service über
Plugin-Reloads hinweg leben lassen, also läuft der Log jetzt auf Warning
geloggt, was bei Standard-Loglevel verschluckt wurde. Eine geleakte Subscription kann den Service über Plugin-Reloads
hinweg leben lassen, also läuft der Log jetzt auf Warning
- **AutoTranslate-Warmup blockiert den Plugin-Unload nicht mehr.** Der Cache-Warmup-Thread war ohne `IsBackground=true`
unterwegs, was den Unload um 100-300 ms verzögern konnte. Pattern-Match zu MessageManager und RetentionSweep
(beide seit v1.4.0)
- **Privacy-Filter loggt unbekannte ChatTypes.** Wenn FFXIV durch einen Patch einen neuen ChatType einführt der weder
in der Whitelist noch in den Defaults steht, wird er bisher silent durch den Failsafe geleitet. Jetzt loggt der
Filter einmalig pro Runtime eine Warning mit dem Type und dem Failsafe-Wert. Dedup über ein NonSerialized-HashSet,
also kein Log-Spam
unterwegs, was den Unload um 100-300 ms verzögern konnte. Pattern-Match zu MessageManager und RetentionSweep (beide
seit v1.4.0)
- **Privacy-Filter loggt unbekannte ChatTypes.** Wenn FFXIV durch einen Patch einen neuen ChatType einführt der weder in
der Whitelist noch in den Defaults steht, wird er bisher silent durch den Failsafe geleitet. Jetzt loggt der Filter
einmalig pro Runtime eine Warning mit dem Type und dem Failsafe-Wert. Dedup über ein NonSerialized-HashSet, also kein
Log-Spam
- **Default-Flip für neue Installationen.** `PrivacyPersistUnknownChannels` startet bei neuen Configs jetzt auf `true`,
damit ein Patch-bedingt neuer ChatType nicht stillschweigend gedroppt wird bevor der User entscheiden kann.
Bestehende Configs behalten ihre Wahl, weil der Deserializer den Initializer überschreibt. Keine Migration, kein
Schema-Bump
damit ein Patch-bedingt neuer ChatType nicht stillschweigend gedroppt wird bevor der User entscheiden kann. Bestehende
Configs behalten ihre Wahl, weil der Deserializer den Initializer überschreibt. Keine Migration, kein Schema-Bump
Keine User-sichtbaren Funktions-Änderungen außer dem Default-Flip für neue Installationen. Settings, Themes, Tabs und
das Privacy-Verhalten für Bestand bleiben unangetastet.
+9 -9
View File
@@ -287,15 +287,15 @@ An optional submission to the Dalamud main plugin repo (in addition to the custo
## Project Status
**Version 1.4.4** — Threading and IPC safety polish on top of the v1.4.3 async-load foundation. The
`AutoTellTabsService` hot-path getter now reads from an `Interlocked` counter instead of taking a lock on every
render frame, with a resync hook for the snapshot-restore path in `SaveConfig` and a pure-helper test mirror in the
Build-Suite repo. The Honorific integration carries per-method threading banners so the framework-thread invariant is
visible at the call site, and an unsubscribe failure now logs at Warning instead of Debug — a leaked subscription
across plugin reloads is exactly the kind of thing that should not be silent. The AutoTranslate warmup thread is
finally marked `IsBackground = true`, matching the pattern used in `MessageManager` and `Plugin.RetentionSweep` since
v1.4.0. The privacy filter logs once per unknown ChatType so a future patch's added channel does not drop off the
radar, and new installs default `PrivacyPersistUnknownChannels` to `true` as a failsafe; existing configs keep their
explicit choice. No schema bump, no migration. Fifth sub-patch of the v1.4.x polish sweep series (as of 2026-05-12).
`AutoTellTabsService` hot-path getter now reads from an `Interlocked` counter instead of taking a lock on every render
frame, with a resync hook for the snapshot-restore path in `SaveConfig` and a pure-helper test mirror in the Build-Suite
repo. The Honorific integration carries per-method threading banners so the framework-thread invariant is visible at the
call site, and an unsubscribe failure now logs at Warning instead of Debug — a leaked subscription across plugin reloads
is exactly the kind of thing that should not be silent. The AutoTranslate warmup thread is finally marked
`IsBackground = true`, matching the pattern used in `MessageManager` and `Plugin.RetentionSweep` since v1.4.0. The
privacy filter logs once per unknown ChatType so a future patch's added channel does not drop off the radar, and new
installs default `PrivacyPersistUnknownChannels` to `true` as a failsafe; existing configs keep their explicit choice.
No schema bump, no migration. Fifth sub-patch of the v1.4.x polish sweep series (as of 2026-05-12).
Hellion Chat is a standalone plugin, no longer a fork in the repository sense. Fully completed:
+11 -11
View File
@@ -20,21 +20,21 @@ unknown ChatType shows up.
in sync with `Config.Tabs` from inside the existing mutation paths. `Initialize()` seeds the counter from the
persisted Tabs list, and `SaveConfig`'s snapshot-restore path calls a new `ResyncTempTabCounter()` so the mid-step
`RemoveAll` doesn't leave the counter drifting. Pure-helper test mirror lives in the Build-Suite repo
- `HonorificService` per-method threading banners replace the block comment at the bottom of the file. Each IPC
callback (`TryInitialPull`, `OnTitleChanged`, `OnReady`, `OnDisposing`, `TryUnsubscribe`) and the `CurrentTitle`
field carry a one-line `// Thread:` annotation so the framework-thread invariant is visible at the call site
- `HonorificService` per-method threading banners replace the block comment at the bottom of the file. Each IPC callback
(`TryInitialPull`, `OnTitleChanged`, `OnReady`, `OnDisposing`, `TryUnsubscribe`) and the `CurrentTitle` field carry a
one-line `// Thread:` annotation so the framework-thread invariant is visible at the call site
- `TryUnsubscribe` log-level upgraded from `Debug` to `Warning`. A silent unsubscribe failure leaks a live subscription
across plugin reloads, which is exactly the kind of issue that should not be at Debug
- `AutoTranslate.PreloadCache` thread now has `IsBackground = true` and a thread name. Without `IsBackground` the
warmup blocks plugin unload (typically 100-300 ms). Pattern-match to `MessageManager` (F6.1) and `Plugin.RetentionSweep`
- `AutoTranslate.PreloadCache` thread now has `IsBackground = true` and a thread name. Without `IsBackground` the warmup
blocks plugin unload (typically 100-300 ms). Pattern-match to `MessageManager` (F6.1) and `Plugin.RetentionSweep`
(F9.3), both since v1.4.0
- `Configuration.IsAllowedForStorage` adds a one-line `Plugin.Log.Warning` for the first occurrence of any ChatType
that isn't in `PrivacyPersistChannels`. Dedup via a `NonSerialized` `HashSet<ChatType>`, so the warning fires once
per runtime — not once per frame, not once per install. Failsafe routing through `PrivacyPersistUnknownChannels`
is unchanged
- `Configuration.IsAllowedForStorage` adds a one-line `Plugin.Log.Warning` for the first occurrence of any ChatType that
isn't in `PrivacyPersistChannels`. Dedup via a `NonSerialized` `HashSet<ChatType>`, so the warning fires once per
runtime — not once per frame, not once per install. Failsafe routing through `PrivacyPersistUnknownChannels` is
unchanged
- `PrivacyPersistUnknownChannels` field default flipped from `false` to `true` for new installs via a constant in
`PrivacyDefaults`. Existing configs keep their explicit choice — the deserializer overrides the initializer. No
schema bump, no migration, no first-run banner
`PrivacyDefaults`. Existing configs keep their explicit choice — the deserializer overrides the initializer. No schema
bump, no migration, no first-run banner
Modding & support: join Hellion Forge — <https://discord.gg/X9V7Kcv5gR>