# Cómo generar el corpus de interpretación

Esta guía dice **exactamente** qué hacer, a mano, para construir el
corpus que `cosmobiologia` usará para interpretar cartas sin que ninguna
IA invente una palabra.

## Qué es (y qué NO es) el corpus

El corpus **no es un set de reglas matemáticas**. No "calcula" la
interpretación. Las reglas —qué planeta en qué signo, qué aspecto con
qué orbe— las computa el motor astronómico. El corpus es la **biblioteca
de evidencia**: fragmentos de texto —de los libros y de tu propia
escritura— recortados y **etiquetados** con la combinación exacta que
describen.

En runtime, las combinaciones de una carta hacen un **JOIN** contra el
corpus y traen los textos, citados y con fuente. La síntesis (tejerlos
en un párrafo continuo) es una capa posterior; el corpus solo
**almacena** y **recupera**.

La contradicción no se promedia. Un Marte hiperdisciplinado en el
trabajo y disperso en la soledad **no** se colapsa a "medio
disciplinado": cada fuerza vive intacta en su **dominio** vivencial. Por
eso el corpus rebana la carta en tajadas (`Vital`, `Social`, `Psiquico`)
— como ver un cuerpo en cortes tomográficos.

## El formato

Un archivo `.ron`. Mira `ejemplo.ron` en esta misma carpeta: es una
plantilla cargable y comentada. Tiene dos secciones, `arquetipos` y
`pasajes`.

### El "código de barras" de una combinación

Cada pasaje se etiqueta con una clave-cadena:

| Tipo | Sintaxis | Ejemplo |
|---|---|---|
| Planeta en signo | `planeta·signo` o `planeta/signo` | `mars·virgo`, `mars/virgo` |
| Planeta en casa | `planeta@cN` | `mars@c6` |
| Aspecto entre dos planetas | `a kind b` (tres palabras) | `mars square saturn` |

Reglas de los identificadores:

- minúscula, ASCII, **una sola palabra** (usa `_`: `north_node`);
- usa siempre el **mismo** nombre — `mars`, no `Marte` aquí y `mars`
  allá, o el JOIN no engancha;
- en un aspecto el orden da igual: `mars square saturn` y
  `saturn square mars` quedan como la misma clave.

## Los pasos

### Paso 1 — Crea tu archivo

```sh
cd crates/modules/cosmobiologia/cosmobiologia-corpus
cp ejemplo.ron corpus.ron
```

Trabaja sobre `corpus.ron`. Borra los tres pasajes-plantilla cuando
tengas los tuyos.

### Paso 2 — (Opcional, recomendado) Escribe la ontología

En la sección `arquetipos`, una entrada por cada planeta, signo, casa y
aspecto que uses. Cada una lleva un `perfil`: un mapa de **dimensiones
psicológicas** —las nombras tú— con un peso en `[-1.0, 1.0]`.

```ron
(
    nombre: "mars",
    tipo: planeta,          // planeta | signo | casa | aspecto
    perfil: {
        "accion": 0.9,
        "deseo": 0.7,
    },
),
```

Esto **no es obligatorio para el JOIN** (el JOIN solo usa `pasajes`),
pero es la base para, más adelante, deducir el perfil de una combinación
que no llegaste a escribir. Si recién empiezas, puedes dejar
`arquetipos: []` y volver luego.

### Paso 3 — Cosecha los pasajes

Esta es la carne. Una entrada en `pasajes` por cada fragmento de
interpretación:

```ron
(
    combinacion: "mars·virgo",
    texto: "Cita literal, corta, del libro — o tu propia redacción.",
    fuente: "Autor, Título de la obra, p. 123",
),
```

Dos formas de avanzar; elige una:

- **Por fuente** — tomas un libro y lo vacías combinación por
  combinación. Bueno para cubrir un autor entero de forma pareja.
- **Por carta** — tomas la carta que estás leyendo *ahora*, listas sus
  combinaciones y solo escribes esas. Bueno para tener algo útil ya, sin
  esperar a "terminar" el corpus (que nunca termina).

Recomendado: empieza **por carta**. El corpus crece con cada consulta
real.

### Paso 4 — Cuida la fuente y el derecho de autor

- Cita **corto** y **textual**, y **atribuye siempre** (autor, obra,
  página). Fragmentos breves con cita son uso legítimo.
- No copies capítulos enteros. Si quieres volcar una idea larga,
  **reescríbela con tus palabras** y pon `fuente: "propio"`.
- Convención reservada: `fuente: "deducido"` queda para perfiles
  compuestos por código a futuro, no para texto de libro.

### Paso 5 — Acota el dominio cuando el texto lo pida

Si un pasaje describe la combinación **solo en un plano** de la vida,
márcalo:

```ron
(
    combinacion: "mars square saturn",
    texto: "...",
    fuente: "...",
    dominio: Some(psiquico),   // vital | social | psiquico
),
```

Sin `dominio`, el pasaje aplica al dominio que le toque por la posición
del planeta en la carta. Con `dominio`, lo fuerzas. Úsalo poco: solo
cuando el autor habla de un plano concreto.

### Paso 6 — Valida el archivo

```sh
cargo test -p cosmobiologia-corpus
```

Si tu RON tiene un error de sintaxis, el test `ejemplo_ron_carga`
te marca el formato correcto; para validar `corpus.ron` directamente,
cárgalo desde un binario o un test propio con `Corpus::desde_ron`.

### Paso 7 — Busca los huecos

Con la carta cargada, `Corpus::huecos(&combinaciones)` devuelve las
combinaciones de esa carta que **no tienen ni un pasaje**. Esa lista es,
literalmente, tu cola de trabajo: lo que falta escribir.

## Cuánto es "suficiente"

El universo completo es grande (≈10 planetas × 12 signos = 120, otras
120 planeta-en-casa, y los aspectos). No lo persigas. El 80 % del valor
sale del 20 %: las combinaciones que de verdad aparecen en las cartas
que lees. Empieza con una carta, deja que `huecos` te guíe, y el corpus
se llena solo, consulta a consulta.
