0024 — O painel de Novidades corta no meio o item de nota que ocupa mais de uma linha¶
1. Sintoma¶
No painel de Novidades (e na página /novidades), item de nota de versão escrito em mais de uma linha aparece cortado no ponto da primeira quebra. O primeiro item da 0.14.0, que está em produção, termina em "Em Parâmetros, os blocos Taxas e Taxas —".
2. Reprodução¶
- Abrir o painel de Novidades em qualquer ambiente com a 0.14.0.
- Ler o primeiro item: a frase para em "Taxas —".
O defeito é do parser, não de layout: aparece igual no desktop e em 375px. Como o painel vem no bundle do PWA, quem já tem o app aberto só vê a correção depois do deploy e da atualização do service worker.
Em teste: interpretar("9.9.9", "- primeira parte\n continuação") devolve ["primeira parte"].
3. Esperado × Atual¶
- Esperado: o item inteiro, com as linhas de continuação juntadas numa frase.
- Atual: só a primeira linha do item; o resto some da tela.
4. Causa raiz¶
- Onde:
apps/web/src/versoes/index.ts:113-138, funçãointerpretar(o laço sobre as linhas). - Mecanismo: o contrato da RN4 da spec 0043 diz que linha começando com
-vira item e qualquer outra linha é ignorada. As notas são escritas quebrando linha, como o resto do repositório, com a continuação indentada em dois espaços. A continuação não começa com-, cai no "ignorada", e o item fica só com a primeira linha. - Alcance: 9 das 24 notas têm item com continuação: 0.4.2, 0.9.1, 0.10.0, 0.11.0, 0.11.1, 0.11.2, 0.12.0, 0.13.0 e 0.14.0, todas publicadas. O site de docs não sofre do mesmo defeito: o hook do Andamento (
docs/hooks/andamento.py,ler_notas, spec 0058) já junta a linha indentada ao item anterior.
5. Revisão do diagnóstico¶
Diagnóstico de uma linha, confirmado pelo teste vermelho: com o parser antigo, o primeiro item da 0.14.0 termina em "Taxas —".
6. Correção¶
apps/api¶
Nada.
apps/web¶
interpretarpassa a ser exportada (para o teste) e junta ao último item a linha não vazia e indentada que vem logo depois dele. Linha em branco encerra o item; linha solta sem indentação continua ignorada. A RN4 da spec 0043 ganhou uma nota dizendo isso.- A docstring do contrato (RN4) passa a dizer isso.
- O texto do contrato no rascunho de nota do
/ship(.claude/skills/ship/scripts/rascunho-nota.sh) diz o mesmo, para quem escreve a nota.
apps/e2e¶
Nada. O comportamento é de unidade (parser de texto), coberto por index.test.ts.
7. Risco / impacto colateral¶
Nota que tivesse linha indentada depois de item de propósito, esperando que ela sumisse, passaria a mostrá-la. Nenhuma das 24 notas tem isso: toda linha indentada que segue item é continuação dele.
8. Critérios de aceite¶
- CA1 — Item com continuação indentada sai inteiro, numa frase.
- CA2 — Linha solta sem indentação continua ignorada.
- CA3 — Linha em branco encerra o item.
- CA4 — O primeiro item da nota real 0.14.0 sai inteiro.
9. Plano¶
Teste vermelho → correção no parser → red-green → suíte do web.
10. Decisões em aberto¶
Nenhuma.
11. Revisão da correção¶
Red-green com make test-web ARQ=src/versoes/index.test.ts:
- Com a correção: 4 de 4 verdes.
- Com a correção desligada (mantida só a exportação): 2 vermelhos, CA1 e CA4.
- Com a correção restaurada: 4 de 4 verdes.
Suíte do web inteira (make test-web): 64 arquivos e 628 testes, todos verdes. make preflight verde.
Revisão de contexto limpo, rubricas diagnostico.md e correcao.md, 2026-10-15: aprovada, sem Critical nem Important. O revisor conferiu o alcance (as 9 notas) reproduzindo o parser sobre as 24 e, por leitura, que os testes 1 e 4 falham sem a correção (o red-green acima é a prova executada). Quatro Minor, todos corrigidos nesta rodada: a RN4 da spec 0043 ficou divergente (ganhou nota); o comentário interno do rascunho-nota.sh ainda dizia "nada mais"; a causa não citava linha; faltava dizer viewport e efeito do PWA.
12. Registro¶
- 2026-10-15 — diagnóstico, teste vermelho, correção e red-green na branch
fix/0024-novidades-cortam-item-longo. - 2026-10-15 — revisão aprovada; mesclado na
maine publicado pelo/ship.