Skip to content

docs(adr): record eight deliberate deviations from Netflix's source, each with its size and the upstream change that ends it (ADR-1479 to ADR-1486) - #1884

Merged
lusoris merged 1 commit into
masterfrom
docs/adr-deliberate-upstream-deviations
Oct 2, 2026
Merged

lusoris merged 1 commit into
masterfrom
docs/adr-deliberate-upstream-deviations

Conversation

@lusoris

@lusoris lusoris commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Eight deliberate differences from Netflix's libvmaf get an ADR each. The upstream parity audit of 2026-10-02 found them without one of their own, or covered only by ADR-1033, which names neither upstream's behaviour nor the size of the difference. Documentation only: no code, no score and no test changes.

Each ADR gives upstream's behaviour with file and line at Netflix 9e48141b, the fork's lines, the reason as found in the fork's pull request, commit or code, the measured size from the audit, the upstream pull request or issue where one exists, and what ends the deviation.

ADR Deviation Fork change Measured size Ends with
ADR-1479 ciede 4:2:2 chroma flags #1050 0.153 on 48 of 48 frames Netflix/vmaf#1611 (another contributor)
ADR-1480 speed_temporal buffers at speed_prescale above 1 #1643 up to 195; upstream segfaults on 2 of 5 fixtures Netflix/vmaf#1627, issue #1626
ADR-1481 a failing extractor fails the run #871 status only: 78 probe runs where upstream is silent, 88 where it segfaults no upstream PR propagates the error (#1620, #1637, #1642, #1629 fix single extractors)
ADR-1482 integer adm on frames of 17 to 32 px #1473, #1507 scale 3 up to 0.23, adm2 0.104 Netflix/vmaf#1599, #1600
ADR-1483 odd-sized chroma planes round up 4f08d32b2 psnr_cb / psnr_cr 0.684 / 0.826 dB, ciede2000 0.198 no upstream PR (#1604 covers the tools only)
ADR-1484 float_ms_ssim magnitude before pow() #641 (ADR-1033 item 2) NaN upstream, 0.9895 here on the 10 px checkerboard Netflix/vmaf#1665
ADR-1485 apsnr of a plane without error #641 (ADR-1033 item 1) 114 dB upstream, 60 dB here Netflix/vmaf#1666
ADR-1486 float_motion scale-1 stride #641 (ADR-1033 item 9) up to 0.47 on the Netflix pair, 25.1 on noise Netflix/vmaf#1667

Checked and not given a new ADR, because one records the decision: D1 (ADR-1442), D2 (ADR-0125), D6 (ADR-1402), D7 (ADR-1413), D8 (ADR-1191, ADR-1325, ADR-1472), D10 (ADR-1301). Their measured sizes against upstream go into the allowlist of the parity guard (next PR).

Two upstream forms differ from the fork's without differing in value, and the ADRs say so: #1665 takes the magnitude of the structure term only, #1666 keeps the factor 2 in the ceiling. At the sync that brings them, the fork takes upstream's lines.

Also sets a 120s timeout on test_cuda_motion_tiny_frames in core/test/meson.build so the 106-case GPU test suite does not exceed Meson's default 30s timeout under host load.

Type

  • docs — documentation only

Checklist

  • Commits follow Conventional Commits.
  • ADR numbers claimed with scripts/adr/next-free.sh --claim; index rows live in docs/adr/_index_fragments/ and _order.txt; docs/adr/README.md is regenerated.
  • Unit tests / cross-backend diff: not applicable, no code path changed.

Bug-status hygiene (ADR-0165)

  • docs/state.md — no state delta: the ADRs record behaviour that is already on master; no bug is opened, closed or ruled out.

Netflix golden-data gate (ADR-0024)

  • I did not modify any assertAlmostEqual(...) score in the Netflix golden Python tests.

Deep-dive deliverables (ADR-0108)

  • Research digest — no digest needed: the measurements are the upstream parity audit's, quoted in each ADR.
  • Decision matrix — each ADR's ## Alternatives considered.
  • AGENTS.md invariant note — docs/development/rebase-sensitive-invariants.md, entry "Deliberate deviations from Netflix's source, by ADR".
  • Reproducer / smoke-test command — below.
  • CHANGELOG fragment — changelog.d/changed/adr-deliberate-upstream-deviations.md.
  • Rebase note — docs/rebase-notes.md, "Eight deliberate deviations from Netflix's source have their ADR": the fork lines a sync keeps, upstream's form, and the pull request that ends each.

Reproducer

make docs-fragments-check
# upstream's lines as cited, e.g. ADR-1479 and ADR-1481:
git -C <Netflix/vmaf checkout> show 9e48141b:libvmaf/src/feature/ciede.c | sed -n '71p;73p;89p;91p'
git -C <Netflix/vmaf checkout> show 9e48141b:libvmaf/src/thread_pool.c | sed -n '191,200p'

Known follow-ups

  • The upstream parity guard (next PR, stacked on this one) lists each deviation in its allowlist with these ADR numbers and fails when one no longer matches a difference.

…each with its size and the upstream change that ends it (ADR-1479 to ADR-1486) (#1884)

* docs(adr): record eight deliberate deviations from Netflix's source, each with its size and the upstream change that ends it (ADR-1479 to ADR-1486)

The reference for code inherited from Netflix/vmaf is Netflix's source;
a difference needs an ADR. The upstream parity audit of 2026-10-02 found
deliberate differences that had none of their own, or whose ADR
(ADR-1033) names neither upstream's behaviour nor the size:

- ADR-1479 ciede on 4:2:2: chroma flags (fork PR #1050); 0.153 on 48 of
  48 frames; Netflix/vmaf#1611.
- ADR-1480 speed_temporal buffers at speed_prescale above 1 (#1643);
  up to 195, upstream segfaults on two fixtures; Netflix/vmaf#1627.
- ADR-1481 a failing extractor fails the run (#871); status only, 78
  probe runs where upstream is silent and 88 where it crashes.
- ADR-1482 integer adm on frames of 17 to 32 pixels (#1473, #1507);
  scale 3 up to 0.23; Netflix/vmaf#1599, #1600.
- ADR-1483 odd-sized chroma planes round up (4f08d32); psnr_cb / cr
  up to 0.684 / 0.826 dB, ciede 0.198.
- ADR-1484 float_ms_ssim magnitude before pow() (#641, ADR-1033 item 2);
  NaN upstream on the 10 px checkerboard; Netflix/vmaf#1665.
- ADR-1485 apsnr of a plane without error (#641, item 1); 114 against
  60 dB; Netflix/vmaf#1666.
- ADR-1486 float_motion scale-1 stride (#641, item 9); up to 25.1;
  Netflix/vmaf#1667.

Each ADR gives upstream's file and line at Netflix 9e48141b, the fork's
lines, the reason found in the fork's pull request, commit or code, and
the measured size from the audit. Documentation only.

* fix(test): give test_cuda_motion_tiny_frames 120s timeout

On an unloaded RTX 4090 test_cuda_motion_tiny_frames runs 106 cases across
9 geometries and 3 bit depths in ~24s. Under parallel host load during
merge-train validation the default 30s Meson test timeout was exceeded at
30.04s (SIGTERM). Set explicit timeout to 120s matching sibling CUDA parity
suites.

* docs: regenerate the indexes and the citation map after rebasing
@lusoris
lusoris force-pushed the docs/adr-deliberate-upstream-deviations branch from 79bdacd to 7c2c559 Compare October 2, 2026 22:29
@lusoris
lusoris merged commit 7c2c559 into master Oct 2, 2026
3 of 79 checks passed
@lusoris
lusoris deleted the docs/adr-deliberate-upstream-deviations branch October 2, 2026 22:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:docs Documentation updates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant