Fábrica de Contenido para WeChat Official Account
Automatiza las tediosas tareas manuales posteriores a la redacción: maquetación, imágenes, cumplimiento y entrega.
La redacción la realiza el modelo; esta skill se encarga de que un borrador realmente se pueda publicar, se vea bien y no infrinja las normas.
Capacidades
| Nivel | Capacidad | Descripción | Dependencias |
|---|---|---|---|
| L0 Material | ingest.py Ingesta de material | PDF/docx/pptx/web/artículo largo → Material estructurado referenciable | pypdf, python-docx, python-pptx |
| L1 Pegado | md2wx.py Markdown → HTML con estilos en línea | 4 temas, salida directamente pegable en el editor | Biblioteca estándar |
| L2 Borrador | cover.py Portada, lint.py Verificación de escritura, check.py Verificación de cumplimiento, preview.py Confirmación de maquetación | 900×383 / 1080×1080 / 200×200; verificación durante la redacción | Pillow, Chrome |
| L3 Publicación directa | API de borradores para publicación directa | No implementado, contrato de interfaz en references/api.md | AppID + AppSecret + cuenta verificada |
La creación completa por defecto entrega L1 + L2; las tareas parciales se entregan según el alcance solicitado, sin forzar la generación de todo el conjunto. L3 requiere que la cuenta esté verificada y tenga el AppSecret — las cuentas de suscripción no verificadas no tienen interfaz de desarrollador, por lo que solo se puede llegar a L2 (pegado manual). Confirma esto con el usuario primero, no lo asumas.
Inicio rápido
El orden es importante: primero vista previa, luego verificación, y finalmente generar el espacio de trabajo. El espacio de trabajo es una instantánea; generarlo antes de modificar el borrador dará como resultado una versión antigua después de los cambios.
La creación completa se verifica según los tres tamaños de portada de esta skill. La maquetación lista para publicar también debe verificar las portadas;
lint --out out --publishconsiderará como "debe corregirse" la falta o tamaño incorrecto. Las tareas normales de "solo maquetación", "solo verificación" o "solo vista previa" no obligan a completar las portadas. Los tres tamaños son especificaciones de entrega de este proyecto, no reemplazan los requisitos actuales de WeChat ni la verificación real de imágenes.
# 0. Si hay archivos de material, ingerir primero (PDF/docx/pptx/web)
python3 scripts/ingest.py material.pdf -o out/ingest
# 1. Creación completa: generar portadas según especificaciones del proyecto: 900×383 titular + 1080×1080 cuadrado + 200×200 miniatura
python3 scripts/cover.py --md article.md --all -o out/cover
# 2. Primero generar la página de vista previa (este paso no genera el espacio de trabajo); el directorio de salida se crea automáticamente si no existe
python3 scripts/md2wx.py article.md -o out/article.html
# 3. Confirmación de maquetación (si el navegador no está disponible, explicarlo claramente)
python3 scripts/preview.py out/article.html -o out/preview.png --height 4000
# 4. Verificación doble (primera ronda; si se encuentran problemas, corregir el borrador y repetir)
python3 scripts/lint.py article.md --cards out/tarjeta_material.md --outline out/esquema.md --strict
python3 scripts/check.py article.md --html out/article.body.html --strict
# 5. Una vez que todo esté aprobado, generar finalmente el espacio de trabajo y tomar una instantánea (la huella se escribe en los artefactos y en build.json)
python3 scripts/md2wx.py article.md --sheet --snapshot -o out/article.html
# 6. Verificación final antes de la entrega: los artefactos deben ser iguales al borrador fuente actual y las portadas deben estar completas (--publish)
python3 scripts/lint.py article.md --out out --publish --strict
python3 scripts/check.py article.md --html out/article.body.html --strict
Todos los comandos se ejecutan desde el directorio raíz de la skill. python3 debe ser 3.9+; cover.py necesita Pillow. Ejecuta los pasos en orden y verifica los códigos de salida; no ignores fallos y continúes con los pasos siguientes; en ejecución por lotes, activa set -e primero. Si no hay tarjeta de material o esquema, omite los parámetros correspondientes y registra el alcance no verificado; si se pasan explícitamente pero no se pueden analizar, no se tratarán como no proporcionados. La instantánea completa requiere que las imágenes locales estén en el directorio de salida; solo maquetación no requiere instantánea ni portadas.
Antes de escribir: primero completa el frontmatter
La información de metadatos como título, resumen, autor, tema se escribe una sola vez, al principio del archivo Markdown, y es compartida por los tres scripts:
---
title: Después de arruinar 150 informes semanales, entendí: los jefes no quieren "lo que hiciste"
title_short: No conviertas los informes semanales en una lista de tareas
summary: Los informes semanales pasan por tres niveles de transmisión, y en cada nivel se pierde información. Si el jefe no puede copiar una frase de ellos, tu trabajo de la semana es igual a cero.
author: Yun Guang Mitu
tag: Crecimiento profesional
theme: growth
---
# Título del cuerpo
El cuerpo comienza aquí...
| Campo | Obligatorio | Descripción |
|---|---|---|
title | Sí | Título largo, ≤64 caracteres; es el que se rellena en el editor de WeChat |
title_short | Sí | Título corto, ≤20 caracteres; solo se usa para verificar la visualización en el feed de noticias, no se rellena en el editor |
summary | Sí | Resumen, ≤120 caracteres |
author | No | Campo de autor en el editor + firma en la portada; si no se escribe, por defecto es "Yun Guang Mitu" |
tag | Recomendado | Etiqueta en la esquina superior izquierda de la portada, 2~4 caracteres |
theme | Recomendado | tech / growth / minimal / elegant |
cover_title | No | Se usa si se quiere escribir otra frase en la portada; si se omite, se usa title |
Una vez escrito, el renderizado posterior, las portadas y la verificación no necesitan volver a pasar parámetros.
Regla de firma: por defecto "Yun Guang Mitu", si el usuario especifica una, se usa esa.
| Escenario | Cómo hacerlo |
|---|---|
| El usuario no menciona la firma | No escribir nada, usar automáticamente "Yun Guang Mitu" por defecto; el espacio de trabajo indicará "procedente de la firma por defecto" |
| El usuario especifica una firma | Escribirla en el campo author del frontmatter — el espacio de trabajo, la portada y el campo de autor en el editor la leerán |
| Solo se quiere probar temporalmente el texto de la portada | Usar md2wx.py --author / cover.py --author para sobrescribir, sin guardar en disco |
Prioridad: --author en línea de comandos > author en frontmatter > "Yun Guang Mitu" por defecto.
No uses solo cover.py --author sin modificar el frontmatter — eso hará que la firma en la portada y el campo de autor en el espacio de trabajo no coincidan.
Flujo de trabajo
Primero selecciona la rama de la tarea, luego ejecuta los pasos correspondientes. Solo la "creación completa" requiere seguir toda la cadena en orden; las tareas parciales no aplican todas las preguntas de creación.
| Tarea | Solicitud típica | Solo confirmar | Ruta de ejecución |
|---|---|---|---|
| Creación completa | Escribir un artículo; convertir material en artículo | Categoría, lectores, material, tema | Paso 0 → 0.5 (si hay material) → 1~7 |
| Solo maquetación | Ya está terminado, solo maquetar; convertir a HTML para WeChat | Archivo fuente terminado, tema o frontmatter existente; completar metadatos faltantes solo si se va a publicar | Paso 4 → Paso 6.2 (revisar sugerencias, no modificar el borrador por sí mismo) → Paso 7 (entrega parcial) |
| Solo portada | Solo hacer la portada de WeChat | Texto de la portada, tema/estilo, tamaño requerido, etiqueta y firma opcionales | Paso 5 → Revisión manual del texto de la portada → Paso 7 (entrega parcial) |
| Solo verificación | Solo verificar cumplimiento, maquetación o referencias | Archivos a verificar; usar parámetros correspondientes solo si hay HTML, tarjeta de material o esquema | Paso 6, verificaciones relacionadas → Paso 7 (solo entregar informe) |
Si no se puede determinar la rama (por ejemplo, "ayúdame a procesar esto", "mira si esto se puede publicar"): primero sigue el Paso 0 de creación completa, pero solo haz una pregunta clave, no las cuatro de golpe. Es mejor preguntar una vez más que asumir la rama equivocada y seguir los siete pasos.
Las tareas parciales solo completan la información necesaria para la tarea actual; la información existente se reutiliza directamente. No se debe reescribir el cuerpo terminado ni los títulos existentes, ni volver a confirmar lectores, tema o esquema, ni forzar cinco opciones de título. Solo cuando el usuario solicita explícitamente modificar el borrador, se entra en los pasos de creación correspondientes.
- Solo maquetación no ejecuta
cover.py, a menos que el usuario también solicite portadas. Se prioriza el tema existente; si no hay preferencia, se usatechy se explica, sin bloquear por esto. - Solo portada no requiere completar resumen, cuerpo, tarjeta de material o esquema, ni falsificar un artículo para ejecutar la verificación completa; según
references/compliance.md, solo se revisa el texto real de la portada y se explica el alcance de la revisión. - Solo verificación no modifica los archivos inspeccionados. Si solo hay Markdown, no se pasa
--html; si solo hay HTML y no hay fuente Markdown, solo se hace una revisión manual de compatibilidad del HTML y se explica el alcance, no se inventa un cuerpo falso. Si falta la tarjeta de material, se indica que las referencias y los números no se pueden verificar completamente. - Si falta Pillow o el navegador, no se instalan por sí mismo ni se finge que el paso está completo; se entrega lo completado y se enumeran los elementos faltantes. Una finalización parcial no significa que el artículo completo sea publicable.
Paso 0 · Confirmar entrada (solo para creación completa)
Para la creación completa, primero confirma cuatro cosas; si ya hay respuestas, úsalas directamente; solo pregunta si falta información necesaria, no la inventes:
- Categoría: Tecnología/producto, o carrera/crecimiento (determina el tema y el estilo de escritura)
- Lectores: ¿Quiénes son, en qué están atascados, qué pueden hacer después de leer?
- Material: ¿Hay casos reales, datos, código, capturas de pantalla?
- Preferencia de tema: Por defecto, según la categoría (ver "Selección de tema")
También determina cuál es el punto de partida, para seguir diferentes rutas:
| Punto de partida | Frase típica | Ruta a seguir |
|---|---|---|
| Dar material | "Convierte este PDF / informe semanal / página web en un artículo de WeChat" | Paso 0.5 → Paso 1 |
| Dar tema | "Escribe un artículo sobre X" | Saltar 0.5, ir directamente al Paso 1 |
| Ambos | "Según este informe, escribe algo sobre Y" | Paso 0.5 → Paso 1 |
Paso 0.5 · Ingerir material (solo si el usuario proporciona archivos o enlaces)
Lee references/ingest.md y ejecútalo según las instrucciones. No te saltes este paso para empezar a escribir directamente — leer el original directamente puede llevar a saltar información, omitir conclusiones y recordar números incorrectamente.
python3 scripts/ingest.py material.pdf acta_reunion.docx -o out/ingest
Produce tres niveles de archivos (texto limpio / esqueleto estructural / frases citables candidatas), luego extrae la tarjeta de material según ingest.md §2:
| Prefijo | Tipo |
|---|---|
F | Hecho (afirmación objetiva) |
D | Dato (número + unidad + contexto) |
O | Opinión (afirmación del autor original, no es un hecho) |
? | Dudoso (contradicción / sin fuente / necesita verificación) |
El entregable de este paso es una tabla de tarjetas de material + lista de lagunas, que se muestra al usuario para confirmación antes de continuar.
Tres líneas rojas (ingest.md §3): no cambiar números, no cambiar contexto, no convertir especulaciones en hechos.
Si encuentras múltiples valores para el mismo indicador, colócalos en una tarjeta ? y pregunta, no elijas uno en silencio.
Paso 1 · Expansión del tema y esquema
- Si el usuario dio material: A partir de las tarjetas de material, deducir qué ángulos se pueden escribir (
references/topic-expand.md§3) - Si el usuario solo dio un tema: Seguir
topic-expand.md§1–§3, expandir una frase en un árbol de argumentos
Luego, combinando references/writing-playbook.md §1 (línea base por categoría) y §4 (5 plantillas de estructura), seleccionar el esqueleto y producir un esquema con proporciones de palabras para que el usuario lo confirme.
Cada argumento en el esquema debe estar vinculado a un número de tarjeta de material ([F1] [D2]), los argumentos que no se puedan vincular se eliminan directamente, no se fuerzan para mantener la estructura completa (topic-expand.md §4).
Paso 2 · Escribir título y resumen
Lee references/writing-playbook.md §2 y §6:
- Producir título largo (≤64 caracteres, para el campo en el editor de WeChat) + título corto (≤20 caracteres, para mostrar en el feed de noticias)
- Dar 5 opciones de una vez, indicando qué fórmula usó cada una, y dejar que el usuario elija
- Resumen ≤120 caracteres, dar 1~2 versiones
Paso 3 · Escribir el cuerpo
Escribir en Markdown según el esquema, teniendo en cuenta:
- El comienzo debe seguir el método de gancho del §3, captar la atención en las primeras 3 líneas
- Cada párrafo trata un solo tema, con un máximo de 5 líneas por párrafo (aproximadamente 260 caracteres)
- El cierre debe seguir el §5, usando "cierre con pregunta / avance de serie / resumen de valor", sin escribir llamados a compartir
- Después de escribir, revisar con la lista de 24 puntos del §7 para eliminar el "olor a IA", eliminando todas las palabras de transición que no afecten la comprensión
Paso 4 · Renderizado de maquetación
Usar el theme del frontmatter o el tema especificado explícitamente por el usuario para renderizar; si no hay preferencia, elegir según la categoría; para maquetación parcial, usar tech por defecto:
python3 scripts/md2wx.py article.md -o out/article.html
El directorio padre de salida se crea automáticamente, produciendo dos archivos:
out/article.html— Página de vista previa (con contenedor de fondo blanco, como una página de lectura móvil) → para verout/article.body.html— Fragmento de cuerpo puro → solución alternativa para pegar
Este paso no genera el espacio de trabajo; el out/sheet.html final se genera en el Paso 7, para evitar guardar instantáneas de archivos antes de que las portadas y el borrador final estén completos.
Después del renderizado, usar preview.py para tomar una captura de pantalla, verla primero antes de entregarla al usuario (verificar si el título tiene saltos de línea antiestéticos, si las tablas son demasiado anchas, si los bloques de código están truncados). Si el navegador no está disponible, abrir el HTML para revisión manual y explicar que no se tomó captura; no exigir una reescritura del artículo por esto.
Paso 5 · Generar portada (obligatorio para publicación)
Sin portada, no se puede publicar en WeChat, este paso no es opcional en la "creación completa" y la "maquetación para publicar".
python3 scripts/cover.py --md article.md --all -o out/cover
Se generan los tres tamaños de una vez: cover.png 900×383 (titular 2.35:1), cover-square.png 1080×1080 (cuadrado), cover-thumb.png 200×200 (miniatura). Si el tamaño es incorrecto, la plataforma lo recortará, y lint --publish lo verificará.
Los parámetros se leen del frontmatter por defecto (título, etiqueta, autor, tema), generalmente no es necesario pasarlos:
--style:gradient(predeterminado, fondo oscuro) /minimal(fondo blanco, artículos de opinión) /band(banda de color, artículos de marca)--allproduce los tres tamaños: titular 900×383, cuadrado 1080×1080, miniatura 200×200- El título de la portada usa
titlepor defecto (el gancho del título largo es más efectivo); si se quiere cambiar el texto, agregarcover_titleen el frontmatter
Paso 6 · Verificación doble (dos compuertas, cada una revisa una parte)
La creación completa ejecuta ambas compuertas; la maquetación parcial y la verificación parcial seleccionan las verificaciones correspondientes según la tabla de entrada, sin forzar la creación de material faltante ni modificar el borrador original. Si falta información de metadatos, tarjeta de material o capturas de pantalla, se registran las limitaciones; la entrega parcial no se marca como verificada para publicación completa.
6.1 Compuerta de escritura — Verifica "si los argumentos tienen fundamento, de dónde vienen los números"
python3 scripts/lint.py article.md --cards out/tarjeta_material.md --outline out/esquema.md
Este paso es una compuerta estricta, no solo una sugerencia de escritura:
| Verificación | Regla | Consecuencia de no pasar |
|---|---|---|
| Referencia vacía | El [F1] en el cuerpo debe existir en la tarjeta de material | Reportar "debe corregirse" |
| Tarjeta dudosa | [?N] no debe aparecer en el cuerpo | Reportar "debe corregirse" — verificar o eliminar |
| Número sin fuente | Cada "número + unidad" en el cuerpo debe encontrarse en una tarjeta F/D | Reportar "debe corregirse" |
| Argumento sin soporte | Cada elemento del esquema debe tener ≥1 [F]/[D] vinculado | Reportar "debe corregirse" |
| Calidad del argumento principal | No puede ser una frase corta (como "el caché es importante") | Reportar "debe corregirse" |
| Tarjeta de opinión | Cuando se cita [O], se advierte que no debe usarse como argumento principal | "Debe confirmarse" |
| Lista de lagunas | El esquema debe tener lagunas P0/P1/P2 | "Aviso" |
Si no hay tarjeta de material, se degrada automáticamente: solo se indica "los números no se pueden verificar" y se enumeran todos los números con unidades para revisión manual.
Verificación de versión de artefactos: Al agregar --out <directorio de artefactos>, también compara la huella de construcción en los entregables con la huella calculada del borrador fuente actual.
python3 scripts/lint.py article.md --out out --publish --strict
--publish indica verificación dentro del alcance de "listo para publicar", debe ir acompañado de --out para especificar el directorio de artefactos; si falta el parámetro de directorio, se reportará un error. Verifica la existencia de los archivos y el ancho/alto en el encabezado PNG según las tres especificaciones de este proyecto, sin decodificar completamente la imagen ni verificar el texto de la portada, la carga o los requisitos de WeChat.
| Situación | Decisión |
|---|---|
| Huella de artefactos == huella del borrador fuente actual | Aprobado |
| Se modificó el borrador pero no se volvió a renderizar | "Debe corregirse": la página de vista previa/espacio de trabajo es una versión anterior |
El resumen del borrador fuente registrado en build.json no coincide | "Debe corregirse": el borrador fuente se modificó después de la generación |
article.body.html fue reemplazado o editado manualmente | "Debe corregirse": verificación mediante build.json del resumen del cuerpo |
| Los artefactos no tienen huella | "Debe confirmarse": generados por un script anterior o modificados manualmente |
Falta portada / tamaño incorrecto (--publish) | "Debe corregirse": no cumple con las especificaciones de portada para publicación de este proyecto |
Este paso es la única garantía mecánica para evitar "modificar el borrador, olvidar volver a ejecutar y publicar la versión anterior", debe ejecutarse antes de la entrega.
6.2 Verificación de publicación — Verifica "si se puede publicar"
python3 scripts/check.py article.md --html out/article.body.html --strict
La longitud del título y el resumen se toman automáticamente del frontmatter, no es necesario pasarlos de nuevo.
Criterios de aprobación estrictos:
| Indicador | Requisito |
|---|---|
| "Debe corregirse" de lint | Debe ser 0 |
| Elementos de alto riesgo | 0 elementos de alto riesgo sin resolver; los falsos positivos confirmados manualmente deben dejar evidencia y registro de revisión |
| Metadatos | title, title_short, summary son obligatorios y no pueden estar vacíos; solo se admiten campos de una sola línea con formato key: value |
| Número de caracteres del título | Título largo ≤64, título corto ≤20; la parte inicial clave del título real para publicación aún debe verificarse manualmente |
| Número de caracteres del resumen | ≤120 |
| Imágenes de dominios externos | Deben cargarse o reemplazarse antes de la publicación con imágenes utilizables en WeChat, y confirmarse en la vista previa del editor |
| Contenido profesional o confidencial | Debe pasar revisión final manual/legal; eliminar palabras clave, reescribir o desensibilizar no reemplaza la revisión y autorización |
Ambos --strict se pueden usar en CI: cuando hay "debe corregirse" o alto riesgo, el código de salida es 1. check.py reportará como alto riesgo la falta de metadatos, metadatos demasiado largos, valores de campo multilínea no admitidos y HTML especificado explícitamente pero inexistente; sin --strict, aún se reportan problemas, pero el código de salida es 0.
La verificación de publicación escanea campo por campo title, title_short, summary, cover_title, author, tag y el cuerpo; el código en el cuerpo sigue estando excluido, pero los backticks en los metadatos no pueden eludir la verificación. El campo field en los hallazgos JSON indica la fuente; line en el cuerpo sigue siendo relativo al cuerpo. Los valores de sobrescritura de título/resumen en la línea de comandos son el objeto final de verificación.
Aprobar la verificación no significa que se permita la publicación. Los elementos de alto riesgo se registran según references/compliance.md §0 como "pendiente de revisión / falso positivo confirmado / corrección completada / publicación rechazada"; el script no puede leer ni reemplazar los registros de revisión manual; confirmar un falso positivo no hace que --strict pase automáticamente. Si los problemas profesionales, de autorización o confidencialidad no están resueltos, se detiene la entrega; no se entrega como un artículo publicable. Los elementos de riesgo medio y bajo retenidos, los elementos confirmados manualmente y sus fundamentos se explican junto con la entrega.
Si la autorización de uso o el origen del material no están claros, primero completa la autorización/fuente o exclúyelo; no cambies la escala ni conviertas opiniones externas en experiencias del autor. Después de la ingesta del material, conserva un archivo licencia_y_limitaciones.md separado, que registre la fuente, la firma, el alcance de uso, los límites aplicables y el estado de autorización.
Paso 7 · Entrega
Para tareas que requieren HTML/espacio de trabajo, regenere el espacio de trabajo final uniformemente antes de la entrega. Confirme que el borrador final, los metadatos, el tema y las portadas solicitadas estén completos, luego ejecute con el mismo borrador fuente y los mismos parámetros de tema/salida:
python3 scripts/md2wx.py article.md --sheet -o out/article.html
Esto actualiza simultáneamente la página de vista previa, el fragmento del cuerpo y sheet.html; el espacio de trabajo lee el cover.png, cover-square.png y cover-thumb.png finales del mismo directorio. Es una instantánea de archivo estático; actualizar el navegador no regenera el espacio de trabajo. Si después se modifica el cuerpo, los metadatos, el tema o las imágenes, vuelva a generar los artefactos relacionados y vuelva a verificar las comprobaciones y vistas previas correspondientes; no entregue instantáneas antiguas.
Huella de construcción y reversión:
- La huella incluye el código de renderizado, el borrador fuente, el tema fusionado, el título/firma/tema reales sobrescritos y las opciones de salida, las imágenes locales y el contenido de la portada; los cambios en metadatos y activos locales invalidarán la construcción anterior.
build.jsonusa el esquema 2, declara los archivos realmente solicitados y registra el SHA256 completo de cada elemento; el verificador valida según los parámetros de renderizado reales, por lo que una sobrescritura explícita de tema con-tno debería generar un falso positivo. La pérdida, reemplazo o daño estructural de archivos bloqueará el proceso.article.body.htmlse mantiene puro, sin ninguna marca adicional; se verifica por separado del resumen de la lista de verificación de la vista previa/espacio de trabajo, no solo se confía en la etiqueta de huella en el HTML. Cuando la lista anterior no se puede verificar completamente, se solicita volver a renderizar.- La creación completa agrega
--snapshoten el último renderizado, guardando el borrador fuente, el HTML solicitado, las imágenes locales y las portadas enout/.builds/<huella>/. Las instantáneas con la misma huella no se pueden sobrescribir; la falta de imágenes locales no puede pretender ser una instantánea completa. Las imágenes deben ser rutas relativas dentro del directorio de salida; la instantánea no descarga imágenes remotas. md2wx.py --list-builds --out-dir outpara ver el historial;md2wx.py --rollback <huella> --out-dir outrestaurará el borrador fuente en su ruta original, los artefactos, las imágenes locales y las portadas, y limpiará las salidas que la versión anterior declaró pero esta versión no necesita. Antes de la operación, confirme la intención de reversión, ya que sobrescribirá el borrador fuente actual y los activos declarados; solo use instantáneas locales confiables.- La reversión primero verifica todos los archivos y resúmenes; los archivos dañados o con rutas peligrosas no se restauran a medias. La instantánea no restaura scripts de renderizado ni configuraciones de tema globales; después de estos cambios, aún se debe volver a renderizar y revisar. El borrador fuente de la instantánea stdin se restaura como
article.mden el directorio de salida. - Solo maquetación usa el comando anterior sin
--snapshot; la creación completa usa:
python3 scripts/md2wx.py article.md --sheet --snapshot -o out/article.html
Lista de verificación previa a la entrega (verifique punto por punto, no use "ejecuté el comando" en lugar de "revisé los archivos"):
- La creación completa ejecuta
lint.py article.md --out out --publish --stricty pasa — los artefactos son el borrador fuente actual y las portadas cumplen con las especificaciones del proyecto -
check.py article.md --html out/article.body.html --strictpasa — no hay elementos de alto riesgo - He visto
article.htmlopreview.png(salto de línea del título, ancho de tabla, truncamiento de bloques de código) - El título/título corto/resumen/autor en
sheet.htmlcoinciden con los que se rellenarán en el editor de WeChat - Los tres tamaños de portada existen y las dimensiones del encabezado son correctas (
--publishya lo verificó); abrir las imágenes para confirmar que se decodifican y que el texto no está truncado - Las imágenes locales en el cuerpo están enumeradas como "necesitan carga manual"
- La nota de entrega especifica claramente: qué elementos de riesgo medio y bajo se retuvieron, qué no se completó
Revise los archivos de salida reales uno por uno; los elementos faltantes como portadas o capturas de pantalla deben enumerarse; no se puede usar la ejecución de comandos como confirmación de archivos; si faltan elementos sin resolver para un borrador completo, no se etiqueta como entrega completa. El Markdown fuente se proporciona junto con su ruta real, sin requerir mover o sobrescribir el borrador original del usuario.
Autoverificación según el alcance de la tarea (los ítems de autoverificación siguen la solicitud, no verifique todo como si fuera una creación completa):
- Creación completa: toda la lista, punto por punto
- Solo maquetación: el borrador fuente, HTML, fragmento del cuerpo y espacio de trabajo deben estar disponibles; solo maquetación no requiere los tres tamaños de portada
- Solo portada: solo revisar el texto y las dimensiones de la portada; no requiere cuerpo ni verificación
- Solo verificación: solo entregar el informe; no requiere modificar el borrador
Las tareas parciales solo entregan los artefactos solicitados: solo maquetación entrega el borrador fuente, HTML, fragmento del cuerpo y espacio de trabajo; solo portada entrega las imágenes del tamaño solicitado y la conclusión de la revisión del texto; solo verificación entrega el informe de verificación. No se requiere completar portadas, tarjeta de material o esquema; no se puede considerar la verificación parcial como una verificación de publicación completa.
La siguiente lista solo se aplica a la creación completa; la ubicación del archivo del borrador fuente se basa en la ruta real:
out/
├── article.md Borrador final Markdown (archivo fuente, con frontmatter)
├── article.html Página de vista previa (para ver)
├── article.body.html Fragmento de cuerpo puro (alternativa)
├── sheet.html Espacio de trabajo de publicación (para publicar)
├── cover.png Portada de titular 900×383
├── cover-square.png Cuadrado 1080×1080
├── cover-thumb.png Miniatura 200×200
└── preview.png Captura de pantalla de maquetación
La creación completa también proporciona: título largo / título corto / resumen / conclusión de verificación (qué elementos de riesgo medio y bajo se retuvieron). Las tareas parciales solo enumeran los metadatos existentes, los artefactos solicitados, el alcance real de la verificación y los elementos no completados; no se escriben títulos, resúmenes o cuerpos adicionales para completar la lista.
Publicar en WeChat Official Account (pasos clave)
Abre out/sheet.html, una página para todas las operaciones de copia:
- ① Título → Haz clic en "Copiar" → Pégalo en el campo de título del editor
- ③ Resumen → Haz clic en "Copiar" → Pégalo en el campo de resumen del editor
- ④ Autor → Haz clic en "Copiar" → Pégalo en el campo de autor
- Cuerpo → Haz clic en "Copiar cuerpo" en la esquina superior derecha → Pégalo en el área de edición
- Imágenes del cuerpo → En la tarjeta "Imágenes del cuerpo" a la izquierda, procesa cada imagen una por una (ver más abajo)
- Portada → Sube
cover.png - Sigue la "Lista de verificación previa a la publicación" punto por punto
Por qué se pierden las imágenes
El pegado en el editor de WeChat solo recibe texto y estilos; no sube imágenes locales por ti. <img src="fig.png"> en el cuerpo es una ruta relativa local; después de pegarlo en el editor, la posición de la imagen está vacía — esto no es un error de maquetación, sino una limitación del entorno: las imágenes deben estar primero en el servidor de WeChat (mmbiz.qpic.cn) para mostrarse.
Sin permisos de API, este paso solo se puede hacer manualmente. El espacio de trabajo lo reduce a dos rutas:
| Método | Operación |
|---|---|
| Copiar imagen | Haz clic en "Copiar imagen" → En la posición correspondiente del editor, Cmd+V, WeChat la subirá automáticamente |
| Copiar con clic derecho | Si "Copiar imagen" falla, haz clic en "Abrir imagen original" → clic derecho "Copiar imagen" → pegar en el editor |
| Alternativa | clic derecho "Guardar imagen como..." → Botón "Imagen" en el editor y subir |
El orden sigue el orden de aparición en el cuerpo (imagen 1, imagen 2, ...); al pegar, busca la posición en el cuerpo como referencia.
No copies el archivo fuente
.md: md es texto plano; al pegarlo, solo obtendrás un montón de#y**, sin imágenes ni maquetación. Debes copiar el texto enriquecido del espacio de trabajo o el resultado renderizado dearticle.body.html.
Verifica si faltan imágenes: antes de publicar, desplázate por la vista previa en el teléfono de principio a fin para asegurarte de que cada imagen esté en su lugar.
Plan alternativo: abre article.body.html en el navegador → Cmd+A → Copiar → Pegar.
(No uses article.html, es la página de vista previa que incluirá el contenedor exterior).
Selección de tema
| Tema | Aplicación | Visual |
|---|---|---|
tech Azul tecnológico | Desglose técnico, análisis de productos, prácticas de ingeniería | Énfasis azul, H2 con barra vertical, bloques de código oscuros |
growth Naranja de crecimiento | Experiencia profesional, revisión de crecimiento, metodología | Énfasis naranja cálido, H2 con bloque de color, interlineado más suelto |
minimal Blanco y negro minimalista | Comentarios de opinión, pensamiento profundo | Blanco y negro, H2 subrayado |
elegant Azul marino corporativo | Artículos de marca, publicaciones formales, análisis de la industria | Fuente serif, énfasis azul marino, H1 centrado |
Principio: Cuanto más duro el contenido, más sobrio el tema. Si no estás seguro, usa tech.
Para agregar un nuevo tema, solo necesitas agregar un JSON en scripts/themes/; la descripción de los campos está en references/layout-spec.md §13.
Referencia rápida de comandos
| Comando | Función | Parámetros clave |
|---|---|---|
ingest.py <archivos...> | Material → Texto estructurado + frases citables candidatas | -o directorio de salida, --json |
md2wx.py <md> | Markdown → HTML para WeChat | --sheet espacio de trabajo, --snapshot instantánea, -t tema, -o salida, --no-body, --check |
md2wx.py --list-builds | Ver historial de construcciones | --out-dir |
md2wx.py --rollback <huella> | Restaurar artefactos de una versión | --out-dir |
cover.py | Portada | --md lee automáticamente el frontmatter, --style, --all; --title/--tag/--author/--theme para sobrescribir |
lint.py <md> | Compuerta de escritura + verificación de versión de artefactos | --cards, --outline, --out, --json, --strict |
check.py <md> | Verificación previa a la publicación | --html, --json, --strict; --title/--summary para sobrescribir el frontmatter |
preview.py <html> | Captura de pantalla para confirmar maquetación | -o, --width, --height |
Título, resumen, autor y tema se leen del frontmatter por defecto; los parámetros de línea de comandos solo se usan para sobrescribir temporalmente.
--strict se usa para CI/automatización: cuando hay alto riesgo, el código de salida es 1.
Errores comunes (debes saberlos)
| Error | Síntoma | Solución |
|---|---|---|
| Enlaces externos no se pueden hacer clic | Los https://... en el cuerpo no responden al hacer clic | Cambiar a descripción textual o poner en "Leer original" |
| Imagen en blanco | Las imágenes de dominios externos se muestran como marcadores de posición / bloques grises | Subir manualmente en el editor o usar la interfaz de material L3 |
| Líneas en blanco inestables | Usar líneas en blanco como espaciado entre párrafos, el rendimiento en el cliente es inconsistente | Usar margin para espaciado, md2wx.py ya lo maneja |
| Ajuste de código | El código largo se ajusta automáticamente y no se puede leer | Bloques individuales ≤30 líneas; si es demasiado largo, dividir en fragmentos |
| Tabla desbordada | Las tablas de más de 5 columnas se desplazan horizontalmente | Número de columnas ≤4; si es más, dividir en dos tablas |
| Título truncado | El feed de noticias solo muestra aproximadamente 20 caracteres | Debe haber una versión de título corto |
| Sin portada no se puede publicar | La portada del titular en el editor de WeChat es obligatoria; saltarse la portada equivale a no entregar el trabajo | En creación completa, ejecutar cover.py --all; antes de la entrega, verificar con lint --out --publish |
| Entregar una versión anterior | Se modificó el borrador pero no se volvió a renderizar; se publicó la versión anterior | Antes de la entrega, ejecutar lint --out out --strict; si la huella no coincide, lo detectará |
Documentos de referencia (cargar según sea necesario, no leer todos a la vez)
| Documento | Cuándo leerlo |
|---|---|
references/ingest.md | Paso 0.5: Ingesta de material, extracción de tarjetas de material, reglas de fidelidad, conflictos de contexto, lista de lagunas |
references/topic-expand.md | Paso 1: Expansión de tema, árbol de argumentos, disciplina contra la inyección de información |
references/writing-playbook.md | Pasos 2~3: Fórmulas de título, ganchos de apertura, plantillas de estructura, eliminación del olor a IA |
references/compliance.md | Paso 6: Lista de palabras de cumplimiento, tipos de infracciones, expresiones alternativas |
references/layout-spec.md | Cuando se necesita ajustar la maquetación, agregar temas o evaluar problemas visuales |
references/api.md | Cuando el usuario quiere hacer publicación automática L3 |
Dependencias
| Dependencia | Usada para | Cuando falta |
|---|---|---|
| Python 3.9+ | Todos los scripts | Obligatorio |
| Pillow | cover.py | Este paso de portada fallará; el resto es utilizable |
| pypdf | ingest.py analiza PDF | Ya está incluido en scripts/vendor, no es necesario instalarlo por separado |
| python-docx | ingest.py analiza DOCX | La ingesta de DOCX fallará |
| python-pptx | ingest.py analiza PPTX | La ingesta de PPTX fallará |
| Chrome/Chromium | preview.py | La captura de pantalla fallará; se debe usar inspección manual |
Cuando falta una dependencia, se entregan las partes completadas y se enumeran las faltantes; no se instalan por sí mismo ni se finge que el paso está completo.
Esta skill extrae la esencia de references/ y scripts/; consulta los documentos correspondientes cuando el usuario haga preguntas detalladas sobre el diseño de maquetación, el diseño de portadas, las reglas de cumplimiento, la interfaz API, el mecanismo de instantáneas o la solución de problemas. Para más referencias, consulta references/api.md, references/compliance.md y references/layout-spec.md.
