1
Map the surfaces
Sim state → observation channels; sim inputs → action schemas; sim step() → tick. Keep the mapping table in your repo — it becomes your manifest.
2
Implement lockstep semantics
Advance only on
world.tick (AWP-TIM-002); stage submitted actions until the next advance (AWP-TIM-010); per advance, emit statuses and events first, then exactly one frame per per-tick channel, then the tick result (AWP-TIM-003/011); deliver a tick-0 frame right after session.ready (AWP-TIM-009); remove all wall-clock reads from the state path (AWP-TIM-004). If more than one lockstep session can bind, declare tick_authority: "barrier" (AWP-TIM-012).3
Add sim-profile capabilities
Wire
seed into your RNGs, implement world.snapshot/restore over your sim’s serialization, and verify AWP-REP-003 by replaying a recorded log in CI.4
Conformance
Map each requirement you implement to its ID in the requirement matrix and keep that mapping in your repo. The conformance suite that will automate this check is not published yet; until it is, a claim of conformance is self-assessed and MUST say so (AWP-CNF-005).