/aprovar-post
Publica um post já aprovado — artigo Astro em SITE_REPO_PATH e carrossel via Instagram/Facebook — com confirmação humana e idempotência por .publicado.json. Use quando o usuário disser “aprovar post X”, “publicar o post do tema Y”. Slash command — /aprovar-post
Como funciona
Seção intitulada “Como funciona”O que lê
Seção intitulada “O que lê”- Argumento
<slug>; se omitido, lista pastas demarketing/conteudo/e pergunta qual SITE_REPO_PATH/src/content/blog/<slug>.md(frontmatterdraft)- Pasta
marketing/conteudo/<tipo>-<slug>-<AAAA-MM-DD>/(PNGs eminstagram/+legenda.md) .env:META_PAGE_ACCESS_TOKEN,IG_USER_ID,FB_PAGE_ID,PUBLIC_BASE_URL,SITE_REPO_PATHmarketing/conteudo/<tipo>-<slug>-<AAAA-MM-DD>/.publicado.json, se existir
- Localizar o artigo em
SITE_REPO_PATH/src/content/blog/<slug>.mde a pasta do carrossel correspondente; se<slug>não vier, listar pastas emmarketing/conteudo/e perguntar qual. - Validar que as imagens PNG e
legenda.mdexistem na pasta do carrossel. - Verificar
.publicado.json: se existir com o mesmo hash das imagens atuais, parar e perguntar se é para republicar ou só atualizar — nunca publicar de novo em silêncio. - Mostrar ao usuário: título, número de slides, trecho da legenda, URL final do artigo — e pedir confirmação explícita (“sim”).
- Só depois do “sim”: mudar
draft: falseno frontmatter do artigo. - Copiar os PNGs para
SITE_REPO_PATH/public/img/blog/<slug>/. - Commit + push no repo do site; se falhar, reverter
draftparatruee parar. - Fazer GET ao URL do artigo até obter 200, no máximo 5 minutos; se não conseguir, perguntar se continua mesmo assim ou aborta.
- Rodar
node scripts/publicar-instagram.mjs <dir-com-pngs> <legenda.md>; só rodarpublicar-facebook.mjsse a publicação no Instagram tiver sucedido. - Gravar
.publicado.jsoncom o hash das imagens e os ids devolvidos, só depois de confirmar sucesso de cada chamada. - Mostrar a legenda pronta para colar manualmente no LinkedIn — a skill nunca publica lá via API.
- Resumir ao usuário: link do artigo, id do post no Instagram, id do post no Facebook, status pendente do LinkedIn.
O que grava
Seção intitulada “O que grava”draft: falseemSITE_REPO_PATH/src/content/blog/<slug>.md- PNGs em
SITE_REPO_PATH/public/img/blog/<slug>/ - Commit no repo do site (
SITE_REPO_PATH) marketing/conteudo/<tipo>-<slug>-<AAAA-MM-DD>/.publicado.json
Aprovação do usuário
Seção intitulada “Aprovação do usuário”Obrigatória antes do Passo 5 (mudar draft) — só resposta “sim” explícita avança; qualquer outra resposta interrompe sem tocar em nada.
Falha cedo
Seção intitulada “Falha cedo”.envsemMETA_PAGE_ACCESS_TOKEN,IG_USER_ID,FB_PAGE_ID,PUBLIC_BASE_URLouSITE_REPO_PATH: parar e dizer exatamente qual variável falta, sem tentar publicar parcialmente.scripts/publicar-instagram.mjsoupublicar-facebook.mjsausentes: parar e apontar o caminho esperado.- Push ao repositório falha: reverter
draftparatrue, não avançar para as redes sociais. - Deploy não confirma 200 dentro de 5 min: perguntar antes de publicar nas redes — nunca anunciar uma página que talvez ainda não exista.
Verificação final
Seção intitulada “Verificação final”O artefato é o post real: GET 200 no URL do artigo, id de post devolvido pela Graph API para Instagram e para Facebook, e .publicado.json gravado com esses ids — nunca “commit feito” ou “workflow verde” isoladamente.