Skip to content

feat(api)!: finalize the v1 image API surface; consolidated CHANGELOG - #57

Merged
justin13888 merged 1 commit into
masterfrom
37-finalize-v1-api
Jul 19, 2026
Merged

feat(api)!: finalize the v1 image API surface; consolidated CHANGELOG#57
justin13888 merged 1 commit into
masterfrom
37-finalize-v1-api

Conversation

@justin13888

Copy link
Copy Markdown
Collaborator

Closes #37 (reviewable scope — the rc cut is yours, checklist below).

Stacked on #56 — the top of the stack; merge order #42 → … → #56 → this.

What is Delivered

  • Semver review vs docs/V1_DESIGN.md, item by item (full table in the work log). Highlights:
    • Public option enums are now strictly format-keyed: WebpLibwebp/SvgResvg/PpmZune/PngGamut variants renamed to WebP/Svg/Ppm/Png. Backend identity lives in registry ids; config-type names stay backend-named only where that is the honest truth (blocked/exception backends), and that rule is now documented.
    • Three never-wired planned-backend config structs deleted (LibjpegTurboEncodeConfig, MozjpegEncodeConfig, SvtAv1EncodeConfig) — dead letters under the upstream-first policy.
    • RawFile::format() added — the one genuine gap vs the design doc. One missing prelude export fixed.
    • Error model verified to match (Gamut{context,source}, HwDecoderUnavailable{codec,reason}; gamut#254 noted for future context enrichment).
  • Rustdoc pass: all five publishable doc configs clean under -D warnings; the facade's example doctest was silently broken (ignore + wrong arity) — fixed and now actually runs; image crate documents the gamut-backed architecture.
  • CHANGELOG: [Unreleased] consolidated into the v1 section — release-shape preamble, grouped breaking list, additions, the full dependency graveyard, and migration-surfaced fixes.

Owner checklist to cut 1.0.0-rc (not performed — your call per the issue)

  • Bump workspace version (e.g. 1.0.0-rc.1) in one commit
  • Move CHANGELOG [Unreleased] under the version heading
  • Full gate on the release commit (clippy, workspace + full tests, benchmark run per policy)
  • Confirm the gamut pin (dde9f64) is the intended release pin
  • Tag v1.0.0-rc.1 — git-consumable release; skip/disable the crates.io publish flow until gamut publishes

Verification Done

Run independently: cargo test --workspace 388/0; --features full 563/0; facade doctest 1/0 (newly compiling); docs 5/5 configs clean under -D warnings; clippy -D warnings 0; fmt clean; lefthook green.

The semver review against docs/V1_DESIGN.md, item by item. The public option
enums are now strictly format-keyed: DecodeOptions::WebpLibwebp/SvgResvg/
PpmZune and EncodeOptions::PngGamut/WebpLibwebp renamed to WebP/Svg/Ppm/Png —
backend identity belongs to registry ids and config-type names (which stay
honestly backend-named only for blocked/exception backends, now documented as
the rule). Three never-wired planned-backend config structs
(LibjpegTurboEncodeConfig, MozjpegEncodeConfig, SvtAv1EncodeConfig) are
deleted — the upstream-first policy makes them dead letters. RawFile gains
the format() accessor V1_DESIGN promised; the prelude gains the one missing
decode config export.

Rustdoc: all five publishable doc configs build clean under -D warnings; the
image crate documents its gamut-backed architecture; the facade's example
doctest was broken (wrong arity, hidden behind ignore) and now compiles and
runs. V1_DESIGN.md is reconciled to shipped reality where the delivered shape
was the deliberate improvement (encode_rgb_image names, RgbImage surface,
hwdec CodecConfig, ColorDescription consts, option-field tables).

CHANGELOG's [Unreleased] is rewritten as the consolidated v1 section: the
release-shape preamble (git-consumable release until gamut publishes;
crates.io deferred by owner decision), one grouped breaking list, the
additions (rawshift-hwdec + VAAPI, container APIs, compile-boundary CI), the
dependency graveyard, and the fixes the migration surfaced. The version bump
and rc tag are deliberately NOT performed — they are the owner's explicit
release decision per the issue.

BREAKING CHANGE: DecodeOptions/EncodeOptions variant renames; three unused
config structs removed.
Base automatically changed from 35-fixtures-benches-final to master July 19, 2026 01:51
@justin13888
justin13888 merged commit c4aec12 into master Jul 19, 2026
@justin13888
justin13888 deleted the 37-finalize-v1-api branch July 20, 2026 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Finalize v1 high-level image API and release

1 participant