fix(vtank): slice 7 round F item 3 — Items tab is VTank only

Owner's second live look: "On items tab, we show some options there
right of the items we add. That should not be there. Remove that."
VTank's real Items tab is exactly 6 controls (docs/research/vtank-kb/
08-ui-views.md §1 "Tab: Items" — 2 labels, the 2-column
clWeaponName/clHandedness list, Add, Add (no buffs)); mosstank.xml's
Items group also carried a right-of-list block with no VTank
counterpart: the Weapon/Offhand readout (MonsterEquipmentText), the
Refill Worn Mana toggle + slider + its two status labels
(RefillWornManaText/ItemManaRechargeStatus), and the ProfileNotice
hint label. All five are deleted from the markup.

The pre-existing "Remove" button stays — it traces back to the
plugin's very first automation PoC commit (`4e6e9bc9d`, long before
Campaign VT slice 7 existed), the accepted "slice-1 Delete" carried
forward per the round's own scope.

RefillWornMana/RefillWornMana-Item-ManaPercent are real
VtankOptionCatalog entries (Bool/Int, not tString) — nothing was
deleted from the plugin, they remain real settings, still editable in
the Advanced Options popup or via `/vt opt set`; only this second,
redundant Items-tab surface for them is gone. ItemManaRechargeStatus
was a pure runtime status readout with no setting behind it and no
VTank equivalent, so it has no replacement — matching VTank's own tab,
which shows no such status either.

Mutation shown to fail first: the new
ItemsTabIsVtankOnlyPlusTheAcceptedSliceOneRemoveButton test asserted
the Items group has no toggle/slider and no label bound to any of the
four removed properties, against the UNCHANGED markup — failed on the
Refill Worn Mana toggle still being present — then passed once the
block was deleted from mosstank.xml.

MossTank suite 723 -> 724 (one new pin); App markup/plugin filter
258/258 (unaffected — no App-side markup change).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-07 18:46:58 +02:00
parent 9e23f0acb6
commit 179e6f3390
2 changed files with 56 additions and 13 deletions

View file

@ -252,6 +252,47 @@ public sealed class MossTankMarkupContractTests
Assert.Equal("Priority", tooltipsByHeaderText["P"]);
}
/// <summary>
/// Round F item 3 (owner's second live look: "On items tab, we show
/// some options there right of the items we add. That should not be
/// there. Remove that."). VTank's own Items tab is exactly 6 controls
/// (docs/research/vtank-kb/08-ui-views.md §1 "Tab: Items" — 2 labels,
/// the 2-column list, Add, Add (no buffs)) with nothing to the right
/// of the list. MossTank's pre-existing "Remove" button traces back
/// to the plugin's very first automation PoC commit (`4e6e9bc9d`,
/// long before Campaign VT slice 7), so it is the accepted
/// "slice-1 Delete" this round keeps; everything else that used to
/// sit right of the list (Weapon/Offhand readout, Refill Worn Mana
/// toggle/slider/status, the notice hint) is gone.
/// </summary>
[Fact]
public void ItemsTabIsVtankOnlyPlusTheAcceptedSliceOneRemoveButton()
{
XDocument document = XDocument.Load(
Path.Combine(AppContext.BaseDirectory, "mosstank.xml"));
XElement root = Assert.IsType<XElement>(document.Root);
XElement itemsGroup = root.Elements("group")
.Single(static g => (string?)g.Attribute("visible") == "{ItemsVisible}");
Assert.Single(itemsGroup.Elements("list"));
string[] buttonTexts = itemsGroup.Elements("button")
.Select(static b => (string?)b.Attribute("text") ?? string.Empty)
.ToArray();
Assert.Equal(["Add", "Add (no buffs)", "Remove"], buttonTexts);
// Nothing else — no toggle, no slider, and no label reads a
// MossTank-only status/notice property.
Assert.Empty(itemsGroup.Elements("toggle"));
Assert.Empty(itemsGroup.Elements("slider"));
string[] labelBindings = itemsGroup.Elements("label")
.Select(static l => (string?)l.Attribute("text") ?? string.Empty)
.ToArray();
Assert.DoesNotContain("{MonsterEquipmentText}", labelBindings);
Assert.DoesNotContain("{RefillWornManaText}", labelBindings);
Assert.DoesNotContain("{ItemManaRechargeStatus}", labelBindings);
Assert.DoesNotContain("{ProfileNotice}", labelBindings);
}
[Fact]
public void AuthoredShellFitsTheMinimumCanvasAndEverySizedChildFitsItsParent()
{