# 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`.
