teqo-backup/src/lib
Francisco Ignácio Fontoura Solla da4ca2c713 Deliver B37: editable município chips on the dobradinhas list.
The "Municípios" column of /campanha/dobradinhas reuses
MunicipalityPortfolioCell unchanged, writing the inverted side of the
relation (municipality.stateDeputies) through a single transactional
batch action (setStateDeputyMunicipalitiesBatch): per-município advisory
lock, all-or-nothing on a partial-scope batch instead of a silent partial
apply, no floor (a dobradinha can hold zero municípios). stateDeputiesArraySchema's
cap moved 20 → 435 to fit a whole território batch from the município side.

The post-implementation critique found two P1s, and both were fixed instead
of deferred. First: MunicipalityPortfolioCell and LeadershipStateDeputyRelationCell
had grown the same chip-editing machine twice — optimistic delta, undo, ARIA
1.2 combobox, floor/ceiling, pointer-fine/coarse split — with incompatible
contracts. This was the 3rd call site B34+ was waiting for, so RelationChipCell
is now the single engine and both cells shrank to thin domain wrappers (chip/
search building, FormData, copy — nothing interaction-specific left in either).
LeadershipStateDeputyRelationCell also gained an ownerName prop and its first
dedicated test suite, which it shipped without before this.

Second: an advisor could see, and attempt to remove, a município chip outside
the portfolio they administer, failing silently at the document level.
MunicipalityPortfolioCell now filters the visible chips by addableIds instead
of only gating what can be added, so an advisor sees and can only touch
municípios they administer.

