1# modules/dominium/ — Simulador psicológico de campo medio
2
3**Propósito.** Laboratorio de complejidad emergente: agentes vectoriales
4(Lemmings) sin cognición reaccionan mecánicamente a una grilla plana de
55 campos ejecutando una de 6 acciones atómicas. Civilización, guerra, fe
6y poder son patrones emergentes, no algoritmos. La maqueta se ve en
7pseudo-3D isométrico calculado en CPU.
8
9## Crates
10
11| crate | tipo | rol |
12| ---------------------- | ---- | ---------------------------------------------------------- |
13| `dominium-core` | lib | `Grid` (5 capas SoA) + `Lemmings` (SoA) + `World` + 6 `Action` + `SimParams` |
14| `dominium-physics` | lib | `diffuse` (difusión + entropía) + `tick`/`run` (ciclo completo) |
15| `dominium-iso` | lib | `IsoProjector` (matriz iso fija vía `libm`) + `ZWeights` (relieve) + sombra Lambert |
16| `dominium-render-plan` | lib | `build_plan` → `RenderPlan` de `Quad`s 2D ordenados por profundidad |
17| `dominium-canvas-gpui` | lib | `DominiumCanvas`: `Element` GPUI que pinta el `RenderPlan` |
18
19App: `apps/dominium` — ventana GPUI con bucle de simulación, maqueta
20isométrica viva, panel de estadísticas y controles play/re-sembrar.
21
22## Cadena de datos
23
24```
25dominium-core ─► dominium-physics ─► dominium-iso ─►
26dominium-render-plan ─► dominium-canvas-gpui ─► apps/dominium
27```
28
29## Dependencias
30
31- `core` ← sólo `serde` (regla inviolable: cero deps gráficas).
32- `physics`, `iso`, `render-plan` ← `core` (+ `iso` ← `libm`).
33- `canvas-gpui` ← `render-plan` + `gpui` (único crate que toca GPUI).
34- La separación es estricta: un `dominium-canvas-web` o `-tui` hermano
35 se escribiría sin tocar el núcleo.
36
37## Determinismo
38
39`core` + `physics` + `iso` son bit-exactos: sólo aritmética `f32` en
40orden fijo, trig vía `libm`, sin iteración de `HashMap` ni reducciones
41paralelas. Mismo seed → mismo estado en cualquier plataforma.
42
43## Estado
44
455 crates lib + 1 app, todos implementados y verdes. ~37 tests unitarios
46(`run_is_deterministic`, `plan_is_deterministic` incluidos).
SDD.md
modules/dominium/ — Simulador psicológico de campo medio
Propósito. Laboratorio de complejidad emergente: agentes vectoriales
(Lemmings) sin cognición reaccionan mecánicamente a una grilla plana de
5 campos ejecutando una de 6 acciones atómicas. Civilización, guerra, fe
y poder son patrones emergentes, no algoritmos. La maqueta se ve en
pseudo-3D isométrico calculado en CPU.
Crates
| crate | tipo | rol |
dominium-core | lib | Grid (5 capas SoA) + Lemmings (SoA) + World + 6 Action + SimParams |
dominium-physics | lib | diffuse (difusión + entropía) + tick/run (ciclo completo) |
dominium-iso | lib | IsoProjector (matriz iso fija vía libm) + ZWeights (relieve) + sombra Lambert |
dominium-render-plan | lib | build_plan → RenderPlan de Quads 2D ordenados por profundidad |
dominium-canvas-gpui | lib | DominiumCanvas: Element GPUI que pinta el RenderPlan |
App: apps/dominium — ventana GPUI con bucle de simulación, maqueta
isométrica viva, panel de estadísticas y controles play/re-sembrar.
Cadena de datos
dominium-core ─► dominium-physics ─► dominium-iso ─►
dominium-render-plan ─► dominium-canvas-gpui ─► apps/dominium
Dependencias
core ← sólo serde (regla inviolable: cero deps gráficas).
physics, iso, render-plan ← core (+ iso ← libm).
canvas-gpui ← render-plan + gpui (único crate que toca GPUI).
- La separación es estricta: un
dominium-canvas-web o -tui hermano
se escribiría sin tocar el núcleo.
Determinismo
core + physics + iso son bit-exactos: sólo aritmética f32 en
orden fijo, trig vía libm, sin iteración de HashMap ni reducciones
paralelas. Mismo seed → mismo estado en cualquier plataforma.
Estado
5 crates lib + 1 app, todos implementados y verdes. ~37 tests unitarios
(run_is_deterministic, plan_is_deterministic incluidos).