Switch to a vanilla-compatible enchantment schema. v2.1.2 used description.fallback and effects: {} which the Mojang strict codec silently rejected on parts of 1.21.x and on 26.x, leaving the enchant visible but unregistered. New schema mirrors vanilla fortune.json shape (no fallback, no effects field).
Match silk-touch rarity by joining #minecraft:exclusive_set/mining (now competes with fortune+silk-touch for the same enchant-table slot).
Fix min_format range. v2.1.2 was [88,0]-[9999,0] which let 1.21.5-1.21.8 attempt to load and silently break; v2.1.3 over-tightened to [94,0] excluding 1.21.10. v2.1.4 settles at [88,0]-[9999,0] with the registry-compatible schema so 1.21.9/10/11 all load cleanly and older versions get a real Incompatible Pack message.
Verified end-to-end on Paper 1.21.11 (33/33 supported blocks pass a 3x3 sweep via a headless mineflayer bot) and on vanilla 26.1.2 (clean pack load, enchant registers).