fix(charactersheet): stop a failed enchant scan sticking for the session - #1993
Merged
EllesmereGaming merged 1 commit intoSep 7, 2026
Conversation
Reported for Death Knights: the character sheet kept flagging the main hand as missing an enchant with a runeforge applied. EUI_GetEnchantText caches by enchant id and treated an empty result as a cacheable answer, guarded by `cached ~= nil`. A scan that came back empty because the item's data had not arrived yet was therefore stored, and every later call returned it without re-reading. The sheet already re-runs on GET_ITEM_INFO_RECEIVED for precisely that case, so the recovery path was there and the cached miss discarded it. Only successful lookups are cached now. Verified live: the item link carries the runeforge (enchant id 6245), and the tooltip line for it is present with type 15 (ItemEnchantmentPermanent) reading "Enchanted: Rune of the Apocalypse" -- so once the scan is allowed to run again it resolves. Hits Death Knights hardest because both weapons carry the same runeforge id, so one poisoned entry flags the pair, but nothing about it is class-specific.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reported by @railgun (Blizz UI Enhanced, 9.1.6): the character sheet keeps
flagging a Death Knight's main hand as missing an enchant with the runeforge
applied.
What it is not
Traced live against an affected weapon first, because every part of the chain
looked correct on inspection:
ench: 6245), so theitem:%d+:(%d+)parse is fine15(
ItemEnchantmentPermanent), readingEnchanted: Rune of the Apocalypse--so
_ENCHANT_LINE_TYPEmatches on the first branchTooltipUtil.SurfaceArgsno longer exists on this client, but lines nowarrive pre-surfaced (
leftTextpopulated,argsnil), so the guarded skipis harmless
Against live data the resolver returns the right answer. It just never gets
asked.
Root cause
EUI_GetEnchantTextcaches by enchant id and treats an empty result as acacheable answer:
A scan can legitimately come back empty because the item's data has not
arrived yet. That empty answer was then stored permanently, and since the
guard is
~= nilrather than a truthiness test, every later call returned itwithout re-reading.
The sheet already re-runs on
GET_ITEM_INFO_RECEIVED(QueueBetterItemsRefresh)for exactly this situation -- the recovery path was built and correct, and the
cached miss silently threw it away.
That is why it reproduces for one player and not another: it depends purely on
whether the first scan happened before the item's data was ready.
Fix
Only successful lookups are cached. A miss returns
""uncached, so the nextrefresh re-reads and the existing recovery path works as intended.
Death Knights feel it hardest because both weapons carry the same runeforge id,
so a single poisoned entry flags the pair -- but nothing about the bug is
class-specific; any enchant can hit it.
Testing
luac -pclean; house style check clean. Not click-tested against the originalreport -- I could not reproduce locally (my own DK's first scan succeeds, so the
cache holds the good value). Worth having @railgun confirm, and worth noting
that
/reloadshould have cleared it for them before this fix, which is itselfa decent check that this is the right cause.