The released list jumped from 2.0.5 straight to 2.0.2 -- neither of the two
August patches was ever entered. Both are in now, described the same way as
their neighbours.
The UX bundle's "global hotkey to close the active tab" also gets a note.
Until 2.0.5 there was no close path at all for it to bind to; CloseTab and
GetCloseability carry the rules now, so the keybind is the only part left.
Version, manifests, changelog and the Forge post for the tell-focus and
tab-closing fixes.
The manifest changelog drops the 2.0.1 block to stay inside the four-entry
slim rule; earlier history keeps its link. The roadmap loses the
GlobalScaleSafe item, which is done, and gains two that came out of this
cycle's review: PopoutSlotMap has no synchronisation, and the database
viewer and symbol picker are still English -- 90 Unicode character names
in the picker alone, which is a cycle rather than a patch note.
Removing BetterTTV took out the plugin's only outbound network call, and five
documents were still describing it as present. PRIVACY.md led with "one outbound
network call exists by design" -- the opposite of what shipped an hour ago, and
the one claim in that file people actually check.
PRIVACY.md now opens with none at all. The section that described the call is
kept and marked as removed rather than deleted, so the claim can be read against
what it replaced: the startup fetch meant BetterTTV saw an IP as soon as the
plugin loaded, whether an emote ever appeared or not. Worth leaving visible.
BetterTTV also comes out of the third-party table, which now lists only the two
parties nobody using this plugin through Dalamud can avoid.
SECURITY.md listed the EmoteCache HTTP client as in scope for reports. There is
nothing there to report on.
THIRD_PARTY_NOTICES.md named the call as current; both entries it has ever
carried are now historical.
README dropped the pointer to the outbound call and the switch for it, a
stability bullet about a crash fix in code that no longer exists, and the line in
the Chat 2 migration that moved an emote cache directory nothing reads.
ROADMAP gained 2.0.1 and 2.0.2, and a section for what the 2.0.0 push left
behind: 47 overlong comment blocks, channel names translated in only ten of the
25 languages, an orphaned EmoteCacheV1 directory on anyone who ran an older
build, and the deprecated GlobalScaleSafe call that is the last compiler warning
in the build.
v1.6.0 through v1.15.0 were never published. The whole window layer was being
rewritten from ImGui defaults to custom drawing, and repo.json deliberately kept
its links on v1.5.6 so nobody could update into a half-finished state. That work
lands here in one release.
The config is not migrated, it is replaced. A config carried across nine cycles of
window rebuilds holds values chosen against surfaces that no longer exist, and
starting over is the only way to be sure every install is on the same defaults.
The message database is a separate file and is not touched. The old config is
copied to HellionChat.json.pre-2.0.0.bak first, so rolling back to 1.5.6 stays a
file copy rather than an evening of clicking settings back in.
Config schema 27. The reset runs from the constructor, before LoadAsync seeds the
default tabs, and the self-test now fails if the tab list is empty at /xlperf --
that ordering breaking would leave every user with no tabs and nothing else in the
plugin would notice.
Default layout gains an Emote tab: custom emotes, standard emotes and echo. A
tester asked for it, emotes get lost between system notices otherwise.
Manifest, README, roadmap and the four changelog consumers are on 2.0.0. The
release notes lead with what was fixed rather than what was redrawn -- retroactive
cleanup that could never be applied, a compaction that reported deleting nothing
while deleting everything, pinned tell tabs that came up empty for a session. And
with the one behaviour change users should know about: the channel grid is
authoritative over storage now, so anyone who had unticked channels while the
unknown-channel failsafe was on stores less than they did before.
Version to 1.14.0 in the csproj, changelog and roadmap for the local state. Not
published: repo.json stays on 1.5.6.0, links untouched.
The changelog leads with what the row became and is honest about how it got
there: every style decision in this cycle was made by looking at variants in the
lab, in-game, against the live theme -- and the two recurring traps of the day
(the RGBA/ABGR contrast swap, popups that do not size to their content) each
left a guard behind rather than just a fix.
Smoke-tested continuously by Flo through the evening rather than at a single
gate: the contrast bug, the clipped menu, the hover speed and the seam hardness
were all his catches, live, and each is named in the log where it was fixed.
Both reasons the channel-rows idea existed are gone. It was written when the
sidebar was flat and unstyled; v1.10.0 gave it row surfaces and it already groups
pinned and auto-tell tabs under headings. What was left was a change to how the
plugin is operated rather than how it looks -- and tabs are what users have
learned to use.
Next two are the input bar and the first-run wizard, the last surfaces still
drawn in ImGui defaults.
Version to 1.13.0 in the csproj, with the changelog and roadmap entries for the
local state. Not published: the public release stays at v1.5.6, repo.json keeps
its 1.5.6.0 manifest and all three download links are untouched.
The changelog leads with the screenshot-mode gap rather than with the typography,
because that is the part that changes what a user's own screenshots contain. An
auto-tell tab is named "Player@World", and three of the four surfaces that draw a
tab name had no rule about it -- so a picture of the default view named the
conversation partner while every message below it was anonymised. Anyone who has
shared a screenshot from an older build should know that.
Config version 26 is in there for the same reason. Its migration marks existing
tell tabs as partner-named, and it says plainly what it cannot do: a tab promoted
to permanent before this version keeps its name and loses every marker, so
nothing in the stored data says where that name came from.
Known issues carry the honest tail: the header recomputes its widths every frame
instead of on the status bar's tick, and all three font handles now rasterise the
full glyph range -- the cost of letting the channel name use the smaller face
without breaking on an umlaut.
The migration self-test asserts what v26 actually does now, rather than only that
the version number moved.
Version to 1.12.0 in the csproj, with the changelog and roadmap entries for the
local state. Not published: the public release stays at v1.5.6, repo.json keeps
its 1.5.6.0 manifest and all three download links are untouched.
The changelog leads with the storage change rather than burying it under fixes.
Until this release the unknown-channel failsafe was applied to known channels
too, so an installation that had unticked channels and left the failsafe on was
storing more than the grid said. From here the grid decides, which means those
installations store less than they did yesterday. Nothing already written is
touched, but a user who compares the database against last week should find the
reason in the notes and not have to guess.
Config version 25 is recorded there for the same reason. There is no migration
behind it -- the storage rule changed shape, and the stamp says so.
Known issues carry the honest tail: the database viewer and the emoji picker are
still English, 245 orphaned resource keys remain as the inventory of what the
v1.6.0 rebuild lost, and the licence text still contradicts itself between the
About tab and the translated resources.
Version to 1.11.0 in the csproj, changelog and roadmap entries for the local
state. Not published: the public release stays at v1.5.6 and the download links
are untouched.
repo.json goes back to 1.5.6.0. It had been carrying the development version
while all three download links pointed at the v1.5.6 archive, which is a trap
waiting for a merge: Dalamud would offer an update to a version the download
does not contain, install v1.5.6 again, and offer the same update on the next
launch. main is unaffected -- it only ever saw 1.5.6.0 -- but the feature
branches have been inheriting the mismatch since v1.6.0.
The manifest version belongs to what the links actually serve. A local state is
tracked by the csproj and the changelog, which is what they are for.
Testing channel deliberately not opened yet. Publishing 1.11.0 as a test build
would ship a modern settings window alongside a first-run wizard and a message
list that are still stock ImGui -- and 1.10.0 would ship the pinned-tell-history
bug that 1.11.0 fixes.
Style foundation cycle closed. Smoke tests green across the sidebar, the tab
strip, the status bar, the theme preview and both message densities.
Download links stay on v1.5.6 deliberately: v1.6.0 through v1.10.0 are local
development states and nobody should update into one. The README badge stays
there too, since it points at the published release.
The roadmap now reflects the actual sequence -- the old "next cycle" entry
still named v1.5.7 ad-block, which has been behind the v2.x UI rebuild since
May.
Verified file by file: csproj, repo.json (both assembly versions, links
untouched), CHANGELOG, ROADMAP. Four TODOs remain in the tree, all pre-existing
and none from this cycle.
Bumps csproj, yaml, repo.json, CHANGELOG, ROADMAP and README in
lock-step to 1.5.4. Forge-post DE-body added with the Polish & Motion
versionsnatur. Slim-rule applied to the yaml and repo.json changelog
blocks (keeps v1.5.4 + v1.5.3 + v1.5.2 + v1.5.1, drops v1.5.0).
A csharpier reflow of two v1.5.4 source files (ChatLogWindow,
HellionStyle) is folded in. preflight.sh blocks A-F all green.
Plugin.cs:937 only pushed RegularFont when Config.FontsEnabled was true.
FontsAndColours.cs:50 forces FontsEnabled=false whenever UseHellionFont is
enabled (to hide the chooser UI), so the bundled-font path was silently
dead and the FFXIV Axis game-font took over. Exo 2 looked "almost right"
because it overlaps Axis on basic Latin, so the regression went unnoticed
for the entire v1.5.x series.
The fix routes RegularFont through draw whenever either FontsEnabled or
UseHellionFont is on. First-frame HITCH dropped from ~74 ms to ~20 ms
median (5-reload Linux/Wine sample 17.9-23.6 ms) as a side effect — the
v1.5.1 "too optimistic" defer-pattern hypothesis was actually a symptom
of this bug, not bad math.
Font-stack overhaul on top:
- Inter Light (Static 18pt-Light, 343 KB, SIL OFL 1.1) replaces Exo 2 as
the bundled font. Inter ships full Latin Extended-A/B, Greek polytonic
and Cyrillic Supplement coverage.
- NotoSansCjkRegular added as a third merge layer for Hangul,
Simplified-Chinese-specific Han glyphs, and CJK fallbacks the FFXIV
Japanese font does not ship.
- Two new ExtraGlyphRanges flags (LatinExtended, Greek) implemented via
AddChar pair lists in SetUpRanges.
- Settings.Apply auto-activates the matching ExtraGlyphRanges flag on
language change. Plugin.LoadAsync runs a one-shot migration that ORs
in the required flag for an already-selected language.
- ExtraGlyphRanges CollapsingHeader reachable regardless of
UseHellionFont (was hidden in the early-return branch).
- New WarningText below the language combo: FFXIV's chat engine only
fully supports EN/DE/FR/JA. Other scripts render in the HellionChat
UI but may garble in in-game chat input/send.
Localisation wave (originally a FR-only cycle):
- 24 selectable UI languages. LanguageOverride enum gains 10 new locales
plus 3 previously commented-out (Italian, Korean, Norwegian with ISO
code `nb` instead of `no`). All new values append to keep existing
user-config integer serialisation stable.
- Resource bundle split: HellionStrings.resx (24 locales, 328 keys) for
fork-added strings, Language.resx (24 locales, 456 keys) for the
ChatTwo-Crowdin-heritage. 4 post-sync Crowdin keys backfilled into
13 legacy locales with per-key AI-assisted comment marker.
- Em-dash sweep on EN source plus 18 translations. Russian and Ukrainian
keep their typographic norm.
Old HellionFont.ttf + HellionFont-OFL.txt removed; Inter-Light.ttf +
Inter-OFL.txt take their place. Configuration field UseHellionFont keeps
its name for backwards-compat. Migration v17 stays.
Bumps csproj Version, repo.json AssemblyVersion/TestingAssemblyVersion
plus the three DownloadLink* URLs, yaml + repo.json changelog blocks
(slim-rule: v1.5.2 + v1.5.1 + v1.5.0 + v1.4.10 retained, v1.4.9
trimmed to the Full history footer link), docs CHANGELOG long-form
block, ROADMAP v1.5.2 marked complete and v1.5.3 set as next cycle
(FR localisation with Hezcal native-speaker review), README status
strings plus moved pre-v1.5.2 history. Changelog includes the
in-cycle UI shrink + Fox-Banner-TreeNode smoke fix and the
WizardLastShownVersion re-show-once mechanism for existing users.
- csproj <Version> 1.5.0 to 1.5.1; <None Include="images\**"> now
excludes the source-only ASCII study folder so the deploy stays
clean
- yaml + repo.json changelog block prepended with the v1.5.1 entry,
v1.4.8 trimmed out per the slim rule (three to four versions in
the manifest cache, older history lives on the Gitea release page)
- repo.json AssemblyVersion + TestingAssemblyVersion bumped to
1.5.1.0, three DownloadLink* URLs point at v1.5.1
- docs/CHANGELOG and docs/ROADMAP gain the v1.5.1 entry; ROADMAP
Next-Cycle slot moves to v1.5.2 First-Run-Wizard rework
- README status sections updated, the previous v1.5.0 paragraph
kept under a "Project status (pre-v1.5.1, kept for context)"
heading
- Forge-post .github/forge-posts/v1.5.1.md added, DE body honest
about the HITCH-win miss
- yamllint config ignores the plugin manifest yaml because it
follows DalamudPackager's 4-space indent convention rather than
yamllint's default 2
Changelogs are honest about the cross-plugin HITCH target from
v1.5.0 not landing this cycle.
Pull in the refreshed linter and tooling configs (editorconfig,
gitignore, gitattributes, prettierignore, prettierrc, markdownlint,
yamllint, env.example, dotnet-tools) and run prettier and markdownlint
in --fix / --write mode across the repo so the existing tree matches
the new rules.
- prettier 2-space indent on yaml/yml and json overrides, asterisk
strong, underscore emphasis, proseWrap always
- markdownlint MD007 indent aligned to 2 and MD049 to underscore so
prettier output stays passing
- preflight Block F also ignores CLAUDE.md (gitignored personal file)
- prettierignore extended to keep HellionChat.yaml manifest and the
NuGet packages.lock.json out of the formatter
No semantic content changed; csharpier, build, full build-suite
(729/729) and the new prettier/markdownlint/yamllint checks all green.
Version strings bumped across all eight tracked surfaces:
- HellionChat/HellionChat.csproj <Version>1.5.0</Version>
- repo.json AssemblyVersion + TestingAssemblyVersion = 1.5.0.0
- repo.json three DownloadLink* URLs -> /v1.5.0/latest.zip
- repo.json Changelog field synced with yaml
- HellionChat/HellionChat.yaml new v1.5.0 changelog block on top; v1.4.7
drops out per the four-block slim rule
- docs/CHANGELOG.md v1.5.0 entry prepended
- docs/ROADMAP.md Next Cycle pointer moves to v1.5.1, v1.5.0
joins the released-cycle archive block
- README.md three status surfaces (badge, header,
Project Status long-form) on v1.5.0
- .github/forge-posts/v1.5.0.md Discord announcement body (German)
Preflight blocks A-F all green. Changelog embed total 2050 / 5500 chars
(four subblocks), forge-post frontmatter inside the 60/40 char caps.
Tag, push, merge are reserved for Flo.
Adds a "ChatTwo IPC compatibility layer" bullet across all six
release-note surfaces so the new behaviour from commits 8c4afaa and
655c903 is 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>
Manifest version bump for the v1.4.9 release cut. Schema-required v16
stays unchanged (R1/R2/R3 are all config-neutral refactors).
Files touched:
- HellionChat/HellionChat.csproj: <Version> 1.4.8 -> 1.4.9
- HellionChat/Plugin.cs: schema-migration error string self-reference
(v1.4.8 -> v1.4.9, required schema v16 stays)
- repo.json: AssemblyVersion, TestingAssemblyVersion, 3x DownloadLink*
URLs all bumped to 1.4.9 / v1.4.9. Changelog field is still on v1.4.8;
the v1.4.9 block plus v1.4.5 slim-drop land in the next commit.
- README.md: shield badge, version header in lead paragraph, project-
status block rewritten for v1.4.9 (Plugin-Load Render Polish).
- docs/CHANGELOG.md: v1.4.9 block inserted above v1.4.8.
- docs/ROADMAP.md: v1.4.9 moved into the released-versions list,
"Next Cycle" header now targets v1.4.10 (Render Clipper + Symbol
Picker reserves carried over from the v1.4.9 plan).
yaml changelog block and repo.json Changelog field follow in the
docs commit so the slim-drop of v1.4.5 stays atomic with the v1.4.9
block insert.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- csproj <Version>, Plugin.cs schema-gate self-reference, repo.json
(AssemblyVersion, TestingAssemblyVersion, 3x DownloadLink URLs).
- README.md shield badge, version header, Project Status body.
- docs/CHANGELOG.md gains a v1.4.8 section above v1.4.7.
- docs/ROADMAP.md flips Next Cycle to v1.4.9 (Plugin-Load Render
Polish), v1.4.8 moves into the released history above v1.4.7.
- Config schema stays at v17, Migration v17 stays additive.
repo.json Changelog field and HellionChat.yaml changelog block plus
the new forge-posts/v1.4.8.md follow in a separate commit (slim-drop
of v1.4.4 happens there).
CHANGELOG.md gets the full per-bullet block, ROADMAP.md gets the
released-cycle summary plus a v1.4.7 next-cycle placeholder, README
status section and version badge updated.
Whitespace and line-reflow drift from the markdown linter on the four
files touched by the versions-bump commit (forge-post, README,
CHANGELOG, ROADMAP). No content changes.
Manifest sync across csproj, yaml, repo.json, README, CHANGELOG,
ROADMAP and the Plugin.cs schema-gate error message. ROADMAP also gets
the v1.4.4 release block that was missed in that cycle's closure.
Forge-post v1.4.5.md follows the established frontmatter + DE-body
convention; the EN block is sourced from the yaml changelog by the
forge-announce workflow.
Translate all remaining German sections in docs/CHANGELOG.md and
docs/ROADMAP.md to English for consistency across the repository.
Previously English sections left unchanged.
Add .prettierrc.json, .markdownlint.json, .yamllint.yaml, .gitattributes
Run CSharpier, Prettier and markdownlint across the entire codebase.
No logic changes — formatting, using order and line endings only.
Chat 2 has entered a major rework that Infi confirmed makes selective
patches no longer portable. The cherry-pick pipeline as a routine
workflow stops with the v1.4.x cycle. Documentation reflects the new
state across all touchpoints.
UPSTREAM_SYNC.md rewritten: replaces the "How I Cherry-Pick" /
"Reviewing What Is New Upstream" / "Conflict Handling" sections with
"Why Cherry-Picking Stopped", "What Closing the Pipeline Means in
Practice", "What Does Not Change", "What Could Re-Open Later".
Existing cherry-pick trails in the git history stay intact, EUPL-1.2
anchor lines and NOTICE.md remain canonical.
README.md, CONTRIBUTING.md, ROADMAP.md, THIRD_PARTY_NOTICES.md and
the PR template updated to match: cherry-pick references reframed as
historical or pointed at UPSTREAM_SYNC.md for the current state.
NOTICE.md keeps the BetterTTV cherry-pick example as a concrete past
case but adds a paragraph that the pipeline is closed and clarifies
the attribution standard is preserved unchanged.
PULL_REQUEST_TEMPLATE.md drops the "Upstream cherry-pick from Chat 2"
checkbox and the cherry-pick-path compatibility prompt. The upstream
git remote was already removed locally on 2026-05-08 (separate change,
not in this commit).
No source-file edits, no manifest version bump, no changelog entry —
this is documentation-only and ships with the next release.
Hab vergessen die repo.json wieder mit zu bumpen, deshalb hat
Dalamud den v1.2.2-Release nicht angenommen — komplette Manifest-
Bump-Checkliste diesmal durchgezogen: csproj, yaml-Description +
Changelog, repo.json (AssemblyVersion + TestingAssemblyVersion +
drei DownloadLink*-URLs + Description + Changelog), CHANGELOG.md,
ROADMAP.md, README.md, Forge-Post-Datei. Inhalt unverändert
gegenüber v1.2.2.
- Move AI_DISCLOSURE, THIRD_PARTY_NOTICES, UPSTREAM_SYNC, ipc.md
into docs/ (ipc.md renamed to IPC.md for consistency)
- Add docs/ROADMAP.md, docs/CHANGELOG.md, docs/CONTRIBUTORS.md,
docs/LEARNING-JOURNEY.md
- Update README to reflect the v1.0.0 standalone state, drop the
development section, refresh the architecture tree, add a
release-cadence block linking to LEARNING-JOURNEY
- Fix stale ChatTwo/* source paths to HellionChat/* across docs
- Update cross-links in PRIVACY, CONTRIBUTING and .github/* so they
point at the new docs/ paths
Pure documentation pass, no code changes.