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 pelorust-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
- MSRV = 1.88 em
Cargo.toml(rust-version = "1.88") e emclippy.toml(msrv = "1.88"). - CI job
msrvinstala 1.88 (não 1.85). - README e ADRs atualizados.
- 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-versionprecisa 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 porcargo updatereabriria 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.23exige 1.88; ficar entre 1.87 e 1.88 imediatamente reabriria a discussão na próxima minor dodarling. - Trocar
etceterapordirectories/dirs: tecnicamente possível, masetceteraé 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).