# Contribuir a Tórculo

> Gracias por asomarte. Tórculo es un estándar abierto y se agradece cualquier tamaño de ayuda: una errata en la especificación, un pliego que se lee mal, una palabra que falta en la

URL: https://torculo.joseluissaorin.com/gobernanza/contributing · Revisado: 2026-10-15 · English: https://torculo.joseluissaorin.com/en/governance/contributing.md

Gracias por asomarte. Tórculo es un estándar abierto y se agradece cualquier tamaño de ayuda:
una errata en la especificación, un pliego que se lee mal, una palabra que falta en la
lengua, un caso de conformidad, una segunda implementación o una materia nueva.

Todo lo que pasa aquí se rige por el [código de conducta](CODE_OF_CONDUCT.md). Para
vulnerabilidades, **no abras un issue**: sigue [SECURITY.md](SECURITY.md).

## Qué hay en el repositorio

| Carpeta | Qué |
|---|---|
| `spec/` | la especificación (`SPEC.md` en inglés, normativa; `SPEC.es.md`, traducción fiel), la gramática, los vocabularios generados desde el parser, los códigos de diagnóstico y las RFC |
| `conformance/` | la batería de conformidad: pliegos con su banda sonora, salidas esperadas, oráculos y el ejecutor |
| `governance/` | gobernanza, proceso de RFC y versiones |
| `canon/` | el canon de la casa y su generador |
| `pluma/` | la pluma a mano y el formato de lámina (Rust, Python, wasm, visor) |
| `materias/` | las materias WGSL (papel, acuarela, pincel, risografía, tejido, transiciones) |
| `sentido/` | la capa de sentido con EmbeddingGemma 2 en local |
| `docs/` | la chuleta, la guía de diez minutos y los `llms.txt` |
| `skills/` | las skills para agentes, empaquetadas |
| `site/` | la web del estándar |
| `tools/pesado` | el turno para los trabajos pesados |

La implementación de referencia de la lengua es manim-saorín (otro repositorio) y el motor
es el fork de ManimGX (otro repositorio, MIT).

## Preparar el entorno

Python 3.11 o superior, Node 22 o superior, Rust estable, ffmpeg. La lengua se prueba con
manim-saorín (`MESA_IMPL`, `MESA_PY`). Todo lo pesado (compilar, rodar, cargar modelos)
pasa por el turno:

```sh
tools/pesado cargo build --release
tools/pesado python3 conformance/tools/ejecutar.py --pesado
```

## El bucle de trabajo

1. Rama desde `master` con prefijo: `spec/…`, `conformidad/…`, `canon/…`, `pluma/…`,
   `materias/…`, `web/…`.
2. **Un cambio normativo va por RFC** ([proceso](governance/RFC-PROCESS.md)): copia
   `spec/rfcs/0000-template.md`, rellénala y abre el PR. Las erratas y aclaraciones que no
   cambian el comportamiento van sin RFC, con la etiqueta `editorial`.
3. **Una RFC aceptada llega con al menos un caso de conformidad**, y se da por
   implementada cuando dos implementaciones independientes lo pasan.
4. Antes de abrir el PR, en verde:

   ```sh
   python3 spec/apendices.py --check
   python3 canon/genera.py --check && python3 canon/prueba.py
   python3 conformance/tools/generar.py && git diff --exit-code conformance/cases
   python3 conformance/tools/ejecutar.py
   ```

5. Si tocas algo que se ve o se oye, ruédalo y míralo (una hoja de contactos con ffmpeg
   basta para empezar); nunca reproduzcas audio por los altavoces de una máquina compartida.

## Las reglas de la casa

- **El pliego no dice números.** Ninguna capacidad nueva entra si obliga a escribir cifras
  que antes derivaba el motor.
- **La ley de las tres sedes.** Una palabra nueva entra a la vez en la gramática, el
  compilador y el intérprete, o no entra.
- **Las tablas salen del parser.** Los vocabularios de la especificación se regeneran con
  `spec/vocabularios/extrae.py`; nunca se escriben a mano.
- **Todo ejemplo lleva su banda sonora**: música, ambiente, sala y efectos.
- **Español con tildes y eñes** en todo lo que lee una persona; los identificadores, claves
  JSON y rutas se quedan sin tilde. Ojo con los plurales en `-ciones`, que no la llevan.
- **La raya (—) no es un guion** ni lleva espacios a ambos lados: `el centro —que ya
  trabaja con esto— no cambia`. En la lengua, la raya que separa una cabecera de su cuerpo
  va pegada al cuerpo: `ver: votos —sí: 7`.
- **Sin emojis** en nada.
- **Nada con derechos en el repositorio**: los pliegos, sonidos e imágenes de prueba son
  propios, sintetizados o de dominio público.
- Commits en español (o en inglés correcto en la especificación normativa), sin emojis.

## Licencia de lo que aportes

Al abrir un PR aceptas que tu contribución se publique bajo la licencia de la parte que
cambias: **CC BY 4.0** la especificación y la documentación, **MIT OR Apache-2.0** el
código. Contribuir a la especificación implica el compromiso de no reclamar patentes
descrito en [GOVERNANCE.md](governance/GOVERNANCE.md#licences-and-patents). No hace falta
firmar ningún acuerdo aparte.
