Skip to Content

Novedades

Notas de versión de acs2md, de más reciente a más antigua. El comportamiento de conversión proviene del motor ADF compartido de Climakers, así que la mayoría de los cambios de salida se aplican también a acp2md.


Lo último

La conversión de espacios se ejecuta en paralelo

space convert ahora convierte 4 páginas a la vez por defecto. La conversión está limitada por la red, así que solapar unas cuantas páginas oculta la mayor parte de la latencia por página. Con --concurrency 1 se restaura la conversión estrictamente secuencial.

La salida es idéntica con cualquier valor: las páginas se recogen en el orden de entrada, sin importar qué worker termine primero, así que la estructura de directorios, --rewrite-links y los totales del resumen no cambian. Consulta Rendimiento.

Se respeta Retry-After

Cuando Confluence responde a una petición limitada con 429 o 503 e indica un retardo, el cliente espera ahora exactamente ese tiempo en lugar de adivinarlo. Esto es lo que hace seguro subir --concurrency: es el servidor quien marca el ritmo, en vez de que el cliente lo descubra fallando.

Un retardo superior a 60 segundos se muestra en vez de esperarse, así que un comando nunca parece colgado, y la espera es interrumpible.

Los valores por defecto del backoff cambiaron, y actualizar no llega a una instalación existente. Subieron de 10ms/100ms a 500ms/30s, pero un archivo de configuración materializa todos los valores por defecto al crearse y la configuración gana a los valores por defecto. Una instalación antigua conserva un presupuesto total de 70 ms repartido en tres intentos, incapaz de sobrevivir a una ventana real de limitación. Ejecuta acs2md doctor para comprobarlo y consulta Reintentos y límite de peticiones.

Las imágenes se pueden escribir como archivos sidecar

--image-sidecars guarda cada imagen en attachments/<page-id>/ junto al Markdown y la enlaza de forma relativa, en lugar de incrustar una URI de datos en base64. La exportación sigue siendo autónoma en ambos casos: lo que cambia es la longitud de línea.

En una página real: 1.440.451 B y una línea de 244.311 caracteres en base64, frente a 12.100 B y 379 caracteres con sidecars. En un espacio completo además se deduplica: una imagen reutilizada en diez páginas se guarda una sola vez.

--obsidian lo activa, porque el base64 era lo último de ese preajuste que no se renderizaba en Obsidian.

Salida para Obsidian

Un preajuste completo — callouts, anclajes de encabezado que Obsidian resuelve y archivos sidecar de imagen — además de --wikilinks, --inline-tags, --panel-style y --media-dimensions. Consulta Bóvedas de Obsidian.

Cada comando informa de cuánto ha tardado

✅ Sync complete! ✅ Converted: 835 ⏱️ Took: 2m 14s

La cifra cubre el comando completo, incluidas las llamadas a la API y las descargas de imágenes. Los comandos de página imprimen el tiempo en stderr, nunca en stdout, para que las redirecciones y los pipelines sigan limpios.

Un segundo Ctrl+C fuerza la salida

La primera interrupción cancela de forma limpia y deja que se replieguen las páginas ya en vuelo, lo cual no es instantáneo cuando se están convirtiendo varias a la vez. Antes, cualquier Ctrl+C adicional se descartaba y una ejecución que parecía atascada no se podía detener.

Correcciones

  • --debug no producía salida alguna. Fijaba el nivel de log pero dejaba el destino en su valor por defecto, que lo descarta todo. Ahora escribe en stderr salvo que --log-file indique otra cosa.
  • Un log.level, log.format o log.file inválido bloqueaba todos los comandos, incluidos los comandos config que lo reparan. Ahora recurren a unos ajustes de log que funcionan durante esa ejecución e indican qué clave cambiar.
  • Una opción global colocada antes de un comando exento hacía que este exigiera licencia o validara la configuración. acs2md --log-file x.log doctor tomaba --log-file como nombre de comando, así que doctor — el comando que se ejecuta para diagnosticar problemas de licencia — se negaba a arrancar en una máquina sin licencia.
  • space get --sync podía borrar archivos fuera del directorio de salida.
  • Dos guardados concurrentes podían corromper el estado de sincronización, porque cada guardado escribía a través del mismo nombre temporal fijo.
  • Un http.client.proxy inválido ahora es un error, no un aviso seguido de continuar. Enviar el tráfico directo en silencio cuando se pidió enrutarlo es, en una red corporativa, motivo para detenerse.

v1.0.5

Esta versión cambió la salida Markdown por defecto en las páginas que contienen paneles y para quien use --include-metadata. Las dos acciones de abajo no hacen nada si nunca escribiste el ajuste correspondiente.

Acción: revisa image.max_size_bytes

El valor por defecto bajó a 2 MB, pero una configuración escrita antes de esta versión casi con seguridad fija el antiguo 10485760, lo bastante permisivo como para incrustar un fondo de página y producir un archivo que ningún editor maquetará. La configuración gana a los valores por defecto, así que sigue imponiéndose:

acs2md config get image.max_size_bytes # 10485760 significa que el valor antiguo está fijado acs2md config set image.max_size_bytes 2097152

acp2md lee su propia configuración, así que ejecuta el mismo par allí si lo usas.

El front matter lleva nombres visibles y las menciones enlazan a los perfiles de las personas. Cuando una exportación se publica fuera de la organización, --resolve-users=false conserva los IDs de cuenta opacos.

Los paneles se renderizan como alerts de GitHub

> [!NOTE], > [!TIP], > [!WARNING] y > [!CAUTION] sustituyen a la cita con emoji anterior. Los alerts se renderizan tanto en GitHub como en Obsidian. Los tipos de panel sin equivalente conservan la forma con emoji. --panel-style=emoji restaura la salida antigua.

El front matter es YAML válido

--include-metadata emite ahora YAML determinista y correctamente entrecomillado, que Obsidian lee como Properties y que Jekyll, Hugo y Pandoc interpretan:

AntesAhora
Title, AuthorID, CreatedAt, ID, LastOwnerID, OwnerID, ParentID, ParentType, Position, SpaceID, Status, SubType, VersionAuthorID, VersionCreatedAt, VersionMessage, VersionMinorEdit, VersionNumbertitle, tags, author, created, updated, source, space, status, version, id, parent_id, owner_id

Las fechas son YYYY-MM-DD, tags procede de las labels de Confluence de la página, source es la URL de navegador y los campos vacíos se omiten. Los campos eliminados eran contabilidad interna de Confluence que ningún consumidor de Markdown usaba.

Las labels se recuperan automáticamente

Con el front matter activado, tags se rellena sin pasar --include-labels. En space convert las labels no forman parte del listado masivo de páginas, así que --include-labels (por defecto true) controla una petición adicional por página; ponlo a false para evitar ese coste.

Los enlaces de encabezado se resuelven en el renderizador para el que exportas

La tabla de contenidos emitía anclajes de tipo slug al estilo de GitHub sin importar el destino. --panel-style=obsidian (y por tanto --obsidian) emite ahora anclajes que Obsidian resuelve.


Consulta también

Last updated on