Fábrica de Conteúdo para WeChat Official Account (公众号)
Automatize o trabalho manual tedioso que vem depois de escrever: formatação, imagens, conformidade e entrega.
A redação em si fica por conta do modelo; esta skill cuida para que o artigo seja realmente publicável, fique bonito e não cause problemas.
Escopo de Capacidades
| Nível | Capacidade | Descrição | Dependências |
|---|---|---|---|
| L0 – Material | ingest.py Ingestão de material | PDF/docx/pptx/página web/texto longo → material estruturado citável | pypdf, python-docx, python-pptx |
| L1 – Colável | md2wx.py Markdown → HTML com estilos inline | 4 temas, saída pronta para colar no editor | Biblioteca padrão |
| L2 – Artigo Finalizado | cover.py Capa, lint.py Verificação de escrita, check.py Verificação de conformidade, preview.py Confirmação de formatação | 900×383 / 1080×1080 / 200×200; validação durante a escrita | Pillow, Chrome |
| L3 – Publicação Direta | API de rascunhos para publicação direta | Não implementado, contrato da interface em references/api.md | AppID + AppSecret + Conta verificada |
A criação completa segue por padrão L1 + L2; tarefas parciais seguem o escopo solicitado, sem forçar a geração de todos os artefatos. O L3 requer que a conta seja verificada e que o AppSecret esteja disponível – contas de assinatura não verificadas não possuem interface de desenvolvedor. Portanto, é necessário confirmar isso com o usuário primeiro, sem assumir que está disponível.
Início Rápido
A ordem é importante: primeiro a prévia, depois a verificação de conformidade e, por fim, o workbench. O workbench é um snapshot; gerá-lo antes de revisões resultará em uma versão antiga após as alterações.
Para criação completa, a verificação segue o padrão de três tamanhos de capa deste projeto. Formatação pronta para publicação também deve verificar as capas;
lint --out out --publishmarca como "deve corrigir" capas ausentes ou com dimensões incorretas. Tarefas de "apenas formatação", "apenas verificação de conformidade" ou "apenas prévia" não exigem a complementação das capas. Os três tamanhos são especificações de entrega deste projeto, não substituem os requisitos atuais do backend do WeChat ou a verificação real de imagens.
# 0. Se houver arquivos de material, ingira-os primeiro (PDF/docx/pptx)
python3 scripts/ingest.py material.pdf -o out/ingest
# 1. Criação completa gera capas conforme especificação do projeto: 900×383 para头条, 1080×1080 quadrada, 200×200 miniatura
python3 scripts/cover.py --md article.md --all -o out/cover
# 2. Gere a prévia primeiro (esta etapa não gera o workbench); o diretório de saída é criado automaticamente se não existir
python3 scripts/md2wx.py article.md -o out/article.html
# 3. Confirme a formatação (se o navegador não estiver disponível, explique claramente)
python3 scripts/preview.py out/article.html -o out/preview.png --height 4000
# 4. Dupla verificação de conformidade (execute primeiro; se encontrar problemas, corrija o artigo e repita)
python3 scripts/lint.py article.md --cards out/material-card.md --outline out/outline.md --strict
python3 scripts/check.py article.md --html out/article.body.html --strict
# 5. Após tudo aprovado, gere o workbench final e tire um snapshot (a impressão digital do build é escrita nos artefatos e no build.json)
python3 scripts/md2wx.py article.md --sheet --snapshot -o out/article.html
# 6. Verificação final antes da entrega: os artefatos devem corresponder exatamente ao artigo fonte, e as capas devem estar presentes (--publish)
python3 scripts/lint.py article.md --out out --publish --strict
python3 scripts/check.py article.md --html out/article.body.html --strict
Todos os comandos devem ser executados no diretório raiz da skill. O python3 deve ser 3.9+; cover.py requer Pillow. Execute os passos em ordem e verifique os códigos de saída; não ignore falhas para continuar com etapas subsequentes; para execução em lote, habilite set -e primeiro. Se não houver material card ou outline, omita os parâmetros correspondentes e registre o escopo não verificado; se os parâmetros forem explicitamente fornecidos, mas a análise falhar, não pode ser tratado como "não fornecido" e deve ser liberado. O snapshot completo requer que as imagens locais estejam no diretório de saída; apenas formatação não exige snapshot ou capas.
Antes de Escrever: Escreva o Frontmatter Primeiro
As metainformações como título, resumo, autor e tema são escritas uma vez, no início do arquivo Markdown, e compartilhadas pelos três scripts:
---
title: Só depois de estragar 150 relatórios semanais é que entendi: o chefe não quer o que você fez
title_short: Pare de transformar relatórios semanais em listas de tarefas
summary: O relatório semanal passa por três camadas de interpretação; a cada mão, informações são perdidas. Se o chefe não puder roubar uma frase do seu relatório, sua produção da semana é zero.
author: Viajante na Névoa
tag: Avanço na Carreira
theme: growth
---
# Título do Corpo
O texto começa aqui...
| Campo | Obrigatório | Descrição |
|---|---|---|
title | Sim | Título longo, ≤64 caracteres; é o que é preenchido no backend |
title_short | Sim | Título curto, ≤20 caracteres; usado apenas para verificar a exibição no feed de informações; não preenchido no backend |
summary | Sim | Resumo, ≤120 caracteres |
author | Não | Campo de autor no backend + crédito na capa; se não for especificado, o padrão é "Viajante na Névoa" |
tag | Recomendado | Etiqueta no canto superior esquerdo da capa, 2 a 4 caracteres |
theme | Recomendado | tech / growth / minimal / elegant |
cover_title | Não | Use se quiser escrever uma frase diferente na capa; se omitido, usa title |
Depois de escrito, a renderização, capa e verificação de conformidade não precisam mais receber parâmetros.
Regra de crédito: Padrão "Viajante na Névoa"; se o usuário especificar, use o especificado.
| Cenário | Ação |
|---|---|
| Usuário não mencionou crédito | Não escreva nada; use automaticamente o padrão "Viajante na Névoa"; o workbench indicará "do crédito padrão" |
| Usuário especificou crédito | Escreva no author do frontmatter – o workbench, capa e campo de autor do backend lerão dele |
| Apenas teste temporário de texto da capa | Use md2wx.py --author / cover.py --author para substituir, sem persistir no arquivo |
Prioridade: --author na linha de comando > author no frontmatter > padrão "Viajante na Névoa".
Não use apenas cover.py --author sem alterar o frontmatter – isso causará inconsistência entre o crédito na capa e o campo de autor no workbench.
Fluxo de Trabalho
Primeiro, selecione o ramo da tarefa, depois execute as etapas correspondentes. Apenas a "criação completa" requer seguir todo o pipeline sequencialmente; tarefas parciais não aplicam todas as perguntas da criação completa.
| Tarefa | Solicitação Típica | Apenas Confirmar | Rota de Execução |
|---|---|---|---|
| Criação Completa | Escrever um artigo; transformar material em artigo | Nicho, leitores, material, tema | Etapa 0 → 0.5 (com material) → 1~7 |
| Apenas Formatação | Artigo finalizado, só formatar; converter para HTML do WeChat | Arquivo fonte finalizado, tema ou frontmatter existente; preencher metainformações ausentes apenas quando for publicar | Etapa 4 → Etapa 6.2 (verificar avisos, sem reescrever) → Etapa 7 (entrega parcial) |
| Apenas Capa | Fazer apenas capa para WeChat Official Account | Texto da capa, tema/estilo, tamanhos necessários, etiqueta e crédito opcionais | Etapa 5 → Revisão manual do texto da capa → Etapa 7 (entrega parcial) |
| Apenas Verificação de Conformidade | Verificar apenas conformidade, formatação ou referências | Arquivos a verificar; use parâmetros correspondentes apenas se houver HTML, material card ou outline | Etapa 6, verificações relevantes → Etapa 7 (apenas entregar relatório) |
Se não conseguir determinar o ramo (ex.: "me ajude a lidar com isso", "veja se isso pode ser publicado"): primeiro, siga a Etapa 0 da criação completa, mas faça apenas a pergunta mais crucial, não dispare as quatro perguntas de uma vez. É melhor perguntar uma vez a mais do que adivinhar o ramo errado e forçar todos os sete passos.
Tarefas parciais preenchem apenas as informações necessárias para a tarefa atual; informações existentes são reutilizadas diretamente; não reescreva o corpo do artigo finalizado ou os títulos existentes, não reconfirme leitores, tópico ou outline, nem force a apresentação de cinco opções de título novamente. Somente quando o usuário solicitar explicitamente a revisão do artigo, entre nas etapas de criação correspondentes.
- Apenas formatação não chama
cover.py, a menos que o usuário também solicite capa. O tema existente tem prioridade; se não houver preferência, useteche explique, sem bloquear por isso. - Apenas capa não exige resumo, corpo, material card ou outline, nem falsifica um artigo para executar a verificação completa; conforme
references/compliance.md, apenas revise o texto real da capa e explique o escopo da revisão. - Apenas verificação de conformidade não modifica os arquivos verificados. Se apenas Markdown estiver disponível, não passe
--html; se apenas HTML estiver disponível e não houver Markdown fonte, faça apenas uma verificação manual de compatibilidade do HTML e explique o escopo, sem inventar um corpo falso. Se o material card estiver faltando, explique que referências e números não podem ser totalmente verificados. - Se Pillow ou o navegador estiverem ausentes, não instale por conta própria nem finja que a etapa foi concluída; entregue as partes concluídas e liste os itens faltantes. Uma tarefa parcial concluída não significa que o artigo inteiro está pronto para publicação.
Etapa 0 · Confirmar Entrada (apenas para criação completa)
Para criação completa, confirme quatro aspectos; se as respostas já existirem, reutilize-as; faça perguntas apenas se informações necessárias estiverem faltando, não invente:
- Nicho: Tecnologia/produto ou carreira/crescimento (determina o tema e o estilo de escrita)
- Leitores: Quem são, onde estão com dificuldades, o que podem fazer após a leitura
- Material: Existem casos reais, dados, código, capturas de tela?
- Preferência de tema: Por padrão, escolha com base no nicho (veja "Seleção de Tema")
Ao mesmo tempo, julgue qual é o ponto de partida desta vez, e siga caminhos diferentes:
| Ponto de Partida | Exemplo Típico | Caminho |
|---|---|---|
| Fornecer material | "Transforme este PDF / relatório / página da web em um artigo do WeChat" | Etapa 0.5 → Etapa 1 |
| Fornecer tópico | "Escreva um artigo sobre X" | Pule a Etapa 0.5, vá direto para a Etapa 1 |
| Ambos | "Com base neste relatório, escreva sobre Y" | Etapa 0.5 → Etapa 1 |
Etapa 0.5 · Ingerir Material (apenas se o usuário fornecer arquivos ou links)
Leia references/ingest.md e execute conforme ele. Não pule esta etapa e comece a escrever diretamente – ler o texto original diretamente pode levar a leitura superficial, perda de conclusões e erros nos números.
python3 scripts/ingest.py material.pdf atas_reuniao.docx -o out/ingest
Produz três camadas de arquivos (corpo limpo / esqueleto estrutural / frases citáveis candidatas). Em seguida, conforme ingest.md §2, extraia material cards:
| Prefixo | Tipo |
|---|---|
F | Fato (afirmação objetiva) |
D | Dado (número + unidade + contexto) |
O | Opinião (afirmação do autor original, não é fato) |
? | Duvidoso (contraditório / sem fonte / precisa verificar) |
O entregável desta etapa é a tabela de material cards + lista de lacunas; primeiro, confirme com o usuário e depois prossiga.
Três linhas vermelhas (ingest.md §3): não altere números, não altere contextos, não transforme suposições em fatos.
Se encontrar vários valores para o mesmo indicador, coloque-o no card ? e pergunte, nunca escolha um silenciosamente.
Etapa 1 · Expansão do Tópico e Criação do Outline
- Usuário forneceu material: A partir dos material cards, deduza quais ângulos podem ser abordados (
references/topic-expand.md§3) - Usuário forneceu apenas tópico: Siga
topic-expand.md§1–§3, expanda uma frase em uma árvore de argumentos
Em seguida, combine references/writing-playbook.md §1 (linha de base do nicho) e §4 (5 modelos de estrutura) para selecionar o esqueleto,
e produza um outline com proporção de palavras para o usuário confirmar.
Cada argumento no outline deve estar vinculado a um número de material card ([F1] [D2]); argumentos sem vínculo são removidos diretamente,
não invente para manter a estrutura completa (topic-expand.md §4).
Etapa 2 · Escrever Título e Resumo
Leia references/writing-playbook.md §2 e §6:
- Produza título longo (≤64 caracteres, para campo no backend) + título curto (≤20 caracteres, para exibição no feed)
- Uma vez, apresente 5 opções, anotando qual fórmula cada uma usou, e deixe o usuário escolher
- Resumo ≤120 caracteres, forneça 1 a 2 versões
Etapa 3 · Escrever o Corpo
Escreva em Markdown seguindo o outline, prestando atenção a:
- Início conforme o gancho da seção §3, as primeiras 3 linhas devem prender o leitor
- Cada parágrafo trata de um assunto; parágrafos individuais ≤5 linhas (cerca de 260 caracteres)
- Finalização conforme §5, use "conclusão com pergunta / prévia da série / resumo de valor", não escreva para induzir compartilhamento
- Após escrever, passe pela lista de 24 itens da seção §7 para verificar o "cheiro de IA", remova todas as palavras de transição que não afetam a compreensão
Etapa 4 · Renderização da Formatação
Use o theme do frontmatter ou o tema explicitamente especificado pelo usuário para renderizar; se não houver preferência, escolha com base no nicho; para formatação parcial, o padrão é tech:
python3 scripts/md2wx.py article.md -o out/article.html
O diretório pai da saída é criado automaticamente; produz dois arquivos:
out/article.html– Página de prévia (com contêiner de fundo branco, como página de leitura em dispositivo móvel) → para visualizarout/article.body.html– Fragmento de corpo puro → plano de colagem alternativo
Esta etapa não gera o workbench; o out/sheet.html final é gerado na Etapa 7, evitando salvar snapshots de arquivos prematuros antes da conclusão da capa e da versão final.
Após a renderização, use preview.py para capturar a tela; verifique você mesmo antes de entregar ao usuário (o título está com quebras de linha feias? a tabela está muito larga? o bloco de código foi cortado?). Se o navegador não estiver disponível, abra o HTML e verifique manualmente, explicando que não houve captura de tela; não peça para reescrever o artigo por conta disso.
Etapa 5 · Gerar Capa (Obrigatório para Publicação)
Sem capa, não é possível publicar no WeChat. Esta etapa não é opcional na "criação completa" e na "formatação para publicação".
python3 scripts/cover.py --md article.md --all -o out/cover
Gera os três tamanhos de uma vez: cover.png 900×383 (头条 2.35:1), cover-square.png 1080×1080 (quadrada),
cover-thumb.png 200×200 (miniatura). Se as dimensões estiverem erradas, a plataforma cortará a imagem; lint --publish fará a verificação.
Os parâmetros são lidos por padrão do frontmatter (título, etiqueta, autor, tema), geralmente não é necessário passá-los novamente:
--style:gradient(padrão, fundo escuro) /minimal(fundo branco, artigos de opinião) /band(faixa colorida, artigos de marca)--allgera os três tamanhos: 头条 900×383, quadrada 1080×1080, miniatura 200×200- O título da capa usa por padrão
title(o título longo tem mais gancho); se quiser trocar o texto, adicionecover_titleno frontmatter
Etapa 6 · Dupla Verificação de Conformidade (Dois Portões, Cada um Cuida de uma Parte)
A criação completa executa ambos os portões; formatação apenas e verificação apenas selecionam as verificações correspondentes conforme a tabela de entrada, sem forçar a criação de materiais ausentes ou alterar o manuscrito original. Quando faltam metainformações, material cards ou capturas de tela, registre as limitações; a entrega parcial não é considerada como verificação de publicação completa.
6.1 Portão de Escrita – Verifica "se os argumentos têm fundamento, de onde vêm os números"
python3 scripts/lint.py article.md --cards out/material-card.md --outline out/outline.md
Este é um portão rígido, não uma sugestão de escrita:
| Verificação | Regra | Consequência se Não Passar |
|---|---|---|
| Referência vazia | [F1] no corpo deve existir no material card | Relata "deve corrigir" |
| Card duvidoso | [?N] não pode aparecer no corpo | Relata "deve corrigir" – verifique ou remova |
| Número sem fonte | Cada "número + unidade" no corpo deve ser encontrado em um card F/D | Relata "deve corrigir" |
| Argumento sem suporte | Cada suporte no outline deve ter ≥1 [F]/[D] | Relata "deve corrigir" |
| Qualidade do argumento principal | Não pode ser uma frase (ex.: "cache é importante") | Relata "deve corrigir" |
| Card de opinião | Quando [O] é citado, avisa que não deve ser usado como argumento principal | "Deve confirmar" |
| Lista de lacunas | O outline deve ter lacunas P0/P1/P2 | "Aviso" |
Se o material card estiver faltando, a verificação é reduzida automaticamente: apenas avisa que "os números não podem ser verificados" e lista todas as unidades com números para revisão manual.
Verificação de versão dos artefatos: Ao adicionar --out <diretório de artefatos>, também compara a impressão digital do build nos entregáveis com a do artigo fonte atual.
python3 scripts/lint.py article.md --out out --publish --strict
--publish indica verificação dentro do escopo de pronto para publicação; deve ser usado com --out para especificar o diretório de artefatos; a falta do parâmetro de diretório resulta em erro. Ele verifica a existência dos arquivos e a largura/altura no cabeçalho PNG de acordo com as especificações de três tamanhos deste projeto; não decodifica completamente as imagens, nem verifica o texto da capa, upload ou requisitos do backend do WeChat.
| Situação | Julgamento |
|---|---|
| Impressão digital do artefato == impressão digital do artigo fonte atual | Aprovado |
| Artigo alterado, mas não re-renderizado | "Deve corrigir": a página de prévia/o workbench são versões antigas |
Resumo do artigo fonte registrado em build.json não corresponde | "Deve corrigir": o artigo fonte foi modificado após a geração |
article.body.html foi substituído ou editado manualmente | "Deve corrigir": verificação de desvio usando o resumo do corpo em build.json |
| Artefato não possui impressão digital | "Deve confirmar": gerado por script antigo ou modificado manualmente |
Capa faltando / dimensões incorretas (--publish) | "Deve corrigir": não atinge as especificações de capa prontas para publicação deste projeto |
Esta etapa é a única garantia mecânica para evitar "alterar o artigo, esquecer de reexecutar e publicar a versão antiga". Execute obrigatoriamente antes da entrega.
6.2 Verificação de Publicação – Verifica "se pode publicar"
python3 scripts/check.py article.md --html out/article.body.html --strict
O comprimento do título e do resumo são lidos automaticamente do frontmatter, não sendo necessário passá-los novamente.
Critérios rígidos de aprovação:
| Indicador | Requisito |
|---|---|
| "Deve corrigir" do lint | Deve ser 0 |
| Itens de alto risco | 0 itens de alto risco não resolvidos; falsos positivos confirmados manualmente devem ter evidências e registro de revisão |
| Metainformações | title, title_short, summary são obrigatórios e não vazios; apenas campos de linha única chave: valor são suportados |
| Número de caracteres do título | Título longo ≤64, título curto ≤20; a parte inicial do título real publicado ainda precisa ser verificada manualmente |
| Número de caracteres do resumo | ≤120 |
| Imagens de domínio externo | Faça upload ou substitua por imagens utilizáveis no WeChat antes da publicação e confirme no editor de prévia |
| Conteúdo profissional ou confidencial | Deve ser revisado manualmente/pela equipe jurídica; a remoção de palavras-chave, reescrita ou desidentificação não substitui a revisão e autorização |
Ambos os --strict podem ser usados em CI: código de saída 1 se houver "deve corrigir" ou alto risco. check.py trata metainformações ausentes/excessivamente longas, valores de campo multilinha não suportados, e HTML explicitamente especificado mas inexistente como alto risco; mesmo sem --strict, os problemas são relatados, mas o código de saída é 0.
A verificação de publicação escaneia title, title_short, summary, cover_title, author, tag e o corpo campo por campo; o código no corpo ainda é ignorado, mas acentos graves nas metainformações não podem contornar a verificação. O field no JSON finding indica a fonte; a line do corpo ainda é relativa ao corpo. Os valores de substituição de título/resumo na linha de comando são o objeto final da verificação.
Aprovação na verificação não significa permissão para publicar. Para itens de alto risco, siga references/compliance.md §0 para registrar "pendente de revisão / falso positivo confirmado / revisão concluída / publicação recusada"; o script não pode ler ou substituir registros de revisão manual; falso positivo confirmado não faz --strict passar automaticamente. Se problemas profissionais, de autorização ou confidenciais não estiverem resolvidos, pare e não entregue como artigo publicável. Itens de médio/baixo risco mantidos, itens confirmados manualmente e suas justificativas devem ser explicados juntos.
Se o material tiver direitos de uso ou origem incertos, primeiro obtenha autorização/fonte ou exclua; não altere a magnitude, nem transforme opiniões externas em experiências do autor. Após a ingestão do material, preserve separadamente permissões_e_limitações.md, registrando fonte, créditos, escopo de uso, limites aplicáveis e status de autorização.
Etapa 7 · Entrega
Para tarefas que exigem HTML/workbench, gere novamente o workbench final antes da entrega. Depois de confirmar que a versão final, metainformações, tema e capa solicitada estão concluídos, execute com o mesmo artigo fonte e tema/parâmetros de saída:
python3 scripts/md2wx.py article.md --sheet -o out/article.html
Isso atualiza simultaneamente a página de prévia, o fragmento do corpo e sheet.html; o workbench lê do mesmo diretório os arquivos finais cover.png, cover-square.png, cover-thumb.png. É um snapshot de arquivo estático; atualizar o navegador não regenera o workbench. Se depois disso o corpo, metainformações, tema ou imagens forem modificados, regenere os artefatos relacionados e reexamine as verificações e prévias correspondentes; não entregue snapshots antigos.
Impressão digital do build e reversão:
- A impressão digital inclui o código de renderização, o artigo fonte, o tema mesclado, as substituições reais de título/crédito/tema e opções de saída, imagens locais e conteúdo da capa; alterações em metainformações ou ativos locais invalidam builds antigos.
build.jsonusa schema 2, declara os arquivos realmente solicitados e registra SHA256 completo de cada um; o verificador valida com base nos parâmetros reais de renderização, portanto uma substituição explícita de tema com-tnão deve causar falsos positivos. Arquivos ausentes, conteúdo substituído ou estrutura danificada bloqueiam.article.body.htmlpermanece puro, sem marcações adicionais; ele e a prévia/workbench são verificados separadamente pelo resumo da lista, não confiando apenas na tag de impressão digital no HTML. Se a lista antiga não puder ser verificada completamente, sugira re-renderizar.- A criação completa adiciona
--snapshotna última renderização, salvando o artigo fonte, HTML solicitado, imagens locais e capa emout/.builds/<impressão_digital>/. Snapshots com a mesma impressão digital não podem ser sobrescritos; a falta de imagens locais não pode fingir ser um snapshot completo. As imagens devem ser caminhos relativos dentro do diretório de saída; o snapshot não obtém imagens remotas. md2wx.py --list-builds --out-dir outpara ver histórico;md2wx.py --rollback <impressão_digital> --out-dir outrestaura o artigo fonte ao caminho original, artefatos, imagens locais e capa, e limpa saídas que a declaração da versão anterior tinha, mas esta versão não precisa. Antes de operar, confirme a intenção de reversão, pois ela sobrescreverá o artigo fonte atual e os ativos declarados; use apenas snapshots locais confiáveis.- A reversão primeiro verifica todos os arquivos e resumos; arquivos danificados ou caminhos perigosos não são restaurados parcialmente. O snapshot não restaura scripts de renderização ou configurações globais de tema; após essas alterações, ainda é necessário re-renderizar e reexaminar. O artigo fonte do snapshot de stdin é restaurado para
article.mdno diretório de saída. - Apenas formatação usa o comando sem
--snapshot; criação completa usa:
python3 scripts/md2wx.py article.md --sheet --snapshot -o out/article.html
Lista de verificação pré-entrega (confirme item por item, não substitua "os comandos foram executados" por "os arquivos foram vistos"):
- Criação completa executou
lint.py article.md --out out --publish --strictcom sucesso – o artefato corresponde ao artigo fonte atual e as capas atendem às especificações do projeto -
check.py article.md --html out/article.body.html --strictexecutado com sucesso – sem itens de alto risco - Visualizou pessoalmente
article.htmloupreview.png(quebra de linha do título, largura da tabela, corte do bloco de código) - O título/título curto/resumo/autor em
sheet.htmlcorrespondem ao que será preenchido no backend - As capas dos três tamanhos existem e as dimensões do cabeçalho estão corretas (
--publishjá verificou); abra as imagens separadamente para confirmar que são decodificáveis e o texto não foi cortado - As imagens locais no corpo foram listadas como "necessário fazer upload manual"
- A descrição da entrega informa claramente: quais itens de médio/baixo risco foram mantidos, o que não foi concluído
Verifique os arquivos de saída reais item por item; itens faltantes de capa ou captura de tela devem ser listados; não substitua a confirmação de arquivos pela execução de comandos. Quando a conclusão total é necessária, itens faltantes não resolvidos não são marcados como entrega completa. O Markdown fonte é fornecido junto com o caminho real, sem exigir movimentação ou substituição do manuscrito original do usuário.
Auto-verificação por escopo da tarefa (a auto-verificação segue a solicitação, não aplique a verificação de criação completa a tudo):
- Criação completa: toda a lista, item por item
- Apenas formatação: artigo fonte, HTML, fragmento do corpo, workbench disponíveis são suficientes; apenas formatação não exige capas de três tamanhos
- Apenas capa: apenas revise o texto e as dimensões da capa; não exige corpo ou verificação de conformidade
- Apenas verificação de conformidade: apenas entregue o relatório; não exige revisão do artigo
Tarefas parciais entregam apenas os artefatos solicitados: apenas formatação entrega artigo fonte, HTML, fragmento do corpo e workbench; apenas capa entrega imagens nos tamanhos solicitados e conclusão da revisão de texto; apenas verificação de conformidade entrega o relatório de verificação. Não é necessário completar capas, material cards ou outlines; não trate a verificação parcial como verificação de publicação completa.
A lista a seguir aplica-se apenas à criação completa; a localização do arquivo fonte segue o caminho real:
out/
├── article.md Markdown finalizado (arquivo fonte, com frontmatter)
├── article.html Página de prévia (para visualização)
├── article.body.html Fragmento de corpo puro (plano alternativo)
├── sheet.html Workbench de publicação (para publicar)
├── cover.png Capa 头条 900×383
├── cover-square.png Quadrada 1080×1080
├── cover-thumb.png Miniatura 200×200
└── preview.png Captura de tela da formatação
A criação completa também fornece: título longo / título curto / resumo / conclusão da verificação de conformidade (quais itens de médio/baixo risco foram mantidos). Tarefas parciais listam apenas as metainformações existentes, os artefatos solicitados, o escopo real da verificação e os itens não concluídos; não escreva títulos, resumos ou corpo para completar a lista.
Publicar no WeChat Official Account (Passos Cruciais)
Abra out/sheet.html; uma página resolve todas as operações de copiar e colar:
- ① Título → Clique em "Copiar" → Cole no campo de título do backend
- ③ Resumo → Clique em "Copiar" → Cole no campo de resumo do backend
- ④ Autor → Clique em "Copiar" → Cole no campo de autor
- Corpo → Clique em "Copiar corpo" no canto superior direito → Cole na área de edição
- Imagens do corpo → No card "Imagens do corpo" à esquerda, processe uma a uma (veja abaixo)
- Capa → Faça upload de
cover.png - Siga a "Lista de verificação pré-publicação" item por item
Por que as imagens desaparecem
O editor do WeChat, ao colar, recebe apenas texto e estilos; ele não faz upload de imagens locais para você. O <img src="fig.png"> no corpo é um caminho relativo local; ao colar no editor, a posição da imagem fica vazia – isso não é um erro de formatação,
é uma limitação do ambiente host: a imagem primeiro precisa estar no servidor do WeChat (mmbiz.qpic.cn) para ser exibida.
Sem permissão de API, esta etapa só pode ser manual. O workbench a simplifica em dois caminhos:
| Método | Ação |
|---|---|
| Copiar imagem | Clique em "Copiar imagem" → Cmd+V na posição correspondente no editor; o WeChat fará o upload automaticamente |
| Copiar com clique direito | Se "Copiar imagem" falhar, clique em "Abrir imagem original" → clique direito "Copiar imagem" → cole no editor |
| Plano B | Clique direito "Salvar imagem como" → Botão "Imagem" no editor → Faça upload |
A ordem segue a ordem de aparecimento no corpo (1ª imagem, 2ª imagem...); ao colar, encontre a posição comparando com o corpo.
Não copie o
.mdfonte: md é texto puro; ao colar, só restarão#e**, e as imagens e formatação não serão preservadas. É necessário copiar o rich text do workbench, ou o resultado renderizado dearticle.body.html.
Verifique se há imagens faltando: antes de publicar, na visualização do celular, percorra do início ao fim para ver se cada imagem está no lugar.
Plano alternativo: abra article.body.html no navegador → Cmd+A → Copiar → Colar.
(Não use article.html, é a página de prévia e trará contêineres externos.)
Seleção de Tema
| Tema | Aplicação | Visual |
|---|---|---|
tech Azul tecnologia | Análise técnica, análise de produto, prática de engenharia | Destaque azul, H2 com barra vertical, bloco de código escuro |
growth Laranja crescimento | Experiência profissional, retrospectiva de crescimento, metodologia | Destaque laranja quente, bloco de cor H2, espaçamento entre linhas mais solto |
minimal Preto e branco minimalista | Comentários de opinião, reflexão profunda | Preto e branco, H2 sublinhado |
elegant Azul marinho empresarial | Artigos de marca, publicações formais, análise de setor | Fonte serifada, destaque azul marinho, H1 centralizado |
Princípio: quanto mais denso o conteúdo, mais simples o tema. Em caso de dúvida, use tech.
Para adicionar um novo tema, basta adicionar um JSON em scripts/themes/; a descrição dos campos está em references/layout-spec.md §13.
Referência Rápida de Comandos
| Comando | Função | Parâmetros Principais |
|---|---|---|
ingest.py <arquivo...> | Material → texto estruturado + frases citáveis candidatas | -o diretório de saída, --json |
md2wx.py <md> | Markdown → HTML do WeChat | --sheet gera workbench, --snapshot tira snapshot, -t tema, -o saída, --no-body, --check |
md2wx.py --list-builds | Ver histórico de builds | --out-dir |
md2wx.py --rollback <impressão> | Restaurar artefatos de uma versão | --out-dir |
cover.py | Capa | --md lê frontmatter automaticamente, --style, --all; --title/--tag/--author/--theme para substituir |
lint.py <md> | Portão de escrita + verificação de versão de artefatos | --cards, --outline, --out, --json, --strict |
check.py <md> | Verificação pré-publicação | --html, --json, --strict; --title/--summary para substituir frontmatter |
preview.py <html> | Captura de tela para confirmar formatação | -o, --width, --height |
Título, resumo, autor e tema são lidos por padrão do frontmatter; os parâmetros de linha de comando são usados apenas para substituição temporária.
--strict é usado em CI/automação: código de saída 1 se houver alto risco.
Armadilhas Comuns (É Preciso Saber)
| Armadilha | Sintoma | Tratamento |
|---|---|---|
| Link externo não clicável | https://... no corpo não reage ao clique | Transforme em descrição textual ou coloque em "Ler o original" |
| Imagem em branco | Imagem de domínio externo aparece como placeholder/bloco cinza | Faça upload manual no editor ou use a interface de material L3 |
| Linha em branco instável | Espaçamento entre parágrafos com linhas em branco, comportamento inconsistente entre clientes | Use margin para espaçamento; md2wx.py já trata isso |
| Quebra de linha em código | Código longo é automaticamente quebrado, ilegível | Bloco único ≤30 linhas; divida fragmentos muito longos |
| Tabela estourando | Tabelas com mais de 5 colunas causam rolagem horizontal | Número de colunas ≤4; se ultrapassar, divida em duas tabelas |
| Título cortado | O feed de informações mostra apenas cerca de 20 caracteres | Deve ter uma versão de título curto |
| Sem capa, não publica | A capa头条 no backend é obrigatória; pular a capa equivale a não entregar o artigo | Criação completa deve executar cover.py --all; antes da entrega, use lint --out --publish para verificar |
| Versão antiga entregue | Artigo alterado, mas não re-renderizado; a versão publicada é a anterior | Antes da entrega, execute lint --out out --strict; impressões digitais incompatíveis bloquearão |
Documentos de Referência (Carregue Conforme Necessidade, Não Leia Tudo de Uma Vez)
| Documento | Quando Ler |
|---|---|
references/ingest.md | Etapa 0.5: ingestão de material, extração de material cards, regras de fidelidade, conflitos de contexto, lista de lacunas |
references/topic-expand.md | Etapa 1: expansão de tópico, árvore de argumentos, disciplina anti-embromation |
references/writing-playbook.md | Etapas 2-3: fórmulas de título, gancho de abertura, modelos de estrutura, remoção de cheiro de IA |
references/compliance.md | Etapa 6: lista de palavras de conformidade, tipos de violação, expressões alternativas |
references/layout-spec.md | Quando precisar ajustar formatação, adicionar tema, ou julgar problemas visuais |
references/api.md | Quando o usuário quiser fazer publicação automática L3 |
Dependências
| Dependência | Usada em | Quando Ausente |
|---|---|---|
| Python 3.9+ | Todos os scripts | Obrigatório |
| Pillow | cover.py | A etapa de capa falhará; o resto funciona |
| pypdf | ingest.py analisar PDF | Já incluído em scripts/vendor, sem necessidade de instalação adicional |
| python-docx | ingest.py analisar docx | Já incluído em scripts/vendor, sem necessidade de instalação adicional |
| python-pptx | ingest.py analisar pptx | Já incluído em scripts/vendor, sem necessidade de instalação adicional |
| Chrome/Chromium | preview.py captura de tela | A captura de tela não estará disponível; verifique manualmente o HTML |
| beautifulsoup4 | ingest.py analisar HTML | Já incluído em scripts/vendor, sem necessidade de instalação adicional |
scripts/vendor/ contém dependências Python puras selecionadas, sem necessidade de instalação adicional. Apenas Pillow e o navegador podem exigir instalação manual.
Se o ambiente não tiver
pippara instalar dependências, a capa não estará disponível; explique ao usuário a situação real, sem se oferecer para adaptar.
Licença
MIT
