chore(release): close the v1.13.0 cycle

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.
This commit is contained in:
2026-08-19 17:34:49 +02:00
parent 3b5001e616
commit 64f48b1131
4 changed files with 104 additions and 4 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
<PropertyGroup>
<!-- Independent versioning; see yaml changelog for upstream Chat 2 base -->
<Version>1.12.0</Version>
<Version>1.13.0</Version>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!-- Use lock file to pin exact versions -->
@@ -25,6 +25,23 @@ internal sealed class ConfigMigrationV26Step : ISelfTestStep
return SelfTestStepResult.Fail;
}
// What v26 exists to prevent: a tab whose name came from a conversation
// partner but is not marked as such, because screenshot mode reads that
// mark to decide whether the name may be shown. Anything still holding a
// tell binding or the temp flag should have been marked on load.
foreach (var tab in Plugin.Config.Tabs)
{
var looksLikeAPartner = tab.IsTempTab || tab.TellTarget?.IsSet() == true;
if (!looksLikeAPartner || tab.NameCameFromPartner)
continue;
ImGui.Text(
$"Tab '{tab.Name}' carries a tell binding but is not marked partner-named "
+ "— the v26 migration did not reach it, and screenshot mode will show it"
);
return SelfTestStepResult.Fail;
}
// The state the v24 migration exists to prevent: filter on, failsafe on,
// nothing picked. Under the corrected rule that combination stores no
// messages at all, so reaching /xlperf in it means the migration did not
+80
View File
@@ -11,6 +11,86 @@ releases as an overview and links to the release pages for details.
---
## [1.13.0] — unreleased (local only)
Typography. The message list was the last surface still drawn in ImGui defaults,
and it is the only one a reader looks at line by line rather than in glances. It
now has named type roles instead of a single size, a header above the
conversation, and rows that read as rows. **Not published** — the public release
stays at v1.5.6.
### Added
- A header above the conversation: the channel name in tracked small caps with
the tab's own icon, and the home world on the right. It stays out of the way
where the name is already on screen — the top-tab strip carries it, and so does
a pop-out's title bar — and disappears entirely when the window is too short to
leave room for readable chat.
- Timestamps sit in a column of their own, so sender names line up underneath
each other instead of starting wherever the previous stamp happened to end.
- Local and server time in the status bar, in the game's own LT/ST notation.
Server time comes from the game rather than from a local UTC conversion, so it
follows whatever Square Enix does with it.
- Rows have a surface: a wash from the left and a two-pixel accent bar, fading in
and out rather than snapping.
- The sender is set in a heavier cut of the same face. There is no bold in the
plugin, so the weight comes from a denser rasterisation — which means it has no
effect when both font settings are off and the game's own face draws.
- System messages are italic. Nobody said them; it is the game talking.
- Card density finally differs from compact: the sender on its own line, the body
indented onto the text column, and air between messages.
- A camera button in the input row for screenshot mode, lit while active. The
setting had only ever existed in the right-click menu on a player name, which
for a privacy feature is close to not existing at all.
- `Hide timestamps when redundant` is reachable. It has shipped with translations
since 1.5.6 and never had a control.
### Fixed
- **Screenshot mode reached one surface out of four.** An auto-tell tab is named
`Player@World`, and the sidebar, the tab strip and a pop-out's window title all
drew that untouched — so a screenshot of the default view named the
conversation partner while every message below it was anonymised. All four
surfaces now share one rule, and the placeholder is re-salted on every plugin
load so two screenshots taken weeks apart cannot be tied together by it.
- `Show timestamps` in the tab editor does something again. It had two readers in
1.5.6 and lost both when the old chat window was retired in May.
- Four settings could always leave the row-height cache stale and never did: the
italic size, the italic toggle, and the two font toggles. The last two were the
quiet ones — both size fields default to the same value, so nothing in the
cache key moved while the glyph widths underneath it did. The clock format and
the per-tab timestamp switch join them.
- The word-wrap calculation was handed the UI scale where ImGui wanted the ratio
between rendered and baked size. The two are the same number until a second
size enters a line, which is exactly what this release introduces.
- Emoji and other characters outside the basic plane no longer break a tab name
drawn in tracked caps.
### Changed
- **Config version 26.** The migration marks existing tell tabs as
partner-named, which is what screenshot mode reads. Tabs promoted to permanent
before this version cannot be recovered — promotion clears every marker and
keeps the name — but renaming one has the same effect.
- The header replaced the pop-out's plain title row. With the title bar on it
shows only the world, because the title already carries the name.
- The channel header gave up its clock when both times moved to the status bar.
Three copies of the same number on one screen is two too many.
- All three custom font handles now rasterise the full glyph range. The smaller
one started with an ASCII-sized range on the assumption it would only draw
clocks and world names; a single umlaut in a tab name would have broken it.
### Known issues
- The channel header recomputes its widths every frame rather than on the status
bar's one-second tick. Measurable, not measured.
- `Metrics.Scale` still calls a Dalamud property that is marked obsolete.
- The database viewer and the emoji picker are still English on every client.
- 245 orphaned resource keys remain as the inventory of what the v1.6.0 rebuild
lost.
---
## [1.12.0] — unreleased (local only)
The reconnection cycle. A commit during the v1.6.0 window layer rebuild removed the old tab system,
+6 -3
View File
@@ -14,7 +14,7 @@ be a poor fit for the plugin's privacy-first scope during brainstorming.
The published release is **v1.5.6**. Development since then runs as a UI rebuild towards v2.0.0 and
is not published: the whole window layer is being rewritten from ImGui defaults to custom drawing.
Versions v1.6.0 through v1.12.0 are local development states, and `repo.json` deliberately keeps
Versions v1.6.0 through v1.13.0 are local development states, and `repo.json` deliberately keeps
its download links on v1.5.6 so nobody updates into a partial state.
Where it stands:
@@ -32,8 +32,11 @@ Where it stands:
database maintenance and pinning unreachable, and 433 of 824 translation keys with no caller. All
four features are back, the settings window is translated into 25 languages, and the channel grid
is authoritative over what gets stored.
- **v1.13.0 onwards** — typography and the message list: the font size ladder, channel headers and
message cards, then the sidebar moving from tab rows to channel rows.
- **v1.13.0** — typography. Named type roles instead of one size, a channel header above the
conversation, timestamps in a column of their own, and rows with a surface. Screenshot mode
reached one of four surfaces that draw a tab name and now reaches all of them.
- **v1.14.0 onwards** — the sidebar moving from tab rows to channel rows, then the first-run
wizard and the input bar, which are the last two surfaces still drawn in ImGui defaults.
A tester beta follows once the visual pass is complete.