ExplicacionDatos

Catálogo federado

El modelo de datos del catálogo, la separación entre obra, edición, asset y fuente, y dónde vive cada tabla.

ImplementadoSin versión del tren todavía

Implementado en parte. El modelo base (obra, edición, asset, índice de medios, fuente) existe en @styx/domain y en catalog-svc y sources-svc. El discriminante entre medios finitos y directo (dec-0107) y las representaciones canónicas completas siguen en curso: su estado está en el gate de track/domain-media.

Cuatro niveles, un recorrido

Styx separa lo que es una obra de lo que es un fichero concreto, y de dónde viene ese fichero. La decisión r08 fija el recorrido:

Work ──< Edition ──< MediaAsset ──< SourceBinding
 qué es     qué versión    el medio lógico     dónde están sus bytes
NivelQué esDónde vive
WorkLa unidad creativa: «Blade Runner 2049». Clases: película, serie, episodio, concierto, extra, coleccióncatalog-svc, tabla works
EditionUna versión de la obra (original, montaje del director, extendida, remasterizada, estreno en salas, personalizada), con etiquetascatalog-svc, tabla editions
MediaAssetEl medio lógico de una edición: ruta, tamaño, huella rápida y contenedorcatalog-svc, tabla media_assets
SourceBindingUn enlace del asset a una fuente concreta con su puntuación y disponibilidadsources-svc, tabla sources

Una obra puede tener varias ediciones, y una edición varios assets con enlaces a fuentes distintas (disco local, HTTP, S3, WebDAV, SFTP, torrent, Jellyfin, Xtream o compuestas). El selector de fuentes puntúa las disponibles y elige; una puntuación de cero deja a la fuente inelegible.

El índice de medios

media_indexes guarda, por asset y versión de índice, los hechos que el motor de medios extrajo: contenedor, duración, tasa de bits, pistas, capacidades y, si los hay, los fotogramas clave. Está versionado, así que un índice nuevo no destruye el anterior. Los hechos los produce el motor del daemon (qry.media.probe), nunca un proceso externo (ver motor de medios).

Representaciones canónicas y adquisiciones

Además del recorrido anterior, @styx/domain modela:

  • CanonicalRepresentation: una representación preferida de un asset con su ciclo de vida (candidata, activa, retenida, expulsada, experimental), su códec, HDR y requisitos de decodificación. Es el sitio donde se aplicará la política canónica de códecs (AV2 como frontera, AV1 como respaldo y HEVC Main10 por compatibilidad) sin convertir el códec en una categoría estructural. Objetivo, sin código: el tipo existe, pero ningún paquete implementa esa política (ver motor de medios).
  • AcquisitionArtifact: un artefacto concreto recibido de un proveedor, identificado o sin identificar. No es una composición lógica de pistas; esa función es del MediaAsset.

Ingesta e identificadores

Un fichero subido recibe identificadores deterministas derivados de su SHA-256, de modo que dar de alta el mismo contenido dos veces es idempotente. catalog-svc resuelve la raíz de ingesta con su propia configuración (nunca con una ruta que llega en el mensaje) y da de alta obra, edición, asset e índice en una única transacción. La tabla ingest_usage lleva el libro de bytes que cada actor guarda en cada raíz, que playback-svc suma antes de abrir una sesión de subida.

Reglas de diseño

  • Los tipos son contrato canónico en TypeBox (WorkSchema, EditionSchema…), con los identificadores como tipos con marca para que un WorkId no se confunda con un AssetId.
  • Cada servicio es dueño de su esquema de Postgres. Las migraciones las aplica un rol separado y el rol de ejecución no puede hacer DDL.
  • Por el bus nunca viaja SQL ni texto de error de la base de datos, sólo códigos de error fijos.
  • El estado por usuario (progreso, perfiles) es de otro dominio, identity y la futura capa de cuentas; el catálogo no lo guarda.