First tranche off the DLL work list. The method that produced it is worth
recording with the code: `SuperCleveRoidMacros`'s `NampowerAPI.lua` is a
capability registry — a `VERSION_REQUIREMENTS` table of every nampower
name with its minimum version, reached through `HasFeature`, which tests
the version **and** `_G[name] ~= nil`. So none of this was broken, and
raising `GetNampowerVersion` would not have helped: the only honest way
to make one of those features live is to define the global.
- `PlayerIsMoving()`, `PlayerIsRooted()`, `PlayerIsSwimming()` — `1` or
nil, as upstream's own doc lines state, never a boolean. All three read
the per-tick posture snapshot `SelfMovement` already carries, which
gains `rooted` (`MOVEFLAG_ROOT`) and `moving` (any of the six movement
bits, the keyboard turns included — they are input to the same word the
client tests, and a turn in place does interrupt a cast).
- `IsAuraHidden(spellId)` — from a new `SpellLookup::hidden_aura`, filled
with exactly `ui_aura::shown_in_aura_ui`'s predicate inverted, so it
cannot contradict the aura list an addon reads beside it. An unknown
spell is nil: "not hidden" is the honest answer about an aura this
client knows nothing about, and the lists show a catalog miss too.
- `GetItemIconTexture(itemId)` — two hops, because an item template
carries a display id and not an icon: the cache row's `displayInfoID`,
then `ItemDisplayInfo`'s `Icon` through a new `ItemIconProbe`. A known
item with no display row is nil (a data gap); an item the cache has
never seen raises and records the ask, as every `item_record` verb here
does. ClassicAPI's `GetItemIcon` wants the same probe, which is why it
is a probe and not a closure.
- `GetTrinkets()` — slots 13 and 14 in `GetEquippedItem`'s own row shape,
an empty slot absent rather than nil-valued, since the consumer walks
it with `if t[i] then`.
Each is in `reference_surface.rs`'s `allowed_beyond_1_12` with why 1.12
has no spelling to prefer — the client reads its own movement word and
tells Lua nothing, applies the aura attribute test inside
`UnitBuff`/`UnitDebuff` without exposing either, and can only reach an
item icon through a bag slot it already holds.
All nine gates green.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn