fix(C163): alarga a coluna Título da seção 11 do relatório de cidade

A tabela "Notícias internas e imprensa local" não tinha larguras: o layout automático dava ~2.000px à coluna Link (URL crua, sem espaços) e estourava a página (tabela de 2.261px), espremendo o Título a 64px. Larguras explícitas (Data 9 · Veículo 14 · Título 49 · Link 28) tornam a tabela table-fixed, quebram a URL dentro da célula e dão ao Título — o texto mais longo — a maior fatia. Decisão persistida no script e na skill relatorio-cidade, com entrada em docs/changelog.
This commit is contained in:
Francisco Solla 2026-09-15 18:07:10 -03:00
parent c2ee60dd6a
commit afd5f137ac
3 changed files with 13 additions and 4 deletions

View file

@ -189,6 +189,11 @@ cacheado em `data/relatorios-cidade/<base>.emendas.json` para replay.
limites`.
- **Links clicáveis:** todo URL no PDF é um link (`<a href>`): células de
tabela, fontes por linha e a seção de fontes.
- **Tabela da seção 11 (notícias) com larguras fixas:** `Data 9 · Veículo 14 ·
Título 49 · Link 28` (%). As larguras explícitas tornam a tabela `table-fixed`
(a URL longa/crua quebra em vez de inflar a coluna) e dão ao **Título** — o
texto mais longo — a maior fatia. Sem largura, a URL sem espaços domina o
layout automático e espreme/estoura a tabela.
## Guardrails de produto (não negociáveis)

View file

@ -0,0 +1 @@
**C163 — Relatório de cidade: coluna Título da seção 11 com largura fixa e maior fatia (2026-09-15):** a tabela "Notícias internas e imprensa local" era renderizada sem larguras, então o layout automático do navegador dava à coluna **Link** a maior parte da largura — a URL crua, sem espaços, virava um token gigante e a tabela estourava a página (medido: tabela de **2.261 px** e coluna Link de **2.052 px**, com o **Título** espremido a 64 px). Agora as colunas têm larguras explícitas (`Data 9 · Veículo 14 · Título 49 · Link 28` %), o que torna a tabela `table-fixed` e habilita o `overflow-wrap: anywhere` do CSS: a URL quebra dentro da célula e o **Título** — o texto mais longo — recebe a maior fatia. Decisão persistida no script (`buildNewsSection`) e na skill (`relatorio-cidade`), com o mesmo racional. Sem mudança de contrato de dados nem de conteúdo: só layout, verificável reconstruindo o HTML e medindo as colunas.

View file

@ -971,11 +971,14 @@ const buildNewsSection = ({ research }) => {
blocks.push({
kind: 'table',
title: 'Notícias internas e imprensa local',
// Título é o texto mais longo: larguras explícitas tornam a tabela
// `table-fixed` (URL quebra em vez de empurrar a coluna) e dão a ela a
// maior fatia — sem largura, a URL sem espaços infla a coluna Link.
columns: [
{ key: 'date', label: 'Data' },
{ key: 'outlet', label: 'Veículo' },
{ key: 'title', label: 'Título' },
{ key: 'link', label: 'Link' },
{ key: 'date', label: 'Data', width: 9 },
{ key: 'outlet', label: 'Veículo', width: 14 },
{ key: 'title', label: 'Título', width: 49 },
{ key: 'link', label: 'Link', width: 28 },
],
rows: research.news.map((item) => ({
date: formatDateBr(item.publishedAt),