teqo-backup/scripts
Francisco Solla dbe77f08cc
Some checks are pending
Deploy / preflight (push) Waiting to run
Deploy / verify (push) Blocked by required conditions
Deploy / deploy staging (teqo-staging) (push) Blocked by required conditions
Deploy / requeue when main advanced (push) Blocked by required conditions
Deploy / deploy production (teqo-1313) (push) Blocked by required conditions
feat(C226): frame estático nos vídeos da Central antes do play
Peça de vídeo publicada e com arquivo passa a mostrar um frame estático
leve no card público antes do play, sem nenhum request do arquivo antes
do gesto (`preload="none"` do S27 intacto).

O frame é um derivado privado em `contentMedia` (nome determinístico),
gerado por um dono só — `ensureContentPieceFrame` — chamado pelo job
C211 (que já tem o arquivo em disco: a extração sai de graça) e pela
rota `GET /conteudos/<slug>/frame` em miss, que cura o acervo anterior
sem backfill, fila, collection nova ou migration.

A porta reusa o gate de slug publicado e o proxy de mídia privada do
`/midia`: o kill switch fecha as duas de uma vez. Sem frame possível, o
slot mostra o estado neutro honesto com play e o marcador — nunca
imagem quebrada, nunca retry.

A projeção declara o frame por elegibilidade (vídeo com arquivo), não
pela existência do derivado, então a cura é invisível para o cache da
listagem e não há tag para bustar. O frame também aparece na página da
peça e no card da home (variante compacta de 124px, cena 05).

A passagem de design (tier primário) achou dois bugs que só o browser
mostra: o glyph de imagem quebrada numa requisição que falha, e — ao
esconder a imagem até decodificar — o frame sumindo para sempre no
caminho mais rápido (uma imagem que carrega antes da hidratação não
dispara `load` nem `error` de novo; o `ref` decide os dois desfechos).

Também: o guard de falha de e2e aceita `RegExp` e confere os paths
declarados antes do caso do favicon (todo 404 do browser traz a mesma
mensagem), o manifest de e2e mapeia os módulos novos, e o job C211
passa o arquivo que já tem em disco em vez de rebaixar o vídeo.

