ADR 011: Panel namespaces y composición¶
Estado¶
Aceptado — 2026-07 (reescrito)
Contexto¶
Cortex expone varias experiencias UI (/operations/, /admin/, /accounting/, /control/) sobre un mismo backend pluginizado. Los plugins de dominio deben poder contribuir módulos, widgets y settings sin acoplarse a un paquete host monolítico ni a variables de entorno de activación.
Decisión¶
panel_ides un namespace de composición — identifica dónde se ensamblan módulos, dashboards, layouts y settings.- Panel de plataforma
control— embebido encortex_framework.control, siempre activo, scopesudo, no toggleable en/control/plugins. - Paneles de dominio generativos —
operations,admin,samplesy similares se materializan conensure_panel()cuando plugins habilitados inyectan contenido; desaparecen del catálogo visible cuando no hay contribuciones. El sandboxhelloworld(panelsamples) es referencia interna del framework, no dominio de producto. - Orden de bootstrap en
load_plugins(): bootstrap_control_panel()- plugins de dominio habilitados (hooks
register_*;ensure_panel()al registrar módulos) load_panel_hosts()para paneles dedicados conconfigure_panel(accounting,trainer, …) y metadata opcional víacortex.panelsregister_resources/register_formsdel entry pointcortex.panelscuando aplicamerge_panel_infrastructure()por panel activo- Activación en caliente —
activate_pending_plugins()repiteregister_resources/register_formspara paneles pendientes (mismo contrato que boot). - Entry point
cortex.panels— opcional para metadata y shell adicional; no define qué paneles existen en runtime. Elpanel_idlo declara el plugin (contributes_panelsoconfigure_panel), no el framework. - Frontera dominio vs mecanismo — el framework no conoce plugins de negocio ni lista fija de panels de producto. Conoce
control, contratos de namespaces generativos y discovery por entry points. La asignación módulo →panel_ides responsabilidad de cada plugin (contributes_panels) y del caso de uso ensamblado (ADR 025). - Activación — state store
/control/plugins+ builtins (template); sinCORTEX_ENABLED_PLUGINSniCORTEX_ENABLED_PANELS. GET /api/v1/panels/{id}incluyeconfiguration(brand, theme, defaultRoute) para el shell React.
flowchart TB
Boot[bootstrap_control]
Domain[plugins dominio habilitados]
Ensure[ensure_panel por namespace]
Merge[merge_panel_infrastructure]
Assemble[assemble_all_panels]
Boot --> Domain --> Ensure --> Merge --> Assemble Glosario¶
| Término | Significado |
|---|---|
panel_id | Namespace de composición UI+API |
| Panel de plataforma | Solo control (framework) |
| Panel de dominio | Namespace que emerge por inyección de plugins |
cortex.panels | Metadata/shell opcional |
Consecuencias¶
plugins/shellseliminado; composición por namespace.cortex-plugin-panel/cortex-plugin-adminson paquetes de metadata y extensiones, no requisito pip para activaroperations/admin.- Frontend (
PanelShell) leeconfigurationde la API. - Activar un panel en caliente sin reinicio debe registrar todos los módulos UI del plugin (
home+register_resources); ver ADR 023.
Referencias¶
- ADR 004 — multi-panel
- ADR 019 — convención
operations/admin - Namespaces y paneles generativos