---
title: Borradores, revisiones y publicación
description: Cómo pasa una entrada de borrador a página publicada, y qué guarda Hollware en el camino.
section: concepts
order: 2
---

# Borradores, revisiones y publicación

Una entrada es una página en un locale: una colección, un locale y un slug. Su contenido es una lista de **revisiones**.

## Revisiones

Cada `create_draft` y `update_draft` agrega una revisión: el archivo Markdown completo, con su frontmatter, exactamente como se envió. Las revisiones nunca se cambian ni se borran, así que siempre puedes ver qué decía una entrada, y cuándo.

Una entrada tiene una **versión**, que sube con cada cambio. `update_draft` recibe la versión que el agente leyó por última vez, y responde `conflict` con la actual cuando otra persona cambió la entrada entremedio: nada se sobrescribe por accidente.

## Historial y volver atrás

Cada entrada guarda su historial: todas sus revisiones, de la más nueva a la más antigua, con quién la escribió (una persona, o el agente de su token o de su app, con el cliente que dijo ser), cuándo, su título, qué dijeron los contratos y cuál muestra el sitio ahora.

- **En el admin**, abre la entrada y su pestaña **Historial**. Una revisión se abre junto a la más reciente, con lo que cambió marcado, y **Restaurar esta versión** vuelve a ella.
- **Por MCP**, `list_revisions` las lista, `get_revision` lee el Markdown completo de una y `restore_revision` vuelve a ella.

Volver atrás nunca borra ni reescribe nada: el Markdown de la revisión anterior se guarda otra vez como una revisión nueva, con la verificación de la versión y los contratos de cualquier guardado, y el historial conserva todas las revisiones, incluida la que dejaste. La versión restaurada es un borrador hasta que la publiques, así que el sitio muestra lo que mostraba hasta entonces. Para deshacer una publicación de inmediato, restaura la revisión que el sitio mostraba antes y publícala.

## Publicación

`publish` convierte una revisión en la publicada. Los contratos se ejecutan de nuevo en la fase de publicación, que puede ver más que una escritura: si los enlaces apuntan a entradas publicadas, si existen las traducciones.

Después:

- los sitios que leen por el binding o por la API de lectura ven el contenido nuevo en su siguiente lectura;
- los eventos de la publicación van a los webhooks del sitio y a IndexNow, si los tiene (en el admin, en **Sitio**), por una cola que reintenta; cada evento dice qué [etiquetas de caché](/es/docs/caching/) invalida.

Una entrada con cambios sin publicar sigue sirviendo su revisión publicada hasta que vuelvas a publicar. `unpublish` la quita de los sitios y conserva sus revisiones.

## Vista previa en el sitio

En el admin, **Vista previa en el sitio** abre la página de la entrada en tu sitio con su última revisión, incluso si es un borrador, antes de que alguien la publique. El enlace está firmado para esa entrada y dura una hora; tu sitio lo cambia de inmediato por una cookie, así que no queda en la barra de direcciones ni en el historial. `@hollware/nuxt`, `@hollware/astro`, `@hollware/react` y `@hollware/vue` (con un servidor) hacen ese cambio, y nada de lo que responde una página en vista previa se guarda en caché. Requiere la `url` del sitio en el admin, en **Sitio**, y el secreto del Worker `HOLLWARE_SECRET`, que configura `hollware deploy`.

## Programación

`publish` recibe `publishAt`, un momento en el futuro: la entrada se publica entonces, por el cron trigger del Worker, con los contratos ejecutados de nuevo en ese momento.

El fin de una publicación también se programa, para una oferta, un evento o un aviso que termina: `schedule_unpublish` recibe la entrada y `unpublishAt`, y el cron la saca de los sitios durante el minuto siguiente a esa hora, a nombre de quien lo programó, si todavía puede publicar. Programarlo de nuevo mueve la hora, `unpublishAt: null` lo cancela, y `get_entry` lo responde como `unpublishAt`. En el admin, una entrada publicada tiene **Despublicar el**, junto a **Despublicar**.

## Cambiar la URL de una entrada

`move_entry` le da a una entrada otro slug, y con él otra ruta en el sitio. Conserva sus revisiones y sus traducciones, y recibe la versión que leíste, como `update_draft`. Mover una entrada publicada requiere `content:publish`, porque la página se mueve de inmediato y se purgan sus páginas.

Una entrada que alguna vez se publicó guarda su slug anterior como **redirección**: un sitio responde la ruta antigua con un 301 a la nueva, así los links y los buscadores la siguen. Volver a un slug anterior elimina esa redirección. `list_redirects` las lista, de la más nueva a la más antigua, con ambas rutas cuando la colección tiene una ruta. Un sitio las lee con `listRedirects`, o con `createHollware().redirectFor(collection, locale, slug)`, y `hollware export --published` las escribe en `redirects.json` para un sitio que se construye desde archivos.

En el admin, una entrada tiene **Cambiar URL**, y **Sitio** lista las redirecciones.

## Traducciones atrasadas

Una traducción es una entrada de un grupo de traducción en otro locale que el por defecto del sitio. Cuando su fuente, la entrada del grupo en el locale por defecto, cambia después de que se guardó la traducción, la traducción queda **atrasada**: `list_entries`, `get_entry` y `get_translations` responden `translationOutdated: true`, y el admin la marca y permite filtrar por ella. Guardar la traducción de nuevo la pone al día.

## Tu Markdown

`get_entry` con `formats: ['markdown']` entrega una revisión exactamente como entró, byte por byte. Tu contenido nunca queda atrapado en un formato propio de Hollware.
