Commit graph

610 commits

Author SHA1 Message Date
Francisco Solla
73f4a18d42 docs(plans): B167 — migrar o chat Sollinha entre painel e drawer no resize
Plano de intenção: migração bidirecional painel<->drawer com chat aberto,
conversa durando a sessão do site (nova aba reinicia). Related #416.
2026-08-08 10:36:27 -03:00
Francisco Solla
4e664c7364 style(plans): prettier-format B166 plan 2026-08-08 10:07:52 -03:00
Francisco Solla
b31e33b709 docs(plans): B166 — largura padrão do chat Sollinha com teto no desktop
Plano de intenção para abertura do painel do chat: min(25%, 360px),
resize livre sem teto e persistência do último tamanho. Related #414.
2026-08-08 10:06:54 -03:00
Francisco Solla
89c241183e docs(plans): B165 — território mais perto do nome na lista de municípios
Plano de intenção para o vão nome↔território na célula name de
/campanha/municipios. Related #412.
2026-08-07 14:48:07 -03:00
Francisco Solla
c5001b5005
Merge pull request #410 from fsolla/C87-atualizacao-unificada-texto-polaridade-urgente
feat(campaign): C87 — atualização unificada (texto + polaridade + urgente)
2026-08-07 07:20:28 -03:00
Francisco Solla
212a1f2423 feat(campaign): C87 — atualização unificada (texto + polaridade + urgente)
Substitui o modelo de MunicipalityUpdate (kind/semanal/urgente/nota/sinal + signalType)
por um modelo unificado: body obrigatório + polarity (boa/neutra/ruim) + urgent + adversarySignal.

- Schema: polarity enum obrigatório, urgent boolean default false, adversarySignal boolean
- Wizard: novo WizardUpdateBodyStep com campo de texto + polaridade + urgente
- Lista: controle unificado de atualização com polaridade inline
- Feed: exibe polaridade como badge colorido + indicador de urgência
- V2 status strip: atualização rápida de polaridade
- E11: queries atualizadas para polarity + adversarySignal
- Migração: 20260807_030000_unify_municipality_update (backfill polarity=neutra, urgent de kind, adversarySignal de kind+signalType)
- Testes: 18/18 integração C87, 593/593 total, 1399/1399 unitários
- Fix: testes de state deputy usavam nomes fixos que colidiam entre execuções
2026-08-07 05:04:41 -03:00
Francisco Solla
59983b33f7 feat(campanha): C15 — FullCalendar em /campanha/agenda
Issue #390 — entrada operacional staff com FullCalendar v7 route-local
(semana/mês/lista), filtros compartilháveis por município/deputado/tag,
criação pelo slot, detalhe por URL e remarcação drag/resize sob RBAC,
transação e lock por atividade.

- /campanha/atividades e giros permanecem como lista/fluxos legados
- Sem migration/collection nova; reutiliza activity de C14
- Fuso Bahia, range exclusivo, erro/revert, loading/empty testados
- Leader negado, advisor limitado pelo access atual
- E2E cobre filtros, drag, mobile 390x844 e slot prefill
- Int specs cobrem RBAC, concorrência e defense-in-depth

Impl: docs/plans/fullcalendar-agenda-campanha-impl.md
2026-08-07 04:37:36 -03:00
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