No migration, collection, or Consent. Docs updated: plan as-built, roadmap,
AGENTS.md, project notebook.
2026-07-28 09:34:39 -03:00
..
electionAggregates B13: escala relativa no mapa dos Municipios (quantis/LQ/posicao) + artefato TSE v3 2026-07-26 04:22:56 -03:00
geometries B8+: escala das malhas em unidades reais, contrato do map key e degradacao 2026-07-27 01:59:36 -03:00
schemas Deliver B37: editable município chips on the dobradinhas list. 2026-07-28 09:34:39 -03:00
bahiaElectionAggregates.ts B13: escala relativa no mapa dos Municipios (quantis/LQ/posicao) + artefato TSE v3 2026-07-26 04:22:56 -03:00
bahiaGeometries.ts B8 F2: polígonos das ZE de Salvador e re-keying do coroplético por map key 2026-07-26 23:08:09 -03:00
bahiaGeometriesTypes.ts B8+: escala das malhas em unidades reais, contrato do map key e degradacao 2026-07-27 01:59:36 -03:00
bahiaMapStyle.ts B8+: escala das malhas em unidades reais, contrato do map key e degradacao 2026-07-27 01:59:36 -03:00
bahiaMunicipalityCodes.ts Add static Bahia municipality and territory geometries for the campaign map. 2026-07-18 22:07:41 -03:00
bahiaMunicipalityDemographics.ts Deliver A8 IBGE voter profile on Eleitorado tab with post-simplify scale plan. 2026-07-19 23:05:27 -03:00
bahiaMunicipalityGeometries.ts 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
bahiaMunicipalityZoneGeometries.ts B8+: escala das malhas em unidades reais, contrato do map key e degradacao 2026-07-27 01:59:36 -03:00
bahiaTerritories.ts 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
bahiaTerritoryGeometries.ts B8+: escala das malhas em unidades reais, contrato do map key e degradacao 2026-07-27 01:59:36 -03:00
bahiaTseCityCodes.ts Deliver A7 Fase 2 cityCode TSE geography filters and absorb simplify debts. 2026-07-19 22:48:08 -03:00
bahiaTseZones.ts Add opt-in TSE zone and territory suggestion chips for nuclei. 2026-07-18 20:04:04 -03:00
campaignAuthCopy.ts Add remembered campaign sessions 2026-07-27 08:57:26 -03:00
campaignColumnVisibility.ts B17 simplify: inherit header labels, split persist from refresh. 2026-07-28 09:17:46 -03:00
campaignConsentKeys.ts Pass 2 D3: consent do WhatsApp resolvido por chave estavel (fim do consent: 2) 2026-07-25 16:02:57 -03:00
campaignHoverTooltip.ts B34: editable município chips on the leaderships list. 2026-07-27 22:35:19 -03:00
campaignIntelligenceConcepts.ts E14: engagement levels N0-N4 and the first allocationDecision writer. 2026-07-27 21:19:33 -03:00
campaignInviteClient.ts B30: convite WhatsApp na lista de lideranças 2026-07-26 20:47:11 -03:00
campaignJsonRequest.ts B32+: share the campaign JSON route wrapper, fetch helper and cell auto-save. 2026-07-28 08:07:29 -03:00
campaignRoles.ts Pass 2 W2: correcoes de fronteira lib/utilities e client boundary 2026-07-25 14:38:41 -03:00
campaignSessionTtl.ts Add remembered campaign sessions 2026-07-27 08:57:26 -03:00
campoParties.ts 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
choroplethColorScale.ts simplify(B13): corrige classe agregada, bolhas em pane proprio e registra debitos 2026-07-26 05:12:37 -03:00
cities.ts feat: add petition form config and server-action submission flow 2026-02-22 23:08:00 -03:00
contactSearchQuery.ts 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
electionCandidateIdentity.ts Add TSE 2022 election results model and local seed import. 2026-07-18 18:25:19 -03:00
electionFormat.ts simplify(B13): corrige classe agregada, bolhas em pane proprio e registra debitos 2026-07-26 05:12:37 -03:00
electionPartySpectrum.ts 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
electionResults.ts 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
electionResultsBuild.ts 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
electionResultsCsv.ts Add TSE 2022 election results model and local seed import. 2026-07-18 18:25:19 -03:00
electionResultsParse.ts 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
electionResultsZip.ts Add TSE 2022 election results model and local seed import. 2026-07-18 18:25:19 -03:00
engagementLevel.ts Harden the level control now that it also renders as a Drawer. 2026-07-27 22:17:44 -03:00
facebookPixel.ts 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
formData.ts B36: chips de lideranças na lista de dobradinhas 2026-07-26 21:15:44 -03:00
leadershipMunicipalityMembership.ts B34: editable município chips on the leaderships list. 2026-07-27 22:35:19 -03:00
leadershipStateDeputyMembership.ts B31: coluna de dobradinhas na lista de lideranças 2026-07-26 19:50:15 -03:00
mapScaleClasses.ts simplify(B13): corrige classe agregada, bolhas em pane proprio e registra debitos 2026-07-26 05:12:37 -03:00
median.ts E12: camada TI com rollups MAUP e benchmark intra-TI. 2026-07-26 21:26:47 -03:00
municipalityAdvisorMembership.ts B27: combobox + chips + auto-save no popover de Assessores da lista de municípios 2026-07-26 03:31:51 -03:00
municipalityCatalog.ts Pass 2 W4b: zero exports mortos; knip exports/types/enumMembers em ERROR no CI 2026-07-25 15:51:52 -03:00
municipalityPortfolio.ts Adopt B42's cell-edit overlay in B34 and fix the optimistic baseline again. 2026-07-27 23:59:20 -03:00
municipalityProximity.ts B8+: escala das malhas em unidades reais, contrato do map key e degradacao 2026-07-27 01:59:36 -03:00
municipalityStateDeputyMembership.ts Deliver B37: editable município chips on the dobradinhas list. 2026-07-28 09:34:39 -03:00
municipalityVoteRank.ts simplify(B13): corrige classe agregada, bolhas em pane proprio e registra debitos 2026-07-26 05:12:37 -03:00
municipalityZoneNeighborhoods.ts B8 F2: polígonos das ZE de Salvador e re-keying do coroplético por map key 2026-07-26 23:08:09 -03:00
onda0ConsentTexts.ts Guardas programaticas: fronteira lib/ (no-restricted-imports), ban de consent id hardcoded, codebaseConventions.unit.spec (server-only, copy Praca/Nucleo, listas legadas do eslint, wrappers de formActions), ciclo do payload.config quebrado (documents/globals divididos em tags+reads), timeout global do int suite, personName schema-valido, consent drafts Onda 0 p/ Municipio 2026-07-25 18:02:02 -03:00
phone.ts B28: e-mail + celular na lista de lideranças 2026-07-26 15:30:39 -03:00
projectionSheetParse.ts Pass 2 W4e: tipos de fonte unica 2026-07-25 15:05:03 -03:00
sameIdSet.ts B17: column picker on the seven CampaignTable list surfaces. 2026-07-28 08:25:16 -03:00
slug.ts Pass 2 W2: correcoes de fronteira lib/utilities e client boundary 2026-07-25 14:38:41 -03:00
states.ts Replace state/city selects with type-to-filter comboboxes 2026-07-15 14:41:58 -03:00
territorialClassAnchors.ts B13: escala relativa no mapa dos Municipios (quantis/LQ/posicao) + artefato TSE v3 2026-07-26 04:22:56 -03:00
territorialClassSortWeight.ts E12: camada TI com rollups MAUP e benchmark intra-TI. 2026-07-26 21:26:47 -03:00
territoryAnchor.ts B25: link do território na lista de municípios 2026-07-26 18:59:49 -03:00
utils.ts 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
visitPlannerAnchors.ts E13: visit eligibility checklist and the tour composer. 2026-07-27 21:04:04 -03:00
voteEstimate.ts 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
voteTrend.ts Pass 2 W4b: zero exports mortos; knip exports/types/enumMembers em ERROR no CI 2026-07-25 15:51:52 -03:00
wordStartFilter.ts Adopt B42's cell-edit overlay in B34 and fix the optimistic baseline again. 2026-07-27 23:59:20 -03:00