ADR 004: Multi-panel¶
Estado¶
Aceptado — 2026-06
Contexto¶
HIVE evoluciona hacia una plataforma multi-tenant con varios panels independientes. El prototipo histórico UnoSport Club validó este modelo de panels ortogonales; cada panel tiene su propio path de UI, namespace de API y módulos CUS. El framework no debe hardcodear panels ni mezclar dominios de negocio en un mismo shell.
Decisión¶
- Panel como unidad de composición UI/API, ortogonal al tenant (
X-Tenant-Id). - Los plugins host declaran panels vía entry point
cortex.panelsyPanelBuilder(ver ADR 011). El hook legacyregister_panels()queda deprecado. - El framework expone
GET /api/v1/panelsy ensambla manifests por panel/módulo. - El shell React (
framework/web-shadcn) depende de@cortex/weby monta rutas dinámicas desde la API; la skin@cortex/panel-shadcnrenderiza CUS por panel.
Leyenda: Panels registrados por plugins sobre un tenant. Actores: shells/reference/accounting registran panels; tenant en header. Estado: Implementado.
flowchart TB
Tenant[X-Tenant-Id header]
subgraph panels [Panels independientes]
Trainer[trainer /trainer/]
Operations[operations /operations/]
Admin[admin /admin/]
Accounting[accounting /accounting/]
Samples[samples /samples/]
Control[control /control/]
end
Tenant --> panels
PanelHost[plugins/panel,admin,trainer,...] --> Operations
PanelHost --> Admin
PanelHost --> Trainer
PanelHost --> Accounting
Ref[cortex_plugin_reference] --> Samples
Ledger[cortex_plugin_ledger] --> Accounting Leyenda: Mapa de panels Independiente vs tenant. Estado: Implementado.
sequenceDiagram
participant Host as cortex.panels
participant P as cortex_plugin_*
participant R as PanelRegistry ResourceRegistry
participant API as GET /api/v1/panels
participant UI as framework/web-shadcn
Host->>R: configure_panel
P->>R: register_resources
UI->>API: panels + routes
API->>R: manifests ensamblados Leyenda: Registro dinámico de panels sin rutas hardcodeadas en React. Estado: Implementado.
Mapping de referencia (panels HIVE)¶
| Panel ID | UI path | API namespace | Plugin |
|---|---|---|---|
trainer | /trainer/ | /api/v1/trainer/ | panel host (plugins/trainer) |
panel | /panel/ | /api/v1/panel/ | panel host (plugins/panel) |
accounting | /accounting/ | /api/v1/accounting/ | panel host + módulo ledger |
samples | /samples/ | /api/v1/samples/ | reference (To-Do) |
control | /control/ | /api/v1/control/ | panel host (plugins/control) |
El módulo booking vive como sub-módulo del panel panel (no panel propio). Ver ADR 008.
Plugins por defecto¶
CORTEX_ENABLED_PLUGINS=panel,trainer,accounting,control,ledger,reference,clients,booking
Ver ADR 011 para cortex.panels y CORTEX_ENABLED_PANELS.
El plugin monolítico reserva fue retirado del monorepo; reservas de negocio → plugin booking (ADR 008, pip futuro cortex-plugin-booking — ADR 002).
Consecuencias¶
- Positivas: panels aislados, extensibles por pip, shell único sin
panelConfig.tsestático. - Negativas: más superficie en registry/API; documentación y CI deben listar plugins activos explícitamente.
- Migración: To-Do pasa de
/todoa panelsamplesen/samples/todo; API en/api/v1/samples/todo.