Estudié EnTT y Flecs y construí un ECS alrededor de tres requisitos: acceso de lectura/escritura declarado, cambios estructurales diferidos y deterministas, y snapshots del mundo. Una Entity contiene índice y generación en ocho bytes; la generación detecta referencias obsoletas. La persistencia usa un UUID, StableEntityId, en lugar de un handle de runtime.
Las entidades con los mismos componentes viven en archetypes, con columnas SoA contiguas en chunks de 64 KiB. Con dos millones de entidades, 64 KiB necesitó 1.482 páginas frente a 5.955 con 16 KiB, con el mismo ancho de banda. Los sparse sets guardan componentes raros sin multiplicar archetypes. Las tablas de componentes compartidos mantienen un valor por configuración distinta, referenciado por el chunk.
Cada SystemDescriptor declara lecturas y escrituras. El scheduler deriva un DAG de dependencias y ejecuta juntos los sistemas sin conflictos. Con 32 sistemas, el coste medido fue de 0,68 µs por frame sobre 10.000 entidades y 0,86 µs sobre 1.000.000: depende de los sistemas, no del número de entidades.
Las fases fijas definen input, simulación, física, eventos, aplicación estructural, transforms y extracción para render. Crear, destruir y modificar componentes pasa por CommandBuffer, aplicado en un punto determinista. Un auditor detecta escrituras no declaradas en desarrollo y se elimina al compilar Shipping. Eventos tipados, observers y un almacén propio de jerarquía completan el modelo; la propagación por versiones evita recalcular nodos inmóviles.
El replay desde snapshot reprodujo 120 registros de auditoría idénticos durante 120 frames en la misma máquina y build. Ese es el alcance verificado del determinismo y la base del Play/Stop del editor; no se promete determinismo entre plataformas.