pdftract/CHANGELOG.md
jedarden 3c8ac46a3c feat(pdftract-2w02): implement MSRV gate with CI check
Add quality-matrix implementation to pdftract-ci with msrv-check step
using rust:1.78-slim to detect usage of newer Rust features.

Changes:
- .ci/argo-workflows/pdftract-ci.yaml: Implement quality-matrix DAG with
  msrv-check, clippy-fmt, and cargo-audit templates
- CHANGELOG.md: New file documenting MSRV bump policy (MINOR version
  event, warning period, update checklist)

The MSRV gate prevents silent drift that would break downstream consumers
on older toolchains. Any Rust 1.79+ feature (e.g., let-else, core::error::Error)
will fail the msrv-check step, triggering a policy review.

See notes/pdftract-2w02.md for acceptance criteria verification.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-05-20 19:03:53 -04:00

2.1 KiB

Changelog

All notable changes to pdftract will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

  • MSRV gate in CI: msrv-check step builds with rust:1.78-slim to detect new-Rust feature usage

Minimum Supported Rust Version (MSRV) Policy

The Minimum Supported Rust Version (MSRV) for pdftract is 1.78.

Bumping the MSRV

Bumping the MSRV is a MINOR version event with the following requirements:

  1. At least one release of warning: The changelog must announce the planned MSRV bump at least one minor release before it takes effect. For example:

    • v0.2.0: "MSRV will bump to 1.79 in v0.3.0"
    • v0.3.0: MSRV actually bumps to 1.79
  2. Never in a PATCH release: MSRV bumps must not occur in patch releases (e.g., v0.2.0 -> v0.2.1), as downstream consumers expect patch versions to remain compatible with their existing toolchain.

  3. Update all locations when bumping:

    • Root Cargo.toml: [workspace.package] rust-version
    • CI workflow: rust: image tag in the msrv-check step
    • README: MSRV badge
    • clippy.toml: msrv setting
    • This CHANGELOG.md: entry announcing the bump
  4. CI enforcement: The msrv-check step in pdftract-ci will fail if any source file requires a newer Rust version than declared. This prevents silent MSRV drift.

Why MSRV Matters

  • Downstream consumers (library users, binary redistributors) may be stuck on older Rust versions due to platform constraints, distribution policies, or transitive dependency requirements.
  • Silent MSRV drift (e.g., using let-else, core::error::Error, or async-fn-in-trait) breaks these consumers without warning.
  • The MSRV gate makes Rust-version drift a code-review-time conversation, not a post-release surprise.

Current MSRV: 1.78

Declared in Cargo.toml via rust-version = "1.78" under [workspace.package]. Both pdftract-core and pdftract-cli inherit this value.