Count-based dirty tracking missed content changes when tile/visibility count stayed the same (e.g., door opening, player moving through corridor). Now re-renders all layers when GameState.current_tick advances, which correctly handles every snapshot change. Adds 3 tests for tick advancement and same-count-different-content scenarios. 68 total tests, 0 failures. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>