Citable Publication
Publicación determinista en HTML, Markdown y JSON desde un único corpus, con verificación de integridad antes de publicar y fallos reproducibles.
Problema y utilidad para agentes
Una URL canónica correcta no garantiza que un agente reciba el contenido completo. Una exportación puede perder código, truncar una tabla o cambiar el esquema JSON sin alterar esa URL. Citable Publication define un contrato de publicación y rechaza los archivos que se apartan de él.
Para citar una fuente, un agente necesita recuperar el pasaje correcto y conservar su contexto. Este proyecto aborda una parte concreta de ese problema: preservar contenido y referencias entre formatos y detectar divergencias antes de publicar.
Arquitectura
- Contrato de entrada. Un corpus JSON validado se transforma en un modelo inmutable. Cada documento declara una URL HTTPS canónica y cada sección tiene un identificador estable.
- Tres representaciones. El mismo modelo genera HTML, Markdown y JSON. Un manifiesto registra rutas, tipos de contenido, tamaños y hashes SHA-256.
- Verificación contra la fuente. El verificador regenera los bytes esperados desde el corpus original. No toma el manifiesto como autoridad: modificar un archivo y actualizar su hash también produce un rechazo.
- Publicación condicionada. La salida se construye en un directorio temporal, se verifica y se renombra al destino. Se exige un destino nuevo y se informan los errores por archivo y documento.
Qué demuestra
- Diseño de contratos de datos y referencias citables, con generación determinista desde una fuente común.
- Control de integridad que detecta pérdida de contenido, archivos faltantes y cambios de esquema antes de promover una publicación.
- Evaluación reproducible mediante inyección de fallos, control limpio, comparación explícita y resultados inspeccionables.
Resultados publicados
Resultados publicados por el autor en el repositorio. La comparación usa el mismo corpus de tres documentos sintéticos originales. El control básico comprueba únicamente las URL canónicas del HTML; el control completo verifica la publicación contra su fuente.
Se restaura la salida original antes de cada caso y se comprueba que la mutación cambió bytes. Las seis clases de fallo afectan a la URL canónica, versión del esquema JSON, código Markdown, tablas HTML, ausencia de JSON y vaciado del manifiesto.
Comparación de los controles
| Medición | Solo URL canónica | Control completo |
|---|---|---|
| Controles limpios aceptados | 1 / 1 | 1 / 1 |
| Fallos inyectados rechazados | 3 / 18 | 18 / 18 |
| Fallos inyectados no detectados | 15 / 18 | 0 / 18 |
Son 18 casos de una matriz fija, no 18 clases de fallo ni una estimación de eficacia sobre sitios arbitrarios. El manifiesto vacío repite el mismo fallo global tres veces. La medición evalúa corrección, no velocidad, posicionamiento ni probabilidad de que un modelo cite una fuente.
El informe limpio cubre 3 documentos y 10 archivos, incluido el manifiesto. Informe de publicación limpia.
Reproducir
Sin dependencias de ejecución, llamadas a modelos ni servicios pagos. Los comandos de compilación y verificación imprimen informes JSON; la verificación correcta termina con código 0.
Usá Python 3.13.7 y un directorio de salida que todavía no exista. Guardá los informes fuera del directorio publicado. La revisión está fijada para consultar el mismo código y las mismas fuentes de esta ficha. La ejecución local generará sus propios metadatos de entorno y fecha.
Compilación y verificación
git clone https://github.com/lucioduran/citable-publication.git
cd citable-publication
git checkout 1a265730b7e0acdd3d326bd3fb7704f71e15edec
python -m citable_publication build --corpus examples/corpus.json --output dist/first-release
python -m citable_publication verify --corpus examples/corpus.json --output dist/first-release
python -m experiments.reproduce --output build/reproduction.jsonAlcance y límites
- Es una implementación independiente inspirada en los requisitos de lucioduran.com. No audita ni certifica esta web en producción.
- El corpus admite documentos en inglés con párrafos literales, bloques de código, tablas rectangulares y secciones. No admite imágenes, listas, texto enriquecido ni documentos multilingües. Esta ficha sí está traducida.
- La comparación exacta de bytes también rechaza cambios de formato inocuos. El verificador y el renderizador comparten código: un error compartido puede escapar al control.
- Las tablas Markdown y las anclas HTML dependen del soporte del lector. SHA-256 identifica bytes, no autoría ni veracidad.
- Requiere un sistema de archivos confiable con un único escritor. El directorio temporal no garantiza exclusión entre despliegues ni durabilidad ante un corte de energía. Servir contenido e invalidar cachés queda fuera del alcance.
- El corpus se carga en memoria. Las entradas no confiables necesitan límites externos de tamaño; declarar el idioma no equivale a detectarlo.
Fuentes y revisión
Los valores de esta ficha provienen del informe enlazado. No son una medición en vivo. El informe conserva la revisión ejecutada; la revisión consultada incluye la publicación posterior de ese informe.
- Revisión consultada:
1a265730b7e0acdd3d326bd3fb7704f71e15edec - Revisión registrada por el experimento:
150b2d3f5059bf0cef5cd7dde441896539ad4d6e - Fecha del informe (UTC):
- SHA-256 del corpus:
059916d1c6d4fbbf15df7fb65ddefe39d2f892bb0caeae494037c04a5675959c