I studied EnTT and Flecs, then built an ECS around three requirements: declared read/write access, deferred deterministic structural changes, and world snapshots. An Entity is an eight-byte index and generation; the generation detects stale references. Disk persistence uses a UUID, StableEntityId, rather than a runtime handle.
Entities with the same component set live in archetypes, stored as contiguous SoA columns in 64 KiB chunks. At two million entities, 64 KiB required 1,482 pages versus 5,955 at 16 KiB, with the same bandwidth. Sparse sets hold rare components without multiplying archetypes. Shared-component tables keep one value per distinct configuration, referenced by the chunk.
Each SystemDescriptor declares reads and writes. The scheduler derives a dependency DAG and runs non-conflicting systems together. With 32 systems, measured scheduling overhead was 0.68 µs per frame over 10,000 entities and 0.86 µs over 1,000,000: this cost follows systems, not entity count.
Fixed frame phases define when input, simulation, physics, events, structural playback, transforms and render extraction occur. Creation, destruction and component changes go through CommandBuffer, applied at one deterministic point. A development access auditor detects undeclared writes and is compiled out in Shipping. Typed events, observers and a dedicated hierarchy store complete the model; versioned transform propagation avoids recalculating stationary nodes.
Snapshot replay reproduced 120 identical audit records over 120 frames on the same machine and build. That is the verified scope of determinism, and the foundation for editor Play/Stop; cross-platform determinism is not promised.