teqo/docs/plans
Francisco Ignácio Fontoura Solla 155f6492d9 B17: column picker on the seven CampaignTable list surfaces.
The picker shipped as a capability of CampaignTable rather than a municípios
feature, so every list that already uses the shared table got it: pass
`columnVisibility` and the table mounts the menu and filters the columns.

Persistence is a cookie, not localStorage, and the reason is a type rather
than a preference: CampaignTableColumn.cell is a function, so the column array
never crosses the server/client boundary and the client cannot rebuild the
table without it. The server filters, so a hidden column does not reach the RSC
payload either. `campaign_columns` carries a listId -> hidden ids map in a
compact form with no JSON and no percent-encoding, because document.cookie and
Next's cookies() disagree about decoding.

Closing the menu is the commit. The first cut debounced at 400 ms, which
batches a burst rather than a reading pace, so unchecking four columns while
reading their labels was four full-route refreshes — on /campanha/liderancas
each one re-pays the ~229 ms / 371-statement render already ledgered P1. The
timer survives at 3 s as a safety net for a menu left open; the price is that
the table behind the menu no longer updates per checkbox.

`defaultVisible` is gone: it was true on 10 columns and false on none, and
storing only the hidden set is what makes a newly shipped column visible to
everyone who never touched the picker. In exchange `label` is required, which
made `head` optional — 24 columns had a head that only restated the new label.
Each surface declares one mandatory column, re-filtered on the server so a
stale cookie cannot leave a row without its only linked cell.

The bug review caught is this codebase's recurring one: the RSC payload of
toggle A arrives inside the window of toggle B, and adopting the server there
undid B and then committed the set without it. Reconciliation now runs only
when no write is pending, pinned red against the previous code.

