Saltar a contenido

ADR 016: Layout merge registry

Estado

Aceptado — 2026-07

Relacionado con ADR 003, ADR 012 y ADR 013.

Contexto

Paneles y dashboards se ensamblan desde múltiples plugins. Sin un contrato de composición, cada plugin duplicaría layouts o el panel host tendría que conocer todos los módulos.

Decisión

  1. Tipos en core/cortex_core/spi.py: LayoutHandle, LayoutFragment, LayoutSlotOp, LayoutSlotOps.
  2. Hook register_layouts(registry) en plugins; LayoutRegistrar en cortex_core.registrar.
  3. LayoutRegistry (framework) recoge fragmentos; merge_layouts() fusiona por panel_id + layout_id.
  4. Operaciones:
  5. extend — antepone nodos al slot (menor sort primero; empate por orden de registro de module_id).
  6. append — añade nodos al final con la misma regla de orden.
  7. load_plugins invoca register_layouts junto al resto de hooks de extensión.

Consecuencias

  • Plugins extienden layouts sin editar el panel host.
  • Fusión determinista y testeable en framework/tests/test_layout_merge.py.
  • La API HTTP de layouts queda para una iteración posterior; esta wave define el registro y el merge.

Referencias

  • framework/cortex_framework/layout/
  • framework/cortex_framework/plugins/loader.py