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
6 changes: 6 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,12 @@ ENV PATH=/vmaf:/vmaf/core/build/tools:$PATH
RUN --mount=type=cache,target=/root/.cache/ccache,sharing=locked \
CCACHE_DIR=/root/.cache/ccache \
make clean && make ENABLE_NVCC=true && make install
# Register /usr/local/lib/x86_64-linux-gnu in the dynamic linker cache so the
# installed vmaf binary can find libvmaf.so.3 at runtime. The NVIDIA CUDA
# Ubuntu 24.04 base image does not include the arch-specific subdir in its
# default ld.so.conf; meson strips RPATH on install, so without ldconfig the
# binary exits with a dynamic linker error (vmaf smoke test sees zero stdout).
RUN ldconfig

# ---------- build FFmpeg ----------
RUN wget -q "https://github.com/FFmpeg/FFmpeg/archive/${FFMPEG_TAG}.zip" && \
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
- `local_explainer_test`: recalibrate `test_run_vmaf_runner_local_explainer_with_bootstrap_model`
assertion to the post-NEON-fix value (`75.40974...`) and relax to `places=3`
per ADR-0418 macOS-libm pattern; fixes macOS arm64 CI failure introduced by PR #834
NEON uint64-truncation fix (T-LOCAL-EXPLAINER-BOOTSTRAP-NEON-RECAL-2026-06-08).
- `Dockerfile`: add `RUN ldconfig` after `make install` so the installed vmaf binary can
resolve `libvmaf.so.3` at runtime on the NVIDIA CUDA Ubuntu 24.04 base image, which
omits `/usr/local/lib/x86_64-linux-gnu` from its dynamic-linker cache
(T-DOCKERFILE-LDCONFIG-MISSING-2026-06-08).
9 changes: 9 additions & 0 deletions docs/rebase-notes.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
<!-- markdownlint-disable MD001 MD003 MD004 MD007 MD013 MD018 MD022 MD024 MD025 MD026 MD028 MD029 MD031 MD032 MD033 MD036 MD037 MD038 MD040 MD041 MD046 MD049 MD050 MD051 MD052 MD053 MD055 MD056 MD058 MD059 -->
# Rebase notes

## fix/master-855-tip-3-reds — bootstrap-test recal + Dockerfile ldconfig (2026-06-08, no ADR)
no rebase impact: `python/test/local_explainer_test.py` line 276 expected value and
`places` argument changed (fork-local test, not Netflix golden data); `Dockerfile`
gains a single `RUN ldconfig` line after `make install`. If a concurrent branch also
edits `python/test/local_explainer_test.py` lines 271-277, resolve by keeping
`places=3` and the `# ADR-0418 macOS-libm Δ relax` comments. If a concurrent branch
edits `Dockerfile` around the libvmaf build block, ensure `RUN ldconfig` is present
immediately after the `make install` line.

