UI widgets hold the Simulation and read authoritative values via getters on
demand; state-change events are refresh signals, not carriers of truth. This
codifies the pattern used by BuildButtonGrid and avoids stale-cache bugs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc