Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 2 additions & 11 deletions .github/workflows/full-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,22 +227,13 @@ jobs:
- run: cargo xtask machete

repo-lint:
runs-on: macos-latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
with:
toolchain: stable
- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
with:
toolchain: nightly-2026-06-28
targets: aarch64-apple-darwin
- uses: taiki-e/install-action@7a79fe8c3a13344501c80d99cae481c1c9085912
with:
tool: cargo-public-api@0.52.0
- run: cargo public-api --version || cargo install cargo-public-api --version 0.52.0 --locked
- name: Run normal and strict repository policy
run: cargo xtask repo-lint --strict
- run: cargo xtask repo-lint

release-integrity:
runs-on: ubuntu-latest
Expand Down
41 changes: 41 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,49 @@
This changelog tracks the current release line. Historical phase notes
and stale roadmap entries have been removed from the public documentation set.

## [Unreleased]

Staged workspace version: `0.8.0`.

- Breaking: decoding is strict by default in `j2k` and `j2k-native`. Callers
that intentionally accept the documented JP2/JPH optional-metadata
recoveries must select `DecodeSettings::lenient()` per job; raw codestream,
entropy, bounds, overflow, allocation, and resource-safety checks remain
strict in both modes.
- Breaking: lenient decoding now warns only when a permitted recovery was
actually used. `J2kDecodeWarning::LenientDecodeMode` is renamed to
`J2kDecodeWarning::LenientMetadataRecovery`. New
`J2kView::parse_with_settings` and `J2kDecoder::new_with_settings`
constructors keep this policy local to one input.
- Adds `CudaLosslessEncoder`, a reusable, exclusively borrowed lossless-encode
façade with explicit `Auto`, CPU-only, and strict-CUDA routing. Its opaque
result reports requested and actual execution plus any unavailable-device or
incomplete-route fallback; execution errors are returned without a hidden
full CPU retry, and the encoder can be reused after failure.
- Routes 25–38-bit `Auto` lossless encode requests to the supported CPU path
while preserving `RequireDevice` failure semantics.
- Defines stable, experimental, implementation, and binary API tiers in the
ordered release manifest, and makes the `0.7.5`→`0.8.0` semver transition
fail closed with an exact source- and behavior-break ledger. A later `0.8.x`
candidate must use a published `v0.8.0` baseline.
- Fixes the published `j2k-ml 0.7.5` `cuda` and `metal` clean-consumer
failures. The adapters now use accelerator codec decode, explicit
decoded-pixel readback, and ordinary Burn tensor upload through released
dependency APIs.
- Adds `CudaUploadBurnDecoder` and `MetalUploadBurnDecoder` as explicit aliases
for staged host-memory upload behavior while preserving `CudaBurnDecoder`,
`MetalBurnDecoder`, and their inherent method paths unchanged.
- Removes the private CubeCL and wgpu patch sources from the release graph.
This is not a direct-destination or zero-copy accelerator contract.

## [0.7.5] - 2026-07-22

- Known release defect: the published `j2k-ml 0.7.5` `cuda` and `metal`
features depend on accelerator interop methods that are not present in the
registry CubeCL and wgpu releases selected by clean consumers. The `cpu`
feature is unaffected. Version `0.8.0` replaces those routes with explicitly
staged accelerator decode, decoded-pixel readback, and ordinary Burn tensor
upload using released public APIs.
- Compatibility exception: this release is an explicitly source-incompatible
`0.7.x` patch against the published `0.7.3` API. The reviewed compatibility
evidence and migration notes cover the complete contracted surface.
Expand Down
54 changes: 32 additions & 22 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
resolver = "2"
members = [
"crates/j2k",
"crates/j2k-alloc-probe",
"crates/j2k-codec-math",
"crates/j2k-core",
"crates/j2k-compare",
Expand Down Expand Up @@ -30,7 +31,7 @@ exclude = [
]

[workspace.package]
version = "0.7.5"
version = "0.8.0"
edition = "2021"
rust-version = "1.96"
license = "MIT OR Apache-2.0"
Expand Down Expand Up @@ -63,6 +64,7 @@ fearless_simd = "0.4"
libm = { version = "0.2", default-features = false }
openjpeg-sys = "1.0.12"
proc-macro2 = "1.0.106"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_yaml_ng = "0.10"
syn = "2.0.117"
Expand Down
34 changes: 34 additions & 0 deletions crates/j2k-alloc-probe/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
[package]
name = "j2k-alloc-probe"
description = "Dev-only process-wide allocation probes for j2k codec boundaries"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
publish = false

[lib]
name = "j2k_alloc_probe"
path = "src/lib.rs"

[dependencies]

[dev-dependencies]
j2k-native = { path = "../j2k-native" }
j2k-profile = { path = "../j2k-profile" }
proptest = { workspace = true }
rayon = { workspace = true }

[[test]]
name = "allocation_probe"
path = "tests/main.rs"
harness = false

[lints.rust]
unsafe_code = "allow"
unsafe_op_in_unsafe_fn = "deny"
unreachable_pub = "warn"

[lints.clippy]
all = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
Loading
Loading