# Hellion Chat — Roadmap

Planned work after the v1.0.0 standalone cut. This list is intentionally high-level: concrete specs,
size estimates and repro steps live in the internal backlog. External tracking runs via
[Gitea Issues](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/issues) with the
`roadmap` label once an item is scheduled for a cycle.

Order reflects priority, not a guarantee. Items may shift or be dropped entirely if they turn out to
be a poor fit for the plugin's privacy-first scope during brainstorming.

---

## Next Cycle

**v1.5.7 — Ad-Block / Spam-Filter** is the next planned scope: the hybrid ad-block and
spam-filter cycle, combining a lightweight built-in filter with optional `NoSoliciting`
IPC integration. Plugin Integrations Wave 2-6 (Context-Menu, NotificationMaster, Moodles,
ExtraChat, XIVIM Quick-DM) follows.

Native-speaker review of the AI-assisted v1.5.3 translations (13 legacy Crowdin locales) runs in
parallel as a continuous correction pass, gathered via the Hellion Forge Discord.

---

## v1.5.6 — Settings Overhaul + Filter & Notification Polish (released 2026-05-23)

Settings window reorganised from ten tabs to seven (General, Appearance, Chat, Window,
Channels, Data & Privacy, About). Each tab uses collapsible sections grouped by control
type; sections start collapsed on every tab-open.

Delivered from the originally-planned v1.5.5b bundle:

- **UI-7** — Sender-name display options: world-suffix mode (Never / Other worlds only / Always)
  and name-format mode (Full name / First name only / Initials). Lives in Chat → Messages.
- **UI-11** — Pre-send warning when a message contains plugin-only symbols. Toggle in
  Chat → Messages.
- **UI-12** — Separate window opacity for focused vs. inactive chat window. New slider in
  Appearance → Window style.
- **AUDIO-1** — Custom notification sound volume slider. General → Sound, mirrored in
  Channels → per-tab → Notification. Affects only the three bundled custom sounds.
- ~~**UI-8**~~ — **GESTRICHEN**: per-tab regex filter. Removed because FFXIV's built-in
  blackword filter covers the same need.

All 24 locale files updated for new section labels and v1.5.6 control labels (machine
translation; native review via Hellion Forge Discord).

---

## v1.5.5 — Upstream-Sync Tab-Features (released 2026-05-21)

A backlog-sync cycle of inherited tab-feature items. Failed tells now raise a warning toast when a
message could not be delivered (recipient offline, in an instance, or blocking you), toggleable in
Settings. Per-tab notification sounds let each tab play one of the 16 game chat sounds or three
bundled Hellion sounds when a message arrives on a background tab, with a preview button. The tab
rename field in the right-click menu auto-focuses on open and accepts up to 512 characters. A
jump-to-latest button appears in the chat log header while scrolled up from the live end.
Map-flag and item-link insertion is available from the chat input right-click menu. The Hellion
Forge fox banner in the first-run wizard and the Information tab is now a real image instead of
ASCII art. Schema bumped to v18, additive fields only, no data migration.

---

## v1.5.4 — Polish and Motion (released 2026-05-20)

A polish cycle of three P3 items. Theme switches crossfade over ~300 ms across every
Hellion-rendered surface; the window background snaps deliberately to preserve the
per-window opacity override from Dalamud's pinning menu. A header quick-picker — a
palette button left of the cog — switches themes and tabs from a compact popup without
opening Settings. Sidebar icons and card-mode borders gain framerate-independent hover
animations. A new "Reduce motion" toggle in Theme & Layout covers accessibility. No
schema bump; migration v17 stays.

---

## v1.5.3 — Localisation Wave + Bundled-Font Overhaul (released 2026-05-19)

Twenty-four selectable UI languages: from FR-only as the original plan scope, the cycle expanded to
cover Catalan, Czech, Danish, Finnish, Greek, Hungarian, Italian, Korean, Norwegian, Polish,
Portuguese (Portugal), Turkish and Ukrainian alongside the existing Crowdin-heritage locales, all
AI-translated and flagged for community review. Bundled font swaps from Exo 2 to **Inter Light**
for wider European glyph coverage (Latin Extended-A/B, Greek polytonic, Cyrillic Supplement);
**NotoSansCjkRegular** joins as a third merge layer so Hangul and Simplified-Chinese-specific Han
glyphs render correctly inside the HellionChat UI.

