.changelog/3103.md
UIAlertController dialog showing a brief status message when the user taps the JIT HUD pill.isUserInteractionEnabled = false).updateForCore(requiresJIT: false) previously forced .notApplicable, hiding the JIT pill for cores where JIT is beneficial but not required (Dolphin, PPSSPP, Flycast, Mupen64Plus). The indicator now correctly shows for all JIT-relevant cores..unavailable status now reachable — JITStatusViewModel accepts a coreJITIsRequired flag; when the core strictly needs JIT and it cannot be acquired, the indicator shows the red .unavailable state and guidance text instead of silently falling back.CoreJITSupportLevel enum — new type (required / automatic / recommended(fallbackMode:) / notApplicable) that drives differentiated JIT messaging based on how critical JIT is for each core.JITStatusIndicatorViewController now posts in-game toast notifications on JIT status transitions (acquired → .jit success toast; unavailable for required core → persistent .error toast).JITCoreCapability enum in PVUIBase, making it the single source of truth for JIT-relevant core identification.coreRequiresJIT renamed to isJITRelevant — the previous name was misleading because flycast/mupen only benefit from JIT rather than requiring it. A new coreIsJITRequired(_:) helper gates the strict-require path. The old name is kept as a deprecated alias.PVEmulatorViewController+JIT uses authoritative PVJITRequirement — indicator setup now derives CoreJITSupportLevel directly from core.jitRequirement (PVPrimitives.PVJITRequirement) rather than a boolean flag, enabling full-fidelity support-level messaging including .automaticWithFallback (Dolphin) and .optional(fallback:) (PPSSPP / Mupen / Flycast).JITCoreCapability delegates to PVJITRequirementRegistry — isJITRelevant(_:) and coreIsJITRequired(_:) now consult the runtime registry (populated from Core.plist by CoreLoader) as the primary source, falling back to compile-time keyword matching only for partial identifiers or pre-CoreLoader contexts. Removes dependence on hardcoded strings.JITCoreCapability.azahar.isJITRequired — was incorrectly true; Azahar and emuThree use .automaticWithFallback (plist optional) so they are JIT-relevant but not JIT-required.PVJITRequirement = optional to PPSSPP Core.plist — the plist key was missing, causing the runtime registry to classify PPSSPP as notRequired even though its Swift override is .optional(fallback: "Interpreter").