Saltar a contenido

ADR 020: Configuration manifest por plugin

Estado

Aceptado — 2026-06

Contexto

Los plugins registraban ajustes en Python (register_settings + SettingsBuilder) sin agrupación por género ni composición de widgets. La UI mostraba un sidebar plano de secciones. Se requiere configuración declarativa con jerarquía género → segmento → widgets embebidos (parameters | parameter_table).

Decisión

  1. Cada plugin declara configuration/manifest.json con groups, segments y widgets[].
  2. El loader de plugins auto-registra el manifest en SettingsRegistry (alias ConfigurationRegistry).
  3. GET /api/v1/settings/panels/{panelId} devuelve { groups, segments }.
  4. Valores escalares: GET/PUT /api/v1/settings/panels/{panelId}/{segmentId} (todos los campos parameters del segmento).
  5. Tablas de parametrización: CRUD vía API del plugin (parameter_table); no usan el settings store.
  6. register_settings en Python queda como shim deprecado si no existe manifest.

Consecuencias

  • Migración de plugins admin (booking, sales, billing, payments, pricing, panel) a manifest JSON.
  • SettingsWidget renderiza acordeón de géneros, sub-nav de segmentos y compositor de widgets.
  • PoC parameter_table en sales (aux-codes) para validar contrato API/UI.
  • Panel operativo: se retira dashboard legacy panel-configuration; ajustes vía /panel/settings.

Alternativas consideradas

  • Mantener solo SettingsBuilder en Python — rechazado: no escala a géneros/widgets ni documentación declarativa.
  • Persistir tablas en settings store — rechazado: las filas son entidades del dominio del plugin.