First-frame HITCH dropped from **~74 ms to a median of ~20 ms** (5-reload sample 17.9-23.6 ms,
Linux/Wine) as a side effect: the bundled-font path was silently falling back to the FFXIV Axis
game font for the entire v1.5.x series because of an early-return in `Plugin.cs:937`. The fix
routes `RegularFont` through draw whenever either `FontsEnabled` or `UseHellionFont` is on, and
lands the defer-pattern win v1.5.1 was reaching for.

`ExtraGlyphRanges` auto-activates the matching flag on language change. Two new flags
(`LatinExtended`, `Greek`) join the existing set. Plugin init runs a one-shot migration that ORs
the required flag into the saved config for users updating from v1.5.2 with a non-default language
already selected. A WarningText under the language dropdown notes that FFXIV's own chat input only
fully supports EN/DE/FR/JA — other languages may garble when typed into in-game chat.

Migration v17 stays. `LanguageOverride` enum grows by ten locales plus three previously
commented-out (Italian, Korean, Norwegian with code `nb`); all new values append to keep existing
user-config integer serialisation stable.

---

## v1.5.2 — First-Run Wizard Rework (released 2026-05-18)

Multi-step wizard replacement: Welcome → Privacy → Power Settings → Done with staged-commit so
Decide-later or X-close at any point leaves the existing config untouched. New fourth privacy
profile "Roleplay" extends Privacy-First with `Say` and both emote types under a 30-/90-day
retention window. Privacy picker becomes a 2×2 grid; Casual keeps the ★ recommended marker. A new
power-settings stage surfaces six previously-hidden `Configuration` fields (Load Previous Session,
Filter Include Previous Sessions, Auto-Tell-Tabs History Preload, Compact Density, Prettier
Timestamps, built-in theme picker) without introducing any new fields.

Window default size shrinks from 900×560 to 720×480 (MinimumSize 600×400) and Step 1 wraps the fox
banner in a folded TreeNode after smoke feedback. Existing v1.5.1 users see the new wizard once on
first v1.5.2 boot via a new `WizardLastShownVersion` config marker.

Under the hood: `WizardStateSmokeStep` joins the `/xlperf` lineup, the Build Suite gains twelve
pure-helper xUnit Facts pinning all four privacy profile sets and the new Roleplay retention
overrides. Migration v17 stays — `Configuration` only grows one optional string field.

---

## v1.5.1 — FontAtlas Refactor and Hellion Forge Signature (released 2026-05-17)

Hybrid FontManager refactor with init-only game-font handles plus a mutable delegate path for the
eight live font settings, all wired through a single `IFontAtlas.SuppressAutoRebuild()` block.
Atlas-build count drops from 4-5 per plugin load to 1. FontAwesome reuses Dalamud's
`UiBuilder.IconFontFixedWidthHandle` instead of building its own slot. `BuildFontsAsync` is removed,
`BuildFonts` renamed to `RebuildDelegateFonts` and scoped to the delegate fonts.

Plus an embedded Hellion Forge provenance mark: a fox-head ASCII silhouette in the `/xllog`
bootstrap banner, a full fox banner in the First-Run Wizard and Settings → Information tab. Drawn by
Julia Moon.

Honorific full-gradient port (originally the v1.5.1 main item) was dropped: Honorific 3.2 exposes no
IPC for the rendered gradient frame, and an in-plugin port of the colour palette was declined. The
integration stays at the v1.4.7 glow-only shape.

The cross-plugin baseline target from v1.5.0 (matching Lightless / XIVInstantMessenger at ~7 ms
HITCH) did not land — HITCH stays around 80 ms because the cost lives in the UiBuilder first-frame
render path, not in the atlas build. A first-frame render investigation is reserved for a later
cycle.

---

## 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.

---

## v1.4.10 — Symbol-Picker and Tell-History Fix (released 2026-05-16)

