Skip to content

Publicación de documentación: reparación y validación

20 de octubre de2026. La publicación CI de fab1729 terminó correctamente y el esquema servido por la URL del despliegue devuelveHTTP200. Sin cambios del runtime del homelab; la revisión posterior del redactor se documenta al final.

Fallos acreditados

El run GitHub Actions 39347185700, sobre 96f71cf, falló en Set up job: GitHub no pudo resolver cloudflare/pages-action. No llegó al checkout ni al build. El lint de Ansible de 7b80f76 sí terminó correctamente. Estos runs recientes no acreditan el estado histórico del sitio publicado.

Había además una discrepancia efectiva: redact-secrets.sh genera docs/docs-public, pero el workflow compilaba mkdocs.yml con docs_dir=docs. Reparar sólo la acción habría mantenido esa selección del árbol original. Se corrigió antes de publicar.

Cambio de fuentes

  • Acción oficial Wrangler fijada al commit <REDACTED> de v4.1.3; CLI Wrangler fijada a4.151.2. Se mantienen los secretos existentes CF_API_TOKEN/CF_ACCOUNT_ID, proyecto homelab-docs, branch main y site-public.
  • mkdocs-public.yml hereda el tema/configuración y selecciona docs-public. El workflow conserva strict y ejecuta las pruebas antes de redactar/compilar.
  • El hook público adapta exclusivamente las consultas de metadatos Git del plugin1.6.0 a los archivos canónicos docs/docs. No modifica rutas de Markdown ni lee ese contenido para renderizar. Conserva creación/revisión y restaura la fábrica del plugin al terminar. Usa su modo serial soportado para metadatos; la adaptación local no se envía a procesos worker.
  • Se rechazan roots privados, coincidentes, anidados o symlink. La versión del plugin está fijada: un cambio exige revisar su interfaz, no aceptar un fallback silencioso. Se corrigieron ocho enlaces externos al árbol MkDocs en seis MD, preservando el contenido de los informes.

Fuentes oficiales: CI de Pages, Wrangler Pages deploy, acción v4.1.3, CLI4.151.2. No se consultaron valores de secretos ni se ejecutó un despliegue manual.

Evidencia previa al push

Cuatro pruebas independientes pasan con Python3.12, igual que CI. Verifican ocho clases sintéticas redactadas, idempotencia, fuente/binario intactos, ejecución de los argumentos de build del workflow real, HTML sin esos valores, fechas Git de creación2001 y revisión2002, y rechazo del árbol privado directo o por symlink antes de generar HTML. No se presentan como auditoría universal de secretos.

El build completo del checkout privado de validación 35ec8ab pasó strict: 171 Markdown, cero avisos/errores, 18,13s de MkDocs (21,17s con redacción). Los172HTML, incluido404, no contenían literales LAN192.168.0.numérico. Los logs privados quedan en el estado local homelab-docs-build, modo0600. El snapshot de validación es local y no se ha pusheado como rama alternativa.

La primera instalación local con Python3.14 necesitaba compilar watchdog y falló por licencia Xcode pendiente. Se usó el Python3.12 ya instalado y wheels en un venv privado; no se aceptó licencia ni se alteró el Python global.

Límites y recuperación

La evidencia de deploy corresponde al run y commit concretos documentados abajo. El acceso del dominio personalizado, sus redirecciones y el login no se validan por el éxito de Pages. La redacción por clases no es una auditoría universal de secretos ni cubre información impresa dentro de imágenes.

Si falla el deploy, conservar el sitio anterior y resolver el fallo concreto; no volver al workflow inaccesible ni compilar el árbol privado. Una revisión de fuente puede revertir el cambio de acción, pero debe mantener como requisito que cualquier publicación consuma exclusivamente el árbol redactado validado.

Resultado CI y lectura del despliegue

Run39349167709, commit , terminóSUCCESS: resolución acción, checkout, instalación, pruebas, redacción, buildstrict y deploy Pages. Se leyó una única página del despliegue inmutable: HTTP200/58045bytes, título y muestraDocker02:28:30 presentes, cero literales LAN192.168.0.numérico. Esto no verifica todas las páginas o imágenes remotas.

El dominio docs.monxas.casa respondió302 con el User-Agent de validación y403 con la petición urllib por defecto. No se siguieron redirecciones ni se abrió login o se cambió una política de acceso; no se atribuye causa a esas respuestas. La URL del despliegue sí acredita contenido publicado, independientemente de esa comprobación limitada del dominio personalizado.

Endurecimiento posterior del redactor

Se reprodujeron dos defectos con fixtures exclusivamente sintéticos: un index.md symlink podía saltarse la redacción del banner, y un index.md.tmp symlink podía hacer que su redirección modificara la fuente. El árbol real y el índiceGit tenían cero symlinks; no se presenta esto como evidencia de fuga del despliegue anterior.

El redactor rechaza docs/SRC o enlaces internos antes de borrar/copiar el destino, y trata fallo de find como error. El banner utiliza mktemp exclusivo/umask077 y cleanup del único temporal propio; conserva index.md.tmp regular preexistente. El recuento final también propaga su fallo en vez de imprimir éxito por echo. Nueve pruebas pasan por autor y revisión independiente; bash-n correcto. La fuente revisada es. La publicación de este endurecimiento quedó acreditada en el run39350183799, commit: nueve pruebas, redacción, buildstrict y deploySUCCESS; terminó a02:53:22CEST. A02:56CEST se leyó la página de coberturaCT217 del despliegue inmutable: HTTP200/79175bytes, timestamp23:02:36 presente, cero literalesLAN192.168.0.numérico. Esta comprobación sigue limitada a esa página; no acredita todas las páginas, imágenes ni acceso autenticado por el dominio personalizado.

Compatibilidad Actions: Node24 y runner explícito

El run39352853602 terminóSUCCESS, pero sus annotations señalaron acciones checkoutv4/setup-pythonv5 declaradas para Node20 y la migración automática de ubuntu-latest. Se fijaron checkoutv5 al commit <REDACTED> y setup-pythonv6 al commit <REDACTED>, usando Ubuntu24.04 y un límite de 10 minutos para el job. Checkout conserva fetch-depth: 0 para las fechas Git y desactiva la persistencia de credenciales; la consulta del historial local no necesita esa credencial guardada.

Se mantienen Python3.12, nueve pruebas de integridad/redacción, buildstrict, nombres de secretos, proyecto y comando/versiones de Wrangler. Se retiró el comentario que aconsejaba desactivar strict ante warnings. La comparación YAML contra la fuente anterior acreditó exclusivamente esos cambios semánticos; git diff --check pasó. El run39353192722 terminóSUCCESS con el workflow actualizado. El coordinador consultó sus jobs y las annotations de sus check runs: cero annotations totales, cero coincidencias Node20 y cero avisos de migración Ubuntu26. Es evidencia de ese run concreto; no se presenta como ejecución del paso de artefactos de fallo, que depende de if: failure().

La documentación oficial confirma que Node20 ya no está disponible y las acciones JavaScript usan Node24. GitHub anunció la migración gradual de ubuntu-latest de24.04 a26.04 entre el19 de octubre y el19 de noviembre de2026, y recomienda fijar24.04 cuando se desea conservar esa imagen. Estas advertencias no convierten los runsSUCCESS anteriores en fallos ni acreditan cambios en los hosts del homelab.