545dd59c72
Nuevo crate runtime/sandokan-lifecycle: lógica pura reutilizable por cualquier supervisor de procesos (shuma, matilda Ghost, charka-shadow, mirada). Sin syscalls, sin proceso, sin UI. Módulos: - backoff — Backoff exponencial con tope - ttl — Ttl anclado a Instant - quota — ResourceQuota + check_quota + Breach + QuotaAction - restart — RestartPolicy + RestartTracker (conteo + backoff) - state — LifecycleState (Pending/Running/Exited/Failed/Killed) 15 tests verdes. cargo check --workspace verde. Variante segura de A4: se crea la library limpia sin tocar shuma-core (módulo maduro). La migración de WorkspaceManager a consumir estas primitivas queda registrada como A4.2 (refactor diferido, no urgente). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
55 lines
2.6 KiB
Markdown
55 lines
2.6 KiB
Markdown
# runtime/ — Infraestructura de ejecución
|
|
|
|
**Propósito.** Servicios cross-cutting que el Init y los módulos
|
|
consumen: bus IPC interno, content-addressed storage, sandbox WASM,
|
|
rule engine + audit log, y un ente de smoke test.
|
|
|
|
## Crates
|
|
|
|
| crate | tipo | rol |
|
|
| ---------------------- | ---- | -------------------------------------------------- |
|
|
| `arje-bus` | lib | Unix SOCK_STREAM + postcard framing |
|
|
| `arje-cas` | lib | Content-addressed storage SHA-256: blobs + audit |
|
|
| `arje-wasm` | lib | Encarna `Payload::Wasm` vía `wasmi` |
|
|
| `arje-brain-rules` | lib | Motor determinista: rules + engine O(1) + dispatch |
|
|
| `arje-brain-cognitive` | lib | Observer estadístico + crystallize de patrones |
|
|
| `arje-brain-audit` | lib | Audit chain con hashes anclados al CAS |
|
|
| `arje-brain` | lib | Integración: introspect + autopromote + metrics |
|
|
| `arje-echo` | bin | Ente prueba — provee `Capability::Endpoint(echo)` |
|
|
| `sandokan-lifecycle` | lib | Primitivas de lifecycle agnósticas (ver abajo) |
|
|
|
|
## sandokan-lifecycle
|
|
|
|
Library de primitivas de ciclo de vida agnósticas (sin syscalls, sin
|
|
proceso, sin UI — solo cálculo). Consumible por cualquier supervisor:
|
|
`shuma`, `matilda` Ghost, `charka-shadow`, `mirada`.
|
|
|
|
- `Backoff` — backoff exponencial con tope.
|
|
- `Ttl` — time-to-live anclado a `Instant`.
|
|
- `ResourceQuota` + `check_quota` — cuotas de recursos + breaches.
|
|
- `RestartPolicy` + `RestartTracker` — restart con conteo + backoff.
|
|
- `LifecycleState` — máquina de estados (Pending/Running/Exited/Failed/Killed).
|
|
|
|
15 tests verdes. **Pendiente (A4.2)**: migrar `shuma-core::WorkspaceManager`
|
|
para que consuma estas primitivas en lugar de su implementación inline.
|
|
|
|
## Dependencias
|
|
|
|
- `arje-bus` ← `tokio` + `postcard`. Consumido por `init/arje-zero`.
|
|
- `arje-cas` ← `sha2` + `sled`. Consumido por `arje-brain-audit` y `arje-wasm`.
|
|
- **Brain split (DAG limpio)**: `arje-brain-rules` (base) ← `arje-brain-cognitive`
|
|
← `arje-brain-audit` ← `arje-brain` (umbrella de integración).
|
|
- `arje-brain` re-exporta la API de los 3 sub-crates para los
|
|
consumidores históricos (`arje-zero`, `chasqui`).
|
|
|
|
## Invariantes
|
|
|
|
- Bus: framing length-prefixed, sin re-orden; un cliente=una sesión.
|
|
- CAS: addresses inmutables; un blob = sha256(content) único.
|
|
- Audit: cada evento del bus se hash-encadena al log en CAS.
|
|
|
|
## Estado
|
|
|
|
LOC ~3.4K, tests parciales. Brain tiene 11 TODOs (reglas declarativas
|
|
complejas pendientes). Ver `docs/changelog/runtime.md`.
|