teqo-backup/src/utilities/demand
Francisco Solla 2cc8f2c14d feat(C143): demandas visíveis apenas para responsáveis explícitos + candidato/coordenador
- campaignDemand.responsibles (hasMany → campaignUser, staff elegível) com
  hook beforeValidate que descarta ids não-staff (fail-closed)
- canRead/UpdateCampaignDemand por membership: assessor só vê demandas onde
  é responsável; unrestricted/admin sempre; leader nunca (fim do escopo
  municipal de demandas)
- criador entra automaticamente como responsável no hook de criação (form,
  wizard, rascunhos C90); migration com backfill created_by_id → responsável
- UI: picker multi-select na criação (nova + wizard) e card de gestão no
  detalhe com save full-replace + advisory lock; sugestões = assessores do
  município; rótulo 'Visível para: Responsáveis · Candidato · Coordenador'
- int tests reescritos para a regra nova + 5 casos novos; e2e novo de
  visibilidade (lista/URL/gestão); fixture e2e com createCampaignDemand
- impl plan + changelog; importMap regenerado com S3_* dummy (OPS69)
2026-08-19 23:55:07 -03:00
..
campaignDemandFormData.ts feat(C143): demandas visíveis apenas para responsáveis explícitos + candidato/coordenador 2026-08-19 23:55:07 -03:00
demandListUrl.ts B140 — Demandas omnibox: tipo e busca na lista 2026-08-02 23:03:24 +00:00
demandOmnibox.ts fix(campanha): B140 wire onCommitQuery + simplify import hygiene 2026-08-02 23:06:48 +00:00