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

@ -481,14 +481,24 @@
declared list width below rather than the column itself). Name-cell declared list width below rather than the column itself). Name-cell
click deletes the row (case 0); hands-cell click cycles handedness click deletes the row (case 0); hands-cell click cycles handedness
(case 1) — session-local only, see DeleteItemRowAt/CycleItemHandsAt's (case 1) — session-local only, see DeleteItemRowAt/CycleItemHandsAt's
own doc comments for why handedness isn't persisted. --> own doc comments for why handedness isn't persisted.
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."): deleted the whole right-of-list block
(Weapon/Offhand readout, Refill Worn Mana toggle/slider/status,
the notice hint) — VTank's real Items tab (KB table above) is
exactly the 2 labels + list + Add/Add (no buffs), nothing beside
it. The "Remove" button below stays: it traces back to the
plugin's original pre-campaign automation PoC (`4e6e9bc9d`), the
accepted "slice-1 Delete" this round keeps. RefillWornMana/
RefillWornMana-Item-ManaPercent are real VtankOptionCatalog
entries (not tString) — still 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. -->
<group x="8" y="42" w="976" h="229" visible="{ItemsVisible}" anchor="left top right bottom"> <group x="8" y="42" w="976" h="229" visible="{ItemsVisible}" anchor="left top right bottom">
<label x="4" y="8" w="327" text="Weapons / Wands / Shields / Pets" color="#FFE8DEC3" /> <label x="4" y="8" w="327" text="Weapons / Wands / Shields / Pets" color="#FFE8DEC3" />
<label x="331" y="8" w="103" text="Hands" color="#FFE8DEC3" /> <label x="331" y="8" w="103" text="Hands" color="#FFE8DEC3" />
<!-- Round D item 4: height-only growth (+35, matching the group) —
the right-side info block starts at x=438, only 4px past this
list's right edge, so widening it would collide; pinned left,
not stretching horizontally. -->
<list x="4" y="28" w="430" h="147" rowheight="18" anchor="left top bottom" <list x="4" y="28" w="430" h="147" rowheight="18" anchor="left top bottom"
selected="{SelectedItemRowIndex}" onchange="{SelectItemRow}" selected="{SelectedItemRowIndex}" onchange="{SelectItemRow}"
tooltip="Click a name to remove it, or Hands to cycle 1-Handed/2-Handed."> tooltip="Click a name to remove it, or Hands to cycle 1-Handed/2-Handed.">
@ -500,14 +510,6 @@
onclick="{AddSelectedItemNoBuffs}" anchor="bottom" /> onclick="{AddSelectedItemNoBuffs}" anchor="bottom" />
<button x="284" y="189" w="126" h="25" text="Remove" <button x="284" y="189" w="126" h="25" text="Remove"
onclick="{RemoveSelectedItem}" anchor="bottom" /> onclick="{RemoveSelectedItem}" anchor="bottom" />
<label x="438" y="36" text="{MonsterEquipmentText}" color="#FFC7B98F" />
<toggle x="438" y="64" w="220" h="20" text="Refill Worn Mana"
checked="{RefillWornManaEnabled}" onclick="{ToggleRefillWornMana}" />
<slider x="438" y="90" w="188" h="15" value="{RefillWornManaValue}"
onchange="{SetRefillWornMana}" tooltip="Worn-item mana refill threshold." />
<label x="636" y="88" text="{RefillWornManaText}" color="#FFC7B98F" />
<label x="438" y="116" text="{ItemManaRechargeStatus}" color="#FF9B9072" />
<label x="438" y="160" text="{ProfileNotice}" color="#FF9B9072" />
</group> </group>
<!-- Consumables: the same exact-name profile VTank consults for phials, <!-- Consumables: the same exact-name profile VTank consults for phials,

View file

@ -252,6 +252,47 @@ public sealed class MossTankMarkupContractTests
Assert.Equal("Priority", tooltipsByHeaderText["P"]); 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] [Fact]
public void AuthoredShellFitsTheMinimumCanvasAndEverySizedChildFitsItsParent() public void AuthoredShellFitsTheMinimumCanvasAndEverySizedChildFitsItsParent()
{ {