Skip to content

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), the feat! 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!: VmafLegacyQualityRunner float-path runner retired (#87, ADR-0749)

Added (notable)

  • vmafx-server HTTP transport + observability foundation (#1583)
  • --netflix-compat CLI 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_combine resolution dispatch (#91)
  • C++23 Wave 7: drop orphan cpu.c, activate cpu.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 → strtod precision preservation in dict (#48)
  • strlen < 5 underflow 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