Auditoría de reutilización de Orbit Universe
Fecha de corte: 4 de octubre de 2026 Proyecto destino: Fundamental Universe Fuente: Z:\modulos ps mios finalizados y ok\modulos IA\orbit universe
Resultado de este corte
La fuente no es un proyecto con bundler: es una aplicación web estática basada en módulos ES nativos, un importmap y Three.js incluido localmente. La entrada real es index.html, que carga js/main.js; las entradas del importmap no son puntos de arranque independientes.
El estado de Orbit está muy modificado antes de esta auditoría: Git informa 1.083 rutas sucias, con 490 modificadas, 49 borradas y 544 sin seguimiento. No se ha escrito nada en Orbit. Las carpetas temporales pytest-cache-files-* no son legibles y quedan fuera del inventario de código.
Entrada y composición
| Pieza | Ubicación | Hallazgo | Decisión |
|---|---|---|---|
| Entrada HTML | index.html:202-206, index.html:542 | Define el importmap, carga consentimiento y arranca js/main.js. | Reutilizar el patrón, no copiar la página completa. |
| Aplicación | js/main.js:127 | App concentra renderer, escena, reloj, carga de escenarios, interacción y bucle. Tiene 523.275 bytes y 9.999 líneas. | Adaptar por extracción progresiva; no duplicar el monolito. |
| Catálogo | js/data/scenarios.js:347, js/data/scenarios.js:1830 | Catálogo repartido en varios módulos y fusionado con Object.assign; admite alias y familias. | Reutilizar el contrato de catálogo y cambiar el modelo físico. |
| UI | js/ui/panel.js, js/ui/ficha.js, js/ui/aula.js, js/ui/tutorial.js | Panel, ficha, aula y tutoriales están desacoplados mediante clases y eventos del App. | Reutilizar infraestructura con textos y controles cuánticos propios. |
| Internacionalización | js/i18n/i18n.js:52-465 | Idiomas es y en, diccionarios, traducción del árbol DOM y cambio de idioma. | Reutilizar el sistema y ampliar claves desde el principio. |
| Despliegue | server.js, dev/version.py, index.html | Servido como estático, con control de versión e importmap. | Mantener sin introducir build innecesario. |
Mapa de subsistemas
| Subsistema Orbit | Archivos principales | Qué hace | Estado | Acción Fundamental |
|---|---|---|---|---|
| Catálogo de escenarios | js/data/scenarios*.js, js/data/supernovas.js | Define cuerpos, parámetros, familias, alias y acciones. | Funciona; catálogo grande y modular. | ADAPTAR al contrato de escenario científico. |
| Renderer 3D | js/main.js, js/view/materials.js, js/core/gpu.js | WebGL, EffectComposer, bloom, materiales, resolución y calidad. | Funciona en el producto fuente. | REUTILIZAR como infraestructura visual. |
| Partículas | js/core/nbodyGPU.js, js/view/motas.js, js/view/polvoGPU.js | N-body GPU, puntos, muestras y capas de partículas. | Funciona con supuestos clásicos o visuales según el módulo. | ADAPTAR; muestras de Monte Carlo y eventos, nunca bolitas por defecto. |
| Nebulosas | js/view/nebulosa.js, js/view/nebulosaEmision.js | Volúmenes, emisión, perfiles y acumulación de nebulosas. | Funciona; parte integrada en la aplicación. | ADAPTAR a densidades, amplitudes y campos declarados. |
| Nebula/Dust Engine | nebula-dust-engine/src/index.js, system.js, outflow.js, gpu-profile.js | Nubes sembradas, GPU, LOD, presupuesto, picking, toque, serialización y presets. | Subsistema separado, versión 0.4.0, con pruebas propias. | REUTILIZAR mediante un adaptador de capas físicas. |
| Gravedad | js/core/physics.js, js/core/warp.js, js/core/orbital.js | Integración orbital, aceleración, potencial, dilatación y curvatura visual. | Funciona para los modelos de Orbit. | ADAPTAR solo para quantum-cosmos; no usarlo como solver de Schrödinger o QFT. |
| Mareas | js/core/roche.js, js/view/rocas.js, js/view/debris.js | Límite de Roche, rotura, escombros y corrientes. | Funciona en escenarios astronómicos. | NO APLICA al núcleo cuántico; posible reutilización en cosmología híbrida. |
| Choques | js/view/impacto.js, js/core/debris.js, js/view/explosionSupernova.js | Impactos, eyecciones, restos y sucesos dirigidos. | Funciona como modelo astrofísico. | ADAPTAR para detectores y eventos, sin arrastrar el modelo de impacto. |
| Cámaras | js/controls/flight.js, métodos de cámara de js/main.js | Órbita, vuelo, encuadre, escalas y navegación táctil. | Reutilizable. | REUTILIZAR. |
| Navegación | index.html, hash de js/main.js, js/ui/panel.js | URL directa de escenario, alias, historial y carga diferida. | Funciona. | REUTILIZAR y ampliar con rutas de laboratorio. |
| Tutoriales | js/data/tutoriales.js, js/ui/tutorial.js | Pasos, focos, paneles, escenarios y progreso. | Funciona y tiene pruebas de uso en dev/tuto.py. | REUTILIZAR el flujo; rehacer contenido científico. |
| Aula | js/data/lecciones*.js, js/ui/aula.js | Lecciones por pasos vinculadas a escenarios. | Funciona y se comprueba contra el catálogo. | REUTILIZAR el motor; crear 100 lecciones cuánticas y relativistas. |
| Buscadores | js/ui/panel.js, js/galerias.js, galerias.html | Búsqueda, filtros, familias y galería. | Funciona. | ADAPTAR a fenómeno, teoría, nivel, laboratorio y pregunta. |
| Panel administrativo | panel/, dev/insta/, dev/noticias/ | Herramientas operativas y agentes fuera del simulador principal. | No es un panel único integrado en index.html. | ADAPTAR; diseñar panel de escenarios, validación y rollback. |
| Instagram/social | dev/insta/, dev/subir*.py, panel/ | Generación, planificación y publicación de piezas. | Existe como sistema auxiliar. | ADAPTAR solo después del catálogo científico. |
| Agentes | dev/noticias/, dev/insta/ | Noticias, piezas y automatizaciones de desarrollo/publicación. | Existe fuera del runtime principal. | ADAPTAR con revisión, fuentes, changelog y rollback. |
| Exportaciones | index.html, galería y serialización del motor de polvo | URL, galería y escenas de polvo serializables; no hay contrato general de datos científicos. | Parcial. | ADAPTAR para datos, mediciones, semillas y resultados reproducibles. |
| i18n | js/i18n/i18n.js, js/i18n/es.json, js/i18n/en.json | Traducción de interfaz, escenarios, lecciones y consentimiento. | Funciona. | REUTILIZAR la infraestructura; separar textos científicos por dominio. |
| Analytics/consentimiento | js/i18n/consentimiento.js, index.html | Consentimiento previo y carga de Analytics solo con aceptación. | Funciona con Analytics denegado por defecto. | REUTILIZAR con identificadores nuevos. |
| Caché | index.html, server.js, dev/nginx_nocache.conf | Control de versión, caché de estáticos y recarga tras cambio. | Existe a nivel de servidor/cliente. | ADAPTAR para datasets, escenarios y versiones de solvers. |
| Workers/WASM/WebGL/WebGPU | js/core/nbodyGPU.js, nebula-dust-engine/src/*, js/i18n/i18n.js | WebGL2 y GPU; hay detección de capacidades y uso de OffscreenCanvas para compatibilidad. No se ha localizado un worker/WASM/WebGPU activo en el código inspeccionado. | WebGL2 probado; WebGPU/WASM pendientes. | REUTILIZAR WebGL/GPU; evaluar Worker/WASM para solvers, sin prometer WebGPU todavía. |
Núcleo físico reutilizable y frontera científica
js/core/physics.js aporta Body, Integrator, aceleración, potencial, dilatación, post-Newtoniano, fotones y sondas. Es una base útil para los laboratorios de relatividad y para el bloque quantum-cosmos, pero no representa estados cuánticos por sí sola.
El adaptador de Fundamental debe separar:
- estado matemático y parámetros del solver;
- observables y mediciones;
- capas de renderizado declaradas;
- muestras de Monte Carlo o eventos del detector;
- aproximaciones clásicas, siempre etiquetadas.
El motor de polvo es especialmente reutilizable: expone semillas, morfologías, paletas, volumen, presupuesto GPU, LOD, picking, serialización y pruebas de conservación de luz. La equivalencia correcta en Fundamental será representar densidad, amplitud, fase o muestras declaradas; no afirmar que una mota es una partícula elemental.
Validación observada
Se ejecutó npm test dentro de nebula-dust-engine:
- pasan la comprobación sintáctica, el motor, perfiles GPU, fenómenos, morfologías, demo estática, conservación de luz, fugas y sistema de grupos;
- la ejecución termina con fallo en
test/glsl-versions.mjsal validar el perfilr169 (instalado), con mensajes de compilación GLSL vacíos; - no se modifica ese subsistema ni se presenta como fallo de Fundamental: queda registrado para una comprobación posterior del entorno Three.js/GLSL.
Decisión de arquitectura para Fundamental
No se debe copiar js/main.js entero ni crear otro motor orbital paralelo. La primera implementación después de esta auditoría debe ser un shell pequeño que reutilice:
- renderer, cámara, controles de tiempo y URL;
- panel, ficha, tutorial y aula como patrones de interacción;
- i18n y consentimiento;
- Nebula/Dust Engine a través de un adaptador de
PhysicalVisualLayer; - un contrato de escenario nuevo con solver, parámetros, observables, mediciones, validación y nivel epistemológico.
El primer escenario canónico recomendado es doble rendija: solver reproducible, |psi|², fase, corriente, detector, histograma, semilla y comparación controlada con decoherencia. No se debe comenzar por una escena decorativa ni por el catálogo masivo.
Siguiente bloque
- Crear el contrato de escenario y el registro de solvers.
- Portar únicamente el shell de renderer, cámara, tiempo, URL, panel e i18n.
- Implementar el solver de doble rendija con pruebas numéricas.
- Conectar sus capas físicas al renderer y al detector.
- Validar que el renderer no cambia los resultados del solver.
Este documento es el primer entregable de la Fase 0. La auditoría de tiempocuerda.gmartos.es y la comprobación de su posible código local quedan como bloques posteriores y no se han presentado como realizados.