teqo-backup/docs/changelog
2026-09-14 02:37:10 -03:00
..
2026-08-13-ops44.md OPS44: changelog por entrega + guards de docs + merge por rebase 2026-08-13 17:55:22 +00:00
2026-08-15-img-resize.md feat(site): publica home da campanha Jorge Solla 1313 2026-08-16 00:49:24 -03:00
2026-08-16-campaign-home-responsive.md feat(site): hero da campanha responsivo aos boards do Penpot 2026-08-16 20:33:00 -03:00
2026-08-16-ops50.md OPS50: ajusta changelog ao formato prettier 2026-08-16 23:34:28 -03:00
2026-08-17-ops51.md 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
2026-08-17-ops53.md ops(OPS53): etapa de deploy no CI para o homeserver (teqo-1313) 2026-08-18 00:50:41 +00:00
2026-08-17-pub5.md feat(PUB5): slogan 'Mais saúde mais futuro' no hero e rodapé 2026-08-18 01:31:28 +00:00
2026-08-18-ops52-media-guard.md 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
2026-08-18-ops52-media.md feat(OPS52-media): recupera os objetos de media de produção do WordPress para o bucket (pnpm media:recover) 2026-08-18 08:20:45 -03:00
2026-08-18-ops52.md ops(OPS52): migra a media de produção do Vercel Blob para o Garage S3 2026-08-17 22:36:34 -03:00
2026-08-18-ops54.md ops(OPS54): allowlist onlyBuiltDependencies migra para pnpm-workspace.yaml — fim do warning do pnpm 10 sobre o campo pnpm ignorado 2026-08-18 09:06:37 -03:00
2026-08-18-ops56.md fix(ops OPS56): forgejo-pr-automerge — veredito de merge por re-read do PR (falso positivo 'já mergeado' com PR aberto) 2026-08-18 14:28:54 +00:00
2026-08-18-ops57.md fix(ops OPS57): simplify — veto de draft vale em conversão mid-run; CLI valida base main; docs sem mecanismo fantasma 2026-08-18 15:24:21 +00:00
2026-08-18-ops58.md ops(OPS58): seed de posts com dry-run e taxonomy atualizada — sync de prod com runbook 2026-08-18 12:15:05 -03:00
2026-08-18-ops59.md ops(OPS59): pre-push sem e2e — e2e roda uma vez, no CI (gate local fica com os outros testes) 2026-08-18 17:56:41 +00:00
2026-08-18-ops60.md chore(OPS60): guard SEED_MEDIA_CONFIRM para escrita no bucket via db:seed:posts 2026-08-18 20:11:54 +00:00
2026-08-18-ops61.md fix(OPS61): merge do safety net com FORGEJO_API_TOKEN — 409 PushRejected do hook pre-receive 2026-08-18 18:07:55 -03:00
2026-08-18-ops62.md fix(OPS62): services por nome na rede do job — Forgejo 9 não expande expressões em ports 2026-08-18 23:26:13 +00:00
2026-08-18-ops63.md ops(OPS63): docs-guards no pre-push — changelog append-only, agregado e marcadores de conflito no gate:ci 2026-08-18 21:35:24 +00:00
2026-08-18-ops64.md fix(OPS64): pin do waitForChecks contra rollup mentiroso + docs — OPS62 eliminou o secundário estruturalmente 2026-08-19 12:11:41 -03:00
2026-08-18-ops65.md ops(OPS65): CI do main em janela de 30 min (gate .dockerignore fail-open) + matar agent-pool 2026-08-18 21:08:12 -03:00
2026-08-18-s1.md fix(S1): revert revalidate=300 — trava o bust por tag no Next 15.4 prod 2026-08-18 05:07:26 +00:00
2026-08-18-s2.md feat(S2): seção de conteúdos da home de campanha inclui os vídeos do YouTube 2026-08-18 15:23:50 -03:00
2026-08-18-s3.md feat(S3): seção de conteúdos da home de campanha inclui os posts do Instagram 2026-08-18 20:29:50 -03:00
2026-08-18-s5.md feat(S5): banda visual própria para a seção 'Acompanhe de perto' na home 2026-08-18 13:35:53 -03:00
2026-08-18-s6-followup.md fix(S6-FOLLOWUP): test:e2e:affected rodava a suíte completa — --no-deps desliga o closure de deps dos projects em runs filtrados 2026-08-18 19:09:12 -03:00
2026-08-18-s6.md feat(S6): home de campanha sem carrossel no desktop — grade estática em ≥1024px, mobile preservado 2026-08-18 19:32:50 +00:00
2026-08-19-c141.md feat(C141): perfis de permissão por assessor — Visão × Edição configuráveis, enforcement fail-closed (Closes #105) 2026-08-20 14:25:01 -03:00
2026-08-19-c143.md feat(C143): demandas visíveis apenas para responsáveis explícitos + candidato/coordenador 2026-08-19 23:55:07 -03:00
2026-08-19-ops62-followup.md fix(OPS62-followup): âncora de relógio no fixture do municipalitiesWithoutUpdateTool — elimina o flake de ordenação por raiz 2026-08-19 13:07:30 -03:00
2026-08-19-ops66.md ops(OPS66): deploy — migrate antes do build do runner (deadlock de migrations em caminho estático) 2026-08-19 10:06:00 -03:00
2026-08-19-ops67.md ops(OPS67): retry com backoff nos fetchs do forgejo-api 2026-08-19 13:28:37 +00:00
2026-08-19-ops68.md docs(OPS68): reescreve docs canônicos da era GitHub/Vercel para Forgejo/homeserver 2026-08-19 13:33:05 +00:00
2026-08-19-ops69.md ops(OPS69): regenera importMap com o S3ClientUploadHandler (admin abria em branco em prod) 2026-08-19 12:45:22 -03:00
2026-08-19-ops71-fase2.md feat(OPS71): Fase 2 — remover arquivos do fluxo Forgejo (workflows/scripts/specs) pós-validação do GitHub Actions 2026-08-20 00:20:10 +00:00
2026-08-19-ops71.md feat(OPS71): CI/PR/deploy no GitHub Actions — tracker de Issues permanece no Forgejo (Closes #97) 2026-08-19 19:17:19 -03:00
2026-08-19-ops72.md fix(OPS72): referência do guard do importMap (OPS70/#87, não #77) 2026-08-20 02:12:39 +00:00
2026-08-19-s4.md style: prettier nos docs do S4 (changelog + plans) 2026-08-19 12:50:26 -03:00
2026-08-19-s7.md chore(S7): entrada no changelog agregado (OPS44) 2026-08-19 19:39:09 +00:00
2026-08-19-s8.md feat(S8): seção 'Nossa história' na home — vídeo da trajetória embutido do YouTube (Closes #91) 2026-08-20 02:19:58 +00:00
2026-08-19-s9.md feat(S9): captura de novidades da campanha na home pública (form + CTA do hero) 2026-08-20 02:19:58 +00:00
2026-08-19-s10.md merge(OPS75): convergência Forgejo→GitHub — GitHub como fonte única 2026-08-21 01:41:18 -03:00
2026-08-19-s11.md feat(S11): feed do Instagram configurado não aparece na home — painel de status da sincronização no admin 2026-08-20 00:54:58 -03:00
2026-08-20-ops71-flip.md fix(OPS71-FLIP): flip pós-merge silencioso no GitHub — PAT no arm do auto-merge, dispatch de recuperação, close da Issue, retry 410 2026-08-19 22:45:29 -03:00
2026-08-20-ops71-infra.md docs(OPS71-INFRA): runner do GitHub instalado no homeserver — runbook + changelog (Issue #113) 2026-08-20 00:58:40 +00:00
2026-08-20-ops73.md docs(OPS73-FOLLOWUP): plano de débitos pós-OPS73 — re-home S10 + origin homeserver + race seedUser 2026-08-20 02:12:08 -03:00
2026-08-21-c142.md docs(C142): changelog da entrega do respeito ao perfil somente_leitura 2026-08-21 23:01:35 -03:00
2026-08-23-c88.md feat(campaign): C88 deliberação na atualização — responsável, fio e resolvido (Closes #397) 2026-08-23 18:58:26 -03:00
2026-08-23-c140.md fix(campaign): C140 — manual dispatch in 18 forms prevents React 19 form reset on error 2026-08-23 17:54:19 -03:00
2026-08-23-c142-e2e-harden.md fix(e2e): C142 — add C106 shell-settle before write-chrome assertions to unblock deploy 2026-08-23 22:13:52 -03:00
2026-08-23-c145.md feat(campaign): editor de permissão do assessor em modal central (desktop) + bottom drawer (mobile) no lugar do popover (Closes #813) 2026-08-23 20:41:29 -03:00
2026-08-23-e1.md docs(E1): changelog da extração do useAsyncSearchOptions 2026-08-23 13:16:47 -03:00
2026-08-23-e2e-admin-login-lock.md fix(e2e): serializa o beforeEach UI login do admin com o advisory lock 727001 (Closes #805) 2026-08-23 19:10:21 -03:00
2026-08-23-fix-deploy-c142.md fix(campaign): desbloqueia deploy — gate 'writable' libera coordinator/candidate e FAB ganha data-slot do e2e (C142) 2026-08-23 16:41:40 -03:00
2026-08-23-ops46-s1.md fix(OPS46-S1): hook ESM tenta resolução bare do next/cache antes do remap (Closes #789) 2026-08-23 15:02:16 -03:00
2026-08-23-ops46.md ops(OPS46): e2e local coleta via hook ESM (next/cache + server-only) e allocator de município com registry anti-wrap (Closes #733) 2026-08-23 14:02:19 -03:00
2026-08-23-ops47.md docs(OPS47): alinha plano do agent-pool à política main-based pós-OPS71 2026-08-23 15:23:52 -03:00
2026-08-23-ops73-followup.md style(OPS73-FOLLOWUP): prettier no changelog da entrega 2026-08-23 15:54:49 -03:00
2026-08-23-ops76-docs.md docs(OPS76-DOCS): polish do banner histórico — wrap multi-linha e line refs corretos 2026-08-23 20:06:40 -03:00
2026-08-23-ops77.md docs(changelog): OPS77 — flip pós-merge GH_TOKEN→GITHUB_TOKEN fechado com evidência (Closes #783) 2026-08-24 16:41:03 -03:00
2026-08-23-ops78.md ops(OPS78): launch do worktree opencode roteia pelo Vercel AI Gateway com variantes low/high/max (Closes #784) 2026-08-23 16:08:12 -03:00
2026-08-23-ops79.md 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
2026-08-23-ops80.md 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
2026-08-23-ops82.md ops(OPS82): preset do launch opencode → DeepSeek V4 Flash 0731 (mais barato) + variantes low/high/max + remoção duplicata cheapest-inference (Closes #817) 2026-08-23 23:20:45 -03:00
2026-08-23-s12.md fix(S12): deep link #novidades aterrissa no formulário no mobile 2026-08-23 14:27:15 -03:00
2026-08-24-766.md fix(petition): Lead tracking não falha mais assinatura commitada — guarda interna try/catch + spec (Closes #766) 2026-08-24 17:52:45 -03:00
2026-08-24-b155-plus.md feat(campanha): B155+ — migrar quick-edits de célula de lideranças para rota JSON (célula → rota) 2026-08-24 18:14:56 -03:00
2026-08-24-b160.md style(changelog): prettier no registro B160 2026-08-24 18:00:20 -03:00
2026-08-24-b194.md refactor(tests): B194 — extract shared SSE mock helper and migrate legacy chat specs to v7 2026-08-24 22:22:08 -03:00
2026-08-24-b195-f1-wizard-s-gate.md test(e2e): B195-F1 — gate S: no spec do wizard Registrar pedido (cópia de stream duplica o form sob carga) 2026-08-24 18:37:33 -03:00
2026-08-24-c114-lock.md fix(campaign): C114-LOCK — hooks do sync do Google Calendar seguram row lock por I/O de rede (Closes #870) 2026-08-24 22:25:23 -03:00
2026-08-24-c115-f1.md fix(campaign): C115-F1 — snapshot de eventos do motor Google Calendar com compare-and-swap (Closes #694) 2026-08-24 23:34:56 -03:00
2026-08-24-c120.md style: prettier format dos docs da entrega C120 2026-08-24 19:03:29 -03:00
2026-08-24-c121.md fix(campaignInvite): C121 — unifica chave de lock da redenção com contact-ficha (Closes #885) 2026-08-24 22:51:15 -03:00
2026-08-24-c144.md feat(campaign): C144 — forms de escrita com options de município write-scoped (Closes #769) 2026-08-24 18:37:59 -03:00
2026-08-24-d13.md fix(campaign): D13 — align supporter_import_batch.actor_id schema drift (Closes #643) 2026-08-24 22:39:03 -03:00
2026-08-24-debt-flakes-c100.md fix(test): DEBT-FLAKES-C100 — silence review sample 10→30 + ensureLeasedConsent ON CONFLICT idempotent (Closes #553) 2026-08-24 17:37:14 -03:00
2026-08-24-e2e-admin-login-lock.md test(e2e): unificar logins do usuário de teste no helper adminHeaders com advisory lock (Closes #767) 2026-08-24 18:42:03 -03:00
2026-08-24-e2e-debt-s-gate.md chore(e2e): E2E-DEBT-S-GATE — extract waitForStreamSettled helper and migrate 21 sites across 5 specs (Closes #827) 2026-08-24 16:01:08 -03:00
2026-08-24-e2e-flake-c113.md test: scope C113 live feed to claimed municipality (E2E-FLAKE-C113) 2026-08-24 18:23:47 -03:00
2026-08-24-e2e-frontend-login-shadow.md chore(e2e): #811 fechada como satisfeita por #767 — shadow de adminHeaders já unificado 2026-08-24 22:03:29 -03:00
2026-08-24-o0-ops86.md fix(ci): curated result surfaces unmapped risk files before high-risk early-return 2026-08-24 16:52:52 -03:00
2026-08-24-ops46-s3.md test(OPS46-S3): torna steal do allocator determinístico com SELECT do índice alvo (Closes #790) 2026-08-24 22:22:42 -03:00
2026-08-24-ops83-recurr.md fix(OPS83-recurr): cast rotativa do verify #16 — serializar admin atrás do frontend (stub IG compartilhado) + notificação pula recipient sumido em vez de abortar transação 2026-08-24 15:11:39 -03:00
2026-08-24-ops83.md fix(e2e): OPS83 — estabilizar os e2e do verify sem reduzir cobertura; AgendaFeed roda em prod (Closes #824) 2026-08-24 07:27:49 -03:00
2026-08-24-ops84.md 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
2026-08-24-ops85.md feat(OPS85): matar o agregado commitado do changelog — registro por-arquivo + HISTORY congelado + leitura sob demanda (Closes #830) 2026-08-24 14:44:25 -03:00
2026-08-24-ops86.md ops(OPS86): blast radius dos testes — curated e2e em high-risk, fail-closed para risco sem mapping, unit/int full na seleção vazia (Closes #832) 2026-08-24 15:19:52 -03:00
2026-08-24-ops87.md test(e2e): OPS87 — migrar asserções de servidor para HTTP sem browser (Concepts + PermissionProfile + People) + medir −65% (Closes #833) 2026-08-24 16:57:08 -03:00
2026-08-24-ops88.md review(OPS88): simplify — build surface do reset, contrato high-risk, erros rotulados, docs canônicos 2026-08-24 16:12:44 -03:00
2026-08-24-ops89.md chore(OPS89): variantes Vercel AI Gateway para a config global do opencode (Closes #836) 2026-08-24 14:05:59 -03:00
2026-08-24-ops90.md docs(OPS90): codificar a pirâmide de testes unit→int→e2e-com-benefício nos donos certos (Closes #838) 2026-08-24 14:20:59 -03:00
2026-08-24-ops91.md 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
2026-08-24-ops92-consolidar-mcps.md chore(OPS92): consolidar MCPs — global só jina+playwright; penpot/postgres subagentes; gh CLI; re-homed (Closes #857) 2026-08-24 17:18:53 -03:00
2026-08-24-ops93.md docs(changelog): OPS93 flags de modelo no worktree CLI (Closes #859) 2026-08-24 17:08:39 -03:00
2026-08-24-ops94.md 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
2026-08-24-ops95.md fix(worktree): OPS95 — corrige mapa de modelos e remove --variant do launch do TUI (Closes #876) 2026-08-24 23:04:39 -03:00
2026-08-24-s2-followup-validate-youtube-itemid.md S2-FOLLOWUP (#775) — validate do itemId YouTube deixa de ser código morto 2026-08-24 23:46:57 -03:00
2026-08-24-s9-pos-consentimento.md feat: S9+ (#771) — integridade de consentimento e alinhamento das ações públicas 2026-08-25 00:13:47 -03:00
2026-08-24-s11-followup.md fix(social-feed): deadline próprio de 5s no hook do save de credenciais encurta a janela de row lock (Closes #762) 2026-08-24 18:03:37 -03:00
2026-08-24-s11-polish.md fix(social-feed): S11-POLISH rota sync 400 em não-configurado e dedup InstagramPersistDatabase (Closes #761) 2026-08-24 17:46:50 -03:00
2026-08-25-audit-pass6-m895.md docs(audit-p6-m895): plan-issue intention must record literal decision data (miss #895) 2026-08-25 11:29:03 -03:00
2026-08-25-audit-pass6-m909.md feat(audit-p6-m909): deterministic disarm guard for /testing-audit (miss #909) 2026-08-25 11:29:03 -03:00
2026-08-25-audit-pass6.md docs(audit-pass6): artefatos — seção Pass 6, ledger truth-up, plano de entrega 2026-08-25 11:29:03 -03:00
2026-08-25-c146.md fix(campanha): guarda CSRF mesma-origem proxy-aware atrás do túnel (#913) 2026-08-25 17:32:23 -03:00
2026-08-25-e2e-demand-decide.md fix(campanha): restaura submitter no FormData do card de demanda (#921) 2026-08-25 21:48:30 -03:00
2026-08-25-ops96-testing-audit-desfecho.md fix(ops96): changelog append-only — desfecho vira entrada própria 2026-08-25 08:24:58 -03:00
2026-08-25-ops96-testing-audit-run2.md docs(testing-audit): relatório da run 2 + entrada de changelog (movimentos, fix do metrics, recidiva #906) 2026-08-25 17:09:43 -03:00
2026-08-25-ops96-testing-audit.md fix(ops96): changelog append-only — desfecho vira entrada própria 2026-08-25 08:24:58 -03:00
2026-08-25-ops97.md refactor(OPS97): fixes do /simplify — fail-closed em PR inexistente, errata do plano, token neutro na skill 2026-08-25 02:43:31 -03:00
2026-08-25-ops98.md docs(ops98): menções vivas (opt-out restrito audit/*), impl plan e changelog 2026-08-25 08:52:07 -03:00
2026-08-25-react-audit-run.md docs(changelog): react-audit run 2026-08-25 — primeira varredura, 6 fixes, follow-ups #915/#916/#917 2026-08-25 13:40:32 -03:00
2026-08-26-admin-branco-importmap-s3.md fix(admin): restaura S3ClientUploadHandler no importMap — admin em branco em prod (4ª recorrência da classe OPS69) 2026-08-26 20:27:22 -03:00
2026-08-26-bug-fix-skill.md feat(worktree): subcomando fix + skill /bug-fix (diagnóstico → fix → verificação → prevenção → post-mortem) 2026-08-26 16:16:18 -03:00
2026-08-27-admin-branco-importmap-s3-followup.md fix(deploy): reverte package.json para desbloquear o deploy — cache deps do BuildKit 2026-08-27 09:04:47 -03:00
2026-08-27-deploy-sharp-override.md docs(pm): registra deploy verde (4d6533c0, run 33074305879) + admin verificado em prod read-only + changelog do override sharp 2026-08-27 16:15:14 -03:00
2026-08-27-OPS99.md chore: format changelog entry 2026-08-27 16:05:36 -03:00
2026-08-27-ops100.md ops100: worktree model flags --glm (opencode-go/glm-5.3-flash) e --free (openrouter/openrouter/free) 2026-08-27 19:29:42 -03:00
2026-09-11-instagram-midia-home.md docs(postmortem): capas do Instagram e clamp das legendas (PR #940) 2026-09-11 18:09:03 -03:00
2026-09-12-b201.md chore(ai): Sollinha no nome canônico deepseek-flash (B201) 2026-09-12 02:47:25 -03:00
2026-09-12-c148.md fix(agenda): modais usáveis no desktop — criação, sync e feed (C148) 2026-09-12 02:23:23 -03:00
2026-09-12-c149.md feat(campaign): C149 — botão Conectar com o Google (OAuth) substitui a configuração manual da service account (Closes #934) 2026-09-12 19:49:24 -03:00
2026-09-12-c150.md refactor(campaign): C150 — simplify (catch/sessão do picker, leitura única, webcal morto) + changelog e débito C156 2026-09-12 21:01:12 -03:00
2026-09-12-c151.md feat(C151): marca atividade como evento público 2026-09-12 20:28:59 -03:00
2026-09-12-c152.md feat(C152): piloto da fonte de vídeos e transcrição minutada da Câmara 2026-09-12 20:43:36 -03:00
2026-09-12-deploy-build-importmap.md fix(deploy): OPS99 — envs do next build fora do prefixo da cadeia (standalone) 2026-09-12 12:47:14 -03:00
2026-09-12-deploy-verify-b196-data-vencida.md docs(postmortem): registra CI verde do PR #943 (run 34673571340) 2026-09-12 02:17:13 -03:00
2026-09-12-ops101.md refactor(OPS101): fixes do /simplify — guard de pin robusto, docblock e triage de débitos 2026-09-12 02:17:37 -03:00
2026-09-12-ops102.md refactor(OPS102): fixes do /simplify — comentários vivos alinhados, pin do exit 0 com mais dentes, runbook/changelog precisos 2026-09-12 21:32:28 -03:00
2026-09-12-ops103.md feat(OPS103): staging no homeserver com verify único e aprovações separadas (Closes #968) 2026-09-12 22:48:22 -03:00
2026-09-12-s13-cards-personalizados.md feat(S13): cards personalizados da campanha no site público 2026-09-12 03:25:43 -03:00
2026-09-12-s14-cards-personalizados-ajustes.md feat(S14): cards personalizados — ajustes de fidelidade e experiência 2026-09-12 21:01:15 -03:00
2026-09-13-c153.md fix(C153): colisão de sourceKey, match de município e reclassificação limpa 2026-09-13 02:08:55 -03:00
2026-09-13-c154.md feat(C154): vertical de comunicação — papel communicator e acervo pesquisável 2026-09-13 13:46:58 -03:00
2026-09-13-c155.md docs(C155): resultado da prova viva em produção (997 discursos) no changelog, runbook e plano 2026-09-14 01:54:55 -03:00
2026-09-13-deploy-staging-migrator-corepack.md fix(deploy): assa o pnpm na imagem do migrator — destrava o deploy staging 2026-09-13 14:12:38 -03:00
2026-09-13-deploy-verify-escopo-google-calendar.md fix(int): escopo do espelho Google Calendar por id, não por título — destrava deploy verify 2026-09-13 12:24:10 -03:00
2026-09-14-ops105.md chore(OPS105): remove workaround de visão Qwen — visão nativa do deepseek-flash (Closes #985) 2026-09-14 02:37:10 -03:00