feat(yachay): notebooks reproducibles — yachay-core + demo
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>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# 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
|
||||
|
||||
```text
|
||||
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 `Stale` y 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_digest` son
|
||||
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.
|
||||
Reference in New Issue
Block a user