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>
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-checkstep builds withrust:1.78-slimto 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:
-
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
-
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. -
Update all locations when bumping:
- Root
Cargo.toml:[workspace.package] rust-version - CI workflow:
rust:image tag in themsrv-checkstep - README: MSRV badge
clippy.toml:msrvsetting- This CHANGELOG.md: entry announcing the bump
- Root
-
CI enforcement: The
msrv-checkstep inpdftract-ciwill 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.