16 KiB
Dossiê Solla por tema/área + Boletim modelo (skill → dossiê + boletim)
Status: rascunho
Atualizado em: 2026-09-18
Issue: #1143
Priority: P2
Impeccable: C — fluxo novo (dossiê por área + Boletim modelo; mesma família visual dos dossiês C186/C187, com identificação de área própria)
Design UI: docs/plans/dossie-solla-tema-ui-design.html + docs/plans/dossie-solla-tema-boletim-ui-design.html — variante de área da família C187, a produzir pelo designer; se o gate julgar o delta pequeno, documentar o delta no par do C187 em vez de novos arquivos (decisão a confirmar no gate)
Appetite: ~2–3 dias eng; um outcome verificável — rodar /dossie-solla-tema Educação e obter PDF A4 + companion .md (seções por era, números com fonte, lacunas) e o PDF do Boletim modelo (1 página A4)
Responsável: —
Intenção
A comunicação/mandato precisa preparar fala, artigo ou agenda por área de política — "o que Solla fez pela Educação", "o que fez pela Saúde" — e hoje só existem os recortes por município (/dossie-solla-cidade, C186) e por instituição (/dossie-solla-instituicao, C187). Para uma área não há de onde partir: o material está espalhado em memória, notícia solta e acervo de falas sem recorte. Este item cria a terceira variante da família — mesmo pipeline, mesmo rigor de fonte — cujo recorte é a área/tema do acervo em vez do lugar ou da entidade. É o recorte que o acervo interno serve nativamente (falas já classificadas por tema desde C153/C154), então aqui o acervo é evidência de primeira classe, não ponte. Primeiro uso: Educação; reusável para as demais áreas da taxonomia, em lote de 1 ou N. Além do dossiê, entrega o Boletim Informativo modelo (1 página A4, linguagem de eleitor) para a comunicação partir dele na peça final.
Persona e fluxo
- Persona / contexto: equipe de comunicação/mandato de Solla, na mesa, preparando material de uma área (ex.: pronunciamento sobre Educação, agenda com o setor); sem tempo de garimpo e obrigada a não afirmar sem lastro.
- Job principal: numa invocação, obter (1) um dossiê datado e com fonte de tudo o que Solla fez pela área ao longo da carreira — com números sempre que existirem e lacunas explícitas — e (2) um boletim modelo de 1 página, em linguagem de eleitor, sintetizando essas entregas.
- Fluxo desejado: pede
/dossie-solla-tema Educação(ou lote) → o orquestrador resolve o token nas áreas canônicas do acervo, dispara pesquisadores (um por era da carreira) em paralelo, roda a extração read-only do acervo por tema direto e monta os PDFs (+.md) no layout desenhado pelodesigner→ a comunicação lê a linha do tempo, escolhe o que entra na fala/o que vira boletim, confere as fontes; lacunas ficam explícitas; falha de uma área não cancela o lote. - Anti-goals de produto: inventar área/slug fora da taxonomia; inferir área de emenda/proposição sem fonte; virar dashboard de área; substituir ou duplicar os recortes cidade/instituição; somar temas ou segmentos como se fossem a área; publicar/veicular peça pelo pipeline (defeso 2026); persistir dado novo na base; segundo pipeline irmão em vez de estender o dono; o boletim introduzir fato que o dossiê não tem com fonte.
Esboço de fluxo (C)
[pede: /dossie-solla-tema Educação, Saúde] → [orquestrador resolve o token nas áreas do acervo]
→ token desconhecido → fail-closed (mensagem acionável ou --slug/--name one-off)
→ [1 researcher por era (A/B/C) por área, em paralelo] ───────┐
→ [extração read-only do acervo por Speech.topics (serializada)] ─┼→ [build local: HTML do designer → PDF dossiê + .md + boletim]
→ [summary: ok|failed + recibo curto por área/era] ───────────┘
→ [comunicação escolhe o que entra na fala, confere fonte; lacunas explícitas]
Design UI (C)
- Design UI (gate) — dossiê:
docs/plans/dossie-solla-tema-ui-design.html(variante de área da famíliadossie-solla-instituicao-ui-design.html) — capa/identificação da área (label + valor canônico), resumo, seções por era, tabelas e lacunas; produzido pelodesignerantes do build e portado pela implementação. - Design UI (gate) — boletim modelo:
docs/plans/dossie-solla-tema-boletim-ui-design.html— variante de área do boletim de instituição (o mais completo da família), 1 página A4, público eleitor.
Objetivo e aceite
- Com uma área, sai um par PDF A4 datado + companion
.mdcom: identificação da área (labelEducação+ valor canônicoeducacao+ nota da taxonomia do acervo); vínculo histórico de Solla com a área por era A (até 2006), B (2007–2014) e C (2015–2027); resumo de uma olhada; o que Solla fez pela área (emendas e recursos, proposições/relatorias, programas/projetos, articulação/audiências, títulos) em tabelas Objeto/Valor/Ano/Fase/Abrangência/Fonte; painel de abrangência; evidência direta do acervo por tema (Speech.topics); fontes e limites; nota de defeso. - Com a mesma área, sai também o Boletim Informativo modelo: 1 página A4, linguagem de público eleitor, ≤6 destaques + "E mais" com ≤14 itens (teto de lista ajustado ao comprimento do rótulo, como no dono), rótulo "Modelo — insumo interno", sem declaração de fontes, sem CTA/propaganda; herda apenas fatos já com fonte do dossiê.
- Primeiro uso real é o aceite de produto:
/dossie-solla-tema Educaçãoproduz dossiê + boletim utilizáveis pela comunicação. - Toda afirmação não trivial tem fonte visível (URL + data); o que não foi achado vira lacuna explícita — nunca inferência. Números sempre que a fonte informar, sempre com a fase.
- Lote de 1+N áreas funciona; falha de uma não cancela as demais (sucesso parcial explícito). Token fora da taxonomia falha fechado com mensagem acionável, nunca slug inventado.
- Pesquisa roda em sub-agente por era, por área, em paralelo; o orquestrador agrega apenas recibos curtos e serializa a extração read-only.
- O layout vem do artefato hi-fi do
designer(fonte de verdade do port), não inventado na implementação. - Nada some e nada é cortado (regra do dono, entregue no C188): folhas correntes sem caps, lista capada declara "e mais N", sem descarte silencioso.
- Guardrails de produto: "sem fonte, não publica"; empenho ≠ pagamento; abrangência explícita e nunca somada; leitura relativa (nunca % estadual absoluto); acervo cobre 2011+ (pré-2011 = lacuna); PII mínima; artefato gitignored; defeso; sem schema/migration/DB write.
Dados (intenção)
- Vou apresentar dados? Sim, superfície neste item — dossiê e boletim são documentos de dados (números com fonte, séries por era, painel do acervo, lacunas).
- Decisões desbloqueadas: a comunicação escolhe o que entra na fala/agenda da área; qual entrega priorizar; onde há entrega documentada × só intenção; qual lacuna buscar antes do compromisso.
- Forma: adiada ao plano de implementação — aqui só restrições de produto: fase rotulada por valor; abrangência rotulada em cada linha; empenho nunca tratado como pago; sem % estadual absoluto; lacuna explícita em vez de silêncio; ruído eleitoral fora.
Dados da decisão (literais)
- Nome e artefatos (verbatim): skill
.agents/skills/dossie-solla-tema/SKILL.md; command.opencode/commands/dossie-solla-tema.md; subagentes.opencode/agent/dossie-solla-tema.md(researcher) +dossie-solla-tema-redacao.md(redator); build entry + libs reusando/estendendo o dono (scripts/lib/dossieUnit.mjs,scripts/lib/dossie*.mjs,scripts/lib/reportText.mjs). - Token canônico = área do acervo (verbatim, os 18 de
src/lib/speechFacets.ts:14):saude,educacao,cultura,esporte,seguranca-publica,meio-ambiente,economia-trabalho,direitos-humanos,infraestrutura,ciencia-tecnologia,politica-instituicoes,agricultura,habitacao-cidades,comunicacao-midia,igualdade-racial,mulheres-genero,juventude,pessoa-deficiencia; labels pt-BR correspondentes (ex.:educacao→ "Educação"). Primeiro uso:educacao/ Educação. - Recorte do acervo (verbatim): por
Speech.topicsdireto (filtro de acervo emsrc/utilities/speech/speechListFilters.ts:43) — não o mapa tema→instituição do C187; emendas/proposições por área: Câmara/Portal não filtram por área — atribuição só com fonte; sem atribuição → lacuna (nunca zero silencioso). - Eras (verbatim, reusar as do C186/C187): A até 2006; B 2007–2014 (SESAB); C 2015–2027 (deputado federal). Acervo cobre 2011+; pré-2011 é lacuna explícita.
- Fases de valor (verbatim):
autorizado | empenhado | liquidado | pago | restos(defaultnao_informado). - Abrangência (proposta — questão em aberto):
area | segmento | rede—area(a política como um todo),segmento(ex.: básica/superior/EJA/profissional),rede(entidades/escolas/universidades da área); defaultarea; recortes nunca somados. Alternativa registrada: reusarinstituicao|setor|rededo C187 (menos aderente). - Boletim modelo (literais): 1 página A4; ≤6 destaques + "E mais" ≤14 itens (o dono ajusta o limite ao comprimento do rótulo: cidade 12, instituição 10); sem fontes; sem CTA; rótulo "Modelo — insumo interno"; nota de defeso;
NEEDS ASSETpara foto/selo/clipping. - Saídas (rotas):
docs/research/dossie-solla-tema/<slug>-<YYYY-MM-DD>-dossie.pdf+-dossie.md+-boletim.pdf; intermediários e JSONs de pesquisa emdata/dossie-solla-tema/; ambos gitignored (blocos por recorte no.gitignore). - Lote (verbatim): vírgula,
trim, descarte de vazio, dedup após resolução preservando ordem; token inválido/ambíguo = falha isolada no summary; escape one-off--slug=<x> --name="<Nome>"; nunca slug inventado. - Guardrails (verbatim): sem fonte não publica; empenho ≠ pagamento; abrangência explícita (nunca somar); leitura relativa; lacuna explícita; PII mínima; artefato gitignored; defeso 2026; sem schema/migration; falha isolada no lote.
Direção no codebase (hipótese)
- Áreas prováveis: o seam de unidades
scripts/lib/dossieUnit.mjs(terceira unidade, ao lado de município/instituição),dossieResearch.mjs(CHECKLIST_BY_UNITpor era orientada a área), dispatch emdossieBlocks.mjs,dossieRender.mjs/dossieBulletin*.mjs(identificação e copy da área), novo builderscripts/build-dossie-solla-tema.mjsreusandobuildPdf.mjs/dossiePack.mjs; snapshot do acervo por tema reusando a receita read-only do dono (sem catálogo novo — o "catálogo" éSPEECH_TOPICS);.agents/skills/,.opencode/commands|agent/. - Precedente a olhar: C186/C187 (
docs/plans/dossie-solla-instituicao.md+-impl.md, skills/commands/agents irmãos,scripts/lib/dossie*.mjs);src/lib/speechFacets.ts+src/utilities/speech/speechListFilters.tscomo resolução canônica do token. - Risco de acoplamento: "edite o dono, não gema um irmão" — default município/instituição intactos, tudo unit-aware; registrar o command em
tests/unit/opencodeCommands.unit.spec.tse pinar os módulos novos emscripts/lib/test-affected-core.mjs(SCRIPTS_SPEC_PINNED); specs próprias espelhandotests/unit/dossieInstitution*.spec.ts; sem schema/migration; extração read-only à produção (guard).
Dependências
- Hard: nenhuma — pipeline C186/C187 e infra Chromium/PDF já existem; o
designerproduz o layout. - Soft: C189 (#1139, OPEN/blocked) — débitos de truncamento/paridade no mesmo dono que este item estende: se tocar o pipeline antes, não reintroduzir caps nem corte mecânico; a área nasce sob a regra do C188 ("nada some, nada é cortado").
- Soft: acesso read-only ao acervo Teqo (guard de confirmação); pesquisa web datada (sem
PORTAL_TRANSPARENCIA_API_KEY— o Portal não filtra por área).
Fora de escopo
- Redigir/aprovar/veicular a peça final — a skill entrega dossiê + boletim modelo.
- Dashboard/painel interativo de área; UI in-app de campanha; índice/PDF agregado de lote.
- Gerar as 18 áreas de uma vez; área composta (multi-tema num mesmo dossiê) — cada token é um dossiê.
- Substituir/alterar
/dossie-solla-cidade,/relatorio-cidadeou/dossie-solla-instituicao. - Persistir dado novo, schema ou migration; re-taxonomizar o acervo; inferir área de emendas/proposições sem fonte.
Rabbit holes de produto
- "Cobrir a área inteira vira escopo infinito." Se alguém "só completar": Educação = tudo. Corte neste item: eras fixas A/B/C + checklist por era + foco em fonte verificável.
- "Somar temas/segmentos como se fossem a área." Corte neste item: abrangência explícita por linha, sem total combinado.
- "IA plausível sem fonte." Corte neste item: sem fonte não publica; lacuna explícita; número só com URL+data e fase.
- "Emenda da área = zero silencioso." Corte neste item: sem atribuição checada, vira lacuna — nunca zero nem soma estimada.
- "Fan-out das 18 áreas." Corte neste item: 1 token = 1 dossiê; lote só o pedido explicitamente.
- "Vira recorte territorial/instituição." Corte neste item: território e entidade não viram eixo de soma na área (menção fica na evidência/fonte).
Questões em aberto (produto)
- Nome da skill:
temaouarea? Opções: A)dossie-solla-tema| B)dossie-solla-area. Recomendação: A — alinha com a taxonomia existente do acervo (SPEECH_TOPICS/Speech.topics, "tema") e com o pedido do humano ("categoria/campo"). (assumido — validar) - Abrangência da área? Opções: A)
area | segmento | rede| B) reusarinstituicao | setor | rededo C187 | C) sóarea. Recomendação: A — preserva o guardrail de não somar com vocabulário que faz sentido para área. (assumido — validar) - Incluir recorte territorial? Opções: A) não como eixo (só menção na evidência) | B) painel por município. Recomendação: A — território é o recorte do
/dossie-solla-cidade; evita eixo de soma duplicado. - Design: novo hi-fi ou delta documentado? Opções: A) novo par
dossie-solla-tema-{ui,boletim-ui}-design.html, variante da família instituição | B) delta documentado no par do C187. Recomendação: A — capa/identificação e boletim mudam; a variante evita arrastar labels de instituição; confirmar no gate se o delta for pequeno. - Área composta (ex.: Educação + Ciência e Tecnologia)? Opções: A) fora (1 token = 1 dossiê; lote = vários) | B) permitir combinar. Recomendação: A — mantém o fail-closed e o recorte legível. (assumido)
Referências
- GitHub Issue #1143
- Irmãos:
docs/plans/dossie-solla-instituicao.md(C187, #1135) +dossie-solla-instituicao-impl.md;docs/plans/dossie-solla-cidade.md(C186, #1132); débitosdocs/plans/relatorios-sem-truncamento.md(C188, #1136) e issue #1139 (C189, OPEN/blocked) - Skills/commands/agents-modelo:
.agents/skills/dossie-solla-instituicao/SKILL.md,.opencode/commands/dossie-solla-instituicao.md,.opencode/agent/dossie-solla-instituicao.md+-redacao.md - Builder/libs donos:
scripts/build-dossie-solla-instituicao.mjs,scripts/lib/dossieUnit.mjs,scripts/lib/dossie{Research,Blocks,Render,Bulletin,BulletinRender,Pack}.mjs,scripts/lib/buildPdf.mjs - Taxonomia/recorte:
src/lib/speechFacets.ts(18 temas),src/utilities/speech/speechListFilters.ts(topics),src/utilities/speech/speechListUrl.ts - Designs hi-fi irmãos (fonte da variante):
docs/plans/dossie-solla-instituicao-ui-design.html+docs/plans/dossie-solla-instituicao-boletim-ui-design.html— atualizados em5644a9f9(a nota "desatualizados" na SKILL do C187 está stale; não repetir o passe) - Testes a espelhar:
tests/unit/dossieInstitution{,.unit,Research,BatchSkill}*.spec.ts,tests/unit/dossie*.unit.spec.ts,tests/unit/opencodeCommands.unit.spec.ts; pinoscripts/lib/test-affected-core.mjs AGENTS.md— defeso, PII mínima, artefato gitignored e "edite o dono, não gema um irmão"