Commit graph

603 commits

Author SHA1 Message Date
Francisco Ignácio Fontoura Solla
48623b0d06 fix(campanha): preserve StateDeputy migration identity 2026-08-06 18:38:47 -03:00
Francisco Ignácio Fontoura Solla
033c270a89 feat(campanha): B163 — editar contatos das dobradinhas 2026-08-06 16:52:55 -03:00
Francisco Ignácio Fontoura Solla
adc29c0379 feat(campaign): C14 remodel activity for agenda paradigm (#389)
- Replace kind enum with free-form tags (text[] hasMany)
- Remove origin and deadline fields
- Status: remove rascunho/planejado, keep confirmado/realizado/cancelado
- startAt required for user-facing creates (optional for tour drafts)
- Add deputyPresent time gate (only coordinator/candidate can reschedule)
- UI: calendar-like form with tag input, no origin/deadline, no draft status
- E13 giros: tourStopRoleActivityKind → tourStopRoleActivityTags
- Migration: kind→tags with label mapping, status remap, enum recreation
- Activity texts table creation (was missing from migration history)

Closes #389
2026-08-06 05:20:05 -03:00
Francisco Solla
6b6712629a docs: mark B164/C89 plans ready after promote
Related #400 #401
2026-08-06 01:05:28 -03:00
Francisco Solla
49a236bfef
Merge pull request #402 from fsolla/plans/b164-c89-nav-atualizacoes
docs: plans B164 bottom nav + C89 updates feed
2026-08-06 04:04:24 +00:00
Francisco Solla
d301832b95 docs: intention plans for B164 mobile bottom nav and C89 updates feed
Related #400 #401
2026-08-06 01:02:13 -03:00
Francisco Solla
1703117c2c docs: mark C87/C88 plans ready after promote 2026-08-06 00:19:17 -03:00
Francisco Solla
912caf6914 docs: prettier-format C87/C88 intention plans 2026-08-06 00:16:40 -03:00
Francisco Solla
d1a59f82fd docs: intention plans for C87/C88 municipality update remodel
Unify updates (polarity + urgent) and follow with deliberation (assignee, thread, resolved). Related #396 #397.
2026-08-06 00:13:21 -03:00
Francisco Solla
7f03fbec91 docs: mark B163 plan ready after promote 2026-08-06 00:05:32 -03:00
Francisco Solla
343ccdcf93
Merge pull request #394 from fsolla/plans/c14-c16-agenda
docs: plans C14–C16 agenda (FullCalendar + sync)
2026-08-06 03:05:15 +00:00
Francisco Solla
5c6a24be18 docs: format C14–C16 intention plans 2026-08-06 00:03:30 -03:00
Francisco Solla
6cebcd12f3 docs: intention plans for C14–C16 agenda calendar track
Register the remodel → FullCalendar → filter import-link sync slice so the queue can claim after promote.
2026-08-06 00:02:52 -03:00
Francisco Solla
35ccb5e8d8 docs: plan B163 — edit dobradinha fields on list
Intention plan for inline edit of name/party/email/phone on
/campanha/dobradinhas (Contact on create, URL by id). Related #391.
2026-08-06 00:02:51 -03:00
Cursor Agent
5f97b6a21c
feat(ai): add buildCampaignLinks tool for Sollinha navigation (B162)
Introduce a closed-catalog URL builder that delegates to existing list/detail
href helpers, with role-based guards for leader lockdown and unrestricted-only
assessor routes. Register the tool in the AI chat and teach the system prompt
when to offer markdown links after resolving entity ids/slugs.

Closes #383
2026-08-06 00:22:11 +00:00
Francisco Solla
04ca98ac21 docs: mark B162 plan ready after promote 2026-08-05 19:03:53 -03:00
Francisco Solla
2ab45ea1ba docs: format B162 Sollinha URL tool plan 2026-08-05 19:00:43 -03:00
Francisco Solla
c77eda21ae docs: plan B162 — Sollinha URL navigation tool
Intention plan for a catalogued campaign-URL tool so Sollinha can link staff to detail/list views. Related #383.
2026-08-05 19:00:20 -03:00
Francisco Ignácio Fontoura Solla
387a36631a docs: add plan for B161 — infinite scroll lists (5 tables) 2026-08-05 17:50:28 -03:00
Francisco Solla
150bea2621 feat: make municipality columns follow content width 2026-08-05 11:35:20 -03:00
Francisco Solla
423c61d40b feat: distinguish municipality column defaults from explicit visibility 2026-08-05 10:49:58 -03:00
Francisco Solla
c07976e564
docs: revise B158 responsive columns plan (#380)
Base responsive behavior on the content panel using container queries, preserve territory filtering in the omnibox, and resolve column visibility and single-mount action contracts before implementation.
2026-08-05 12:51:43 +00:00
Francisco Solla
d896041a32
Merge pull request #379 from fsolla/agent/b159-generalizar-colunas-relacao-municipios
B159 — Generalizar colunas de relação nos municípios
2026-08-05 05:25:24 +00:00
Francisco Ignácio Fontoura Solla
9fa701633e feat(campaign): unify municipality relation editors 2026-08-05 02:01:40 -03:00
Francisco Solla
7700bff39d chore: update references to .cursor bootstrap paths
Point environment.json, hooks, skills, and docs at the relocated .cursor/ files.
2026-08-05 01:39:42 -03:00
Francisco Ignácio Fontoura Solla
84abfa1a7e docs(plan): clarify B159 UI alignment intent
The plan previously suggested the UI wouldn't change — only the code would be
refactored. Updated to make explicit that:

- Dobradinhas editor changes from RelationChipCell to the same
  CampaignCellEditOverlay + Command + chips as Assessores/Liderancas.
- Liderancas display gains an avatar stack matching Assessores/Dobradinhas.
- Inline create is always name-only across all three columns (leadership
  phone is added later on the detail page).
- Assessores is the reference — its UI doesn't change.

Related #374
2026-08-05 00:20:48 -03:00
Francisco Ignácio Fontoura Solla
896d957497 chore: migrate .cursor/ references to .agents/ folder
Replace all project-local .cursor/ path references with .agents/ across
rules, skills, environment config, hooks, and ignore files. Keep Cursor
editor paths (~/.cursor/, window.cursor, CURSOR_API_KEY) and vendored
Impeccable editor-hook paths unchanged.
2026-08-05 00:09:09 -03:00
Francisco Ignácio Fontoura Solla
781360bcf9 docs(plan): B159 — promover status para ready
Related #374
2026-08-04 06:39:59 -03:00
Francisco Ignácio Fontoura Solla
35907e02f0 docs(plan): B159 — generalizar colunas de relação na lista de municípios
Related #374
2026-08-04 06:39:15 -03:00
Francisco Solla
4b79f00125
Merge pull request #373 from fsolla/feature/ai-chat-sollinha
feat: AI chat 'Sollinha' — campaign data assistant (v1 read-only)
2026-08-04 06:26:48 -03:00
Francisco Ignácio Fontoura Solla
f9cd1df7b2 feat: AI chat 'Sollinha' — campaign data assistant (v1 read-only)
- Streaming AI endpoint at /campanha/api/ai-chat with DeepSeek V4 Flash
- 8 tools: calculate, getMunicipalityVotes, getTopDeputies, getDobradinhas,
  getMunicipalityOverview, getLeaderships, getOrganizations, searchEntities
- In-memory rate limiter (50 msgs / 15 min per user)
- Desktop: resizable right sidebar via react-resizable-panels
- Mobile: full-screen Drawer opened by FAB (2/3 size of quick-actions FAB)
- Markdown rendering with react-markdown + remark-gfm (tables, bold, lists)
- Session-bound context (clean slate each open)
- Auth via existing campaign-token cookie, tools respect user RBAC
- Architecture doc: docs/plans/ai-chat-sollinha.md
- E2E tests: campaignAiChat.e2e.spec.ts (mocked endpoint)
2026-08-04 06:17:31 -03:00
Francisco Ignácio Fontoura Solla
6b8864debb B156 — assessores por dobradinha (campo, coluna e seção; RelationOptionCell extraído) 2026-08-04 04:57:15 -03:00
Francisco Ignácio Fontoura Solla
8e434c14af docs(plan): impl B156 — assessores por dobradinha 2026-08-04 04:39:48 -03:00
Francisco Ignácio Fontoura Solla
086a9c8ee0 B157 — coluna de dobradinhas na lista de municípios (+ criação inline) 2026-08-04 02:53:43 -03:00
Francisco Ignácio Fontoura Solla
6b689ea12f docs(plan): B155+ — débito padrão de escrita de célula (form action → rota) 2026-08-04 02:29:30 -03:00
Francisco Ignácio Fontoura Solla
596085c977 feat(campanha): B155 — coluna de lideranças na lista de municípios
Espelho da coluna de Assessores: chips com nome do contato, popover/sheet
com Command + delta otimista e criação inline (Nome + Celular). Sem
migration — leitura reversa de leadership.municipalities no bundle e
escrita reusando as actions B34/wizard; rota POST
/campanha/municipios/leaderships via campaignJsonMutationRoute.
2026-08-04 01:49:55 -03:00
Francisco Ignácio Fontoura Solla
b74268714c C86+ — simplify: JSDoc do contrato home, testes de borda e nota no impl plan
Fixes do /simplify (3 revisores read-only): JSDoc de normalizePathname/isListPath
documentando o invariante (homes nunca são '/' nem terminam em slash), teste de
multi-slash e inputs degenerados, comentário de isCampaignHomePath encurtado.
Sem mudança de comportamento.
2026-08-04 01:17:53 -03:00
Francisco Ignácio Fontoura Solla
4a90fb19ec C86+ — pathname de lista das ações rápidas em fonte única (isListPath)
Extrai isListPath + normalizePathname exportados em campaignQuickActionPaths.ts
e migra os 9 wrappers (7 públicos + 2 privados) + a 3a cópia de normalize em
campaignPageChrome.ts. Refactor estrutural sem mudança de comportamento;
derivação de regex de detalhe numérico adiada (gatilho: 3o vertical [id]).
Inclui docs/plans/escala-dry-pos-acoes-rapidas-impl.md e o fix de format
pré-existente de docs/plans/liderancas-coluna-municipios.md (bloqueava format:check).
2026-08-04 01:14:35 -03:00
Francisco Solla
53a6c49a96
Merge pull request #365 from fsolla/plan/municipios-table-columns
docs: plano B158 — colunas responsivas municipios (sem scroll horizontal)
2026-08-04 00:54:13 -03:00
Francisco Ignácio Fontoura Solla
236853aeaf docs: plano B158 — colunas responsivas municipios (sem scroll horizontal)
Related #364
2026-08-04 00:52:23 -03:00
Francisco Ignácio Fontoura Solla
22038380cb docs: plano B158 — colunas responsivas municipios (sem scroll horizontal)
Related #364
2026-08-04 00:51:31 -03:00
Francisco Solla
720ba8bb4b
Merge pull request #363 from fsolla/plan/b157-dobradinhas-coluna-municipios
docs(plan): B157 — coluna de dobradinhas na lista de municípios (+ criação inline)
2026-08-04 00:47:55 -03:00
Francisco Ignácio Fontoura Solla
58670bbb16 docs(plan): B157 — coluna de dobradinhas na lista de municípios (+ criação inline) 2026-08-04 00:46:33 -03:00
Francisco Ignácio Fontoura Solla
c84dce4ed1 style: format liderancas-coluna-municipios.md 2026-08-04 00:22:19 -03:00
Francisco Ignácio Fontoura Solla
086d2412c8 docs(plan): B156 — Assessores por dobradinha
Related #360
2026-08-04 00:22:11 -03:00
Francisco Ignácio Fontoura Solla
04c2a5276b plan: B155 — coluna de lideranças na tabela de municípios
Related #359
2026-08-04 00:12:11 -03:00
Francisco Ignácio Fontoura Solla
5a52bb0efa fix(int): batch B19 usa municípios alocados — remove raça com cap de assessores
O teste 'assigns and removes multiple municipalities in one batch' escolhia o
segundo município com id not_equals cru; sob ~48 workers paralelos podia cair
num município que um spec paralelo (cap 10 do B27/B154) acabara de encher,
fazendo o batch estourar o teto. getMunicipality() aloca município
globalmente único e purga resíduo.
2026-08-03 23:13:01 -03:00
Francisco Ignácio Fontoura Solla
26b2205c3a B154 — criar assessor inline no popover da lista de municípios
Closes #352

- POST /campanha/municipios/advisors aceita body de criação (name) na union;
  createMunicipalityAdvisorRecord cria campaignUser advisor (stub
  <slug>@criado.invalid, senha aleatória) e atribui ao município na mesma
  transação (cap 10 com rollback, lock municipality-advisors:{id})
- MunicipalityAdvisorCreateProvider compartilha o assessor criado entre linhas;
  opção "+ Criar assessor" e chip otimista com id temporário no control
- advisorNameSchema unificado em primitives.ts; predicado de placeholder cobre
  @criado.invalid (reset de senha e célula de e-mail tratam stubs inline)
- Destrava o spec e2e de municipios (falhas pré-existentes em main): key
  warning do fragment trailing de MunicipalityFilters; settle-wait da animação
  do Drawer no teste B136
2026-08-03 22:46:06 -03:00
Francisco Ignácio Fontoura Solla
18c9f34bb1 docs(changelog): B86 — ações rápidas apoiadores (staff) 2026-08-03 21:16:18 -03:00
Francisco Ignácio Fontoura Solla
cf09cb548d format: Prettier 2026-08-03 21:06:52 -03:00