Files
brahman/crates/core/brahman-cards/templates/ente_basic.ncl
Sergio df089f0585 feat(brahman-cards): templates Nickel canónicos para cada body kind
Materializa el patrón "import + override" del brazo. Hasta ahora
BRAHMAN_CARDS_TEMPLATES_DIR existía como mecanismo pero el repo no
shippeaba ningún template.

3 templates basic bajo crates/core/brahman-cards/templates/:
- ente_basic.ncl: Card runtime mínima (Virtual + OneShot).
- monad_basic.ncl: Mónada con metadata vacía.
- ui_module_basic.ncl: descriptor UI con entities/menu/views vacíos.

Cada field override-able marcada `| default` (sin eso Nickel rebota
merge de strings/numbers no-iguales).

Nuevo `pub fn canonical_templates_dir() -> PathBuf` resuelve el dir
via CARGO_MANIFEST_DIR. Para distribución del binary standalone
queda como pending (include_dir! o convención de install path).

5 tests E2E que cubren los 3 templates con import+override, sanity
del default sin override, y existencia física del dir.

Tests brahman-cards: 26 → 31 (+5). Workspace intacto.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 09:30:16 +00:00

32 lines
1.1 KiB
Plaintext

# `ente_basic.ncl` — template canónico para Cards de tipo Ente.
#
# Use case típico: declarar una entity runtime mínima (Virtual
# payload, OneShot supervision) sobrescribiendo sólo `id` y `label`:
#
# let base = import "ente_basic.ncl" in
# base & {
# id = "01ARZ3NDEKTSV4RRFFQ69G5FAV",
# label = "mi-ente",
# }
#
# El brazo `brahman-cards::load_card` lo dispatcha al
# `EnteJsonReader` porque el shape resultante tiene `payload` Y
# `supervision` (los campos detect-key del reader Ente).
#
# **Convención obligatoria**: cada field que el usuario va a
# sobrescribir está marcada `| default`. Sin eso Nickel rebota el
# merge de strings/numbers no-iguales con misma prioridad.
{
schema_version | Number | default = 1,
# Identidad: el usuario casi siempre las sobrescribe.
id | String | default = "TEMPLATE_ID",
label | String | default = "TEMPLATE_LABEL",
# Runtime defaults razonables: nodo lógico sin proceso, sin
# restart. Override si querés un ente con payload Wasm/Native.
payload | default = "Virtual",
supervision | default = "OneShot",
}