Eleventh and final sub-patch of the v1.4.x Polish Sweep series. Symbol picker for the chat input —
popup with two tabs (161 FFXIV PUA glyphs via Dalamud's SeIconChar plus 97 server-verified BMP
symbols probed through `/echo` and `/say` in a four-round whitelist build) — cursor-aware splice,
multi-insert, recent-used strip across both tabs, Settings toggle in Chat → Message behaviour.
Mid-cycle hotfix for pinned auto-tell tabs: PreloadHistory used to cap the SQL scan at 500 rows
regardless of the user's `AutoTellTabsHistoryPreload` setting, so active users with many partners
lost the backlog of less-frequent pinned partners; the cap is gone, the `(Receiver, Date)` index
keeps SQL fast, the client-side loop respects the user setting as the upper bound. Slash-command
teardown cleanup wires the v1.4.9 wrappers through private fields so dispose detaches the live
registration instead of re-registering 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-side testing on
v1.4.9 confirmed no lag. Migration v17 stays.

---

## v1.4.9 — Plugin-Load Render Polish (released 2026-05-15)

Tenth sub-patch of the v1.4.x Polish Sweep series. First-frame HITCH drops from ~127 ms median to
~76 ms median (4-reload sample), comfortably under Dalamud's 100 ms warning threshold. Mechanism: a
single `_firstFrameDone` flag inside `ChatLogWindow` defers six non-essential rendering sections
(bottom status bar, channel-name SeString chunks, window bounds check, v0.6.1 hint banner,
autocomplete, input-preview calculation) from frame 0 to frame 1. User sees those sections ~17 ms
(60 fps) later, invisible inside the ~2.5 s font-atlas build window after every reload.
Slash-command registration moved from individual window constructors to a central `SetupCommands` /
`TearDownCommands` pair in `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. Plugin-load profiling
logs (auto-translate warmup, `MessageStore.Connect`, `MessageStore.Migrate`, `FilterAllTabs`) stay
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 lazy-init)
— actual cost distributes evenly across ~10 ImGui sections inside ChatLogWindow, so structural
rewrite is deferred to v1.5.x DI-container cycle.

## v1.4.8 — Hook-Layer and Polish Quick-Wins (released 2026-05-14)

Ninth sub-patch of the v1.4.x Polish Sweep series. Database Viewer gains an optional FTS5 full-text
search across the full chat history, built asynchronously on first run after the update with a
progress toast; the local page-filter remains the default mode. Custom theme files auto-reload when
edited while the theme is active (1 Hz disk-stat throttle, so per-frame cost is free). Retention
sweep no longer blocks the framework thread — `Framework.Run(...).Wait()` is replaced by
`Framework.RunOnTick(...)`, removing the ~194 ms hitch per sweep. Status-bar height is now derived
from `GetTextLineHeightWithSpacing()` plus a DPI-aware spacer so the bar renders correctly at
Windows display scaling above 100 %. Receive-suppressed-tells routing was investigated and
**postponed to v1.5.x**: when other plugins suppress tells via `CheckMessageHandled`, FFXIV's
chat-pipeline skips the `RaptureLogModule.AddMsgSourceEntry` path, which means the
`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 anyway. Migration v17 stays
(no schema bump). H3 leaves a foundation note in the Vault
(`Projekte/FFXIV/Hellion Chat/v1.5.x Ad-Block Foundation.md`) covering the NoSoliciting filter +
bubble-layer hook pattern as a ready-made template for the v1.5.x cycle.

---

## v1.4.7 — Backlog Cleanup and Mid-Features (released 2026-05-13)

Eighth sub-patch of the v1.4.x Polish Sweep series. First user-visible feature bundle since v1.4.5.
TempTell tabs can now be pinned via right-click; pinned tabs survive plugin reload and character
logout, keep their conversation history (loaded on demand from the message store on rehydrate), and
stay bound to the same `/tell` partner. A hard cap of 5 pinned tabs lives in a pool separate from
the 15-tab auto-tell pool, total ceiling 20. The sidebar groups pinned tabs into their own section
with a divider header, and the sidebar width itself is now configurable in **Theme & Layout**
between 44 and 160 px. Honorific glow outlines render when the title carries a Glow colour, opt-in
via **Settings → Integrations → Render glow outlines (Honorific)** (default off). Honorific's
gradient (Color3 / GradientColourSet / Wave / Pulse) is parsed but rendered statically — a later
cycle will port the full animation algorithm or land an upstream IPC PR for the resolved frame
colour. `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` — together they fix a Settings-Save regression where the chat input
could pop back to `/tell <pinned-partner>` after touching settings on a Party or Linkshell tab.
Internal items: `IPluginLogProxy` indirection over Dalamud's `IPluginLog` routes all ~91
`Plugin.Log` call sites through a testable proxy, closing the F12.1 test-isolation gap
(`MessageStore.Migrate0` runs in xUnit now). TempTab counter switched from `Interlocked` cached
field to derived `Tabs.Count(predicate)`. Migration v16 → v17 is additive (new `Tab.IsPinned` flag).
Build-Suite floor 688 → 710 (+22 tests across Pin-lifecycle predicates, pool limits, Tab.Clone
roundtrip, MessageStore Migrate0 construction, and Honorific TitleData JSON roundtrip).

