mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-12 22:13:05 +00:00
feat(briefing): pedido dual 1313 + Lula 13 e missão do 2º turno
Some checks failed
Deploy / preflight (push) Has been cancelled
Deploy / verify (push) Has been cancelled
Deploy / deploy staging (teqo-staging) (push) Has been cancelled
Deploy / requeue when main advanced (push) Has been cancelled
Deploy / deploy production (teqo-1313) (push) Has been cancelled
Some checks failed
Deploy / preflight (push) Has been cancelled
Deploy / verify (push) Has been cancelled
Deploy / deploy staging (teqo-staging) (push) Has been cancelled
Deploy / requeue when main advanced (push) Has been cancelled
Deploy / deploy production (teqo-1313) (push) Has been cancelled
O briefing de capacitação passa a renderizar o pedido dual (deputado federal 1313 e, no 2º turno, Lula 13) e a exigir ao menos uma pergunta de 2º turno no Q&A; dossiê e boletim seguem sem CTA (prova material do argumento, não peça de rua). Registra o changelog da entrega.
This commit is contained in:
parent
9fae859c0d
commit
31f78f07ad
7 changed files with 47 additions and 10 deletions
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
name: briefing-capacitacao-solla
|
||||
description: 'Gera o Briefing de capacitação Solla 1313 por recorte (cidade · instituição · tema): PDF A4 de até 4 páginas + companion .md, derivado do dossiê já pesquisado (sem segunda pesquisa factual), todo de recorte — princípios/crenças e defesas de Solla com fonte, fatos-âncora e o pedido literal do voto 1313, e perguntas prováveis × melhores respostas dos dois lados; aceita um recorte ou um lote separado por vírgula.'
|
||||
description: 'Gera o Briefing de capacitação Solla 1313 por recorte (cidade · instituição · tema): PDF A4 de até 4 páginas + companion .md, derivado do dossiê já pesquisado (sem segunda pesquisa factual), todo de recorte — princípios/crenças e defesas de Solla com fonte, fatos-âncora e o pedido literal do voto (1313 e, no 2º turno, Lula 13), e perguntas prováveis × melhores respostas dos dois lados; aceita um recorte ou um lote separado por vírgula.'
|
||||
---
|
||||
|
||||
# Briefing de capacitação Solla 1313 (C210)
|
||||
|
|
@ -13,7 +13,8 @@ capa, manual genérico, roteiro de passos, anti-padrões nem limites:
|
|||
1. **O que Solla defende** — princípios/crenças do recorte (abertura) + posições
|
||||
com lastro (fonte e data);
|
||||
2. **O essencial do recorte** — fatos-âncora com **fase junto ao valor** e o
|
||||
**pedido literal** do voto + **uma linha** de plano;
|
||||
**pedido literal** do voto (1313 e, no 2º turno, Lula 13) + **uma linha** de
|
||||
plano;
|
||||
3. **Perguntas prováveis × melhores respostas (1/2 e 2/2)** — as perguntas reais
|
||||
do recorte, metade do documento, com os dois lados.
|
||||
|
||||
|
|
@ -29,6 +30,16 @@ invocação) e também roda sozinho. O layout vem do design hi-fi aprovado
|
|||
`docs/plans/briefing-capacitacao-solla-ui-design.html` — o port é
|
||||
classe-a-classe, sem improviso visual.
|
||||
|
||||
## Missão do 2º turno (Lula × Flávio — 25/10/2026)
|
||||
|
||||
O briefing é o insumo de quem pede voto na rua: desde 08/10/2026 o pedido é
|
||||
**dual** — o voto 1313 (Solla) e, no 2º turno, o voto 13 (Lula). O pedido é
|
||||
**literal do renderer** (não se reescreve no JSON); o `plan` é a única linha em
|
||||
que o autor diz como combinar os dois. Os números do 2º turno (Lula × Flávio,
|
||||
X₁/X₂) **não entram** neste contrato: vivem no relatório de cidade
|
||||
(`relatorio-cidade`, seção "2º turno no município"), e cenário/estimativa seguem
|
||||
proibidos aqui.
|
||||
|
||||
## Quando usar
|
||||
|
||||
- A coordenação pede "o briefing de <recorte>" para quem vai panfletar/pedir
|
||||
|
|
@ -131,7 +142,7 @@ Escrito pelo autor, validado pelo build (`scripts/lib/briefingContent.mjs`):
|
|||
{ "factId": "era_b_equipamentos", "sourceUrl": "https://…", "title": "≤120", "note": "≤200" },
|
||||
{ "gapReason": "sem fala própria localizada", "title": "…", "note": "…" }
|
||||
],
|
||||
"plan": "≤220 chars — uma linha de plano de voto/compromisso nomeado", // obrigatório
|
||||
"plan": "≤220 chars — uma linha de plano de voto/compromisso nomeado (pode dizer como combinar o 1313 com o voto 13 no 2º turno)", // obrigatório
|
||||
"qa": [ // ≥4, com ≥1 "direita" e ≥1 "esquerda"
|
||||
{ "side": "direita|esquerda|entrega", "question": "≤180",
|
||||
"acknowledge": "≤200", "answer": "≤520", "close": "≤200",
|
||||
|
|
@ -151,6 +162,9 @@ Regras duras:
|
|||
autor copia o `sourceUrl` do item do research no campo `sourceUrl` do âncora
|
||||
(o par `factId` + `sourceUrl` precisa bater — par errado falha fechado);
|
||||
- `qa` cobre os dois lados (≥1 `direita` e ≥1 `esquerda`); `entrega` é opcional;
|
||||
desde 08/10/2026, inclua **ao menos uma pergunta de 2º turno** (por que votar
|
||||
em Lula; o que está em jogo para a cidade) — ancorada no mesmo ledger, sem
|
||||
cenário nem número de pesquisa;
|
||||
- **proibido** qualquer chave de cenário/estimativa/staff-only
|
||||
(`estimatedVotes`, `scenario`, `projection`, `polls`, …) — o briefing não tem
|
||||
campo numérico; valor/fase vêm do fato-âncora no render;
|
||||
|
|
@ -161,8 +175,8 @@ Regras duras:
|
|||
perguntas** (o build divide a lista ao meio).
|
||||
|
||||
O pedido é **literal do renderer** (não reescreva no JSON): "Posso contar com
|
||||
você? Para deputado federal, **vote 1313, Jorge Solla**." — o `plan` é a única
|
||||
linha de orientação que o autor escreve.
|
||||
você? Para deputado federal, **vote 1313, Jorge Solla.** E no 2º turno, **vote 13, Lula.**" — o `plan` é a única linha de orientação que o autor escreve
|
||||
(ex.: onde/como combinar o pedido municipal com o voto em Lula).
|
||||
|
||||
## Recibo do autor
|
||||
|
||||
|
|
@ -221,6 +235,9 @@ já carrega o aviso de insumo.
|
|||
fonte; lacuna explícita em vez de inferência.
|
||||
- **Sem cenário eleitoral/estimativa/staff-only** (nada de `estimatedVotes`,
|
||||
projeção, pesquisa); o briefing não promete efeito.
|
||||
- **Pedido dual literal**: a folha "O pedido" renderiza 1313 + Lula 13 (2º
|
||||
turno) — não é campo do JSON; números de 2º turno continuam fora do briefing
|
||||
(vivem no relatório de cidade).
|
||||
- **Empenho ≠ pagamento**; esfera explícita nunca somada; leitura relativa
|
||||
(nunca % estadual absoluto); PII mínima (telefone/e-mail nunca entram).
|
||||
- **Voz com dono único**: reusa `.opencode/skills/solla-comunicacao/SKILL.md` +
|
||||
|
|
|
|||
|
|
@ -15,6 +15,18 @@ eleitor, sem declaração de fontes) **e** o **Briefing de capacitação** (3º
|
|||
entregável: até 4 páginas para quem vai pedir o voto 1313, insumo interno). Os
|
||||
layouts vêm dos artefatos hi-fi aprovados pelo `designer`.
|
||||
|
||||
## Missão do 2º turno (Lula × Flávio — 25/10/2026)
|
||||
|
||||
O dossiê é a **prova material** do 2º turno: o que Solla e o campo PT/federal
|
||||
entregaram à cidade sustenta o pedido de voto para Lula em 25/10. O **boletim
|
||||
modelo** continua sem CTA (insumo de comunicação, não peça de rua); o **briefing
|
||||
de capacitação** (3º entregável) leva o pedido **dual** — 1313 e, no 2º turno,
|
||||
Lula 13 (ver `briefing-capacitacao-solla`). Nada muda no escopo da pesquisa por
|
||||
era (o dossiê é histórico e com fonte; ruído eleitoral de 2026 segue excluído das
|
||||
buscas). O recorte numérico do 2º turno por município/ZE **não vive aqui**: vive
|
||||
no relatório de cidade (`relatorio-cidade`, seção "2º turno no município",
|
||||
artefato de `pnpm build:second-round`) e não deve ser inventado no dossiê.
|
||||
|
||||
## Quando usar
|
||||
|
||||
- A comunicação pede "o dossiê de <cidade>", o "boletim modelo de <cidade>"
|
||||
|
|
|
|||
|
|
@ -27,11 +27,13 @@ dossiê daquele recorte estar pesquisado.
|
|||
- `essential` (≥3) — fatos-âncora que sustentam a conversa (sem trajetória de
|
||||
formação), com a fase junto ao valor;
|
||||
- `plan` — **uma linha** (≤220 chars) de plano de voto/compromisso nomeado
|
||||
(o pedido literal é do renderer, não o reescreva);
|
||||
(o pedido literal — 1313 e Lula 13 no 2º turno — é do renderer, não o
|
||||
reescreva; você pode usar o `plan` para dizer como combinar os dois);
|
||||
- `qa` (≥4; mire **8–10**) — perguntas prováveis com `side`
|
||||
(`direita|esquerda|entrega`), `question`, `acknowledge`, `answer` (ancorada
|
||||
em `factId` real ou declarada como lacuna) e `close`, cobrindo os dois
|
||||
lados.
|
||||
lados; inclua **ao menos uma pergunta de 2º turno** (por que votar em Lula;
|
||||
o que está em jogo para a cidade), sem cenário nem número de pesquisa.
|
||||
3. Devolver **apenas o recibo curto** (seção "Recibo do autor" da skill).
|
||||
|
||||
## Limites
|
||||
|
|
@ -51,7 +53,8 @@ dossiê daquele recorte estar pesquisado.
|
|||
(`estimatedVotes`, `scenario`, `projection`, `polls`, …): o briefing é
|
||||
capacitação, não leitura eleitoral.
|
||||
- Copy pt-BR, sem PII (telefone/e-mail nunca), sem CTA público, sem promessa de
|
||||
entrega; o pedido literal do voto 1313 é do renderer.
|
||||
entrega; o pedido literal do voto (1313 e, no 2º turno, Lula 13) é do
|
||||
renderer.
|
||||
- Reuse a voz do `solla-comunicacao` (rebates e fórmula de resposta a crítica),
|
||||
sem inventar tom novo.
|
||||
- **Não** faça pesquisa web nova, **não** edite os `research.json`, **não** rode
|
||||
|
|
|
|||
1
docs/changelog/2026-10-09-relatorio-cidade-2turno.md
Normal file
1
docs/changelog/2026-10-09-relatorio-cidade-2turno.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
**Relatório de cidade no 2º turno (Lula × Flávio, 25/10/2026) — artefato TSE 2026, seção própria no PDF e pedido dual no briefing (2026-10-09):** a família de documentos de cidade passou a servir explicitamente à eleição de Lula no 2º turno. Novo artefato commitado `src/lib/electionAggregates/bahia-second-round-2026.json` (loader `src/lib/bahiaSecondRound.ts`, regra compartilhada `src/lib/secondRoundRole.ts`, builder `pnpm build:second-round` / `scripts/build-second-round-ba.mjs`): cruza o TSE 2026 presidente 1º turno por seção (o mesmo shard oficial do `/potencial`, agregado à geografia do catálogo — Salvador por ZE) com a fatia presidencial de 2022 e o resultado federal de Solla 2026 da análise interna (`analise-eleicoes-2026/nota-solla-2turno`), valida cada número contra `bahia-federal-baseline.json` e contra a análise, e pina os totais da BA (Lula 5.664.771 × Flávio 2.442.585; Solla 152.049). O relatório de cidade ganha a seção **"2º turno no município (Lula × Flávio)"** (nº 2, logo após a conta eleitoral): números oficiais 2022→2026 (Lula, adversário Bolsonaro→Flávio, Solla, comparecimento, abstenção, brancos+nulos), X₁/X₂ pela MESMA fórmula da página pública, papel determinístico da cidade — `prioridade`/`mobilizacao` (Lula caiu e Solla cresceu), `defesa` (os dois caíram) e `expansao` — e o movimento local pesquisado no novo item de checklist `segundo_turno` (atos, palanques, posições, com URL+data; sem fonte vira lacuna). A seção é **cenário, não promessa** (X₁/X₂ são votos em jogo; persuasão em eleição geral tem efeito médio ~0) e fica **fora da página 1** de propósito: a página 1 é medida e falha fechada, e conteúdo determinístico não encolhe no fallback de texto. Na família do dossiê, o **briefing de capacitação** passa a renderizar o **pedido dual** ("vote 1313, Jorge Solla. E no 2º turno, vote 13, Lula.") com ao menos uma pergunta de 2º turno no Q&A, sem cenário/estimativa no contrato; dossiê e boletim seguem sem CTA (prova material do argumento, não peça de rua). Testes: 8 unit novos/atualizados no artefato e na seção (cobertura do catálogo 435, pins de totais, reclassificação dos papéis, ZE 19/15/9/12 × 16/4, X₁/X₂ da ZE 1 do Salvador), pins da missão nas skills `relatorio-cidade` e `briefing-capacitacao-solla`, e o literal do pedido dual no renderer; o build real (Chromium + snapshot de Amargosa) foi rodado com a seção nova e a página 1 segue fechando no orçamento.
|
||||
|
|
@ -16,7 +16,7 @@ import { resolveDossierUnit } from './dossieUnit.mjs'
|
|||
import { htmlEscape, moreItemsLabel } from './reportText.mjs'
|
||||
|
||||
const BRIEFING_REQUEST_LINE =
|
||||
'Posso contar com você? Para deputado federal, <em>vote 1313, Jorge Solla.</em>'
|
||||
'Posso contar com você? Para deputado federal, <em>vote 1313, Jorge Solla.</em> E no 2º turno, <em>vote 13, Lula.</em>'
|
||||
|
||||
const BRIEFING_PRINT_CSS = `
|
||||
:root {
|
||||
|
|
@ -263,7 +263,7 @@ export const renderBriefingMd = (content, { unit, report }) => {
|
|||
'',
|
||||
'## O pedido',
|
||||
'',
|
||||
'> “Posso contar com você? Para deputado federal, vote 1313, Jorge Solla.”',
|
||||
'> “Posso contar com você? Para deputado federal, vote 1313, Jorge Solla. E no 2º turno, vote 13, Lula.”',
|
||||
'',
|
||||
`**Plano:** ${content.plan}`,
|
||||
'',
|
||||
|
|
|
|||
|
|
@ -111,6 +111,7 @@ describe('renderBriefingHtml', () => {
|
|||
|
||||
it('renders the literal request with the vote number and the one-line plan', () => {
|
||||
expect(html).toContain('vote 1313, Jorge Solla')
|
||||
expect(html).toContain('vote 13, Lula')
|
||||
expect(html).toContain('request-line')
|
||||
expect(html).toContain('request-block')
|
||||
expect(html).toContain('compromisso nomeado')
|
||||
|
|
@ -178,6 +179,7 @@ describe('renderBriefingMd (companion superset)', () => {
|
|||
expect(md).toContain(droppedQuestion.question)
|
||||
expect(md).toContain('Insumo interno de capacitação — não publicar')
|
||||
expect(md).toContain('vote 1313, Jorge Solla')
|
||||
expect(md).toContain('vote 13, Lula')
|
||||
expect(md).toContain('**Plano:** Combine onde, quando e como votar')
|
||||
expect(md).toContain('[fonte](https://saude.test/ambulancia)')
|
||||
expect(md).toContain('## O que Solla defende')
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ describe('skill /briefing-capacitacao-solla documents the flow', () => {
|
|||
it('pins the hard product literals', () => {
|
||||
expect(skill).toContain('Insumo interno de capacitação — não publicar')
|
||||
expect(skill).toContain('vote 1313')
|
||||
expect(skill, 'the 2º-turno mission is part of the ask').toContain('Missão do 2º turno')
|
||||
expect(skill, 'the pedido is dual since 08/10/2026').toContain('vote 13, Lula')
|
||||
expect(skill).toMatch(/4 páginas/)
|
||||
expect(skill).toContain('insumo interno')
|
||||
expect(skill).toMatch(/sem CTA público/i)
|
||||
|
|
|
|||
Loading…
Reference in a new issue