He is still told he can learn recipes he already knows. The check was there;
it was written against a shape no recipe in the game has.
Read off his own item cache, the realm's Plans: Copper Chain Vest (3609)
carries exactly one spell: 3349, at trigger 0. The rule looked for trigger 6
carrying the taught spell. Neither half matches — and 3349 is not the craft
spell either, it is a learn *wrapper* whose single SPELL_EFFECT_LEARN_SPELL
teaches 3321. Nothing in the item record names 3321 at all, so no check that
reads only the item can ever answer this question.
The app now makes the hop while it has the catalog in hand, through
SpellCatalog::learned_spell, and hands the result over as
ItemTemplateView::teaches. The tooltip reds ITEM_SPELL_KNOWN when any of
those is in the known-spell set. The trigger-6 arm stays for an item that
really does carry its taught spell.
The old test passed throughout, which is the part worth keeping in mind: its
fixture was invented — trigger 6, spell 3330 — and 3330 is Silvered Bronze
Shoulders, nothing to do with this item. It now uses the realm's own record,
and a second test pins the 3349 -> 3321 hop against the shipped Spell.dbc so
the fixture can never drift from the data again.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn