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 framework tendría que conocer todos los módulos.
Decisión¶
- Tipos en
core/cortex_core/spi.py:LayoutHandle,LayoutFragment,LayoutSlotOp,LayoutSlotOps. - Hook
register_layouts(registry)en plugins;LayoutRegistrarencortex_core.registrar. LayoutRegistry(framework) recoge fragmentos;merge_layouts()fusiona porpanel_id+layout_id.- Operaciones:
- extend — antepone nodos al slot (menor
sortprimero; empate por orden de registro demodule_id). - append — añade nodos al final con la misma regla de orden.
load_pluginsinvocaregister_layoutsjunto al resto de hooks de extensión.
Leyenda: Registro y fusión de fragmentos de layout por panel. Actores: plugins, LayoutRegistry, merge_layouts. Estado: Implementado.
flowchart TB
subgraph plugins [Plugins]
RL[register_layouts]
Frag[LayoutFragment extend append]
end
subgraph framework [framework/layout]
Reg[LayoutRegistry]
Merge[merge_layouts panel_id layout_id]
end
subgraph result [Dashboard compuesto]
Dash[layout fusionado CUS]
end
RL --> Frag --> Reg --> Merge --> Dash Consecuencias¶
- Plugins extienden layouts sin editar código del framework ni de otros plugins.
- 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