Cómo el daemon mueve los bytes de un asset hasta el cliente, con presupuestos, caché por niveles y políticas de cola.
Implementado en parte. El nodo
track/byte-runtimesigue en curso. Lo que sigue describe lo que existe ennative/zig/y marca lo que sólo está propuesto. El estado de cada gate es el de la vista generada del roadmap.
El byte runtime es la parte del daemon que lleva los bytes de un fichero (o de un fragmento
empaquetado) hasta el cliente sin pasar por JavaScript. Su arquitectura se eligió en la decisión
r44 (Candidate H) y se reancló sobre las primitivas compartidas de zkit en dec-0103.
| Pieza | Dónde | Qué hace |
|---|---|---|
| Fuentes | media-core/source/ | SeekableMediaSource en Zig: lectura por rango con propósito y cancelación por petición |
| Caché por niveles | media-core/cache/ | L1 RAM, L2 NVMe y L3 SFTP, con ledger global, admisión y métricas |
| Planificador de lectura | media-daemon/session/scheduler.zig | Máquina de estados por sesión: admisión por presupuesto, cola, descarte por plazo y cancelación en seek |
| Sesiones y empaquetado | media-daemon/session/ | Sesión de reproducción y sesión de empaquetado, con un productor por segmento |
| Transportes | media-daemon/transport/, media-daemon/moqt/ | HTTP Range, HTTP/3, WebTransport y MoQT sobre la capa QUIC |
| Presupuesto de envío | media-daemon/transport/send_budget.zig | Bytes en vuelo sin confirmar, por conexión, sesión y actor |
Tres niveles con política propia (decisión r45):
El almacenamiento remoto va por API nativa, nunca por FUSE en el camino caliente.
Todo recurso tiene un presupuesto anidado: daemon, actor, sesión, conexión. Agotarlo falla la
sesión, no el daemon (dec-0117 I4). Los puntos que lo hacen cumplir:
zkit.safety.La entrega por MoQT distingue dos perfiles (dec-0104, enmendado por dec-0122):
ExtentMap y la disponibilidad parcial de un asset.Son ADRs propuestos: mientras no se lockeen, no son parte del contrato del byte runtime. El
discriminante entre directo y VOD en el dominio (dec-0107) sí está LOCKED desde el 2026-10-01.
El byte runtime consume zkit y no reimplementa nada de lo genérico (dec-0103): relojes,
locks, ficheros, cola acotada, cola de prioridad, losa de handles generacionales, búfer de copia
cero, token de cancelación, asignador con presupuesto y lectores acotados de los parsers vienen de
ahí. Una guarda de construcción lo impide (zig build audit:safety, bun run check:zkit-no-reimpl). Hay primitivas de zkit que styx no consume porque no tienen
carga de trabajo real que las use (la cola de suscriptores, el búfer de reordenación o el
vigilante de trabajadores): no se cablean hasta que la tengan. Detalle en
zkit, spire y conduit.