Pascal Editor
Arquitectura Pascal: nodos planos, registro y versiones duraderas
Sigue una edición desde Zustand hasta el renderizador y SQLite, separando historial de deshacer, gráficos y persistencia.
Qué aprenderás
- Un grafo almacenado como mapa plano
- Las definiciones convierten datos en gráficos
- La persistencia tiene su propia autoridad
Antes de empezar
- Conceptos básicos de grafos, JavaScript y HTTP
- Una escena propia pequeña con dimensiones y relaciones esperadas
Explica el límite y reproduce la lista o el ejercicio acotado del capítulo.
Conclusiones clave
- El grafo plano conserva jerarquía y contexto de plugins.
- Registro y capacidad GPU afectan a la visibilidad.
- Deshacer y versiones persistentes son contratos distintos.
Un grafo almacenado como mapa plano
useScene guarda nodos por ID junto con rootNodeIds, materiales, colecciones e installedPlugins. Los enlaces padre-hijo expresan la jerarquía en lugar de anidar todo el modelo en componentes React. La escena inicial conecta explícitamente sitio, edificio y nivel en ambas direcciones para consumidores que validan relaciones de forma distinta al recorrido gráfico.
setScene aplica migraciones, elimina nodos con padres ausentes, normaliza raíces y retira inalcanzables cuando existe un conjunto de raíces útil. Realiza una sola escritura rastreada para que deshacer no exponga un estado intermedio parcialmente normalizado. Después marca nodos sucios; ese conjunto no es una caché geométrica persistente.
Las definiciones convierten datos en gráficos
NodeRenderer comprueba existencia, habilitación del tipo de plugin y definición registrada. Un renderizador personalizado se carga con React.lazy y se conserva en WeakMap por identidad de origen; una definición con geometry usa la ruta paramétrica genérica. Definiciones ausentes o no soportadas no dibujan nodos, explicando por qué tener datos no implica verlos.
El módulo de capacidad solicita adaptador y dispositivo WebGPU, limita petición e inicialización e intenta WebGL cuando procede. Libera dispositivos abandonados y renderizadores fallidos. El experimento con objetos simulados verificó coordinación de fallback, no shaders reales ni equivalencia de imagen; registra el backend gráfico al reproducir un problema.
La persistencia tiene su propia autoridad
SQLite serializa el grafo y mide bytes UTF-8 frente a un límite configurable, de 10 MiB por defecto. save comprueba expectedVersion dentro de una transacción, incrementa versión y añade una revisión. No permite sobrescribir una escena existente nombrada explícitamente sin versión esperada. Es un contrato concreto de concurrencia, no fusión automática de conflictos.
Los metadatos devueltos incluyen published: true, pero en este almacén local es un estado, no evidencia de una URL desplegada en Internet. Deshacer en el navegador y revisiones de base de datos resuelven recuperaciones distintas. Diseña según la autoridad de cada capa, sin sustituir todas las pruebas por un dibujo correcto, una entrada de historial o una bandera.
Pasos de implementación
- 1
Sigue un nodo hasta su definición registrada.
- 2
Inspecciona renderizador y actualizaciones sucias.
- 3
Guarda con una versión observada y maneja conflictos.
- 4
Separa metadatos locales y publicación pública.
Ejemplo para copiar
{"layers":["grafo de escena","registro y renderizador","revisión SQLite"],"existingVersion":3,"writeExpectedVersion":3,"nextVersionIfAccepted":4,"publishedFlagMeansInternetDeployment":false}Preguntas frecuentes
¿expectedVersion fusiona ediciones concurrentes?
No. Detecta discrepancias para que el invocador recargue, compare y decida cómo proceder.
¿published: true significa que el proyecto está en Internet?
No por sí solo. El almacén local devuelve ese campo sin demostrar despliegue público alguno.
Fuentes
- README.mdFuente verificada 2026-09-08
- LICENSEFuente verificada 2026-09-08
- packages/cli/package.jsonFuente verificada 2026-09-08
- packages/core/package.jsonFuente verificada 2026-09-08
- packages/viewer/README.mdFuente verificada 2026-09-08
- packages/cli/src/runtime.tsFuente verificada 2026-09-08
- packages/cli/src/editor-process.tsFuente verificada 2026-09-08
- packages/cli/src/mcp-connector.tsFuente verificada 2026-09-08
- packages/mcp/src/transports/http.tsFuente verificada 2026-09-08
- packages/mcp/src/storage/sqlite-scene-store.tsFuente verificada 2026-09-08
- packages/core/src/store/use-scene.tsFuente verificada 2026-09-08
- packages/viewer/src/components/renderers/node-renderer.tsxFuente verificada 2026-09-08
- packages/viewer/src/lib/renderer-capability.tsFuente verificada 2026-09-08
- packages/core/src/validation/validate-build-json.tsFuente verificada 2026-09-08
- packages/core/src/utils/heal-scene-graph.tsFuente verificada 2026-09-08
- packages/mcp/src/storage/slug.tsFuente verificada 2026-09-08