Extracted shaders were cached on disk by shader name only, the cache was
consulted before the owning mod was known and a cached file was never
rewritten: an updated zip mod kept its old shader across launches, a removed
mod's copy beat the mod serving the name now, and another mod's same-named
shader could overwrite it. The cache is now per mod, files are rewritten
when their bytes change and the resolver picks the owning mod first.
Concept docs for interactives, effects and Live2D, UI and shell.