e3980d005f
yachay-core: notebook como secuencia de celdas (orden de lectura) + DAG de dependencias (orden de ejecución). Celdas markdown/código/embed con content_hash BLAKE3; editar una propaga staleness a descendientes; digest Merkle por celda (content_hash ‖ digests upstream) y notebook_digest que certifica reproducibilidad. Demo CLI en apps/yachay. 14 tests. Sin kernel ni UI, #![forbid(unsafe_code)]. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2.0 KiB
2.0 KiB
modules/yachay/ — Notebooks computacionales reproducibles
Propósito. Notebooks donde la reproducibilidad es verificable, no prometida. Un notebook es a la vez una secuencia de celdas (orden de lectura) y un DAG de dependencias (orden de ejecución). Un digest Merkle certifica que dos corridas del mismo notebook producen lo mismo.
Crates
| crate | tipo | rol |
|---|---|---|
yachay-core |
lib | Cell (markdown/código/embed), Notebook (DAG, staleness, digest) |
App: apps/yachay — demo CLI (cargo run -p yachay).
Modelo
Cell { kind, source, depends_on } ──► Notebook
│ │
content_hash (BLAKE3) execution_order (topológico)
│ │
└──► digest = BLAKE3(content_hash ‖ digests upstream) ──► notebook_digest
- Doble estructura: orden de presentación (lista) + DAG de dependencias. La ejecución sigue el DAG.
- Staleness: editar una celda la marca
Staley propaga la obsolescencia a sus descendientes (no a sus ancestros). - Digest Merkle: el digest de una celda cubre su contenido y todo su
linaje; dos notebooks con el mismo
notebook_digestson reproduciblemente equivalentes. El orden de declaración de dependencias no lo afecta. - Embeds: una celda puede incrustar la visualización de otro módulo
brahman (
dominium,pineal,takiy) — yachay integra el ecosistema.
Dependencias
yachay-core←blake3+serde.#![forbid(unsafe_code)].- Sin kernel, sin ejecución real, sin UI — tipos puros y deterministas.
Estado
yachay-core implementado y verde (14 tests) + demo CLI. Pendiente:
los kernels de ejecución de código, el render de los embeds (consume los
*-render-plan de cada módulo), persistencia y el frontend GPUI.