Say out loud that GetAuctionSellItemInfo answers more than 1.12

The shape gate caught the extra two returns, which is exactly its job. They
are not a gap to close, so they do not belong on NOT_YET_ASSERTED, which is a
list of things that are wrong and may only shrink.

BEYOND_1_12_ARITY is the other category: a binding that answers more because
the realm's own FrameXML reads more, named with the reference's arity, ours,
and the reason. The gate asserts both numbers, so an entry cannot drift — a
stale reference arity fails, and so does a different count than the one the
reason covers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
This commit is contained in:
2026-10-29 11:55:05 -06:00
co-authored by Claude Opus 5
parent 21ebe65d83
commit 9d5a974649
@@ -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,