feat(S3): seção de conteúdos da home de campanha inclui os posts do Instagram #71

Merged
fsolla merged 4 commits from S3-secao-de-conteudos-na-home-de-campanha-instagram into main 2026-08-19 00:01:38 +00:00

4 commits

Author SHA1 Message Date
Francisco Solla
4522fe4b74 ci: retry — pool de redes Docker do runner esgotado (infra); redes órfãs podadas
Some checks failed
CI (PR) / checks (pull_request) Successful in 9m40s
PR Ready + auto-merge / ready-automerge (pull_request) Successful in 9m50s
Agent pool supervisor / tick (pull_request) Successful in 31s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 12s
CI / checks (push) Successful in 10m12s
CI / deploy homeserver (teqo-1313) (push) Failing after 19m57s
2026-08-18 20:51:39 -03:00
Francisco Solla
46038d5a6a fix(e2e S3): goto da home com URL cache-busting no describe da seção de conteúdos
Some checks failed
CI (PR) / checks (pull_request) Failing after 1s
PR Ready + auto-merge / ready-automerge (pull_request) Failing after 15m30s
O poll (request.get) convergia no HTML fresco, mas o page.goto servia a
cópia stale do cache heurístico do Chromium (ISR s-maxage sem max-age)
quando a regeneração pós-bust ainda não tinha completado — flake medido no
CI (YT snapshot da S2, 2 flaky) e no prod-mode local (IG snapshot 3/3
retries). cache:'no-cache' não existe nos tipos do Playwright 1.58 e reload
reduz mas não elimina a janela. URL única (?e2e=<ts>) erra todas as
entradas de cache (HTTP + router do Next) e a página sempre vem fresca do
servidor; prod-mode local 9/9 × 2.
2026-08-18 20:30:10 -03:00
Francisco Solla
dd61cb3985 style: prettier no changelog agregado (pós-rebase S6+S3) 2026-08-18 20:30:10 -03:00
Francisco Solla
a638a8acae feat(S3): seção de conteúdos da home de campanha inclui os posts do Instagram
Board "Acompanhe de perto" (S1+S2) ganha o feed automático do perfil oficial:
loader irmão src/utilities/socialFeed/instagramFeed.ts (Graph API /media com
children p/ carrossel + username, unstable_cache tag social-feed + revalidate
300, snapshot cru pré-exclusão persistido via SQL direto, refresh de token
automático com retry 1x — refresh endpoint só renova tokens de Instagram
Login, page tokens caem no fail-closed), global SocialFeedSettings estendida
(instagramEnabled/AccessToken/UserId/MaxItems + snapshot hidden; excludedItems
já cobria a plataforma desde a S2). Requisito nº 1 — picker de exclusão no
admin (primeiro componente custom do repo, campo ui + importmap): lista os
posts do snapshot com thumbnail e toggle "Não exibir" que escreve em
excludedItems. Card com coverAspect square (1:1 do rascunho), badge
Instagram, título = legenda com fallback para post sem legenda, clique no
permalink (noopener), link "Seguir no Instagram →" derivado do username.
Os feeds externos mudam para o subfolder socialFeed/ (pin da S2 previa).
Migration 20260818_192948_add_instagram_social_feed_fields (não destrutiva).
Stub IG no webServer (porta dev+2000, helper socialStub.ts) + 3 e2e novos no
describe serial + kill switch estendido + smoke do picker no admin.
Closes #20
2026-08-18 20:29:50 -03:00