teqo-backup/src/collections
Francisco Solla cd4942d9e2 feat(C242/C243): abre a busca por selfie a qualquer visitante (escopo B) + seção na homepage
O escopo A/C do gate (PR #1370) é superado por decisão do dono (2026-10-01, aval jurídico declarado): o índice vira anônimo (archivePhotoFace, foto + descritor 128-d, sem nome/vínculo), o enrollment por pessoa morre (faceSubject/faces:enroll removidos) e qualquer visitante encontra as próprias fotos aprovadas.

- faces:index persiste os descritores por foto (transação substitui as linhas + marker = modelo); desaprovar/remover/deletar foto apaga os descritores (hooks + FK cascade)
- POST /api/fotos/selfie casa o vetor da consulta contra o índice em memória (TTL 60 s) e devolve só a interseção com o read aprovado do C233, sem score/nome de terceiro; leave-index apaga os descritores que casarem
- Consentimentos seguem fail-closed: busca-selfie-fotos (consulta) e busca-selfie-indice (aviso público do índice), textos versionados em scripts/lib/faceConsentTexts.mjs e provisionados por pnpm seed:face-consents
- pnpm archive:publish aprova o acervo em lote (draft -> approved; removed nunca) com guardas e recibo
- C243: seção condicional SelfieSearchHomeSection (port do design hi-fi, cenas 390/1280) entre a Central e a newsletter; sem engine/captura na home e sem CTA morto quando fechada
- docs: planos C242/C243, AGENTS-public, runbook §C242, changelog

Provas: gate:fast 457 arquivos/5.055 testes; int full 109/1.075; e2e frontendFotosSelfie 9/9; knip verde.
2026-10-01 12:54:47 -03:00
..
Activity.ts feat(campaign): C165 — importa eventos do Google como atividades sem município (Closes #1010) 2026-09-15 11:54:21 -03:00
AllocationDecision.ts B134 — allow empty rationale on movimento allocation decisions 2026-08-02 23:08:52 +00:00
ArchivePhoto.ts feat(C242/C243): abre a busca por selfie a qualquer visitante (escopo B) + seção na homepage 2026-10-01 12:54:47 -03:00
ArchivePhotoFace.ts feat(C242/C243): abre a busca por selfie a qualquer visitante (escopo B) + seção na homepage 2026-10-01 12:54:47 -03:00
CalendarFeed.ts fix(C92): calendar feed creation stripped by admin-only system fields 2026-08-08 23:13:30 -03:00
CampaignDemand.ts feat(C143): demandas visíveis apenas para responsáveis explícitos + candidato/coordenador 2026-08-19 23:55:07 -03:00
CampaignInvite.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
CampaignUser.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 B57 — delta 7 dias do total estimado no Início 2026-08-01 06:33:39 +00:00
CampaignWebAuthnCredential.ts Deliver B40: biometric login for /campanha. 2026-07-28 10:59:23 -03:00
Consent.ts feat(C242/C243): abre a busca por selfie a qualquer visitante (escopo B) + seção na homepage 2026-10-01 12:54:47 -03:00
Contact.ts feat(S9): captura de novidades da campanha na home pública (form + CTA do hero) 2026-08-20 02:19:58 +00:00
ContentEvent.ts feat(S32): contadores anônimos de download dos cards na home staff (Closes #1273) 2026-09-23 18:12:42 -03:00
ContentMedia.ts feat(C211): Central de Conteúdos interna — envio em lote, link, catalogação e publicação 2026-09-23 02:25:15 -03:00
ContentPiece.ts fix(C223): aceita falas longas no acervo 2026-09-25 02:11:56 -03:00
ElectionCandidate.ts Add TSE 2022 election results model and local seed import. 2026-07-18 18:25:19 -03:00
ElectionCandidateVote.ts Add TSE 2022 election results model and local seed import. 2026-07-18 18:25:19 -03:00
ElectionTally.ts Add TSE 2022 election results model and local seed import. 2026-07-18 18:25:19 -03:00
GoogleCalendarSync.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
InternetSpeechMedia.ts 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
Jingle.ts feat(S21): jingles de Jorge Solla no site público — ouvir e baixar (Closes #1222) 2026-09-20 01:48:20 -03:00
Leadership.ts 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
Media.ts react-audit(família 5): Media.ts sem hooks de revalidação — getCachedDocumentById('media') (documentReads.ts:43) nunca invalidava em edição/deleção no admin; afterChange+afterDelete espelham Post/Petition 2026-08-25 13:40:32 -03:00
Municipality.ts feat(C99): toda conta campaignUser aponta para uma ficha Contact; lideranças ganham assessores responsáveis 2026-08-09 19:12:35 -03:00
MunicipalityUpdate.ts feat(campaign): C88 deliberação na atualização — responsável, fio e resolvido (Closes #397) 2026-08-23 18:58:26 -03:00
Notification.ts D2 — Push + sino in-app para /campanha 2026-07-31 01:51:41 +00:00
Organization.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00
Petition.ts merge(OPS75): convergência Forgejo→GitHub — GitHub como fonte única 2026-08-21 01:41:18 -03:00
Post.ts Add users.roles so Payload /admin can separate editors from admins. 2026-07-27 01:54:29 -03:00
PushSubscription.ts D2 — Push + sino in-app para /campanha 2026-07-31 01:51:41 +00:00
Recording.ts fix(C223): aceita falas longas no acervo 2026-09-25 02:11:56 -03:00
RecordingMedia.ts feat(C199): gravações enviadas no acervo de comunicação (Closes #1166) 2026-09-18 23:42:30 -03:00
RecordingSegment.ts fix(C223): aceita falas longas no acervo 2026-09-25 02:11:56 -03:00
Reel.ts feat(C195): ingestão do pacote do reel na biblioteca privada (Closes #1154) 2026-09-18 21:47:48 -03:00
ReelMedia.ts feat(C193): reel privado no CMS — modelo, upload privado e kill switch (Closes #1152) 2026-09-18 17:48:34 -03:00
ShareLink.ts fix(S29): achados da review — snapshot pós-rebase, manifest e2e e a11y do anúncio 2026-09-23 12:37:00 -03:00
Signature.ts Lock down CMS/PII collection access and leader routes 2026-07-23 22:25:18 -03:00
Speech.ts feat(C229): busca por sentido no acervo de falas 2026-09-26 11:59:21 -03:00
SpeechCut.ts feat(C217): cortes e links compartilhaveis na fonte "Falas na internet" (Closes #1293) 2026-09-24 20:17:54 -03:00
SpeechEmbedding.ts feat(C229): busca por sentido no acervo de falas 2026-09-26 11:59:21 -03:00
SpeechSegment.ts fix(C223): aceita falas longas no acervo 2026-09-25 02:11:56 -03:00
StateDeputy.ts feat(C129): nome de legenda da dobradinha — campo ballotName + display discreto sob o nome (Closes #696) 2026-08-12 12:52:35 -03:00
Subscription.ts feat(S9): captura de novidades da campanha na home pública (form + CTA do hero) 2026-08-20 02:19:58 +00:00
Supporter.ts feat(C139): schemas e actions de contato — criação staff e edição por célula 2026-08-13 14:12:53 -03:00
SupporterImportBatch.ts fix(campaign): D13 — align supporter_import_batch.actor_id schema drift (Closes #643) 2026-08-24 22:39:03 -03:00
Tag.ts Add users.roles so Payload /admin can separate editors from admins. 2026-07-27 01:54:29 -03:00
Users.ts Add users.roles so Payload /admin can separate editors from admins. 2026-07-27 01:54:29 -03:00
VotePledge.ts Engineering Pass 3: consolidate patterns and lock them with guards. 2026-07-29 06:11:29 -03:00