## 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.

## v1.4.5 — UX and Robustness (released 2026-05-12)

Sixth sub-patch of the v1.4.x Polish Sweep series. User-visible robustness polish plus two doc/test
polish items from the audit backlog. Chat-log draw failures now surface as a one-shot notification
instead of failing silently. The first-run wizard splits accept from close: `OnClose` no longer
silently sets `FirstRunCompleted`, and a new footer "Later — keep defaults" button is the explicit
path to dismiss without picking a profile. `InputHistoryService` clears on plugin dispose so the
previous session's typed commands don't bleed into the next load. `FontManager` falls back to the
system font path if the embedded Hellion font resource is missing (broken-csproj / dev-build only).
The status bar hides the version slot when the chat window is too narrow to fit all five slots
without overlap. Plus `Plugin.cs:167-168` gains an explicit session-only Auto-Tell-Tab invariant
comment with a `TempTabCounter.InitFromList` pin in the Build-Suite. No schema bump, no migration.

## v1.4.4 — Threading and IPC Safety Polish (released 2026-05-12)

Fifth sub-patch of the v1.4.x Polish Sweep series. `AutoTellTabsService.ActiveTempTabCount` switches
from a lock-protected LINQ `Count` to an `Interlocked` counter kept in sync from inside the existing
mutation paths; `Initialize()` seeds from the persisted Tabs list and `SaveConfig`'s
snapshot-restore path calls a new `ResyncTempTabCounter()` after the mid-step `RemoveAll`.
`HonorificService` carries per-method threading banners and `TryUnsubscribe`'s log level moves from
Debug to Warning. `AutoTranslate.PreloadCache` is marked `IsBackground = true` so plugin unload no
longer waits for it. `Configuration.IsAllowedForStorage` logs once per unknown ChatType via a
`NonSerialized` `HashSet`, and `PrivacyPersistUnknownChannels` default flips to `true` for new
installs. No schema bump, no migration.

## v1.4.3 — Plugin-Load Async-Init + Repo-Cutover (released 2026-05-08)

Fourth and largest sub-patch of the v1.4.x Polish Sweep series. Plugin migrated to Dalamud's
`IAsyncDalamudPlugin` API: the constructor handles only bootstrap essentials (config load, language
init, conflict detection); migrations, service allocations, window construction and hook
subscription move to `LoadAsync`. Schema gate replaces the v9 → v16 migration chain; configs on
schema v16+ load directly, older configs trigger an "install v1.4.2 first" error.
`AutoTranslate.PreloadCache` moved off the load path. `FontManager.BuildFonts` runs sync at the
start of `LoadAsync`; Dalamud rebuilds the font atlas on its own pipeline. Custom-repo URL cut over
to `gitea.hellion-forge.cloud`; the GitHub repo remains as a frozen v1.4.2 snapshot. Plugin load
time sits at ~3.7 s median (5 reloads), comparable to v1.4.2 — the async migration is a foundation
for v1.4.4 lazy-init optimisations rather than an immediate user-perceived win.

## v1.4.2 — ChatLog Frame-Hot-Path (released 2026-05-08)

Third sub-patch of the v1.4.x Polish Sweep series. Per-frame allocations eliminated from the
ChatLogWindow render path and the settings status bar. Card-mode border loop in `DrawMessages`
hoists five invariants into a pre-loop hoist; `AutoTellTabTint` gets a per-tab cache via
`TabTintCache` (separate validation keys per cache, no cross-invalidation); status bar moves the
cache-gate check before the aggregation and replaces LINQ `Sum`+`Count` with a single-pass foreach.

## v1.4.1 — Theme Engine Performance (released 2026-05-08)

