CRMS Sumerian Game — browser-edition validation

Session 1: 41 inputs; 61 rolls; 103 observed fields; all output, rolls and post-line states identical to the Node runner.
Session 2: 4 inputs; 7 rolls; 13 observed fields; all output, rolls and post-line states identical to the Node runner.
All earlier 127 regression assertions also pass with the incremental browser engine.
Additional browser-engine assertions: 126.

Post-line state comparison uses JSON normalization, matching the saved Node evidence (IEEE negative zero serializes as zero).

21 browser interaction checks passed in Chromium, opening index.html directly via file:// with networking disabled.

PASS: Standalone file opens directly, offline
PASS: Archived session 1: 103 observed fields match in Chromium
PASS: Session 1 ending and final population reproduce
PASS: Replay Restart repeats identical transcript
PASS: Archived session 2: 13 observed fields match in Chromium
PASS: Session 2 final population reproduces
PASS: Original ASCII source view
PASS: Unicode APL source view
PASS: Play pauses for real user input
PASS: Play Restart repeats same replacement RNG seed
PASS: Noninteger browser input rejected without corrupting game
PASS: Original negative-buy response appears
PASS: Original equal-grain feeding rejection appears
PASS: Original planting-land rejection appears
PASS: Interactive game reaches original losing ending
PASS: Input hidden after ending
PASS: Downloaded transcript equals displayed output
PASS: No page-level horizontal overflow at phone width
PASS: No page-level horizontal overflow at desktop width
PASS: No HTTP requests, CDNs or server dependencies
PASS: No browser runtime errors
