chore(release): introduce CHANGELOG + ADR-index fragment files (drop merge-conflict pain)#228
Closed
chore(release): introduce CHANGELOG + ADR-index fragment files (drop merge-conflict pain)#228
Conversation
54ec877 to
3130ca4
Compare
Merged
14 tasks
lusoris
pushed a commit
that referenced
this pull request
May 3, 2026
…p (ADR-0257) Captures the deep-dive on the NVIDIA-only cross-backend regression that surfaces when VkApplicationInfo.apiVersion is bumped from VK_API_VERSION_1_3 to VK_API_VERSION_1_4. Docs-only PR — no code change on master. Findings: - Compiled SPIR-V is byte-identical at glslc --target-env=vulkan1.3 vs vulkan1.4 for both vif.comp and ciede.comp (verified via cmp). The regression is purely runtime — NVIDIA's shader compiler flips its default FMA-contraction policy under core shaderFloatControls2 (promoted to Vulkan 1.4). - Vulkan SPIR-V exposes no module-wide ContractionOff execution mode (Kernel-capability only); the only knob is per-result OpDecorate NoContraction (GLSL precise). - The fork has no in-flight requirement for any 1.4-promoted feature, so deferring the bump is operationally free. Decision: defer the bump and track the two-step fix as backlog item T-VK-1.4-BUMP — (A) tag load-bearing FP ops 'precise' in vif.comp + ciede.comp, (B) bump only after the gate is clean on NVIDIA + RADV + lavapipe at places=4. Adds: - ADR-0257 (Accepted) and research-0053 with the full investigation trail, prototypes, and decision matrix. - AGENTS.md invariant note in libvmaf/src/vulkan/ pinning the four apiVersion / VMA_VULKAN_VERSION sites at 1.3. - T-VK-1.4-BUMP row in docs/state.md Deferred section. - CHANGELOG entry + rebase-notes #228. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
14 tasks
lusoris
pushed a commit
that referenced
this pull request
May 3, 2026
…s 17 adapters) Refactors `tools/vmaf-tune/src/vmaftune/encode.py` away from the Phase A hard-coded `libx264` `-c:v / -preset / -crf` argv. `run_encode` now looks up the codec adapter via `codec_adapters.get_adapter(req.encoder)` and asks it for the FFmpeg argv slice via `adapter.ffmpeg_codec_args(preset, quality)` plus an optional `adapter.extra_params()`. Adapters that don't yet expose `ffmpeg_codec_args` fall back silently to the legacy x264-CRF shape so partial in-flight adapter PRs stay drivable end-to-end. `parse_versions(stderr, encoder=...)` selects a per-codec version probe (libx264, libx265, libsvtav1, libvpx-vp9, libaom-av1, libvvenc, NVENC, QSV, AMF, VideoToolbox); unknown encoders return "unknown" rather than raising. The `EncodeRequest.crf` field is preserved unchanged for the SCHEMA_VERSION=1 row contract; a `quality` property mirrors it for adapter-side codec-agnostic vocabulary. Existing 13-test x264 suite still green; new 19-test multi-codec suite covers 9 representative codec shapes plus the unknown-codec / missing-method fallback paths. Unblocks 17 in-flight codec adapter PRs (#360 libaom, #362 libx265, #364 NVENC, #366 AMF, #367 QSV, #368 libvvenc, #370 libsvtav1, #373 VideoToolbox, plus follow-on waves) which can now drive end-to-end encodes without copying or mutating the harness. Ships ADR-0294 + research digest 0054, vmaf-tune.md "Codec adapter contract" section, rebase-notes #228 invariant, CHANGELOG entry. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
lusoris
pushed a commit
that referenced
this pull request
May 4, 2026
…p (ADR-0257) Captures the deep-dive on the NVIDIA-only cross-backend regression that surfaces when VkApplicationInfo.apiVersion is bumped from VK_API_VERSION_1_3 to VK_API_VERSION_1_4. Docs-only PR — no code change on master. Findings: - Compiled SPIR-V is byte-identical at glslc --target-env=vulkan1.3 vs vulkan1.4 for both vif.comp and ciede.comp (verified via cmp). The regression is purely runtime — NVIDIA's shader compiler flips its default FMA-contraction policy under core shaderFloatControls2 (promoted to Vulkan 1.4). - Vulkan SPIR-V exposes no module-wide ContractionOff execution mode (Kernel-capability only); the only knob is per-result OpDecorate NoContraction (GLSL precise). - The fork has no in-flight requirement for any 1.4-promoted feature, so deferring the bump is operationally free. Decision: defer the bump and track the two-step fix as backlog item T-VK-1.4-BUMP — (A) tag load-bearing FP ops 'precise' in vif.comp + ciede.comp, (B) bump only after the gate is clean on NVIDIA + RADV + lavapipe at places=4. Adds: - ADR-0257 (Accepted) and research-0053 with the full investigation trail, prototypes, and decision matrix. - AGENTS.md invariant note in libvmaf/src/vulkan/ pinning the four apiVersion / VMA_VULKAN_VERSION sites at 1.3. - T-VK-1.4-BUMP row in docs/state.md Deferred section. - CHANGELOG entry + rebase-notes #228. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
lusoris
pushed a commit
that referenced
this pull request
May 4, 2026
…p (ADR-0257) Captures the deep-dive on the NVIDIA-only cross-backend regression that surfaces when VkApplicationInfo.apiVersion is bumped from VK_API_VERSION_1_3 to VK_API_VERSION_1_4. Docs-only PR — no code change on master. Findings: - Compiled SPIR-V is byte-identical at glslc --target-env=vulkan1.3 vs vulkan1.4 for both vif.comp and ciede.comp (verified via cmp). The regression is purely runtime — NVIDIA's shader compiler flips its default FMA-contraction policy under core shaderFloatControls2 (promoted to Vulkan 1.4). - Vulkan SPIR-V exposes no module-wide ContractionOff execution mode (Kernel-capability only); the only knob is per-result OpDecorate NoContraction (GLSL precise). - The fork has no in-flight requirement for any 1.4-promoted feature, so deferring the bump is operationally free. Decision: defer the bump and track the two-step fix as backlog item T-VK-1.4-BUMP — (A) tag load-bearing FP ops 'precise' in vif.comp + ciede.comp, (B) bump only after the gate is clean on NVIDIA + RADV + lavapipe at places=4. Adds: - ADR-0257 (Accepted) and research-0053 with the full investigation trail, prototypes, and decision matrix. - AGENTS.md invariant note in libvmaf/src/vulkan/ pinning the four apiVersion / VMA_VULKAN_VERSION sites at 1.3. - T-VK-1.4-BUMP row in docs/state.md Deferred section. - CHANGELOG entry + rebase-notes #228. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
May 4, 2026
…p (ADR-0257) (#338) Captures the deep-dive on the NVIDIA-only cross-backend regression that surfaces when VkApplicationInfo.apiVersion is bumped from VK_API_VERSION_1_3 to VK_API_VERSION_1_4. Docs-only PR — no code change on master. Findings: - Compiled SPIR-V is byte-identical at glslc --target-env=vulkan1.3 vs vulkan1.4 for both vif.comp and ciede.comp (verified via cmp). The regression is purely runtime — NVIDIA's shader compiler flips its default FMA-contraction policy under core shaderFloatControls2 (promoted to Vulkan 1.4). - Vulkan SPIR-V exposes no module-wide ContractionOff execution mode (Kernel-capability only); the only knob is per-result OpDecorate NoContraction (GLSL precise). - The fork has no in-flight requirement for any 1.4-promoted feature, so deferring the bump is operationally free. Decision: defer the bump and track the two-step fix as backlog item T-VK-1.4-BUMP — (A) tag load-bearing FP ops 'precise' in vif.comp + ciede.comp, (B) bump only after the gate is clean on NVIDIA + RADV + lavapipe at places=4. Adds: - ADR-0257 (Accepted) and research-0053 with the full investigation trail, prototypes, and decision matrix. - AGENTS.md invariant note in libvmaf/src/vulkan/ pinning the four apiVersion / VMA_VULKAN_VERSION sites at 1.3. - T-VK-1.4-BUMP row in docs/state.md Deferred section. - CHANGELOG entry + rebase-notes #228. Co-authored-by: Lusoris <lusoris@pm.me> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
lusoris
pushed a commit
that referenced
this pull request
May 5, 2026
…s 17 adapters) Refactors `tools/vmaf-tune/src/vmaftune/encode.py` away from the Phase A hard-coded `libx264` `-c:v / -preset / -crf` argv. `run_encode` now looks up the codec adapter via `codec_adapters.get_adapter(req.encoder)` and asks it for the FFmpeg argv slice via `adapter.ffmpeg_codec_args(preset, quality)` plus an optional `adapter.extra_params()`. Adapters that don't yet expose `ffmpeg_codec_args` fall back silently to the legacy x264-CRF shape so partial in-flight adapter PRs stay drivable end-to-end. `parse_versions(stderr, encoder=...)` selects a per-codec version probe (libx264, libx265, libsvtav1, libvpx-vp9, libaom-av1, libvvenc, NVENC, QSV, AMF, VideoToolbox); unknown encoders return "unknown" rather than raising. The `EncodeRequest.crf` field is preserved unchanged for the SCHEMA_VERSION=1 row contract; a `quality` property mirrors it for adapter-side codec-agnostic vocabulary. Existing 13-test x264 suite still green; new 19-test multi-codec suite covers 9 representative codec shapes plus the unknown-codec / missing-method fallback paths. Unblocks 17 in-flight codec adapter PRs (#360 libaom, #362 libx265, #364 NVENC, #366 AMF, #367 QSV, #368 libvvenc, #370 libsvtav1, #373 VideoToolbox, plus follow-on waves) which can now drive end-to-end encodes without copying or mutating the harness. Ships ADR-0294 + research digest 0054, vmaf-tune.md "Codec adapter contract" section, rebase-notes #228 invariant, CHANGELOG entry. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
May 5, 2026
…s 17 adapters) (#376) * feat(tools): vmaf-tune encode.py — codec-agnostic dispatcher (unblocks 17 adapters) Refactors `tools/vmaf-tune/src/vmaftune/encode.py` away from the Phase A hard-coded `libx264` `-c:v / -preset / -crf` argv. `run_encode` now looks up the codec adapter via `codec_adapters.get_adapter(req.encoder)` and asks it for the FFmpeg argv slice via `adapter.ffmpeg_codec_args(preset, quality)` plus an optional `adapter.extra_params()`. Adapters that don't yet expose `ffmpeg_codec_args` fall back silently to the legacy x264-CRF shape so partial in-flight adapter PRs stay drivable end-to-end. `parse_versions(stderr, encoder=...)` selects a per-codec version probe (libx264, libx265, libsvtav1, libvpx-vp9, libaom-av1, libvvenc, NVENC, QSV, AMF, VideoToolbox); unknown encoders return "unknown" rather than raising. The `EncodeRequest.crf` field is preserved unchanged for the SCHEMA_VERSION=1 row contract; a `quality` property mirrors it for adapter-side codec-agnostic vocabulary. Existing 13-test x264 suite still green; new 19-test multi-codec suite covers 9 representative codec shapes plus the unknown-codec / missing-method fallback paths. Unblocks 17 in-flight codec adapter PRs (#360 libaom, #362 libx265, #364 NVENC, #366 AMF, #367 QSV, #368 libvvenc, #370 libsvtav1, #373 VideoToolbox, plus follow-on waves) which can now drive end-to-end encodes without copying or mutating the harness. Ships ADR-0294 + research digest 0054, vmaf-tune.md "Codec adapter contract" section, rebase-notes #228 invariant, CHANGELOG entry. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(docs): renumber encode-multi-codec ADR 0294→0297 + research 0069→0070 --------- Co-authored-by: Lusoris <lusoris@pm.me> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
Summary
CHANGELOG.mdUnreleased block +docs/adr/README.mdindex table with per-PR fragment trees + two in-tree concat scripts.### Added/ final-row collisions).changelog.d/_pre_fragment_legacy.md; 159 ADR rows split into per-slug fragments driven by a frozen_order.txtmanifest preserving the existing commit-merge order.What's added
CHANGELOG fragments
changelog.d/{added,changed,deprecated,removed,fixed,security}/<topic>.md— one Markdown bullet (or block) per PR, lexically sorted within section.changelog.d/_pre_fragment_legacy.md— verbatim archive of pre-fragment Unreleased content.scripts/release/concat-changelog-fragments.sh—--check(CI gate) +--write(release-please / pre-push).ADR-index fragments
docs/adr/_index_fragments/<NNNN-slug>.md— one Markdown table row per ADR, slug-keyed (handles legacy ADR-0199 collision).docs/adr/_index_fragments/_order.txt— frozen commit-merge order manifest. New PRs append one slug; trivial conflict resolution.docs/adr/_index_fragments/_header.md— verbatim README prelude.scripts/docs/concat-adr-index.sh—--check+--write.Wiring
Makefile: newdocs-fragments-check(added tomake lint) anddocs-fragments-writetargets..github/PULL_REQUEST_TEMPLATE.mdupdated to instruct fragment-only CHANGELOG/ADR-index workflow..github/workflows/rule-enforcement.yml: ADR-0108 deliverable check now acceptschangelog.d/<section>/*.mdas a CHANGELOG entry.AGENTS.md§8 + §9(e) reference ADR-0221.docs/rebase-notes.md§0221 entry for upstream-sync invariance.Compatibility with in-flight PRs
The legacy direct-edit path still works during migration: a PR that edits
CHANGELOG.mddirectly will pass the ADR-0108 deliverables check. After this PR merges, the rendered Unreleased block matches the in-tree CHANGELOG.md byte-for-byte, so any in-flight PR'sCHANGELOG.mdhunk applies cleanly. New PRs should switch to fragments going forward.Test plan
bash scripts/release/concat-changelog-fragments.sh --checkexits 0 (verified locally).bash scripts/docs/concat-adr-index.sh --checkexits 0 (verified locally).make docs-fragments-checkexits 0 (new Makefile target).bash scripts/release/concat-changelog-fragments.sh --writeis idempotent (no diff after running on the migrated tree).bash scripts/docs/concat-adr-index.sh --writeis idempotent.changelog.d/changed/T7-39-changelog-adr-fragments.md) renders correctly into the Unreleased block.docs/adr/_index_fragments/0221-...md) + appending the slug to_order.txtrenders the new row at the bottom ofdocs/adr/README.md.Reproducer
Deep-dive deliverables (ADR-0108)
docs/research/0034-changelog-fragment-pattern.mddocuments the cost-of-merge-conflict measurement and the changie / towncrier / release-please-native alternatives evaluated.AGENTS.md§8 (ADR-index fragments) + §9(e) (CHANGELOG fragments).changelog.d/changed/T7-39-changelog-adr-fragments.md.docs/rebase-notes.md§0221.Bug-status hygiene (ADR-0165)
no state delta: process / release-tooling change with no bug-status impact.
Netflix golden-data gate (ADR-0024)
assertAlmostEqual(...)modifications.Known follow-ups
scripts/release/concat-changelog-fragments.sh --writeinto.github/workflows/release-please.ymlso the rendered Unreleased block is the input release-please consumes. Out of scope for this PR; tracked separately.changelog.d/_pre_fragment_legacy.mdcontent rolls into a versioned section and the archive can be deleted. Optional clean-up follow-up.🤖 Generated with Claude Code