feat(deps): add gamut as pinned git dependency and raise MSRV to 1.92 - #40
Merged
Merged
Conversation
Adds the gamut upstream dependency to `[workspace.dependencies]`, pinned to an exact commit hash per the upstream-first policy in AGENTS.md — never a branch, never crates.io until gamut publishes. Crates are added lazily as each migration issue starts consuming one, so the dependency list stays an accurate record of what rawshift actually uses. `gamut-core` is the first entry and is wired into `rawshift-core` so CI resolves, fetches, and compiles the pinned dependency rather than leaving an inert manifest entry. The pin is `b08a1a2`, not the `295c8924` named in the issue: that hash predates the four upstream gates that landed on gamut master on 2026-07-17/18 — gamut#252/#262/#263 (gamut-ifd RAW-grade parsing + hardening), gamut#28 (JPEG), gamut#249 (PNG decode), and gamut#250 (AVIF codestream handoff). Pinning to `b08a1a2` is what unblocks the migration issues that depend on them. MSRV moves 1.90.0 -> 1.92.0, the minimum gamut requires. This tracks upstream per the README MSRV policy and is not an independent raise. The bump is applied to the workspace `rust-version`, `rust-toolchain.toml`, and all eight CI toolchain pins. Documents the pin-bump procedure in the README: one commit that only moves the hash, confirmation the upstream gate landed, a full test run, a full benchmark run against the pre-bump baseline, and a CHANGELOG note for behavioural change. The one code change is a lint allow. Rust 1.92 reports `unused_assignments` against binrw's generated `BinRead` impl for `RawIfdEntry`/`RawBigTiffIfdEntry`: the `is_little` import is read by every field's `#[br(is_little = ...)]`, but the expansion assigns the binding a placeholder first. The lint fires inside the generated impl, which a struct-level attribute does not reach, so it is allowed at module scope in `tiff/parser.rs`. That module is deleted wholesale by the gamut-ifd migration.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #17.
What is Delivered
[workspace.dependencies]gainsgamut-core, pinned to an exact commit hash per the upstream-first policy inAGENTS.md— never a branch, never crates.io until gamut publishes. Crates are added lazily, as each migration issue starts consuming one, so the dependency list stays an accurate record of what rawshift actually uses.[workspace.dependencies]that no member references is never fetched or compiled.gamut-coreis therefore wired intorawshift-core, so CI genuinely resolves, fetches, and compiles the pin. It is consumed in code by the core-primitives migration (rawshift-core: replace generic primitives with gamut re-exports, keep sensor types #18).rust-version,rust-toolchain.toml, and all eight CI toolchain pins.Deviation from the issue text: the pin is
b08a1a2, not295c8924The hash named in the issue predates four upstream gates that landed on gamut
masteron 2026-07-17/18:All four are closed and merged. Pinning to
295c8924would leave those four issues blocked for no reason;b08a1a2is what actually unblocks them. Verified independently that gamut-jpeg, gamut-png, gamut-avif, and gamut-ifd compile clean at this rev with zerotodo!/unimplemented!.One code change
Rust 1.92 reports
unused_assignmentsagainst binrw's generatedBinReadimpl forRawIfdEntry/RawBigTiffIfdEntry. Theis_littleimport is read — by every field's#[br(is_little = ...)]— but the expansion assigns the binding a placeholder before overwriting it. The lint fires inside the generated impl, which a struct-level attribute does not reach, so it is allowed at module scope intiff/parser.rs. That module is deleted wholesale by the gamut-ifd migration (#20).Verification Done
Run locally on the 1.92.0 toolchain this PR pins:
cargo check --workspace— clean;Cargo.lockrecordsgamut-core v2.0.0fromgit+…?rev=b08a1a22, confirming the pin resolves and builds.cargo clippy --workspace --all-targets -- -D warnings— clean.cargo clippy -p rawshift-image --all-targets --features full -- -D warnings— clean. This is the check that caught the binrw lint; the default-feature clippy run passes without it, sofullis the load-bearing gate here.cargo test --workspace— 372 passed, 0 failed (5 ignored, fixture-gated).cargo fmt --all -- --check— clean.No behavioural change, so no CHANGELOG entry: this bump adds the dependency rather than moving an existing pin.