Acerca de Opus
Un framework en Rust para el dominio de las obras de conocimiento. Una Obra es un todo coherente y de autor; Opus aporta la maquinaria para expresarla en distintos modos, formatos y canales, y deja fuera de su propio código cualquier palabra propia de una Obra.
De dónde viene Opus
Empezó como un sistema para un libro. Su primer consumidor fue un libro impreso, y el framework surgió de extraer, corregir y componer el texto de ese libro, hasta convertirse en crates reutilizables de procesado de documentos, sugerencias con IA, búsqueda semántica, servicio MCP y vigilancia de ficheros.
Al madurar, el nombre se fue desviando mientras el modelo no lo hacía: el esquema ya trataba la Obra como unidad. La primera decisión lo hizo explícito. La esencia del dominio es la Obra, y su difusión en impreso, digital, web e interactivo es su expresión, nunca su definición.
La segunda decisión dio al dominio el nombre de su átomo. La Obra es la producción de autor, no el libro: un libro, un cuaderno de bitácora, un taller y un material educativo son espacios de una misma Obra que coexisten, y el orden en que declara un consumidor es Obra, después espacio, luego expresión. El dominio es Opus.
Invariantes
- ✓ Sin lógica de proyecto en el framework: el vocabulario de una Obra viene de la configuración de su consumidor
- ✓ Estabilidad de los traits públicos: romper un trait que implementa un consumidor exige una versión nueva del trait
- ✓ Inversión del consumidor: la flecha de dependencia va del consumidor al framework, nunca al revés
- ✓ CI sin avisos: clippy con los avisos denegados sigue en verde en todo el workspace
- ✓ Contrato del contenido de sección: SectionContent es el único tipo en la frontera entre framework y consumidor
Los crates
Lo que incluye el framework, tras traits estables
Procesado y edición
- Generación ODT
- Extracción de texto
- Filtrado de correcciones
- Pipeline de composición typst
- Análisis editorial según la lengua de la Obra
Agentes y sugerencias
- Framework McpServer<T>
- Traits ContentLoader y PedagogyEngine
- ChapterConfig para la estructura de una Obra
- Generación de sugerencias con IA
- Estrategias de fusión de sugerencias
Búsqueda y vigilancia
- Embeddings locales con fastembed (ONNX)
- Índice de texto completo con tantivy
- Contratos VectorStore, EmbeddingModel y Retriever
- Vigilante de ficheros configurado desde el entorno
- Estado del vigilante guardado en .watcher/status.json
Por qué la Obra es la unidad
📖 Un todo coherente
Impreso, digital, web e interactivo son expresiones de la Obra. A ninguna se le permite convertirse en su definición.
🧭 Un orden declarado
Obra, después espacio, luego expresión. Cada formato se proyecta desde un espacio y queda aguas abajo de él.
🔤 Las reglas de la lengua en su sitio
Una regla que necesita toda Obra de una lengua vive en el framework; una palabra que solo usa una Obra vive en la configuración de esa Obra.
📚 Ortotipografía citada
Cada regla cita su fuente por capítulo y sección y nombra la comprobación que la sostiene. Una herramienta de comprobación se cita, nunca es una autoridad.
🧾 Evidencia que perdura
Una escritura de la cadena de herramientas registra el digest que deja, así que la edición de una persona y la migración de una herramienta nunca son la misma evidencia.
✉️ Un envío registrado
La Obra llega a un tercero solo como un envío anotado en su registro; una copia personal va siempre a quien la pide.