Character load and the promotion trainer re-read static_rune_promotion on every call and replaced the cached object. They now get the object loaded at boot, as GET_BASE_CLASS already does; the DB query is only a miss fallback. No value changes: the cached and re-read objects hold the same row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>