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