Files
egutierrez 806c819cf7 docs: convenciones de testing y schema unit_tests/e2e_tests
Nuevo docs/testing.md con convenciones de test por lenguaje (Go, Python, Bash con 3 opciones), tablas unit_tests y e2e_tests, consultas FTS5 de ejemplo. Actualiza functions.md y CLAUDE.md con referencia a unit_tests.
2026-04-05 18:19:26 +02:00

6.7 KiB

Tabla: functions

Almacena funciones atómicas, pipelines y componentes React. Un pipeline es una función de kind: pipeline, siempre impura, que orquesta otras funciones del registry. Un componente es kind: component con campos adicionales para su API visual. Los tres comparten el mismo schema base.


Campos base

Campo Tipo Descripción Notas / Restricciones
id string Identificador único generado. Formato: {name}_{lang}_{domain} ej: filter_slice_go_core. UUID interno + slug legible.
name string Nombre de la función, pipeline o componente. Obligatorio. Sin espacios, snake_case.
kind enum Clasificación del ejecutable. function | pipeline | component
lang enum Lenguaje de implementación. go | python | sql | typescript | ... (enum controlado, normalizado al indexar)
domain string Namespace o área de dominio. Ej: finance, dsp, core, io. Evita colisiones de ID y filtra ruido en búsqueda.
version string Versión semántica de la función. Semver: 1.0.0. Permite detectar contratos rotos en uses_functions.
purity enum Indica si la función tiene side effects. pure | impure
signature string Firma completa incluyendo parámetros y tipos de retorno. Para lenguajes sin tipos formales (Python sin hints), usar convención: fn(xs: []T, pred: T→bool) → []T. Para kind: component, es la interfaz de props en TypeScript/JSX.
description text Qué hace, por qué existe y cuándo usarla. Obligatorio.
tags []string Etiquetas libres para búsqueda. Dominio, patrón, utilidad. Ej: [slice, functional, generic]
uses_functions []string IDs de funciones del registry que esta función invoca. Referencias validadas. kind: pipeline → no puede estar vacío.
uses_types []string IDs de tipos del registry que recibe como parámetros. Referencias validadas contra tabla types.
returns []string IDs de tipos del registry que emite como resultado. Referencias validadas. Vacío en kind: component — usar emits.
returns_optional bool Si el valor de retorno puede estar ausente. Siempre false en puras. true en impuras que pueden no devolver valor.
error_type string ID del tipo de error que puede emitir. Obligatorio en impuras. Referencia validada contra tabla types.
imports []string Dependencias externas fuera del registry. Paquetes, módulos. Ej: [github.com/shopspring/decimal]
example text Ejemplo concreto de uso con inputs y outputs esperados. Preferiblemente compilable.
tested bool Si existe al menos un test para esta función. truetest_file_path obligatorio.
tests []string Lista de nombres o descripciones de los tests aplicados. Vacío si tested: false.
test_file_path string Ruta relativa al archivo de test. Relativa a la raíz del registry. Obligatoria si tested: true.
file_path string Ruta relativa al archivo de implementación. Relativa a la raíz del registry. No rutas absolutas.
created_at datetime Fecha de creación de la entrada. ISO 8601. Generado automáticamente.
updated_at datetime Fecha de última modificación. ISO 8601. Actualizado automáticamente al indexar.

Campos adicionales — kind: component

Estos campos se añaden únicamente cuando kind: component. El resto del schema base aplica igual.

Campo Tipo Descripción Notas / Restricciones
props []PropDef API de entrada del componente. Cada prop: { name, type, required, description }. Equivale a los parámetros de una función.
emits []string Eventos que el componente lanza hacia arriba. Ej: [onClick, onChange, onSubmit]. No son returns — son comunicación hacia el padre.
has_state bool Si el componente gestiona estado interno. truepurity: impure automáticamente. false → puede ser pure.
framework enum Framework de UI en el que está implementado. react (único valor registrado actualmente). Obligatorio en kind: component.
variant []string Variantes visuales o de comportamiento disponibles. Ej: [primary, ghost, danger, disabled]. Útil para el agente al buscar una variante concreta.

Equivalencias function → component

Concepto en functions Equivalente en kind: component
parámetros de función props — API de entrada con nombre, tipo y opcionalidad
returns emits — eventos hacia el padre. returns queda vacío.
purity: impure has_state: true → impure automáticamente
signature Interfaz de props en TypeScript/JSX
uses_types Tipos del registry usados en props o emits

Ejemplo de signature para un componente React

DataTable<T>(props: { data: T[]; columns: ColumnDef<T>[]; onRowClick?: (row: T) => void }): JSX.Element

Reglas de integridad

Reglas base

Condición Regla
kind: pipeline purity siempre impure. uses_functions no puede estar vacío.
purity: pure returns_optional siempre false. error_type vacío. Una pura que devuelve opcional debe modelarse como tipo suma, no como returns_optional: true.
purity: impure error_type obligatorio. Toda impura declara explícitamente qué puede salir mal.
tested: true test_file_path obligatorio. tests no puede estar vacío. fn index extrae los test cases a la tabla unit_tests (ver testing.md).
tested: false tests vacío. test_file_path vacío.
uses_functions[] Todos los IDs deben existir en la tabla functions. Sin referencias huérfanas.
uses_types[] Todos los IDs deben existir en la tabla types. Sin referencias huérfanas.
returns[] Todos los IDs deben existir en la tabla types.
error_type Debe existir en la tabla types si informado.
file_path Relativa a raíz del registry. Nunca absoluta.
lang Debe pertenecer al enum controlado de lenguajes registrados.
id Único global. Formato: {name}_{lang}_{domain}. Colisiones rechazadas.

Reglas adicionales — kind: component

Condición Regla
kind: component framework obligatorio.
kind: component returns vacío. Los outputs se expresan mediante emits.
kind: component signature es la interfaz de props en formato TypeScript/JSX.
has_state: false + sin side effects purity: pure válido.
has_state: true purity: impure automáticamente.
kind: component uses_types puede referenciar tipos del registry usados en props o emits.