b05de24c24
Cierra el plan original. El motor de validación de entities deja de shellear el binario externo `kcl` y pasa a evaluar Nickel contracts in-process via la dep nickel-lang (la misma que usa el brazo de cards). Los 3 schemas de sales/inventory/treasury migran de .k a .ncl. nakui-core: - Nueva dep nickel-lang = "2.0.0". - Borrado kcl_wrapper.rs. - Nuevo nickel_validator.rs con vet(schema_path, state, entity) que evalúa `let bundle = (import "<schema>") in (std.deserialize 'Json m%%"<json>"%%) | bundle.<entity>`. - executor.rs: KclError → NickelError, KclPre/Post/PostCreate → SchemaPre/Post/PostCreate, kcl_check → validate_entity. build_schema_bundle ahora emite `(import "X") & (import "Y") & ...` en lugar de concatenar bytes (cada .ncl es expresión completa). - manifest.rs: default schema "schema.ncl", extract_schema_names reescrito para sintaxis Nickel record (CapitalCase keys con 2-space indent). Schemas migrados: - sales/schema.ncl: Venta con std.contract.Sequence [record, from_predicate] para combinar shape + invariante cross-field (total == cantidad * precio_unitario). El patrón directo `record | from_predicate` rebota con "missing definition" porque el predicate evalúa antes de que el value populate el record; documentado en cada schema. - inventory/schema.ncl, treasury/schema.ncl: idem. - 3 schema.k viejos borrados; sales/nsmc.json paths actualizados. Tests: refs Kcl* renombradas; paths .k → .ncl; tests inline que escribían schema.k cambian a schema.ncl con sintaxis Nickel. 84 tests verdes en nakui-core. Doc-only borrados: - crates/core/ente-card/schema/card.k (REFERENCE ONLY). - crates/core/ente-brain/schema/rule.k (REFERENCE ONLY). Beneficios: sin dep externa al binario `kcl` (build CI limpio), errores Nickel en línea con caret pointing al field, mismo motor que cards (una dep para todo el repo), sin tempfile JSON intermedio. Cierra el plan original yahweh + KCL + card.k. Pendientes salen de nuevo trabajo. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
59 lines
1.9 KiB
TOML
59 lines
1.9 KiB
TOML
[package]
|
|
name = "nakui-core"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
authors.workspace = true
|
|
publish.workspace = true
|
|
description = "Nakui — ERP modular: graph runtime, executor de scripts Rhai, persistencia opcional SurrealDB."
|
|
|
|
[features]
|
|
default = []
|
|
# Pulls in surrealdb's pure-Rust SurrealKV backend so SurrealStore can
|
|
# persist to disk across process restarts. Lighter compile cost than
|
|
# RocksDB (which would otherwise pull in a C++ build); opt-in only.
|
|
persistent = ["surrealdb/kv-surrealkv"]
|
|
|
|
[dependencies]
|
|
# Workspace-shared (versión y features alineadas con el resto del monorepo).
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
tokio = { workspace = true }
|
|
ulid = { workspace = true }
|
|
sha2 = { workspace = true }
|
|
# uuid del workspace ya activa "v4"; le sumamos "serde" para soporte
|
|
# de derive en structs propios de nakui.
|
|
uuid = { workspace = true, features = ["serde"] }
|
|
|
|
# Específicas de nakui — no compartidas con otros crates del workspace,
|
|
# por lo que se mantienen inline (versión local).
|
|
rhai = { version = "1.20", features = ["serde"] }
|
|
petgraph = "0.6"
|
|
# Nickel reemplaza a KCL como motor de validación de entities.
|
|
# Evaluación in-process (sin shellear binarios), contracts Nickel
|
|
# nativos en los `schema.ncl` de cada módulo.
|
|
nickel-lang = "2.0.0"
|
|
surrealdb = { version = "2", default-features = false, features = ["kv-mem"] }
|
|
|
|
# Brahman protocol — presencia ante el Init cuando `nakui run` arranca.
|
|
brahman-card = { path = "../../../core/brahman-card" }
|
|
brahman-sidecar = { path = "../../../shared/brahman-sidecar" }
|
|
|
|
[[bin]]
|
|
name = "nakui"
|
|
path = "src/bin/nakui.rs"
|
|
|
|
[[bin]]
|
|
name = "demo"
|
|
path = "src/bin/demo.rs"
|
|
|
|
[[bin]]
|
|
name = "inventory_demo"
|
|
path = "src/bin/inventory_demo.rs"
|
|
|
|
[[bin]]
|
|
name = "sales_demo"
|
|
path = "src/bin/sales_demo.rs"
|