Second sub-patch of the v1.4.x Polish Sweep series. ABGR cache pre-computed on theme records;
`HellionStyle.PushGlobal` reads from the cache instead of converting per slot per frame. **~13 %
render-time recovery** in smoke tests (plan estimate of 2–6 % was conservative; real result ~10–15
%). Custom-theme hot-reload survives transient file locks via last-known-good snapshot. Plus:
Synthwave Sunset as the tenth built-in, author credits consolidated under Hellion Forge, Mint
Grove + Forge Merchantman credited to Carla Beleandis as a community thanks.

## v1.4.0 — Critical Lifecycle Fixes (released 2026-05-07)

First sub-patch of the v1.4.x Polish Sweep series. Seven P0 findings from audit passes 3 and 4
resolved: async-void loads, missing `IsBackground` flags, `GC.Collect` in Dispose, deferred-save
race and pre-v13 backup lookup for `WindowOpacity`. No schema bumps, no user-facing behaviour
changes other than reload and shutdown running noticeably cleaner.

## v1.3.0 — Plugin Integrations: Honorific (released 2026-05-07)

First cycle of the plugin integrations roadmap. Honorific custom titles displayed in the chat header
with auto-detect and silent fallback. New Integrations settings tab. Pattern-setter for the five
following cycles (Context Menu, NotificationMaster, RP Status Block, ExtraChat, XIVIM).

Spec: [Plugin Integrations Overview](../Hellion%20Chat%20Plugin-Integrationen.md)

## v1.2.3 — Theme Expansion (released 2026-05-06)

Four new built-in themes: Night Blue, Indigo Violet, Forge Merchantman, Hellion Spectrum
(Deuteran/Protan-safe). No engine changes. See `docs/CHANGELOG.md`.

(v1.2.2 was burned because the `repo.json` manifest was not bumped in sync on the first push —
re-released as v1.2.3 with full manifest synchronisation.)

## v1.2.1 — Settings Cleanup (released 2026-05-06)

Settings re-sorted thematically (9 cards), 4 dead settings removed, auto-migration v15 → v16 without
data loss.

## v1.2.0 — Layout Refresh (released 2026-05-05)

Top tabs refresh, sidebar tab icons, bottom status bar, card rows as default message render,
auto-tell tab hashing.

## v1.1.0 — Theme Foundation (released 2026-05-05)

Theme engine with five built-in themes, settings card grid, custom themes via JSON, theme authoring
docs. Plugin icon updated to Hellion Forge hammer. See `docs/CHANGELOG.md` for details.

Items from the original v1.1.0 plan (ad-block / spam filter, receive-suppressed-tells toggle) were
deferred in favour of the theme engine — both items live on in the mid-term block.

---

## Mid-Term (v1.4.x+)

- **Plugin Integrations Roadmap (Cycles 2–6)** — six plugin integrations planned; Honorific
  (Cycle 1) is live, followed by Context Menu, NotificationMaster, RP Status Block, ExtraChat and
  XIVIM in their own cycles. Spec and cycle order in
  [Plugin Integrations Overview](../Hellion%20Chat%20Plugin-Integrationen.md).
- **Ad-Block / Spam Filter** — hybrid concept combining a lightweight built-in filter with optional
  `NoSoliciting` IPC integration. Addresses ad-spam in public channels and tells. Deferred from the
  v1.1.0 plan.
- **Receive-Suppressed-Tells Toggle** — auto-tell tabs trigger even when a third-party plugin (e.g.
  XIVMessenger) globally suppresses /tell display. Same hook layer as ad-block, so they are bundled.
- **Database Viewer Inline Search** — full-text search in the DB viewer via SQLite FTS5. Currently
  only date and channel filters are available.
- **TempTell Persistence** — pin toggle on TempTell tabs so selected tells survive a relog. Tester
  request from Jingliu.
- **FontManager Async Refactor** — move `LoadGameSymFontAsync` out of the blocking plugin
  constructor. Fix cold-start hitching on first plugin load (low severity; plugin is functional).
- **Separate Opacity Active vs. Inactive** — second slider for inactive window opacity. Upstream
  declines this; we can decide differently here.
- **Failed-Tell Notification** — visible message on /tell failure (offline, restricted instance,
  blacklisted, world-mismatch) instead of silent failure.
- **Per-Tab Sound Notification** — sound toggle and optionally a custom .wav per tab, with
  mute-in-combat option.

