teqo-backup/src/utilities
Francisco Solla 3e062749fa feat(C154): vertical de comunicação — papel communicator e acervo pesquisável
Papel communicator com nav própria e gate speechCatalog; acervo em
/campanha/comunicacao/acervo com busca normalizada (destaque no trecho),
filtros de ano/tema/alcance/fase/município/duração em URL canônica e
paginação por discurso via speech.searchText (GIN trgm + backfill).
Detalhe com player nativo no trecho, transcrição clicável, baixar/abrir
fonte e fallback sem VOD. Resolve o débito do C153 (Sollinha fora da
vertical) e corrige o parser de keywords oficiais no dono.

Closes #956
2026-09-13 13:46:58 -03:00
..
access feat(C153): catálogo de falas do Solla — schema, access, import idempotente e busca 2026-09-13 02:08:55 -03:00
advisor B142 — format + impl plan deferred debts note 2026-08-02 23:09:01 +00:00
ai chore(ai): Sollinha no nome canônico deepseek-flash (B201) 2026-09-12 02:47:25 -03:00
contacts feat(C139): página /campanha/contatos — lista desktop com células editáveis, criação e filtros 2026-08-13 14:29:11 -03:00
demand feat(C143): demandas visíveis apenas para responsáveis explícitos + candidato/coordenador 2026-08-19 23:55:07 -03:00
homeSearch feat(C112): múltiplos telefones por pessoa — Contact.phones array (ordem = prioridade) 2026-08-11 10:47:02 -03:00
leadership feat(C119): status de apoio 'Lembrança' em lideranças — enum, badge e exclusão de pendências 2026-08-11 14:52:49 -03:00
municipality feat(campaign): C88 deliberação na atualização — responsável, fio e resolvido (Closes #397) 2026-08-23 18:58:26 -03:00
notification 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
organization B139 — tipo na omnibox de organizações 2026-08-02 23:02:46 +00:00
people C130: ajustes da tabela desktop de pessoas (contato completo, base sob o nome, caret, tooltips, Dobra em, filtro/ordenação por partido) 2026-08-12 16:01:25 -03:00
person 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
socialFeed S2-FOLLOWUP (#775) — validate do itemId YouTube deixa de ser código morto 2026-08-24 23:46:57 -03:00
speech feat(C154): vertical de comunicação — papel communicator e acervo pesquisável 2026-09-13 13:46:58 -03:00
stateDeputy feat(campanha): B163 — editar contatos das dobradinhas 2026-08-06 16:52:55 -03:00
supporter feat(campaign): C144 — forms de escrita com options de município write-scoped (Closes #769) 2026-08-24 18:37:59 -03:00
territory feat(campaignTerritories): repintar a lista de Territórios no padrão da lista de Municípios (B175) 2026-08-08 23:58:54 -03:00
visit feat(campaign): C144 — forms de escrita com options de município write-scoped (Closes #769) 2026-08-24 18:37:59 -03:00
webauthn fix(e2e): WebAuthn on prod build, saved-filters navigation, Vercel scripts 2026-07-30 17:37:20 -03:00
activityAgendaOmnibox.ts fix(C94): draft mirror p/ picks cumulativos no omnibox + simplificações do /simplify 2026-08-09 04:36:02 -03:00
activityDetailPageData.ts C11: picker remoto de atividades na demanda + paginação de vínculos 2026-08-01 06:37:53 +00:00
activityDetailTabUi.ts C11: picker remoto de atividades na demanda + paginação de vínculos 2026-08-01 06:37:53 +00:00
activityFormData.ts feat(C151): marca atividade como evento público 2026-09-12 20:28:59 -03:00
activityLeadershipOptions.ts feat(C112): múltiplos telefones por pessoa — Contact.phones array (ordem = prioridade) 2026-08-11 10:47:02 -03:00
activityOmnibox.ts feat(campaign): C14 remodel activity for agenda paradigm (#389) 2026-08-06 05:20:05 -03:00
activityOverlayErrors.ts feat(C123): agenda — overlay modal central como única superfície de criação/edição de atividade (Closes #667) 2026-08-12 14:16:20 -03:00
activityPageData.ts feat(C123): agenda — overlay modal central como única superfície de criação/edição de atividade (Closes #667) 2026-08-12 14:16:20 -03:00
activityRelationOptions.ts C11: picker remoto de atividades na demanda + paginação de vínculos 2026-08-01 06:37:53 +00:00
activityResponsibleSearch.ts feat(C112): múltiplos telefones por pessoa — Contact.phones array (ordem = prioridade) 2026-08-11 10:47:02 -03:00
activityUi.ts feat(C123): agenda — overlay modal central como única superfície de criação/edição de atividade (Closes #667) 2026-08-12 14:16:20 -03:00
activityViewModels.ts feat(C151): marca atividade como evento público 2026-09-12 20:28:59 -03:00
advisorData.ts 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
calendarFeed.ts feat(C114): agenda da campanha espelhada no Google Calendar com notificação (push Teqo → Google) 2026-08-11 13:53:51 -03:00
campaignAccess.ts feat(C153): catálogo de falas do Solla — schema, access, import idempotente e busca 2026-09-13 02:08:55 -03:00
campaignActionContext.ts B32+: share the campaign JSON route wrapper, fetch helper and cell auto-save. 2026-07-28 08:07:29 -03:00
campaignAuditFields.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
campaignAuth.ts style: format campaignAuth.ts 2026-08-01 06:10:33 +00:00
campaignBiometricsPrompt.ts Deliver B40: biometric login for /campanha. 2026-07-28 10:59:23 -03:00
campaignColumnVisibilityCookie.ts feat: distinguish municipality column defaults from explicit visibility 2026-08-05 10:49:58 -03:00
campaignConsent.ts feat(S9): captura de novidades da campanha na home pública (form + CTA do hero) 2026-08-20 02:19:58 +00:00
campaignDashboardData.ts style: prettier campaign snapshot utilities 2026-08-01 06:34:25 +00:00
campaignDemandData.ts feat(C143): demandas visíveis apenas para responsáveis explícitos + candidato/coordenador 2026-08-19 23:55:07 -03:00
campaignEntityActions.ts B157 — coluna de dobradinhas na lista de municípios (+ criação inline) 2026-08-04 02:53:43 -03:00
campaignFormActionError.ts OPS14 — form-action guard sweeps ladder, not filename 2026-08-02 16:47:42 +00:00
campaignFormFields.ts E11 post-rebase simplify: clamp the composed rationale, extract firstFormActionMessage at its 3rd call site, keep metrics server-side. 2026-07-28 14:03:29 -03:00
campaignGeolocation.ts B14: municipio mais proximo (atalho geo no Inicio staff) 2026-07-26 17:33:33 -03:00
campaignGoals.ts E9 /simplify: consolidate duplicated helpers, dead passthrough, comment drift 2026-07-25 02:24:18 -03:00
campaignHomeTracking.ts merge(OPS75): convergência Forgejo→GitHub — GitHub como fonte única 2026-08-21 01:41:18 -03:00
campaignInvite.ts Pass 2 W2: correcoes de fronteira lib/utilities e client boundary 2026-07-25 14:38:41 -03:00
campaignInviteCreation.ts feat(C112): múltiplos telefones por pessoa — Contact.phones array (ordem = prioridade) 2026-08-11 10:47:02 -03:00
campaignInviteOrigin.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
campaignInvitePageData.ts feat(C112): múltiplos telefones por pessoa — Contact.phones array (ordem = prioridade) 2026-08-11 10:47:02 -03:00
campaignInviteRedemption.ts fix(campaignInvite): C121 — unifica chave de lock da redenção com contact-ficha (Closes #885) 2026-08-24 22:51:15 -03:00
campaignInviteRepository.ts fix(campaignInvite): C121 — unifica chave de lock da redenção com contact-ficha (Closes #885) 2026-08-24 22:51:15 -03:00
campaignJsonMutationRoute.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
campaignListUrl.ts feat(B176): filtrar municípios por Dobradinha/Liderança/Partido + coluna Dobradinhas ao assessor 2026-08-09 03:19:54 -03:00
campaignPageActor.ts feat(C154): vertical de comunicação — papel communicator e acervo pesquisável 2026-09-13 13:46:58 -03:00
campaignPasswordReset.ts Add campaign password reset, profile photo, and RS+ follow-up plan. 2026-07-19 05:26:56 -03:00
campaignPushClient.ts feat(push): opt-in automático e fix do prompt nativo no /campanha 2026-08-10 21:14:56 -03:00
campaignPwa.ts feat(push): opt-in automático e fix do prompt nativo no /campanha 2026-08-10 21:14:56 -03:00
campaignPwaClient.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
campaignRelationOptions.ts feat(campaign): C144 — forms de escrita com options de município write-scoped (Closes #769) 2026-08-24 18:37:59 -03:00
campaignSavedFilterStore.ts feat(C100): lista unificada de pessoas em /campanha/pessoas 2026-08-10 13:45:46 -03:00
campaignStubEmail.ts feat(C128): ciclo de vida das capacidades pelas células de /campanha/pessoas (Closes #695) 2026-08-12 15:29:56 -03:00
campaignUserProfile.ts feat(C153): catálogo de falas do Solla — schema, access, import idempotente e busca 2026-09-13 02:08:55 -03:00
campaignVoteSummarySnapshot.ts style: prettier campaign snapshot utilities 2026-08-01 06:34:25 +00:00
consentContentHash.ts Ship /campanha nuclei MVP with RBAC, invites, and vote estimates. 2026-07-18 15:01:56 -03:00
contactIdentity.ts fix(contact): C120 — serializa o append de telefone no reuso com lock de ficha (Closes #663) 2026-08-24 19:03:29 -03:00
contactPhoneLocks.ts fix(contact): C120 — serializa o append de telefone no reuso com lock de ficha (Closes #663) 2026-08-24 19:03:29 -03:00
dashboardPriorityMunicipalities.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
detailTabUi.ts C13: renomeia "Plano de Acao" para "Atividade" em toda a vertical /campanha 2026-07-25 20:50:38 -03:00
documentReads.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
documents.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
drizzleBulk.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
electionCache.ts Pass 2 W2: correcoes de fronteira lib/utilities e client boundary 2026-07-25 14:38:41 -03:00
electionCandidateOptions.ts Pass 2 W2: correcoes de fronteira lib/utilities e client boundary 2026-07-25 14:38:41 -03:00
electionResultsImport.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
entityNotFound.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
extractFirstImageFromLexical.ts feat: Add schema-dts to package.json and update SEO metadata 2026-05-01 02:13:39 -03:00
formatRelativeAge.ts Add recent visits panel to /campanha and register VR+ simplify follow-ups. 2026-07-19 04:06:14 -03:00
globalReads.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
globals.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
googleCalendarClient.ts feat(campaign): C150 — calendário principal escolhido pelo candidato/coordenador + inscrição de staff no Google (Closes #935) 2026-09-12 21:01:12 -03:00
googleCalendarOAuth.ts 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
googleCalendarSync.ts 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
googleCalendarSyncHooks.ts 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
hookFilledData.ts Add the tooling gate: knip, CI, zero-warning lint, as-never ban 2026-07-23 23:06:12 -03:00
leaderContactsPageData.ts feat(C112): múltiplos telefones por pessoa — Contact.phones array (ordem = prioridade) 2026-08-11 10:47:02 -03:00
leadershipConflict.ts feat(C128): ciclo de vida das capacidades pelas células de /campanha/pessoas (Closes #695) 2026-08-12 15:29:56 -03:00
loadNamesByIds.ts style(C89): formata (prettier) 2026-08-08 23:11:05 -03:00
mediaStorage.ts ops(OPS52): migra a media de produção do Vercel Blob para o Garage S3 2026-08-17 22:36:34 -03:00
onda0Provision.ts Deliver Onda 0 MVP: provisional Consent, privacy policy, and /privacidade. 2026-07-19 03:38:21 -03:00
organizationData.ts chore: format + e2e manifest mappings for B128 omnibox modules 2026-08-02 20:56:12 +00:00
payloadTransaction.ts fix(P5-P1): schedule campaign notification push after txn commit 2026-08-03 04:40:38 +00:00
postgresTransactionLocks.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
posts.ts feat(S7): cards 'Acompanhe de perto' sem raio, borda, sombra ou chip; capa de borda a borda (Closes #90) 2026-08-19 19:39:09 +00:00
recentVisits.ts Pass 2 W4b: zero exports mortos; knip exports/types/enumMembers em ERROR no CI 2026-07-25 15:51:52 -03:00
revalidateRequest.ts 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
sameOriginRequest.ts fix(campanha): guarda CSRF mesma-origem proxy-aware atrás do túnel (#913) 2026-08-25 17:32:23 -03:00
seo.ts B33+: close the /simplify rounds on the shared list filter hook 2026-07-27 09:39:15 -03:00
signatureExport.ts feat(C112): múltiplos telefones por pessoa — Contact.phones array (ordem = prioridade) 2026-08-11 10:47:02 -03:00
stateDeputyConflict.ts feat(C128): ciclo de vida das capacidades pelas células de /campanha/pessoas (Closes #695) 2026-08-12 15:29:56 -03:00
stateDeputyData.ts refactor(C129): simplify — CampaignNameSubline compartilhado (a11y sr-label), guard legenda==nome, sem plumb morto, spec mais forte 2026-08-12 12:52:35 -03:00
stateDeputyListFilters.ts feat(B176): filtrar municípios por Dobradinha/Liderança/Partido + coluna Dobradinhas ao assessor 2026-08-09 03:19:54 -03:00
stateDeputyListUrl.ts feat(B176): filtrar municípios por Dobradinha/Liderança/Partido + coluna Dobradinhas ao assessor 2026-08-09 03:19:54 -03:00
stateDeputyOmnibox.ts feat(B176): filtrar municípios por Dobradinha/Liderança/Partido + coluna Dobradinhas ao assessor 2026-08-09 03:19:54 -03:00
voteEstimateScenarioFields.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
votePledgeData.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
votePledgeViews.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00