Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ADR-004: YAML via serde_yaml_ng (serde_yaml e serde_yml banidos)

Date: 2026-05-24 Status: Superseded (backend selection) by ADR-054 Author: Rômulo Febasi


Context

Frontmatter de Markdown em Synapse é YAML. Em maio de 2026 o ecossistema Rust YAML está fragmentado e perigoso:

  • serde_yaml (dtolnay): arquivado upstream, última release 0.9.34+deprecated (mar/2024). Sem manutenção.
  • serde_yml: fork inicialmente popular via search/Google. Possui RUSTSEC-2025-0068: “unsound and unmaintained, AI-generated changes are complete nonsense or unsound”. cargo deny check rejeita.
  • serde_yaml_ng (acatton): fork mínimo do último commit do dtolnay, mantido ativamente, ~686k downloads/mês, em transição para libyaml-safer.
  • yaml-serde (yaml org): replacement “oficial” em desenvolvimento, ainda não ecossistema-default.

Decision

  • Usar serde_yaml_ng = "0.10".
  • Banir serde_yaml e serde_yml em deny.toml.
  • Isolar todas as operações YAML em crate::store::frontmatter para que swap futuro (para yaml-serde quando maturar) seja um one-file change.

Consequences

  • + sem advisory bloqueando releases.
  • + API idêntica à do serde_yaml original: sem custo de migração.
  • − gray_matter (usado para split de frontmatter) pode trazer YAML parser próprio. Auditar via cargo tree -d periodicamente; se trouxer um banido, considerar fork ou substituir por split manual ---
    • serde_yaml_ng.

Alternatives considered

  • JSON ou TOML no frontmatter: rejeitado. YAML é o padrão de fato para frontmatter em PKMs (Obsidian, Logseq, Hugo, Jekyll); divergir fricciona usuário que já tem hábito.
  • Implementar parser YAML mínimo: não é nosso problema resolver YAML para o ecossistema; custo alto, ganho zero.