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.
A patch key spelled in another case than the entity property wrote both keys
and the entity's own value, written last, won: the patch was lost. Property
names now match case-insensitively, as entity JSON is read. Scenario winners
were picked in scene-key order, so a replacement moved into a scene seen
earlier lost to the original; definitions are now collected flat in load
order and grouped after (ScenarioResolver.GroupReplacing). Patch docs said
wildcard values were a fallback; code and tests overwrite, docs now agree.
AGENTS.md documents the autoplay --dialogs=N flag. Concept doc.