diff --git a/crates/benilla-app/src/ui_script/shape_gate.rs b/crates/benilla-app/src/ui_script/shape_gate.rs index c21f56ec..19e8d6f0 100644 --- a/crates/benilla-app/src/ui_script/shape_gate.rs +++ b/crates/benilla-app/src/ui_script/shape_gate.rs @@ -11,6 +11,22 @@ /// list may only shrink. const NOT_YET_ASSERTED: &[(&str, usize, &str)] = &[]; +/// Globals that answer **more** than 1.12 because the realm's own FrameXML reads more: a name, +/// the reference's arity, what this client answers, and why. +/// +/// A different thing from [`NOT_YET_ASSERTED`], which is a gap to close. These are deliberate and +/// load-bearing — the realm's interface does not work without them — so they are stated rather +/// than fixed, and the extra returns must come *after* the reference's, never in place of one. +/// The gate still fails on any other arity, including a larger one than the row claims. +const BEYOND_1_12_ARITY: &[(&str, usize, usize, &str)] = &[( + "GetAuctionSellItemInfo", + 6, + 8, + "the realm's rewritten CalculateAuctionDeposit reads maxStack as the 7th return \ + (Blizzard_AuctionUI.lua:1123); a nil there raises out of AuctionFrameAuctions_OnLoad and \ + the whole auction window fails to load. The 8th is the item link.", +)]; + /// The kind gate's list, same rules: a name, the wrong kinds it answers and the reason. An entry /// whose binding comes into agreement fails the gate. const KINDS_NOT_YET_ASSERTED: &[(&str, &str, &str)] = &[]; @@ -143,6 +159,21 @@ fn every_query_binding_answers_the_reference_s_return_arity() { } checked += 1; if got as usize != want { + if let Some((_, ref_arity, ours, _)) = + BEYOND_1_12_ARITY.iter().find(|(n, ..)| n == name) + { + assert_eq!( + *ref_arity, want, + "{name} is on the beyond-1.12 list against a stale reference arity — the \ + table now says {want}" + ); + assert_eq!( + got as usize, *ours, + "{name} is allowed {ours} returns for a named reason; it now answers {got}, \ + which is a different deviation and wants its own entry" + ); + continue; + } if let Some((_, known, _)) = NOT_YET_ASSERTED.iter().find(|(n, ..)| n == name) { assert_eq!( *known, want,