diff --git a/docs/plans/2026-09-07-campaign-vt-slice7-tabs.md b/docs/plans/2026-09-07-campaign-vt-slice7-tabs.md index c7b98749..7fa79e3e 100644 --- a/docs/plans/2026-09-07-campaign-vt-slice7-tabs.md +++ b/docs/plans/2026-09-07-campaign-vt-slice7-tabs.md @@ -154,3 +154,4 @@ re-review, merge to the campaign branch, then the owner's visual gate. ## Closeout - 2026-09-07 21:10 final combined re-check (E+F, both lenses): all twelve items CLOSED with failable tests, no per-frame allocation regression, the three recall tables agree pairwise, plugin references BCL + Abstractions only — MERGE-READY. **Merged into the campaign branch at `4a825c23c`.** Owner's second-look items all closed (Advanced Options bottom block gone; string settings hidden; Items tab VTank-only). Accepted, documented deviations: the Buffs extras strip centres at the 856 floor only (anchors have no "centre"); the recall combo lists "Marketplace" in place of VTank's duplicated "Fac. Hub"; dead margins on six tabs at the 984 default. Carried polish (owner: "we do that later"): strip the retired `scroll="true"` from five markup sites and make its test failable or document that unknown attributes are ignored; delete the ~20 bindings round F orphaned; cache the two Buffs row sources like every other column; two comment corrections; Meta's delete cell as an icon. Open issues from this slice: #490 part 1 (host: `StartVisible=false` + `ShowInSidePanel=false` unshowable), #491 (buff lists not consumed by `BuffPlan.Build`), #492 (Vulkan device-loss crash + shutdown re-throw), #493 (in-game meta/loot rule editors, deferred). Owner's visual gate: the merged build launched from the gate worktree for the final look. - 2026-09-07 21:30 OWNER THIRD LIVE LOOK at the merged build (`4a825c23c`): (1) the Buffs tab's middle block (seven category toggles, difficulty/rebuff spinners, Stop/Force buffing + status, the counts line) is "made up — remove them from here": VTank's Buffs tab is exactly two lists + two Add… buttons; the real settings behind two of them (`SpellDiffExcessThreshold-Buff`, `RebuffTimeRemainingSeconds`) stay editable in Advanced Options, Force Buff stays on Options; the MossTank-only category bools stay in the model only. (2) Advanced Options still shows tooltips — remove them (VTank's popup has none; the description box is the info channel). Round G dispatched on a fresh worktree off `a2df6efae`; merge + relaunch follow. +- 2026-09-07 owner's third live look, post-closeout: (1) "Screenshot shows options under the buffing tab circled in red. Those are made up, remove them from here" — the whole MossTank-extras middle strip fix round B item 2 added between the Buffs tab's two lists (7 category toggles, difficulty/rebuff spinners, a second Force/Stop buffing button + status, the coverage counts) is gone outright; the Buffs tab is now VTank's own exact six controls (2 labels, 2 lists, 2 "Add..." buttons), matching the Items-tab precedent from round F item 3. The underlying BuffSettings fields (seven category bools, SkillExcessOverDifficulty, RebuffWhenUnderSeconds) stay in the model/side-car and remain editable through Advanced Options (SpellDiffExcessThreshold-Buff / RebuffTimeRemainingSeconds); Force Buff / Cancel Force Buff stay on the Options tab. Twenty-two now-orphaned XML-only bindings deleted from MossTankPanel.cs (the seven Enabled/Toggle pairs, DifficultyText/Up/Down, RebuffText/Up/Down, BuffButtonText, the Buff action) — this is the "delete the ~20 bindings round F orphaned" carried-polish item from the closeout, done as part of this fix rather than separately; BuffStatus/Coverage stay since MossTankPanelTests still exercises both directly. Commit `6be555ad4`. (2) "Also still have tooltips in the advanced options, remove please" — the three tooltip= attributes mosstank-advanced.xml had grown (option list, category checklist, value field) are removed; VTank's real AdvancedOptionsView has no tooltip mechanism, only its own description readout. New whole-tree test AdvancedOptionsPopupHasNoElementWithATooltip guards against any future re-addition. Commit `617a9c221`. Both fixes' new/changed tests shown to fail first against targeted mutations (a stray toggle re-added to the Buffs group; a tooltip= reintroduced on the option list), then reverted and restored green. MossTank suite 726 -> 726 (one Fact replaced); App markup/plugin filter 262 -> 261 (item 1, one Fact removed) -> 262 (item 2, one Fact added). Full solution Release build green throughout. diff --git a/src/AcDream.Plugins.MossTank/BuffPlan.cs b/src/AcDream.Plugins.MossTank/BuffPlan.cs index 4b223c28..91439d16 100644 --- a/src/AcDream.Plugins.MossTank/BuffPlan.cs +++ b/src/AcDream.Plugins.MossTank/BuffPlan.cs @@ -28,7 +28,11 @@ public sealed class BuffSettings /// /// How far the casting skill must exceed a spell's difficulty before the /// tier is considered reliable — VTank's - /// SpellDiffExcessThreshold-Buff. + /// SpellDiffExcessThreshold-Buff, editable through Advanced + /// Options (VtankOptionCatalog). Signed on purpose — the wiki is + /// explicit that "a positive number raises the skill necessary to cast + /// spells, a negative number lowers it", so a lower-level character can + /// reach for higher tiers by going negative. /// public int SkillExcessOverDifficulty { get; set; } = 5; diff --git a/src/AcDream.Plugins.MossTank/MossTankPanel.cs b/src/AcDream.Plugins.MossTank/MossTankPanel.cs index 84c359c1..7458fa2a 100644 --- a/src/AcDream.Plugins.MossTank/MossTankPanel.cs +++ b/src/AcDream.Plugins.MossTank/MossTankPanel.cs @@ -426,7 +426,11 @@ internal sealed partial class MossTankPanel } // ── main panel bindings ─────────────────────────────────────────────── - public Action Buff => StartOrStop; + // Campaign VT slice 7 — owner's third live look (2026-09-07): the + // Buffs tab's own "{Buff}"/"{BuffButtonText}" button (a redundant + // second Force/Stop control with no VTank counterpart) was deleted + // from mosstank.xml; StartOrStop itself stays, still reachable from + // the `/mt buff` slash command (MossTankCommands.cs). public Action ForceBuff => StartForceBuff; public Action CancelForceBuff => CancelForceBuffCore; public Action ToggleCombat => ToggleMacro; @@ -695,8 +699,13 @@ internal sealed partial class MossTankPanel ApplyAdvancedOptionCore(); }; - /// The button is Force Buff; while a pass runs it cancels. - public string BuffButtonText => _running ? "Stop buffing" : "Force buff"; + /// + /// The force-buff status. No longer read by any Buffs-tab control + /// (owner's third live look, 2026-09-07 — the Buffs tab's own + /// "{BuffStatus}" label had no VTank counterpart and is gone), but the + /// underlying _status state stays real and is exercised directly + /// by MossTankPanelTests. + /// public string BuffStatus => _status; public string CombatButtonText => _combat.ButtonText; /// @@ -1578,7 +1587,13 @@ internal sealed partial class MossTankPanel /// Vitals line, using the same numbers the character panel shows. public string Vitals => _vitals; - /// What a buff pass would cover, named from the retail tables. + /// + /// What a buff pass would cover, named from the retail tables. No + /// longer read by any Buffs-tab control (owner's third live look, + /// 2026-09-07 — the count had no VTank counterpart and is gone), but + /// still exercised directly by MossTankPanelTests' allocation + /// and throttle pins. + /// public string Coverage => _coverage; // ── settings bindings ───────────────────────────────────────────────── @@ -1586,18 +1601,6 @@ internal sealed partial class MossTankPanel // in plugin markup, whereas an editable field would need keyboard routing // plumbed through to plugin panels first. - /// - /// VTank's SpellDiffExcessThreshold-Buff. Signed on purpose — the - /// wiki is explicit that "a positive number raises the skill necessary to - /// cast spells, a negative number lowers it", so a lower-level character - /// can reach for higher tiers by going negative. - /// - public string DifficultyText => - $"Spell difficulty margin: {_buffSettings.SkillExcessOverDifficulty:+0;-0;0}"; - - public string RebuffText => - $"Rebuff when under: {_buffSettings.RebuffWhenUnderSeconds / 60.0:0.#} min"; - public string NormalHealthText => Percent(_vitalSettings.NormalHealth); public string NormalStaminaText => Percent(_vitalSettings.NormalStamina); public string NormalManaText => Percent(_vitalSettings.NormalMana); @@ -1626,13 +1629,6 @@ internal sealed partial class MossTankPanel public bool VitalUpkeepEnabled => _vitalSettings.Enabled; public bool HelpOthersEnabled => _vitalSettings.HelpOthers; - public bool TrainedOnlyEnabled => _buffSettings.BuffTrainedSkillsOnly; - public bool AttributesEnabled => _buffSettings.BuffAttributes; - public bool ProtectionsEnabled => _buffSettings.BuffProtections; - public bool AurasEnabled => _buffSettings.BuffAuras; - public bool BanesEnabled => _buffSettings.BuffBanes; - public bool RegenerationEnabled => _buffSettings.BuffRegeneration; - public bool OtherEnabled => _buffSettings.BuffOther; // ── Buffs tab Extra/Blacklisted lists + picker (Campaign VT S7.4: // VTank's own lstBuffSpells/lstAntiBuffSpells, docs/research/vtank-kb/ @@ -1774,20 +1770,6 @@ internal sealed partial class MossTankPanel public Action SetHelperStaminaPercent => value => SetHelperStamina(value / 100f); public Action SetHelperManaPercent => value => SetHelperMana(value / 100f); - public Action DifficultyDown => () => UpdateProfile(() => - _buffSettings.SkillExcessOverDifficulty = - Math.Max(-100, _buffSettings.SkillExcessOverDifficulty - 5)); - public Action DifficultyUp => () => UpdateProfile(() => - _buffSettings.SkillExcessOverDifficulty = - Math.Min(100, _buffSettings.SkillExcessOverDifficulty + 5)); - - public Action RebuffDown => () => UpdateProfile(() => - _buffSettings.RebuffWhenUnderSeconds = - Math.Max(30, _buffSettings.RebuffWhenUnderSeconds - 30)); - public Action RebuffUp => () => UpdateProfile(() => - _buffSettings.RebuffWhenUnderSeconds = - Math.Min(1800, _buffSettings.RebuffWhenUnderSeconds + 30)); - public Action ToggleVitalUpkeep => () => { _vitalSettings.Enabled = !_vitalSettings.Enabled; @@ -1809,20 +1791,6 @@ internal sealed partial class MossTankPanel ExpressionValue.Boolean(!_inventorySettings.ManaChargesWhenOff)); public Action ToggleHelpOthers => () => UpdateVital(() => _vitalSettings.HelpOthers = !_vitalSettings.HelpOthers); - public Action ToggleTrainedOnly => () => UpdateProfile(() => - _buffSettings.BuffTrainedSkillsOnly = !_buffSettings.BuffTrainedSkillsOnly); - public Action ToggleAttributes => () => UpdateProfile(() => - _buffSettings.BuffAttributes = !_buffSettings.BuffAttributes); - public Action ToggleProtections => () => UpdateProfile(() => - _buffSettings.BuffProtections = !_buffSettings.BuffProtections); - public Action ToggleAuras => () => UpdateProfile(() => - _buffSettings.BuffAuras = !_buffSettings.BuffAuras); - public Action ToggleBanes => () => UpdateProfile(() => - _buffSettings.BuffBanes = !_buffSettings.BuffBanes); - public Action ToggleRegeneration => () => UpdateProfile(() => - _buffSettings.BuffRegeneration = !_buffSettings.BuffRegeneration); - public Action ToggleOther => () => UpdateProfile(() => - _buffSettings.BuffOther = !_buffSettings.BuffOther); public Action CycleTargetMethod => () => UpdateProfile(() => _combatSettings.SelectionMethod = _combatSettings.SelectionMethod switch { diff --git a/src/AcDream.Plugins.MossTank/mosstank-advanced.xml b/src/AcDream.Plugins.MossTank/mosstank-advanced.xml index 8024e7db..d73783d5 100644 --- a/src/AcDream.Plugins.MossTank/mosstank-advanced.xml +++ b/src/AcDream.Plugins.MossTank/mosstank-advanced.xml @@ -167,12 +167,19 @@ AddRouteCheckpoint/AddRouteJump themselves) — nothing was deleted from the plugin, only the second, redundant UI surface for it. Panel height shrinks 450->300 to match VTank's real 392x300 AdvancedOptionsView - footprint (minh follows); minw stays 392. --> + footprint (minh follows); minw stays 392. + + Owner's third live look (2026-09-07): "Also still have tooltips in the + advanced options, remove please." VTank's own AdvancedOptionsView has no + tooltip mechanism at all — its own description readout + (AdvancedOptionDescription, the label at the bottom) is the retail + in-popup info channel, not a hover tooltip. The three tooltip= attributes + this popup had grown (the option list, the category checklist, the value + field) are removed; nothing else in this file ever set one. --> + selected="{SelectedAdvancedOptionIndex}" onchange="{SelectAdvancedOption}"> @@ -181,15 +188,13 @@ pure checklist with no real selection concept — see SelectedAdvancedOptionCategoryIndex's own doc comment. --> + selected="{SelectedAdvancedOptionCategoryIndex}"> + maxlength="160" clearonsubmit="false" background="#E6000000" /> diff --git a/src/AcDream.Plugins.MossTank/mosstank.xml b/src/AcDream.Plugins.MossTank/mosstank.xml index 4f93e083..4a0b6e40 100644 --- a/src/AcDream.Plugins.MossTank/mosstank.xml +++ b/src/AcDream.Plugins.MossTank/mosstank.xml @@ -566,58 +566,37 @@ + Owner's third live look (2026-09-07): "Screenshot shows options under + the buffing tab circled in red. Those are made up, remove them from + here." The MossTank-only extras block that used to sit in the empty + middle strip between the two lists (7 category toggles, the + difficulty-margin and rebuff-under spinners, the Force/Stop buffing + button + status, and the "N attributes, N trained skills, N buff + lines" coverage counts — added by fix round B item 2, then repolished + by round F item 6) is gone outright: VTank's real Buffs tab has no + such block, and this campaign's own silhouette rule (fix round B item + 2's own reasoning) cuts both ways — a VTank-authentic tab gets no + MossTank-only middle strip either. The underlying settings are not + lost: BuffSettings' seven category bools, SkillExcessOverDifficulty + and RebuffWhenUnderSeconds all stay in the model and its JSON + side-car, and the same two numbers are real, already-editable + VtankOptionCatalog entries (SpellDiffExcessThreshold-Buff, + RebuffTimeRemainingSeconds) reachable from Advanced Options. Force + Buff / Cancel Force Buff stay right where VTank has them, on the + Options tab (ForceBuff/CancelForceBuff, unchanged by this edit). The + XML-only bindings that fed the removed controls (the seven + *Enabled/Toggle* pairs, DifficultyText/Up/Down, RebuffText/Up/Down, + BuffButtonText, and the Buff action — StartOrStop itself stays, still + reachable from the `/mt buff` slash command) are deleted from + MossTankPanel.cs as orphans; BuffStatus and Coverage stay (both are + still exercised directly by MossTankPanelTests, independent of any + control reading them). --> -