Design tier: central-conteudos-preview-frame-video
Closes #1352
2026-09-25 14:56:06 -03:00
..
consent-texts Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
lib feat(C226): frame estático nos vídeos da Central antes do play 2026-09-25 14:56:06 -03:00
reels feat(reels): navegação visível, trilho de comando e cena profile na skill de reels 2026-09-20 00:11:27 -03:00
agent-claim.mjs fix(OPS94): fila de claim não morre mais em issue ready sem frontmatter id (skip + aviso; #659 ganha id B195-F1) 2026-08-24 17:23:59 -03:00
agent-file-miss.mjs ops(OPS76): tracker de Issues migra do Forgejo para o GitHub — GitHub como host único 2026-08-21 08:19:06 -03:00
agent-pool.mjs fix(campaign): C140 — manual dispatch in 18 forms prevents React 19 form reset on error 2026-08-23 17:54:19 -03:00
agent-prioritize.mjs ops(OPS76): tracker de Issues migra do Forgejo para o GitHub — GitHub como host único 2026-08-21 08:19:06 -03:00
agent-promote-related-on-merge.mjs ops(OPS76): tracker de Issues migra do Forgejo para o GitHub — GitHub como host único 2026-08-21 08:19:06 -03:00
agent-ready.mjs ops(OPS76): tracker de Issues migra do Forgejo para o GitHub — GitHub como host único 2026-08-21 08:19:06 -03:00
agent-register.mjs ops(OPS76): tracker de Issues migra do Forgejo para o GitHub — GitHub como host único 2026-08-21 08:19:06 -03:00
agent-session.mjs fix(OPS122): launch do worktree honra o modelo na sessão e o --auto (Closes #1088) 2026-09-16 19:09:12 -03:00
agent-status.mjs ops(OPS91): sweep pós-cutover — textos vivos que apontavam o tracker ao Forgejo passam para o GitHub (Closes #841) 2026-08-24 15:08:14 -03:00
assert-local-database.mjs feat(C155): backfill 54ª–57ª com cobertura por legislatura, guard de escrita e verificação de VOD 2026-09-14 01:54:55 -03:00
auto-unblock-agent.mjs fix(OPS126): auto-unblock honra o proxy do homeserver e resolve o opencode fora do PATH 2026-09-17 02:07:18 -03:00
auto-unblock.mjs fix(OPS126): auto-unblock honra o proxy do homeserver e resolve o opencode fora do PATH 2026-09-17 02:07:18 -03:00
auto-unblock.sh fix(OPS126): auto-unblock honra o proxy do homeserver e resolve o opencode fora do PATH 2026-09-17 02:07:18 -03:00
backfill-recording-facets.mjs feat(C219): paridade de busca e filtros nas gravações do acervo (Closes #1295) 2026-09-24 04:00:06 -03:00
bootstrap-staging-test-account.mjs docs(OPS128): remove verificação pós-deploy em staging do fechamento do work-issue (Closes #1188) 2026-09-19 00:29:23 -03:00
build-bahia-demographics.mjs Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
build-bahia-geometries.mjs Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
build-bahia-tse-city-codes.mjs Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
build-changelog.mjs refactor(OPS85): seed + pós-condição do gerador na lib com pin unitário; rest[0] no guard 2026-08-24 14:44:25 -03:00
build-chart-from-data.mjs feat(C205): linha de três séries e marca maior no rodapé do gerador de gráficos (Closes #1212) 2026-09-19 13:35:01 -03:00
build-city-report.mjs feat(C188): relatórios e dossiês sem truncamento mecânico 2026-09-17 19:59:02 -03:00
build-dossie-solla-briefing.mjs feat(C214): briefing 100% recorte — 4 folhas do recorte + âncora item-level (Closes #1284) 2026-09-23 13:17:37 -03:00
build-dossie-solla-cidade.mjs feat(C209): dossiês e boletins Solla sóbrios e analíticos — O essencial, defesa e consulta rápida (Closes #1251) 2026-09-22 22:17:27 -03:00
build-dossie-solla-instituicao.mjs feat(C209): dossiês e boletins Solla sóbrios e analíticos — O essencial, defesa e consulta rápida (Closes #1251) 2026-09-22 22:17:27 -03:00
build-dossie-solla-tema.mjs feat(C209): dossiês e boletins Solla sóbrios e analíticos — O essencial, defesa e consulta rápida (Closes #1251) 2026-09-22 22:17:27 -03:00
build-election-aggregates.mjs B13+: concordância LQ, readout de escopo no mapa e DRY do build de agregados. 2026-07-29 16:26:43 -03:00
build-municipality-zone-geometries.mjs Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
build-radio-artes.mjs feat(C208): artes da Rádio Jorge Solla 1313 — logo, capa e website card (Closes #1243) 2026-09-21 12:53:29 -03:00
build-reel.mjs feat(reels): navegação visível, trilho de comando e cena profile na skill de reels 2026-09-20 00:11:27 -03:00
build-solla-ceuci-salvador-bairros.mjs feat(C161): relatório Solla × Ceuci com votos por bairro (seções e locais de votação) 2026-09-14 04:36:17 -03:00
build-solla-ceuci-salvador-report.mjs feat(C161): relatório Solla × Ceuci com votos por bairro (seções e locais de votação) 2026-09-14 04:36:17 -03:00
build-state-deputy-card-assets.mjs style(S30): prettier no script de assets 2026-09-23 10:06:17 -03:00
check-changelog-append-only.mjs refactor(OPS85): seed + pós-condição do gerador na lib com pin unitário; rest[0] no guard 2026-08-24 14:44:25 -03:00
check-docs-conflict-markers.mjs OPS44: changelog por entrega + guards de docs + merge por rebase 2026-08-13 17:55:22 +00:00
check-plans-only-pr-closes.mjs OPS12 — CI bloqueia Closes/Fixes em PR só docs/plans 2026-08-01 11:26:19 +00:00
check-push-chain.mjs ops(OOPS80): cutoff fase 1 — desativar acesso pela URL antiga pt.jorgesolla.com.br (congelar a fonte) 2026-08-23 20:14:59 -03:00
check-test-locations.mjs chore: migrate .cursor/ references to .agents/ folder 2026-08-05 00:09:09 -03:00
ci-scope.mjs simplify(OPS86): gate fail-fast no unmapped-risk, smoke fallback no manifesto, pins de sync do wrapper, docs AGENT-OPS (Related #846) 2026-08-24 15:19:52 -03:00
cityReportSnapshot.mjs feat(C163): pauta das lideranças, acervo por região/tema e fonte inline no relatório de cidade 2026-09-15 22:12:19 -03:00
configure-branch-protection.mjs feat(OPS71): CI/PR/deploy no GitHub Actions — tracker de Issues permanece no Forgejo (Closes #97) 2026-08-19 19:17:19 -03:00
copy-card-vision-assets.mjs feat(S15): card "Time de você" — quarto modelo auto-serviço no funil público (Closes #1161) 2026-09-18 22:17:52 -03:00
db-doctor.mjs feat(worktree): ambientes isolados por worktree — porta própria, bancos próprios, migrations no provision 2026-08-08 11:33:07 -03:00
db-pull.mjs ops(OPS51): migra o banco de produção do Neon para o Postgres do homeserver (teqo_1313) 2026-08-17 22:41:18 +00:00
db-reset.mjs chore(OPS125): conta de teste dos agentes no staging (Closes #1126) 2026-09-17 02:08:57 -03:00
db-start.mjs fix(OPS37): db:start idempotente — não recria o container Postgres compartilhado (no-op quando saudável; --force-recreate explícito) 2026-08-10 20:40:36 -03:00
deploy-homeserver.sh fix(media): repara rota do Garage no deploy 2026-09-25 12:11:21 -03:00
deploy-preflight.mjs feat(OPS104): inicia o deploy no merge, com staging automático e produção com review 2026-09-14 03:07:59 -03:00
deploy-requeue.mjs feat(OPS104): inicia o deploy no merge, com staging automático e produção com review 2026-09-14 03:07:59 -03:00
dev.mjs feat(S15): card "Time de você" — quarto modelo auto-serviço no funil público (Closes #1161) 2026-09-18 22:17:52 -03:00
e2e-affected.mjs simplify(OPS86): gate fail-fast no unmapped-risk, smoke fallback no manifesto, pins de sync do wrapper, docs AGENT-OPS (Related #846) 2026-08-24 15:19:52 -03:00
egress-proxy.mjs fix(ia-egress): estabiliza a rota ate o deepseek com proxy na tailnet + probe no deploy 2026-09-25 01:43:37 -03:00
ensure-repo-deps.mjs feat(ops): auto-promote stage→main e merge em stage sem exigir head (#68) 2026-07-30 21:12:52 -03:00
extract-city-report-snapshot.mjs feat(C187): dossiê Solla por instituição + boletim modelo (skill + builder) (Closes #1135) 2026-09-17 19:25:13 -03:00
extract-institution-snapshot.mjs feat(C187): dossiê Solla por instituição + boletim modelo (skill + builder) (Closes #1135) 2026-09-17 19:25:13 -03:00
extract-theme-snapshot.mjs feat(C190): dossiê Solla por tema/área + boletim modelo (skill + builder) 2026-09-18 17:02:56 -03:00
fill-image.mjs feat(site): publica home da campanha Jorge Solla 1313 2026-08-16 00:49:24 -03:00
gate-ci.mjs review(OPS88): mirror gate-ci alinha reset/needsDb ao modo curated (OPS86) 2026-08-24 16:12:44 -03:00
git-push.mjs feat(ops): auto-promote stage→main e merge em stage sem exigir head (#68) 2026-07-30 21:12:52 -03:00
github-pr-automerge.mjs feat(ops98): veto audit/* no safety-net de auto-merge (PR único do audit fica sem automerge) 2026-08-25 08:52:07 -03:00
github-pr.mjs ops(OPS91): sweep pós-cutover — textos vivos que apontavam o tracker ao Forgejo passam para o GitHub (Closes #841) 2026-08-24 15:08:14 -03:00
guard-dev-db.mjs Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
import-camara-speeches.mjs feat(C215): ingestão de falas da internet no acervo — origem web, espelho privado e catálogo (Closes #1291) 2026-09-24 03:26:10 -03:00
import-projecao.mjs fix(campanha): preserve StateDeputy migration identity 2026-08-06 18:38:47 -03:00
import-web-speeches.mjs fix(C225): fecha guard e runbook da ingestão web 2026-09-25 12:27:13 -03:00
institutionSnapshot.mjs feat(C187): dossiê Solla por instituição + boletim modelo (skill + builder) (Closes #1135) 2026-09-17 19:25:13 -03:00
issue-transition-on-merge.mjs feat(OPS104): inicia o deploy no merge, com staging automático e produção com review 2026-09-14 03:07:59 -03:00
issue.mjs fix(OPS94): fila de claim não morre mais em issue ready sem frontmatter id (skip + aviso; #659 ganha id B195-F1) 2026-08-24 17:23:59 -03:00
issues-tui.mjs feat(OPS116): painel aceita -ui-design.html com retrocompat -ui-draft.html (Closes #1059) 2026-09-16 01:14:21 -03:00
measure-e2e-family.mjs test(ops96-audit): reforçar assertion de api.int.spec.ts + docblock sem família e2e removida 2026-08-25 02:42:40 -03:00
migrate-signature-orphan.mjs ops(OPS79): última migração de dados em produção — reconciliação da vertical campanha (Neon→teqo_1313) + migração do residual público (Closes #797) 2026-08-23 22:45:43 -03:00
pilot-camara-speeches.mjs feat(C153): catálogo de falas do Solla — schema, access, import idempotente e busca 2026-09-13 02:08:55 -03:00
predev-importmap.mjs feat(OPS99): generate importMap at build time with dummy S3_* envs 2026-08-27 16:05:36 -03:00
reconcile-campaign-vertical.mjs impl(OPS84): verificar valores (não só entidades) da migração — 13 tabelas, 0 diffs (Closes #828) 2026-08-24 15:03:31 -03:00
recover-media.mjs ops(OPS52-media-guard): reconcile do media:recover exige MEDIA_RECOVER_CONFIRM=1 (guard de intenção explícita) 2026-08-18 12:45:32 -03:00
reels-ingest.mjs feat(C195): ingestão do pacote do reel na biblioteca privada (Closes #1154) 2026-09-18 21:47:48 -03:00
reels-tts-setup.mjs feat(C197): narração rascunho (TTS pt-BR) + transcrição sempre no pacote do reel (Closes #1156) 2026-09-19 00:33:37 -03:00
regenerate-municipality-catalog-snapshot.mjs Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
resize-images.mjs feat(site): publica home da campanha Jorge Solla 1313 2026-08-16 00:49:24 -03:00
run-e2e-affected.mjs simplify(OPS86): gate fail-fast no unmapped-risk, smoke fallback no manifesto, pins de sync do wrapper, docs AGENT-OPS (Related #846) 2026-08-24 15:19:52 -03:00
seed-consent.mjs Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
seed-loader.mjs Add TSE 2022 election results model and local seed import. 2026-07-18 18:25:19 -03:00
seed-minimal.mjs feat(C112): múltiplos telefones por pessoa — Contact.phones array (ordem = prioridade) 2026-08-11 10:47:02 -03:00
seed-posts.mjs chore(OPS60): guard SEED_MEDIA_CONFIRM para escrita no bucket via db:seed:posts 2026-08-18 20:11:54 +00:00
seed-tse-results.mjs Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
test-affected.mjs ci(pr): cascade phase1→phase2 with blast-radius skips 2026-07-31 20:57:18 -03:00
testing-audit-disarm.mjs feat(audit-p6-m909): deterministic disarm guard for /testing-audit (miss #909) 2026-08-25 11:29:03 -03:00
testing-audit-metrics.mjs fix(ops96-audit): parseVitestStdout tolera sufixo do pnpm em suite vermelha — retrato impresso mesmo com falha (contrato do metrics) 2026-08-25 17:09:43 -03:00
themeSnapshot.mjs feat(C190): dossiê Solla por tema/área + boletim modelo (skill + builder) 2026-09-18 17:02:56 -03:00
vitest-changed-or-full.mjs simplify(OPS86): gate fail-fast no unmapped-risk, smoke fallback no manifesto, pins de sync do wrapper, docs AGENT-OPS (Related #846) 2026-08-24 15:19:52 -03:00
worktree.mjs chore(OPS129): atualiza modelos das flags do worktree 2026-09-25 01:48:20 -03:00