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-009: Subir MSRV para 1.88 (supersede ADR-006)

Date: 2026-05-24 Status: Accepted Supersedes: ADR-006 Author: Rômulo Febasi


Context

A ADR-006 fixou rust-version = "1.85" como piso da v0.x, com o argumento “1.85 é o piso da edição 2024, ganho zero em subir”. Esse raciocínio não bateu com a realidade do ecossistema:

  • etcetera 0.11.0 (única opção XDG decente para edição 2024) requer Rust 1.87.
  • darling 0.23.0 (puxado pelo rust-embed/vergen-gix) requer Rust 1.88.
  • vergen-gix 1.0.9, time 0.3.47+, wit-bindgen 0.51+, wasip3: todos exigem 1.87+ ou 1.88+.

Manter 1.85 obrigaria pinar versões antigas dessas deps no Cargo.lock, e cada cargo update reabriria a discussão. A primeira verificação real (CI rodando build on MSRV (1.85)) falhou imediatamente:

error: rustc 1.85.1 is not supported by the following packages:
  darling@0.23.0 requires rustc 1.88.0
  etcetera@0.11.0 requires rustc 1.87.0

Decision

  1. MSRV = 1.88 em Cargo.toml (rust-version = "1.88") e em clippy.toml (msrv = "1.88").
  2. CI job msrv instala 1.88 (não 1.85).
  3. README e ADRs atualizados.
  4. A política de “não subir o MSRV agressivamente; subir só com justificativa registrada” da ADR-006 permanece válida: esta ADR-009 é justamente a justificativa formal para esta subida.

Consequences

  • + Build passa com as deps recomendadas em ADR-004 e o dep-set inicial.
  • + Compatível com Rust stable 1.88+ (lançada fev/2026; 7 versões atrás do atual 1.95 em maio/2026). Folga saudável para packagers.
  • − Devs com Rust < 1.88 precisam rustup update stable. Não há uso real disso em 2026.
  • − Primeira ADR retratada: registra que rust-version precisa ser checado contra o resolver real, não inferido.

Alternatives considered

  • Pinar versões antigas das deps no Cargo.lock (manter 1.85): rejeitado. Cada bump puxado por cargo update reabriria a discussão; debate sem fim para ganho marginal (Debian stable já tem Rust 1.88).
  • Subir só para 1.87 (mínimo necessário para etcetera): rejeitado. darling 0.23 exige 1.88; ficar entre 1.87 e 1.88 imediatamente reabriria a discussão na próxima minor do darling.
  • Trocar etcetera por directories/dirs: tecnicamente possível, mas etcetera é a escolha certa para a UX de paths em macOS (ver ADR-001 e crítica §5). Não vamos trocar arquitetura para evitar bump de MSRV.

Emenda 2026-06-04 (SYN-168): MSRV sobe para 1.89

Mesma lógica deste ADR (acompanhar o piso real do ecossistema), nova ocasião. O backend de NER do v0.5 (kreuzberg-gliner-rs 0.2.0, SYN-164) puxa wide 1.4.0, que declara rust-version = "1.89". Como o kreuzberg-gliner-rs não aceita wide < 1.4 e não vamos forkar uma dep de ML só para segurar o MSRV, o piso passa a ser 1.89.

Detectado de-riscando o cargo release do v0.5: um build em 1.88 exato (--locked) aborta na resolução com wide@1.4.0 requires rustc 1.89, e o job msrv do CI (que fixava @1.88 e buildava --all-features) quebraria assim que o gliner_backend entrasse no grafo padrão. Atualizado: Cargo.toml rust-version = "1.89", job msrv do CI para @1.89 (em ubuntu-24.04), e este ADR. O bump não tira nenhuma plataforma de baixo da mesa (toolchains 1.89+ amplamente disponíveis).