v2.9.0 — shooter: perfil puro-datos + Neon Swarm + simulación testeada en Node
Release aditivo sobre 2.8.1 (bump minor según SPEC §7.0): un género nuevo de punta a punta sin tocar el core — la tesis del protocolo, ejecutada otra vez, ahora con simulación verificable. La versión del protocolo sigue en 0.1.
Added — shooter: perfil puro-datos + Neon Swarm + simulación testeada + runtime
profiles/shooter.json(12º perfil, segundo puro-datos): arena shmup vertical —ships,weapons,enemiesconbehavior(enum chaser/drifter),waves,powerups(heal/rapid/shield),arenacontinua ybalance. 4 refs con mensajes por defecto, 14 bounds, 2 enums — cero funciones,dataOnly: true. Límite documentado:boundsno alcanza campos dentro de arrays (spawns[].count/gap— primer caso concreto para los "agregados anidados" de SPEC §11).- Neon Swarm: 2 naves, 2 armas, 4 enemigos, 5 oleadas, 3 powerups. Lint 0/0 a la primera.
- Simulación pura (
shooterInit/shooterTick+ LCG engame3d-logic.mjs): determinista, un tick = un frame — el juego entero se gana y se pierde en Node dentro denpm test(+9 chequeos): victoria de la IA sobre las 5 oleadas, derrota sin input, invariante de conservaciónkills+leaked+lost == spawns(que cazó un hueco de contabilidad real al escribirlo), rapid a mitad de cooldown, shield y heal con tope. - Runtime
shooteren game3d: render Three.js de la simulación (input mantenido, HUD, overlays). Verificado además sobre el estado vivo del navegador: victoria con 920 pts y conservación exacta (46+5+4=55). Nota operativa: el RAF pausa en pestañas ocultas — los harnesses pilotan los ticks directamente. - Conformance 179 casos (+13), 16 pares de ejemplos, 12 hints nuevos, 128 reglas, 12 perfiles; footer de index y nota SPEC §6 sin enumeraciones (principio anti-drift).
Changelog completo: CHANGELOG.md