## fix/containerfile-gid-and-stale-rename — GID/UID 1000 → 2000 (2026-06-08, ADR-1101)
no rebase impact: changes confined to `dev/Containerfile` (GID/UID values),
`docs/adr/1101-containerfile-gid-uid-2000.md` (new ADR), and
Expand Down
3 changes: 3 additions & 0 deletions docs/state.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<!-- markdownlint-disable MD013 MD037 MD038 MD041 MD060 -->
_Updated: 2026-06-08 (T-LOCAL-EXPLAINER-BOOTSTRAP-NEON-RECAL-2026-06-08 closed + T-DOCKERFILE-LDCONFIG-MISSING-2026-06-08 closed — two CI failures from PR #855 tip (765af26c8) fixed in fix/master-855-tip-3-reds: (1) `test_run_vmaf_runner_local_explainer_with_bootstrap_model` asserted `VMAF_LE_score` at `places=4` (tolerance 5e-5) against a Linux-calibrated value. After the NEON uint64-truncation fix in PR #834 / commit 43cf4c9aa, macOS arm64 Apple libm produces a slightly different SVM-prediction result (~6e-5 delta). All other bootstrap-score assertions in the same file already use `places=3` + `# ADR-0418 macOS-libm Δ relax`; this assertion was added without the relaxation. Fix: recalibrate expected value to the post-NEON-fix value and relax to `places=3` per ADR-0418 pattern. (2) Dockerfile was missing `RUN ldconfig` after `make install`. The NVIDIA CUDA Ubuntu 24.04 base image's `/etc/ld.so.conf` does not include `/usr/local/lib/x86_64-linux-gnu`; meson strips RPATH on install; without ldconfig the installed `/usr/local/bin/vmaf` binary could not find `libvmaf.so.3` at runtime and exited silently, producing zero smoke-test stdout.)_
_Updated: 2026-06-08 (T-CPP23-READ-JSON-MODEL-PENDING-2026-05-29 closed — stale row removed from Open; conversion already landed in PR #531 (2026-06-02) per ADR-0846 Wave 8.)_
_Updated: 2026-06-08 (T-DOCKER-SMOKE closed — Docker image CI job promoted from advisory (continue-on-error: true) to blocking after 3 consecutive green master runs. A pixel-level VMAF score assertion step was added: vmaf --backend cpu on the 576x324 fixture pair from testdata/, expected mean ≈ 94.32 ± 0.5. Timeout raised from 30 min to 45 min to accommodate the additional score computation. chore/promote-docker-smoke-blocking.)_
_Updated: 2026-06-08 (T-SYCL-ARC-FLOAT-SSIM-PARITY-2026-06-03 closed — added `arc:dg2-g10` calibration entry to `scripts/ci/gpu_ulp_calibration.yaml` with `float_ssim: 5.0e-4` (places=3) per Research-0985 §3 / Research-0730 §6.1 / ADR-0234; promoted `test_sycl_float_ssim_parity` to CI required-status list via new `sycl-float-ssim-parity` job in tests-and-quality-gates.yml + aggregator entry. Branch: fix/sycl-arc-float-ssim-calibration.)_
Expand Down Expand Up @@ -302,6 +303,8 @@ landed fix yet._

## Recently closed

| **T-LOCAL-EXPLAINER-BOOTSTRAP-NEON-RECAL-2026-06-08** | `test_run_vmaf_runner_local_explainer_with_bootstrap_model` in `python/test/local_explainer_test.py` (line 276) asserted `VMAF_LE_score ≈ 75.40980306756497` at `places=4` (tolerance 5e-5). After the NEON uint64-truncation fix in PR #834 / commit 43cf4c9aa, macOS arm64 Apple libm produces `75.40974269371469` — a ~6.0e-5 delta that exceeds the `places=4` tolerance but passes `places=3`. All other bootstrap-score assertions in the same file already carry `# ADR-0418 macOS-libm Δ relax` comments and use `places=3`; this assertion was added without the relaxation. Fix: recalibrate to the post-NEON-fix value `75.40974269371469` and relax both assertions to `places=3` per the ADR-0418 pattern. | [ADR-0418](adr/0418-macos-test-recal-post-vif-sync.md) | fix/master-855-tip-3-reds | macOS arm64 CI test passes at `places=3`; Linux `places=3` also passes (delta ~6e-5 < 5e-4). | (2026-06-08) |
| **T-DOCKERFILE-LDCONFIG-MISSING-2026-06-08** | `Dockerfile` was missing `RUN ldconfig` after the `make clean && make ENABLE_NVCC=true && make install` step. The NVIDIA CUDA Ubuntu 24.04 base image does not include `/usr/local/lib/x86_64-linux-gnu` in its `/etc/ld.so.conf` dynamic-linker search path (only `/usr/local/lib` is listed). Meson strips RPATH on install, so the installed `/usr/local/bin/vmaf` binary could not find `libvmaf.so.3.0.0` at runtime, exiting immediately with a dynamic-linker error printed to stderr. The Docker smoke test swallowed stderr with `2>/dev/null`, producing zero stdout and failing the pixel-level score assertion promoted to blocking in PR #852. Fix: add `RUN ldconfig` immediately after the libvmaf `make install` step. | no ADR: Docker correctness fix | fix/master-855-tip-3-reds | `docker build -t vmaf . && docker run --rm --entrypoint /usr/local/bin/vmaf vmaf --version` exits 0 and prints version; smoke-test score assertion passes. | (2026-06-08) |
| **T-CPP23-READ-JSON-MODEL-PENDING-2026-05-29** | `core/src/read_json_model.c` conversion to C++23 was tracked as pending a fresh PR after PR #215 was closed without merging on 2026-05-30. The conversion replaced `goto fail:` teardown with an RAII `ModelParseGuard`, `malloc/free` with `std::make_unique<char[]>`, and `strdup/free` with `std::string`. This work landed in PR #531 (2026-06-02) as part of ADR-0846 Wave 8. The row in Open was stale. | [ADR-0846](adr/0846-cpp23-wave8.md) | PR #531 (2026-06-02) | `file core/src/read_json_model.cpp` reports C++ source on master. | (2026-06-08 — stale row swept) |
| **T-DOCKER-SMOKE** | Docker image CI job (`docker-image.yml`) was advisory (`continue-on-error: true`) since ADR-0623; it only ran `docker run --rm vmaf /usr/local/bin/vmaf --version`. After 3 consecutive green master runs the job was promoted to blocking: `continue-on-error` removed, a `vmaf --backend cpu` score-assertion smoke step added (576x324 fixture pair from `testdata/`, expected mean VMAF ≈ 94.32 ± 0.5, model `vmaf_v0.6.1.json`), and the timeout raised to 45 min. | [ADR-0623](adr/0623-scaffold-audit-p2-half-finished.md) | chore/promote-docker-smoke-blocking | `docker build -t vmaf . && docker run --rm --entrypoint /usr/local/bin/vmaf -v ./testdata:/testdata:ro -v ./model:/model:ro vmaf --reference /testdata/ref_576x324_48f.yuv --distorted /testdata/dis_576x324_48f.yuv --width 576 --height 324 --pixel_format 420 --bitdepth 8 --model path=/model/vmaf_v0.6.1.json --backend cpu --output /dev/stdout --json 2>/dev/null` — expect mean VMAF ~94.32. | (2026-06-08) |
| **T-SYCL-ARC-FLOAT-SSIM-PARITY-2026-06-03** | `float_ssim` SYCL parity gate failed on Intel Arc A380 (DG2-G10) with max_abs_diff=2.68e-4 (tolerance 5e-5). Two causes: (1) CPU and GPU backends use different SSIM formulas (CPU: L×C×S decomposition with sqrt(var_ref*var_cmp); GPU: Wang 2004 Eq.(13) combined form — intentional design). (2) Arc A380 lacks native fp64, causing fp32 accumulation drift to ~2.7e-4. Fix: added `arc:dg2-g10` calibration entry to `scripts/ci/gpu_ulp_calibration.yaml` with `float_ssim: 5.0e-4` (places=3); added dedicated `sycl-float-ssim-parity` job in `tests-and-quality-gates.yml` and promoted it to the required-status list in `required-aggregator.yml`. | [Research-0985](research/0985-sycl-parity-divergence-2026-06-03.md) §3 / ADR-0234 | fix/sycl-arc-float-ssim-calibration | `python3 -m pytest scripts/ci/test_calibration.py -v` — shipped table parses and `arc:dg2-g10` entry resolves with `float_ssim=5e-4`. | (2026-06-08) |
Expand Down
13 changes: 10 additions & 3 deletions python/test/local_explainer_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,13 +268,20 @@ def test_run_vmaf_runner_local_explainer_with_bootstrap_model(self):

results = self.runner.results

# Scores calibrated with neighbor_samples=100 (VCQ-223 / ADR-0562).
# Scores calibrated post-NEON uint64-truncation fix (PR #834 / commit 43cf4c9aa).
# The VMAF_LE_score is determined by the libvmaf binary, not the
# local-explainer sampling, so the values differ slightly from the
# original 5000-sample run due to floating-point non-determinism in
# the SVM prediction path.
self.assertAlmostEqual(results[0]["VMAF_LE_score"], 75.40980306756497, places=4)
self.assertAlmostEqual(results[1]["VMAF_LE_score"], 99.95804823471536, places=4)
# macOS Apple libm produces a slightly different result (~6e-5 delta) vs
# Linux libm for this SVM prediction; places=3 accommodates both.
# ADR-0418 macOS-libm Δ relax: tolerance relaxed to places=3 for cross-platform CI.
self.assertAlmostEqual(
results[0]["VMAF_LE_score"], 75.40974269371469, places=3
) # ADR-0418 macOS-libm Δ relax
self.assertAlmostEqual(
results[1]["VMAF_LE_score"], 99.95804823471536, places=3
) # ADR-0418 macOS-libm Δ relax


if __name__ == "__main__":
Expand Down
Loading