---

## Long-Term (v1.x+)

### Storage Backends (three-stage confirmation)

- MySQL/MariaDB backend for multi-device setups
- PostgreSQL backend
- AES-256 encryption for sensitive channels with a local key

### Linux-Specific

- WireGuard network detection as an optional filter trigger
- libnotify integration for native Linux toasts
- XDG compliance (complex under Wine)

### UX and Tab Management

- **Regex Tab Routing** — route plugin output spam into dedicated tabs, auto-sort tells from
  specific people. Clearly scoped against ad-block: routing sorts into views, blocking hides
  globally.
- ~~**Auto-Detect Duties**~~ — dropped in v1.5.6 cycle: the effort (a render-gate in the tab-bar / tab-sidebar draw plus resolving what happens to the active tab when it is hidden) outweighs the practical benefit. Removed from backlog.
- **UX Bundle** — vertical tab bar as a layout option, Shift+Mousewheel to scroll tab headers
  without activating them, global hotkey to close the active tab.
- **Configure Tab Title** — configurable tab title format (name / name + abbreviated world / full
  name / custom), overridable per tab.
- **Name Display Options** — analogous to FFXIV vanilla (full name, first name abbreviated,
  initials), per-channel override possible.
- **Item & Flag Linking** — outgoing: Shift-click on an item/flag sends it to the focused plugin
  input. Incoming: item links and map coordinates are clickable.
- **Color Currently Selected Input Channel** — tint the channel-selector button in the input bar
  with the current channel colour.
- **Plugin-Disclosure Pre-Send Filter** — configurable word/regex list blocks sending with a
  pre-send confirmation. Protects against accidentally mentioning plugins in public channels.
- ~~**Chat Clear on Name Change**~~ — dropped in v1.5.6 cycle: would require tracking the character against a stored prior state, which conflicts with the privacy-plugin identity; the desired effect already exists because HellionChat keeps history per character identity, so there is no functional gap. Removed from backlog.
- **Hide Plugin Window on NG+ Screen** — extend hide logic to cover additional addon names.
- ~~**Kick from Novice Network**~~ — dropped in v1.5.6 cycle: no accessible IPC surface found for Novice Network membership check or kick action; not feasible without a risky memory scan. Removed from backlog.
- **Text-to-Speech for /tell** — incoming tells via TTS, optionally per sender, with channel filter
  and mute-in-combat. Low priority.

### Distribution and Branding

- Hand-drawn Hellion logo (currently a placeholder from the Hellion Online Media brand repo)
- GitHub Action for automatic `repo.json` sync after tag push
- Submission to the Dalamud main plugin repository (in addition to the custom repo)

---

## Bug Verifications

Carried over from the upstream issue tracker; not yet reproduced or verified in Hellion Chat 1.0.0.
Will be tested against the current state when opportunity allows.

- **Right-Click Whisper Error** in Field Ops / Special Instances (Eureka, Bozja, Occult Crescent,
  DRS) — upstream [#168](https://github.com/Infiziert90/ChatTwo/issues/168). Reply helper appears to
  swallow the `@World` suffix.
- **FPS Drops with Plugin Active** — upstream
  [#145](https://github.com/Infiziert90/ChatTwo/issues/145). 10–20 % drop since upstream v1.29.19.0.
  v1.0.0 includes several fixes on the suspected paths; repro test against the current state is
  open.
- **Add Blacklist from Plugin Window** — upstream
  [#140](https://github.com/Infiziert90/ChatTwo/issues/140). Right-click add-to-blacklist throws
  "Cannot locate character with that name"; works via vanilla chat.
- **DB Viewer Column Sort** — State column sorts lexicographically instead of numerically (10 before
  2). XIVIM [#82](https://github.com/NightmareXIV/XIVInstantMessenger/issues/82); repro in Hellion
  Chat open.

---

## Licence Boundary

Hellion Chat is licensed under EUPL-1.2. Concept imports from AGPL-3.0 plugins (e.g. XIV Instant
Messenger) are architectural inspiration only — no code was ported. Code imports from the upstream
codebase are complete as of v1.4.x because Chat 2 is undergoing a fundamental rework and selective
patches are no longer cleanly portable. Status and rationale in
[`UPSTREAM_SYNC.md`](UPSTREAM_SYNC.md).
