Files
brahman/crates/core/brahman-cards/templates/monad_basic.ncl
T
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

46 lines
1.5 KiB
Plaintext

# `monad_basic.ncl` — template canónico para Cards de tipo Monad.
#
# Use case típico: declarar una agrupación semántica de archivos
# (Mónada de Nouser) con metadata mínima:
#
# let base = import "monad_basic.ncl" in
# base & {
# id = "01ARZ3NDEKTSV4RRFFQ69G5FAW",
# label = "fotos-2026",
# members = ["01ARZ3FILE1", "01ARZ3FILE2"],
# cardinality = 2,
# }
#
# El brazo lo dispatcha al `MonadJsonReader` por la presencia
# simultánea de `members` Y `cardinality`.
{
schema_version | Number | default = 1,
# Identidad: override siempre.
id | String | default = "TEMPLATE_ID",
label | String | default = "TEMPLATE_LABEL",
# Metadata semántica: defaults vacíos. El usuario typically
# override `members` + `cardinality`, opcionalmente `summary`
# / `keywords` / `dominant_lens`.
summary | String | default = "",
keywords | default = [],
centroid | default = [],
cardinality | Number | default = 0,
entropy | Number | default = 0.0,
# Lens variants serialize lowercase (serde rename_all): grid /
# code / gallery / database / markdown / tree.
dominant_lens | default = "grid",
# Membership: vacío por default. El usuario llena con los IDs
# de archivo cuando los conoce.
members | default = [],
pins | default = [],
# Timestamps Unix ms — default 0 = "no timestamp registrado".
# Override con el momento real cuando importa.
created_at_ms | Number | default = 0,
updated_at_ms | Number | default = 0,
}