Release Preview — v3.1.0-lusoris.0¶
Status: Dry-run preview. No tag created. No release published. Date: 2026-05-29 Generated by: /prep-release skill (manual invocation)
1. Version bump analysis¶
| Item | Value |
|---|---|
| Current version (manifest) | 3.0.0-lusoris.0 |
| Proposed next version | 3.1.0-lusoris.0 |
| Bump type | MINOR |
| Tag that will be created | v3.1.0-lusoris.0 |
| Version scheme match | v3.x.y-lusoris.N — PASS |
Rationale¶
Release-please v5 follows the Conventional Commits semver rules against the bootstrap-sha (42276bc5):
feat!:/feat(scope)!:/fix(scope)!:commits present (MAJOR trigger):feat(core)!: drop Vulkan backend(#47, ADR-0726)feat!: sunset legacy native build modes(#52, ADR-0728)fix(cuda)!: wrap all __global__ kernels in extern "C"(#80)feat!: sunset VmafLegacyQualityRunner(#87, ADR-0749)fix(cuda)!: remove conflict marker in integer_vif_cuda.c(#108)
However, the current version is 3.0.0-lusoris.0 and the package uses "release-type": "simple" with "versioning": "default". The release-please "simple" release type does not respect MAJOR bumps for pre-3.x series — it treats the 3 in 3.0.0 as the major and bumps minor on any feat! (the default semver interpretation: post-1.0, breaking → major; but simple type in release-please v5 maps feat! to minor when the project has not opted into the always-bump-types override).
Actual expected behaviour: release-please "simple" type with no bump-minor-pre-major: true and versioning: default will produce: - Any feat! or BREAKING CHANGE commit → MAJOR bump → 4.0.0-lusoris.0
Corrected version bump: MAJOR → 4.0.0-lusoris.0
Note: If the intended next tag is
3.1.0-lusoris.0(minor bump), thefeat!breaking-change markers in the commit messages trigger a MAJOR bump per semver. This is a blocker (see §5).
2. CHANGELOG diff preview¶
The Unreleased block in CHANGELOG.md (14 006 lines, rendered from ~200+ changelog.d/ fragment files) will be promoted to a versioned section. Key sections present:
Removed (breaking)¶
- CI: MinGW64 Windows build removed (ADR-0691)
- CI: i686 / no-asm 32-bit Linux build removed (ADR-0691)
fix(cuda)!:conflict marker removal —integer_vif_cuda.c(#108)feat(core)!:Vulkan backend dropped (#47, ADR-0726)feat!:legacy native build modes sunset (#52, ADR-0728)fix(cuda)!:extern C wrap for__global__kernels (#80)feat!:VmafLegacyQualityRunnerfloat-path runner retired (#87, ADR-0749)
Added (notable)¶
vmafx-serverHTTP transport + observability foundation (#1583)--netflix-compatCLI flag (#1582)- Production multi-arch Dockerfile + image signing + SBOM (#1572)
- Helm chart + K8s manifests with 3-vendor GPU device-plugin support (#1570)
- VMAFX binary + AI tool aliases (#1565)
- CHUG HDR held-out test validator (#1551)
- VMAFX rebrand — umbrella ADR + dual-license foundation (#1546)
- CUDA
filter1d+ssim_vert_combineresolution dispatch (#91) - C++23 Wave 7: drop orphan
cpu.c, activatecpu.cpp(#97) - Multi-resolution benchmark baseline + versioned JSON (#92)
- FastDVDnet temporal pre-filter scaffold (#T6-7)
- GPU-parity matrix CI gate (ADR-0214)
Fixed (notable)¶
- HIP wave32 carry-preserving int64 reduction in VIF/motion (#1573)
- pytest collection crash + ADR-0543 binary path + PyTorch 2.10 deprecations (#1559)
- libsvtav1 default CRF format (#1558)
- Non-numeric column filter in AI pipelines (#1552)
- Banned functions in vendored cJSON (ADR-0683, #1536)
- CUDA pinned-host leak in
vmaf_cuda_kernel_readback_free(#94) strtof → strtodprecision preservation in dict (#48)strlen < 5underflow guard in model_collection_append (#54)
Performance (notable)¶
- CUDA: CIEDE
__ldg()routing (#102) - CUDA: ms_ssim_vert_lcs + horiz
__ldg+__launch_bounds(#99) - CUDA: SSIM vert_combine smem + pinned leak fix (#93)
- CUDA: ms_ssim_decimate smem tiling + adm_cm register reduction (#79)
- HIP: AdmBufferHip by pointer in ADM kernels (#101)
3. Supply-chain / Sigstore / OIDC prerequisites¶
| Gate | Status |
|---|---|
gh auth — workflow scope | PASS (token scopes confirmed) |
id-token: write in supply-chain.yml | PASS (present on signing + SLSA jobs) |
cosign v3.0.6 pinned in supply-chain.yml | PASS (SHA-pinned action) |
cosign CLI available locally | FAIL — cosign not installed on host |
SLSA L3 generator (slsa-github-generator v2.1.0) | PASS (SHA-pinned) |
SBOM generator (anchore/sbom-action v0.24.0) | PASS (in workflow) |
syft CLI available locally | FAIL — not installed on host |
cyclonedx-cli available locally | FAIL — not installed on host |
release-please-action v5.0.0 SHA-pinned | PASS |
release-please.yml id-token scope | N/A — token only needs contents: write + pull-requests: write |
Local cosign/syft/cyclonedx-cli absences are not blockers — signing and SBOM generation run in CI on the release:published event; host tools are only needed for local pre-flight signing verification, which is optional.
4. Version scheme validation¶
release-please-config.json uses:
"release-type": "simple"— respects Conventional Commits bump rules"versioning": "default"— standard semver: breaking → major, feat → minor, fix → patch- Package name:
vmaf-lusoris - Extra-files:
core/meson.build(version string auto-updated on release)
The proposed tag v4.0.0-lusoris.0 matches the scheme v3.x.y-lusoris.N at its structural level (v<MAJOR>.<MINOR>.<PATCH>-lusoris.<N>). The major version advances from 3 → 4 due to breaking commits. This is expected and correct per Conventional Commits.
5. Blockers before a real release PR¶
| # | Blocker | Severity | Action |
|---|---|---|---|
| 1 | MAJOR bump expected (4.0.0), not MINOR (3.1.0) — five feat!/fix! breaking commits are in the unreleased window. If the intent is 3.1.0, the breaking-change ! markers must be removed from those commit messages (impossible after push) or the version must be 4.0.0. | HIGH | Accept 4.0.0-lusoris.0 as the next tag, or explicitly document why the breaking changes don't warrant a major bump and add "versioning": "always-bump-minor" override to config. |
| 2 | Changelog drift check passed — concat-changelog-fragments.sh --check exited 0. | OK | No action. |
| 3 | core/meson.build version string — extra-files entry means release-please will rewrite the version in core/meson.build. Verify the regex placeholder is present. | MEDIUM | Run grep "version:" core/meson.build to confirm. |
| 4 | cosign/syft not installed locally — CI signing will work; local pre-flight cannot run. | LOW | cargo install cosign or brew install cosign if local pre-flight is desired. |
| 5 | One active PR rule — per repo rule only one PR should be in flight at a time. Confirm no other open non-draft PRs before merging the release PR. | LOW | gh pr list --state open before merge. |
6. Reproduce locally¶
# Verify changelog is current
bash scripts/release/concat-changelog-fragments.sh --check
# Dry-run release-please (requires release-please CLI installed)
npx release-please@16 manifest-pr \
--dry-run \
--repo-url=VMAFx/vmafx \
--token="$(gh auth token)"
# Verify meson.build version placeholder
grep "version:" core/meson.build | head -5