Saltar a contenido

Cómo trabajar con dominios

El stack soporta N dominios científicos como backends intercambiables. La fuente de verdad es config/domains/*.yaml. Esta guía resuelve las tareas comunes: listar, validar, activar y agregar dominios.

Concepto

Un dominio es un área científica con SSOT propio (sección en config/params.yaml), un backend Python que extiende DomainBackend, un solver específico, fuentes de datos y un skill propio en .agent/skills/domains/{name}.md.

El dominio activo se define en config/params.yaml — single-domain (project.domain) o multi-domain (project.domains: [...], primario = primer elemento).

Dominios disponibles

Dominio Status Solver
structural operational OpenSeesPy
biomedical operational scipy.signal, sklearn (Pan-Tompkins + HRV + Welch PSD)
construction operational numpy, scipy, sklearn (CPM + PERT + EVM)
economics operational statsmodels (ADF + OLS HC3 + VAR + Granger)
environmental operational scipy, statsmodels (Mann-Kendall + Sen + STL)
forestal operational numpy, pandas, scipy (Chave 2014 + IPCC 2006)
geotechnical operational numpy, scipy (Terzaghi + Bishop + Boulanger-Idriss)
materials operational sklearn, statsmodels
transportation operational scipy, statsmodels (Greenshields + HCM LOS)
water planned FEniCSx (Navier-Stokes, SWE)
air planned SU2 / FEniCSx (RANS SST)

Tarea: listar dominios

python tools/list_domains.py            # menú interactivo
python tools/list_domains.py --json     # para sub-agentes

Tarea: validar viabilidad

python tools/validate_domain.py --domain environmental

Chequea: YAML válido con campos requeridos, backend Python importa sin error, c0_check pasa (deps), y SSOT válido en params.yaml.

python tools/list_domains.py --check biomedical
# exit 0 → OPERATIONAL
# exit 1 → PLANNED/EXPERIMENTAL (bloquea PROPOSE)

Dominios PLANNED/EXPERIMENTAL bloquean PROPOSE

Solo los operational entran al pipeline. water y air tienen stub de backend pero el solver no está instalado.

Tarea: activar un dominio

python tools/activate_domain.py --domain structural --quartile q3

Tarea: papers multi-dominio

Un paper puede combinar dominios (ej. structural + geotechnical para SSI):

project:
  domains: ["structural", "geotechnical"]   # primario = primer elemento

DomainRegistry.load_many([...]) instancia ambos backends; validate_domain.py --domains structural geotechnical los valida en una corrida. Para Q1/Q2 multi-dominio, el gate 0.90 exige evidencia estadística de ambos dominios en cv_results.json.

Tarea: agregar un dominio nuevo

El camino automático es el Domain Scaffolder (PASO 4 del boot lo lanza al detectar un dominio inexistente). Manual:

  1. Copiar un dominio existente: cp config/domains/environmental.yaml config/domains/agronomy.yaml + el backend .py.
  2. Editar el YAML (name, params_namespace, data_sources, dependencies.python).
  3. Reescribir validate_ssot() y run_compute() en el backend, registrar con DomainRegistry.register(...).
  4. Crear el skill .agent/skills/domains/agronomy.md.
  5. Validar: python tools/validate_domain.py --domain agronomy.
  6. Agregar params a config/params.yaml.

Gates C0–C5 por dominio

Cada fase COMPUTE lee comandos del YAML del dominio. Dominios sin hardware (environmental, economics) saltan C3/C4 automáticamente cuando los campos son null.

Ver también

Fuente canónica

Deriva de docs/shared/DOMAINS.md, que mantiene la anatomía completa de cada dominio.