Primera consumer migration del brazo. nakui-ui ya no llama a
nakui_ui_schema::load_modules_from_dir directamente; pasa por
brahman_cards::load_cards_from_dir y extrae UiModule del CardBody.
Beneficios concretos:
- Soporta .ncl además de .json (templates Nickel + merge funcionan
en cualquier subdir de modules).
- Cards de otros body kinds (Ente/Monad) se skipean limpio con
toast informativo, no rompen la carga.
Cambios en brahman-cards:
- Nuevo load_cards_from_dir(dir) + variante con readers/filenames
custom. DEFAULT_CARD_FILENAMES = [card.ncl, card.json, module.ncl,
module.json] (orden de prioridad).
- 4 tests nuevos del helper.
Cambios en nakui-ui:
- Nueva dep brahman-cards.
- Helper load_ui_modules(dir) -> (Vec<Module>, Vec<String>) envuelve
el brazo, filtra a UiModule, aplica Module::validate(), detecta
duplicate ids.
- MetaUi::new usa el helper, emite toast con cards skipped si las hay.
- 3 tests e2e nuevos.
26/26 brahman-cards verdes (+4). 48/48 nakui-ui verdes (+3).
Workspace build verde.
nakui_ui_schema::load_modules_from_dir queda intacto (sus tests lo
usan + otros consumers futuros pueden preferirlo). Migración opt-in.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
El brazo ahora acepta `.ncl`: evalúa via nickel-lang 2.0, exporta a
JSON, dispatcha por los readers JSON estándar. Templates funcionan
con import + & merge nativos de Nickel — el brazo no inventa
mecánica paralela.
- Dep nickel-lang = "2.0.0" (interfaz estable).
- Nuevo módulo nickel_eval con eval_nickel_file(path) -> Value y
errores tipados (Io/Eval/Export/JsonReparse). Mensaje de Nickel
como texto plano sin ANSI.
- load_card_with añade arm "ncl" simétrico al "json".
- CardLoadError::Nickel propaga el error limpio.
- Imports resueltos: parent dir del input + env
BRAHMAN_CARDS_TEMPLATES_DIR (registry global, opcional).
- Convención obligatoria documentada: fields override-ables del
template usan `| default` (sin eso Nickel rechaza el merge).
9 tests nuevos: eval directo, dispatch a UiModule/Ente, template
merge con id+label override, registry via env, error wrapping,
contract violation en eval-time (`id | String = 42`), shape
desconocida.
22 tests totales en brahman-cards (13 JSON V1 + 9 Nickel V2).
Workspace build verde.
NO hace: migrar consumers, set canonical de templates, KCL→Nickel
— todos para commits siguientes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>