Simulation.h/.cpp had grown a large block of schematic/unlock state (containers, the implicit-unlock traversal, checksum folding) that has nothing to do with tick orchestration. Split it into its own class so Simulation stays legible as "tick orchestration + subsystem handles". This commit only adds the new UnlockState.h/.cpp (registered in CMakeLists.txt) with the containers, types, and logic moved in verbatim; nothing references it yet, so this is a no-op for behavior. Simulation is wired to use it in the next commit. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YHcUerKAZKWNvSKJxYKbnG