Municipality column ids are typed against MunicipalityListColumnId now, so the
id, the B22 description and the picker label are one key; the union member
`nivel` was renamed `level` to match the id and the ?level= filter. The
picker's own content comparison is sameIdSet, widened to string ids.
2026-07-28 08:25:16 -03:00
..
aproximar-mapa-pracas.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
autosave-status-lista-liderancas.md B32: editar Status de apoio na célula da lista de lideranças 2026-07-27 09:56:09 -03:00
autosave-tendencia-lista-municipios.md B24: auto-save e justificativa no popover de Tendência. 2026-07-26 14:05:36 -03:00
backtest-pos-eleicao.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
baseline-eleitoral-tse.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
build-resiliente-metadata-ausente.md Format the metadata resilience plan for Prettier. 2026-07-27 08:21:25 -03:00
cadastro-nominal-apoiadores.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
camada-territorios-identidade.md E12: camada TI com rollups MAUP e benchmark intra-TI. 2026-07-26 21:26:47 -03:00
cenario-junto-filtros-municipios.md Pass 2 W5: close-out de documentacao 2026-07-25 16:08:38 -03:00
cenarios-estimativa-votos.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
chips-liderancas-lista-dobradinhas.md B36: chips de lideranças na lista de dobradinhas 2026-07-26 21:15:44 -03:00
chips-municipios-lista-dobradinhas.md Docs: registra B20–B37, C13 (Atividade) e fill-ins de listas no roadmap e notebook. 2026-07-25 19:40:07 -03:00
chips-municipios-lista-liderancas.md B34: editable município chips on the leaderships list. 2026-07-27 22:35:19 -03:00
classificacao-territorial-relativa.md E10: classificacao territorial relativa (Reduto/Expansao/Manutencao/Marginal/Sem base) sobre o artefato TSE, com coluna+sort+filtro na lista, badge no card da conta da cadeira e na capa do dossie; seam generico cellTooltip na CampaignTable e promocao do CampaignHoverTooltip para shared 2026-07-25 21:59:20 -03:00
combobox-assessores-lista-municipios.md B27: combobox + chips + auto-save no popover de Assessores da lista de municípios 2026-07-26 03:31:51 -03:00
compartilhar-pagina.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
conta-da-cadeira.md E10+ registra os debitos do /simplify do E10 como fill-in de engenharia 2026-07-25 22:38:28 -03:00
convite-whatsapp-lista-liderancas.md B30: convite WhatsApp na lista de lideranças 2026-07-26 20:47:11 -03:00
decisao-arquitetura-dominios.md Pass 2 W5: close-out de documentacao 2026-07-25 16:08:38 -03:00
demandas-campanha.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
dobradinhas-lista-liderancas.md docs(B31): marca adiado do Context como resolvido pela 2ª rodada de /simplify 2026-07-26 19:53:57 -03:00
documentacao-conceitos-campanha.md E18: documentação de conceitos de inteligência de campanha 2026-07-25 01:37:37 -03:00
dossie-municipio.md E9 /simplify: consolidate duplicated helpers, dead passthrough, comment drift 2026-07-25 02:24:18 -03:00
edicao-rapida-lista-pracas.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
email-celular-lista-liderancas.md Fix /campanha/liderancas 500: RSC-safe phone display 2026-07-26 20:16:01 -03:00
escala-dry-pos-a4.md Deliver A7 Fase 2 cityCode TSE geography filters and absorb simplify debts. 2026-07-19 22:48:08 -03:00
escala-dry-pos-a8.md Deliver A8 IBGE voter profile on Eleitorado tab with post-simplify scale plan. 2026-07-19 23:05:27 -03:00
escala-dry-pos-a9.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
escala-dry-pos-b2.md Register the B8+ review debts from capture-review-debts. 2026-07-27 02:04:09 -03:00
escala-dry-pos-b3.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
escala-dry-pos-b8f2.md Register the B8+ review debts from capture-review-debts. 2026-07-27 02:04:09 -03:00
escala-dry-pos-b13.md simplify(B13): corrige classe agregada, bolhas em pane proprio e registra debitos 2026-07-26 05:12:37 -03:00
escala-dry-pos-b16.md Pass 2 W5: close-out de documentacao 2026-07-25 16:08:38 -03:00
escala-dry-pos-b32.md B17: column picker on the seven CampaignTable list surfaces. 2026-07-28 08:25:16 -03:00
escala-dry-pos-b33.md Register the B42 review debts on the roadmap. 2026-07-27 20:54:12 -03:00
escala-dry-pos-b34.md Record the B32+ closing triage on the two parent plans. 2026-07-28 08:11:07 -03:00
escala-dry-pos-c2.md Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00
escala-dry-pos-c3.md Add missing C7 modules and register C11 simplify follow-ups. 2026-07-19 03:52:22 -03:00
escala-dry-pos-c6.md Format F4b plan and TECH-DEBT after Prettier check. 2026-07-27 08:34:57 -03:00
escala-dry-pos-c7.md Implement C12 campaign foundation records 2026-07-24 19:27:15 -03:00
escala-dry-pos-c8.md Deliver C9 scale/DRY for supporters and register C10 follow-ups. 2026-07-19 03:23:25 -03:00
escala-dry-pos-c9.md Deliver C9 scale/DRY for supporters and register C10 follow-ups. 2026-07-19 03:23:25 -03:00
escala-dry-pos-e1.md Mark E4 spreadsheet import as cut in roadmap and project docs. 2026-07-19 22:06:25 -03:00
escala-dry-pos-e2.md Deliver A5 mobilization insight and absorb E7 F2 int follow-up. 2026-07-19 22:34:35 -03:00
escala-dry-pos-e10.md docs(B33): registra débito de engenharia do /simplify (B33+) 2026-07-26 16:27:37 -03:00
escala-dry-pos-e12.md chore: format after E12 (pre-push gate). 2026-07-26 21:27:23 -03:00
escala-dry-pos-field-desk.md Refactor campaign dashboard UX and add product discovery artifacts. 2026-07-19 21:56:01 -03:00
escala-dry-pos-onda0.md Add allowlisted global cache revalidation for Onda 0 F1. 2026-07-19 22:21:16 -03:00
escala-dry-pos-reset-senha-perfil.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
escala-dry-pos-visitados-recentemente.md Refactor campaign dashboard UX and add product discovery artifacts. 2026-07-19 21:56:01 -03:00
escala-percentual-mapa-pracas.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
escala-relativa-mapa.md simplify(B13): corrige classe agregada, bolhas em pane proprio e registra debitos 2026-07-26 05:12:37 -03:00
estimativa-votos-praca.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
eventos-agenda-mobilizacao.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
explicacao-colunas-header-listas.md B22: explicacao por coluna no header das listas — description em CampaignTableHead/MunicipalitySortableHead, campaignConceptOneLiner como fonte unica E18, municipalityColumnDescriptions cobrindo as 11 colunas de /campanha/municipios 2026-07-26 02:58:54 -03:00
exportar-csv-assinaturas.md Add admin CSV export for signatures and contacts. 2026-07-23 00:53:04 -03:00
feedback-pendente-compositor-giro.md Register the E13 review debts on the roadmap. 2026-07-27 21:12:05 -03:00
field-desk-ux-pos-critique.md Refactor campaign dashboard UX and add product discovery artifacts. 2026-07-19 21:56:01 -03:00
fila-de-alocacao.md E9: Fila de alocação (déficit como default do staff, frescor, coluna da vergonha) 2026-07-25 02:24:17 -03:00
filtros-auto-pracas.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
filtros-no-header-lista-municipios.md B16: Filtros no header da lista de municípios 2026-07-25 03:13:28 -03:00
filtros-salvos-municipios.md docs(B38): registra sidebar recolhido em tablet + fill-in de limitar o mapa a Bahia 2026-07-26 18:05:51 -03:00
gerenciar-assessores.md B19: registra gatilho de defer do N+1 no batch de território/ZE 2026-07-25 02:43:26 -03:00
hover-mapa-pracas.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
icone-prioridade-lista-municipios.md Register fill-in to replace the priority badge with an icon+tooltip on the municipalities list. 2026-07-24 18:25:36 -03:00
import-planilha-projecao.md Import projection-sheet strategy columns into municipalities (E4R fase 2) 2026-07-24 15:58:06 -03:00
insight-alavancagem-chapa.md Deliver A5 ticket leverage and flip insights with simplify cleanup. 2026-07-19 17:34:06 -03:00
insight-classificacao-territorial.md Deliver A5-2 territorial classification insight and absorb review debts. 2026-07-19 18:15:07 -03:00
insight-dobradinha-2026.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
insight-inteligencia-competitiva.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
insight-mobilizacao-brancos-nulos.md Deliver A5 mobilization insight and absorb E7 F2 int follow-up. 2026-07-19 22:34:35 -03:00
insight-taxa-conversao.md Deliver A5 slice 1 conversion-rate insight and absorb review debts. 2026-07-19 14:05:11 -03:00
inteligencia-campanha.md Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00
lembrar-de-mim-sessao-campanha.md Add remembered campaign sessions 2026-07-27 08:57:26 -03:00
limitar-mapa-a-bahia.md fix(mapa): limita pan/zoom do BahiaMap ao estado 2026-07-26 18:47:06 -03:00
link-territorio-lista-municipios.md B25: link do território na lista de municípios 2026-07-26 18:59:49 -03:00
login-biometrico-campanha.md Fix Prettier on B40/B41 plan docs. 2026-07-26 22:17:04 -03:00
mapa-bahia-geometrias.md Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00
mapa-mental-arquitetura.md Pass 2 W5: close-out de documentacao 2026-07-25 16:08:38 -03:00
mapa-pracas-filtrado.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
mapa-projecao-municipios.md Pass 2 W5: close-out de documentacao 2026-07-25 16:08:38 -03:00
motor-de-sugestoes.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
municipio-mais-proximo.md B8+: escala das malhas em unidades reais, contrato do map key e degradacao 2026-07-27 01:59:36 -03:00
municipios-prioritarios-inicio.md B20: municípios prioritários no Início com déficit E9 e CTA para a lista. 2026-07-25 20:01:51 -03:00
niveis-de-envolvimento.md Move the level control onto B42's shared cell-edit overlay. 2026-07-27 21:24:45 -03:00
notifications.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
onda-0-ripd-nota-mvp.md Deliver Onda 0 MVP: provisional Consent, privacy policy, and /privacidade. 2026-07-19 03:38:21 -03:00
onda-0.md Sync roadmap and intel plans with the 2026-07-23 field session; add E4R/A11/E16/E17 plans 2026-07-24 02:54:28 -03:00
ordenacao-colunas-lista-municipios.md Register B16–B18 municipality list UX plans and mark column reorder out of scope. 2026-07-24 19:14:01 -03:00
ordenacao-filtros-lista-dobradinhas.md docs(B33): registra débito de engenharia do /simplify (B33+) 2026-07-26 16:27:37 -03:00
ordenacao-filtros-lista-liderancas.md Record B29 post-simplify deferrals on the parent plan. 2026-07-28 01:44:47 -03:00
overview-lista-nucleos.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
pagina-territorios-identidade.md B21: cria página própria dos territórios 2026-07-25 21:50:24 -03:00
perfil-eleitorado-ibge.md Deliver A8 IBGE voter profile on Eleitorado tab with post-simplify scale plan. 2026-07-19 23:05:27 -03:00
pinagem-superficies-lista.md Pass 2 W5: close-out de documentacao 2026-07-25 16:08:38 -03:00
pixel-meta-abaixo-assinado.md Add Meta Pixel tracking to public petition pages. 2026-07-21 10:51:47 -03:00
planejador-de-giros.md Register the E13 review debts on the roadmap. 2026-07-27 21:12:05 -03:00
poligonos-pracas-zona.md docs: plan fill-in to drop zone list from campaign home map 2026-07-27 00:00:29 -03:00
polimento-mobile-lista-municipios.md Register the E14 closing triage on B32+. 2026-07-27 22:24:34 -03:00
pwa-campanha.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
ranking-votos-municipio.md E10+ registra os debitos do /simplify do E10 como fill-in de engenharia 2026-07-25 22:38:28 -03:00
registrar-sinal-lista-municipios.md B26: registrar sinal tipado a partir da célula Último sinal na lista de municípios. 2026-07-25 20:42:01 -03:00
registro-fundacao.md Implement C12 campaign foundation records 2026-07-24 19:27:15 -03:00
remodelagem-municipios.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
remodelagem-pracas.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
remover-coluna-tipo-municipios.md Docs: registra B20–B37, C13 (Atividade) e fill-ins de listas no roadmap e notebook. 2026-07-25 19:40:07 -03:00
remover-lista-zonas-mapa-inicio.md docs: plan fill-in to drop zone list from campaign home map 2026-07-27 00:00:29 -03:00
renomear-coluna-cobertura-meta.md Docs: registra B20–B37, C13 (Atividade) e fill-ins de listas no roadmap e notebook. 2026-07-25 19:40:07 -03:00
renomear-plano-acao-para-atividade.md C13 pos-simplify: fecha os residuos da varredura e estreita os guards 2026-07-25 21:29:32 -03:00
reordenar-colunas-lista-municipios.md Register B16–B18 municipality list UX plans and mark column reorder out of scope. 2026-07-24 19:14:01 -03:00
reset-senha-foto-perfil.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
roles-admin-payload.md Add users.roles so Payload /admin can separate editors from admins. 2026-07-27 01:54:29 -03:00
scroll-horizontal-lista-municipios.md Note B41 critique deferrals on the parent plan. 2026-07-27 10:38:06 -03:00
selecionados-no-topo-filtros-header.md Docs: registra B20–B37, C13 (Atividade) e fill-ins de listas no roadmap e notebook. 2026-07-25 19:40:07 -03:00
seletor-colunas-lista-municipios.md B17: column picker on the seven CampaignTable list surfaces. 2026-07-28 08:25:16 -03:00
sidebar-recolhido-tablet.md B38: sidebar recolhido em tablet no shell /campanha 2026-07-26 18:40:31 -03:00
sistema-listas-campanha.md Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00
split-election-insights.md Pass 2 W5: close-out de documentacao 2026-07-25 16:08:38 -03:00
tabela-ti-inicio.md Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00
territorio-multi-municipio-bairro.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
tooltip-celulas-listas.md docs: registra débitos do /simplify pós-B23 no plano (paridade a11y da nota de tendência, wrapper Popover+tooltip) 2026-07-26 03:24:55 -03:00
visitados-recentemente.md Restore full roadmap detail and align project documentation. 2026-07-19 16:19:36 -03:00
whatsapp-canal-fundacao.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
whatsapp-envio-liderancas.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
whatsapp-interno-campanha.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
whatsapp-sugestao-atualizacoes.md Sync all project docs with the deployed remodel and hardening; compile roadmap 2026-07-24 02:04:45 -03:00
zonas-por-municipio.md Tooling: prettier como autoridade de formatacao (organize-imports deterministico, scripts format/format:check, normalizacao mecanica de 312 arquivos; artefatos gerados e migrations excluidos via .prettierignore) 2026-07-25 17:22:20 -03:00