fix #FA4-D6-D7,SF-8: revert three of FA4's four dimming un-dims (IgnoreFellowshipRequests, FellowshipAutoAcceptRequests, FellowshipShareLoot)
The corrected plan D6 (docs/plans/2026-08-11-fellowship-allegiance-campaign.md) established that retail's client reads neither IgnoreFellowshipRequests nor FellowshipAutoAcceptRequests on the fellowship-invite path -- both are pure server-side filters with no client consumer, exactly like the two allegiance bits they were always meant to parallel. Their claimed consumer (RetailUiRuntime.TryAutoRespondToFellowshipInvite) is deleted in a sibling commit this fix round. Both rows revert from Live to StoreOnly. Mechanism review SF-8 additionally found FellowshipShareLoot's claimed consumer -- "a second live checkbox surface on the fellowship page" -- is not a consumer at all: nothing in acdream reads the stored value back (FormatStatsText uses snapshot.ShareXp only; the 0x00A2 Create builder carries shareXP alone), and the live-DAT dump confirms its checkbox is a child of the NOT-in-fellowship frame -- invisible whenever you actually have a fellowship to loot-share within. A second EDITOR of a value is not a CONSUMER of it under AD-78's own "drives nothing observable client-side" definition. FellowshipShareLoot reverts too. Only FellowshipShareXP survives as genuinely live -- the Create-flow click reads it directly as the sent shareXP wire bit. Net: 35 (pre-FA4) -> FA4 shipped 31 -> fix round reverts three -> 34 of 50 dimmed / 16 live, ONE net un-dim from the pre-FA4 baseline, not four. Updated the class doc's derivation table, the conformance test's ExpectedStoreOnlyIds set, and the 31/19 count assertions to 34/16. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
df00030697
commit
300d8189f6
2 changed files with 82 additions and 31 deletions
|
|
@ -698,19 +698,28 @@ public sealed class CharacterOptionsPageControllerTests
|
|||
// ── AD-78 caption dimming (user-directed, 2026-08-11, gate 2) ───────────
|
||||
|
||||
/// <summary>
|
||||
/// The exact 31 <see cref="CharacterOptionId"/> values this slice dims
|
||||
/// The exact 34 <see cref="CharacterOptionId"/> values this slice dims
|
||||
/// (<see cref="RowSpec.StoreOnly"/> == true), transcribed independently
|
||||
/// of <c>CharacterOptionsPageController.Groups</c> from the derivation
|
||||
/// table in that class's own doc comment. <b>Wiring a future consumer
|
||||
/// for any of these means removing it from this literal set AND
|
||||
/// flipping its <c>Groups</c> table entry from <c>StoreOnly</c> to
|
||||
/// <c>Live</c> consciously — leaving either one stale fails this
|
||||
/// test.</b> Campaign FA slice FA4, D7 removed four ids from this set —
|
||||
/// test.</b>
|
||||
///
|
||||
/// <para>
|
||||
/// Campaign FA slice FA4, D7 originally removed four ids from this set.
|
||||
/// The FA4 FIX ROUND (2026-08-12) put THREE of them back:
|
||||
/// <c>IgnoreFellowshipRequests</c>/<c>FellowshipAutoAcceptRequests</c>
|
||||
/// (the fellowship-invite auto-decline/auto-accept, D6) and
|
||||
/// <c>FellowshipShareXP</c>/<c>FellowshipShareLoot</c> (the fellowship
|
||||
/// page's Create flow / D5 display / second checkbox surface) all
|
||||
/// gained real acdream-side consumers.
|
||||
/// (D6's correction — retail's client reads neither bit on the invite
|
||||
/// path; the client-side auto-respond interceptor that was their
|
||||
/// claimed consumer is deleted) and <c>FellowshipShareLoot</c>
|
||||
/// (mechanism SF-8 — its claimed "second checkbox surface" consumer
|
||||
/// never actually READS the stored value back). Only
|
||||
/// <c>FellowshipShareXP</c> survives as a genuine live row (the
|
||||
/// fellowship Create flow reads it as the sent <c>shareXP</c> bit).
|
||||
/// Net: 35 (pre-FA4) → 34 (post-fix-round), one net un-dim.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
private static readonly HashSet<CharacterOptionId> ExpectedStoreOnlyIds =
|
||||
[
|
||||
|
|
@ -729,9 +738,12 @@ public sealed class CharacterOptionsPageControllerTests
|
|||
CharacterOptionId.FilterLanguage,
|
||||
CharacterOptionId.ShowHelm,
|
||||
CharacterOptionId.ShowCloak,
|
||||
// Group 3 (Grouping) — 2 of 6 (FA4, D7: the other four — see class doc)
|
||||
// Group 3 (Grouping) — 5 of 6 (fix round: only FellowshipShareXP stays live — see class doc)
|
||||
CharacterOptionId.IgnoreAllegianceRequests,
|
||||
CharacterOptionId.IgnoreFellowshipRequests,
|
||||
CharacterOptionId.DisplayAllegianceLogonNotifications,
|
||||
CharacterOptionId.FellowshipShareLoot,
|
||||
CharacterOptionId.FellowshipAutoAcceptRequests,
|
||||
// Group 4 (Other Players) — 10 of 11
|
||||
CharacterOptionId.AcceptLootPermits,
|
||||
CharacterOptionId.UseDeception,
|
||||
|
|
@ -762,8 +774,8 @@ public sealed class CharacterOptionsPageControllerTests
|
|||
.ToHashSet();
|
||||
|
||||
Assert.Equal(ExpectedStoreOnlyIds, actualStoreOnly);
|
||||
Assert.Equal(31, actualStoreOnly.Count);
|
||||
Assert.Equal(19, 50 - actualStoreOnly.Count); // the 19 live rows (FA4, D7: +4)
|
||||
Assert.Equal(34, actualStoreOnly.Count);
|
||||
Assert.Equal(16, 50 - actualStoreOnly.Count); // the 16 live rows (fix round: net +1 from pre-FA4 baseline)
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue