fix(dng): repair the real-camera conformance tier and gate it per-PR - #415
Merged
Conversation
`DecodedDng::exif_extra` went away when gamut-dng moved to the metadata facade (#353), leaving `probe` reading a field that no longer exists — so the real-camera conformance tier has not compiled since. The EXIF data did not disappear, it moved inside `DngMetadata::exif`, so the counter now reports that sub-IFD's own entry count instead. Also reports the two projections #353 added, `color_profile` and `noise_profile`. probe is how a corpus file's MANIFEST expectations are derived from measured behaviour, and those tags used to reach it as the `ifd0_extra`/`raw_extra` residue it already prints.
The tier is excluded from the workspace *and* nothing depends on it — it is invoked by manifest path — so neither `clippy --workspace --all-targets` nor `test --workspace` ever builds it. A gamut-dng API change can therefore break it while every per-PR gate stays green, which is how the previous commit's breakage reached master: only the extended run noticed, at compile time, before a single sample was decoded. `check` needs no corpus, so the lint job carries it without the ~178 MiB fetch, and the Adobe DNG SDK it links is already built there for gamut-dng's own dev-dependency. The corpus-backed assertions stay in `test-dng-real`.
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 #353.
Both feature halves of #353 are already merged — #410 (typed
ColorProfileInfo/NoiseProfileread projection) and #411 (
gamut-dngconsumes thegamut-metadatafacade;ExifMetadataremoved). This is the real-camera conformance tier catching up to them, plus the CI gap that let
it fall behind.
The breakage
#411 removed
DecodedDng::exif_extra— correctly, since the whole EXIF sub-IFD now arrives insideDngMetadata::exifand an extras list beside it would be the same data twice. Buttooling/gamut-dng-real-conformance/examples/probe.rsstill read that field:Extended CI's "Real camera DNG conformance" job was green on the #410 merge and has failed on
every push since #411. Because the failure is at compile time, the gate has never run a
single sample against #411's change — the corpus assertions, the Adobe DNG SDK differential and
the preserving-rewrite round-trip have all been dark since that merge.
Why no per-PR gate caught it
gamut-dng-real-conformanceis excluded from the workspace and nothing depends on it — it isinvoked by manifest path from
mise run test-dng-real. Socargo clippy --workspace --all-targetsandcargo test --workspacenever compile it, and both #410 and #411 validatedclean. It is the only excluded tooling crate with this property: every other one is a path
dev-dependency of a workspace crate, so the workspace build reaches it.
ci:addsmise run check-dng-realto the lint job to close that.cargo checkneeds no corpus,so the job does not grow the ~178 MiB fetch, and the expensive half — the Adobe DNG SDK — is
already built there for
gamut-dng's own dev-dependency ongamut-dng-oracle.The probe change
Beyond the repair, probe now reports the two projections #353 added. probe is how a corpus file's
MANIFEST.tomlexpectations are derived from measured behaviour, and these tags previouslyreached it as the
ifd0_extra/raw_extraresidue it already prints — so typing them made probequieter without making it more informative. Measured output:
exif=31is the EXIF sub-IFD's own entry count, not an extras list — the field the counter nowreads is the facade's whole directory, where the pre-#411
ExifMetadatacarried five.The Adobe-converted Canon file exercises the table path (
hue_sat=[90x30x1 Linear, 90x30x1 Linear, -] look=36x8x16 Linear), and the Leica M Monochrom — no colour calibration at all —prints
color_profile : none/noise_profile : none, which is the case #410 called out forkeeping
noise_profileoffCameraProfile.Validation
mise run check-dng-realmise run test-dng-realmise run lintmise run fmt-checkmise run check-commitsprobeon 4 corpus filestest-dng-realwas run against the full fetched corpus — the first time it has executed against#411's change.
Notes
crates/: noCargo.toml,CHANGELOG.mdorSTATUS.md,which chore: release #412 (the open
chore: release) owns. Commit types aretest/ciso release-plz derivesno version bump while that PR is in flight; none of the three paths sits in a published package.
cargo fmt --alldoes not reach this excluded crate either, sogaps.rs,src/lib.rs,tests/real_corpus.rsand parts ofprobe.rscarry nightly-rustfmtdeviations. Same root cause, but reformatting them here would bury a 3-file fix in unrelated
churn. Worth a follow-up that decides whether the tier should be fmt-gated too.