Repository navigation
Conversation
16 of 19 tasks
…el files (#2619) * fix(ci): list SPONSORS.md among the CI impact planner's known top-level files #2613 added the top-level SPONSORS.md. .github/ci-impact.json names every top-level entry the planner may see, and test_ci_impact.py test_every_top_level_repo_entry_is_known fails on master since then (SPONSORS.md is neither a known file nor under a known prefix). The file joins known_files next to SECURITY.md and SUPPORT.md; it selects no suite of its own, as those do not. State row T-CI-IMPACT-SPONSORS-UNKNOWN-2026-10-08. Signed-off-by: Lusoris <lusoris@proton.me>
lusoris
force-pushed
the
fix/ci-impact-sponsors
branch
from
October 8, 2026 15:32
39685be to
552fec5
Compare
Contributor
Author
|
Superseded by #2626, which landed the same |
lusoris
added a commit
that referenced
this pull request
Oct 8, 2026
…re-commit hook (#2615) * fix(ci): list SPONSORS.md among the CI impact planner's known top-level files (#2619) * fix(ci): list SPONSORS.md among the CI impact planner's known top-level files top-level entry the planner may see, and test_ci_impact.py test_every_top_level_repo_entry_is_known fails on master since then (SPONSORS.md is neither a known file nor under a known prefix). The file joins known_files next to SECURITY.md and SUPPORT.md; it selects no suite of its own, as those do not. State row T-CI-IMPACT-SPONSORS-UNKNOWN-2026-10-08. * feat(motion): derive motion2 and motion3 frame by frame so VMAF windows complete before the flush (ADR-2090) (#2290) * feat(motion): derive motion2 and motion3 frame by frame so VMAF windows complete before the flush (ADR-2090) The integer motion extractors and their GPU twins derived motion2 and motion3 of every frame in flush(), so a VMAFx window over a VMAF model, a per-frame model score and vmaf_score_pooled() over the frames read so far waited for the end of the stream (state row T-VMAFX-WINDOW-MOTION-AT-FLUSH-2026-10-06). The maintainer put live VMAF windows in the 1.0 scope (Q-038, #2138, #2238). Frame i is now final once the SAD scores of frames 0 to max(i + 1, min_idx) are in the collector. vmaf_motion_window_advance() derives every complete frame with upstream's per-frame statements in index order and carries the stamp and the moving-average value in a VmafMotionWindowState; vmaf_motion_window_flush() derives the rest. The engine calls a new optional VmafFeatureExtractor.advance() after every accepted frame and read fence, and the VMAFx completion thread calls it through vmaf_engine_advance() under the engine lock before each pass, so a window completes as soon as a worker's SAD is in, also while the feeder stalls. motion, motion_v2 and every twin that derived at the flush (CUDA, SYCL, HIP, Metal) register it. A synchronous read of a fed frame without a collector slot now fences instead of answering -EINVAL (T-ENGINE-READ-FED-FRAME-EINVAL-2026-10-06). Every value is the flush-time value: 32 988 per-frame motion values against master (golden pair, both checkerboards, sparks 10-bit, BBB 4K; default, AVX2 and scalar dispatch; 0 and 4 threads) and 10 878 per GPU backend against the CPU, 0 different; parity gate motion cells exact on CUDA, SYCL and HIP; Netflix golden gate 280 passed, 3 skipped. * fix(api): name the extractor as producer of the scores advance() writes advance_extractors() called VmafFeatureExtractor.advance() (ADR-2090) without installing the extractor as the thread's feature producer (ADR-2073), so the integer_motion2 vector advance() creates first carried source unknown and the provenance record named no extractor for it. The threaded flush installs the producer around flush(); advance() now gets the same. test_vmafx_provenance test_features_in_name_order failed on the merged tip and passes. State row T-RC4-MOTION-ADVANCE-NO-PRODUCER-2026-10-06. * fix(api): answer pending for a fed frame whose motion3 is not derived yet With incremental motion (ADR-2090) motion3 of frame i is written when frame i + 1 is scored. vmafx_score_frame() of the frame just submitted returned VMAFX_E_INVALID at frames 8, 16 and 32, where the frame index reached the end of the motion3 vector's storage and the collector answered -EINVAL. engine_score_at_index() now checks the inputs of a fed frame before it predicts and answers -EAGAIN while one is unwritten; a frame never fed keeps its error. State row T-RC4-SCORE-FRAME-INVALID-AT-VECTOR-END-2026-10-06. * docs(motion): move the rebase note to a fragment and leave the rendered files to the landing render (ADR-2197) * docs(agents): write the incremental motion page in the internal register (praetor caveman lint) * ci(tidy): measure the translation units of the incremental motion window in the cpu lane The clang-tidy coverage rule on master requires every tracked translation unit to be read by a lane. The new and touched units of this pull request were measured in the dev container (scripts/dev/tidy-lane.sh --write --only ... cpu, clang-tidy 22.1.8): 0 findings, 0 uncited NOLINT; they join the cpu lane's measured sources. * feat(rust): give Rust twins their own advance callback (ADR-2090, MI-1) The shim copies the C extractor's descriptor whole (add_twin()), so after incremental motion (ADR-2090) a Rust twin inherited the C advance(): for motion_rust it derived motion2 / motion3 from the Rust SAD scores into the C-layout priv while frames came in, and the Rust flush then appended every frame again, -EINVAL at the flush; with worker threads the inherited advance also marked the registered context initialised, so the Rust flush found no instance. Maintainer answer Q-093: Rust implements advance. VmafxRsTwin gains advance as its last field. VMAFX_RS_ABI_VERSION stays 1: no release has shipped the Rust ABI, so the layout changes in place. The header is regenerated verbatim with cbindgen 0.29.4 (scripts/dev/rust-abi-header.sh, --check up to date). vmafx_fex::Extractor gains advance(&mut self, host), default nothing, with its trampoline. The shim sets advance to twin_advance() when the C extractor has one and refuses a twin without the entry point. advance_one_extractor() in libvmaf.c runs init_shared_rust_twin() before a pooled Rust twin's first advance, as the threaded flush does before its flush. test_rust_abi_layout checks the new offset and the entry point. * feat(rust): derive motion_rust's motion2 and motion3 frame by frame (ADR-2090, MI-1) motion_rust now implements Extractor::advance with the statements of integer_motion.c's window: frame i is derived once the SAD scores of frames 0 to max(i + 1, min_idx) are in, the stamp and the moving-average value are carried in a State as in VmafMotionWindowState, and the flush continues where the last advance stopped (motion_window_stamp(), motion_window_count_sads(), motion_window_derive(), vmaf_motion_window_advance(), vmaf_motion_window_flush(), ported in window.rs). A VMAF window over motion_rust completes before the flush, as over the C motion. test_rust_motion_window_incremental (suite rust): motion_rust on a context, both windows, 0, 2 and 3 worker threads; frame i final after frame i + 1 and before the flush, values unchanged after they became final, every SAD, motion2 and motion3 equal to the C motion bit for bit. It failed on the merged tree (flush -22: the inherited C advance and the Rust flush appended frame 0 twice), failed with scoring -22 at 2 threads before the engine initialised the pooled twin, and fails on a planted off-by-one in the Rust advance ("final too early"). Cargo tests cover advance + flush against the C derivation with the SAD scores in order, swapped in pairs and reversed, and short streams of 0 to 4 frames. rust_twin_diff.py --feature motion on netflix, checker1, checker10, sparks10 and bbb4k at --threads 0,1,4: 45 EQUAL. State row T-RUST-TWIN-INHERITS-C-ADVANCE-2026-10-07. Carried onto the 2290 landing: the rebase note joins the motion-window-incremental fragment (ADR-2197), which also names read_pictures_owned(), the read helper's name since the WP6 split, as does the picture-ownership page. The Rust framework page is rewritten for the caveman lint and names the engine library (libvmafx) as the archive's only target. * docs(agents): restore the Metal motion twins' advance note on the AGENTS.d pages The incremental motion window registers .advance on integer_motion_metal and motion_v2_metal (ADR-2090). The rebase across the conversion of core/src/feature/metal/AGENTS.md into AGENTS.d pages took master's generated index and lost this pull request's two hunks of the old single file. The motion-fps-weight and motion3-v2 pages now name vmaf_motion_window_advance() next to the flush, the advance contract test, and integer_motion_v2_metal.mm as a path the motion3-v2 page covers; the index is regenerated. * docs(community): link the live Patreon page and its euro tiers (#2620) * docs(community): link the live Patreon page and its euro tiers * fix(ci): skip docs/rebase-notes.d in the Markdown Lint job like the pre-commit hook (#2615) * fix(ci): skip docs/rebase-notes.d in the Markdown Lint job like the pre-commit hook Signed-off-by: Lusoris <lusoris@proton.me>
lusoris
added a commit
that referenced
this pull request
Oct 8, 2026
7a3a7d0 so #2290 lands as its own commit The merge train's batch push of 17:41 failed after it had pushed the stacked squashes of the batch to their pull request branches. The fixer of skip docs/rebase-notes.d in the Markdown Lint job", #2615) also carries the whole change of #2290 (incremental motion2 / motion3, ADR-2090) and the CI-impact entry of #2619. #2290 never landed as its own commit, and its code, tests, docs, changelog fragments and state rows sit under #2615's title. This reverts #2290's own diff (its gated head d5f18fd against its base cfdcfb5), reverse-applied on master 0bf2996: 66 of its 68 files return to their content before #2290; docs/state.md keeps the rows of the commits that landed since. ADR-2090 and its index fragment stay: the ADR indexes are written only by the landing render and link to it, so deleting it fails the ADR link gate; #2290 re-lands without them. #2615's own change (the Markdown Lint fragment scope) and the SPONSORS.md entry of .github/ci-impact.json (#2626, also #2619's) stay. #2290 re-lands next as its own squash. docs/state.md also folds the duplicate row of the SPONSORS.md defect: T-CI-IMPACT-SPONSORS-MD-UNKNOWN-2026-10-08 (#2626) stays and names T-CI-IMPACT-SPONSORS-UNKNOWN-2026-10-08 (#2619, closed as a duplicate) as its alias. Signed-off-by: Lusoris <lusoris@proton.me>
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
scripts/ci/tests/test_ci_impact.pypasses on master again:.github/ci-impact.jsonlists the top-levelSPONSORS.mdthat #2613 added.test_every_top_level_repo_entry_is_knownrequires every top-level entry of the tree to be a known file or under a known prefix of the CI impact planner, so that no change falls outside its rules. #2613 (8bfb1d4c3) addedSPONSORS.mdwithout an entry, and the test fails oncfdcfb51f(found by the tooling suite of a local landing gate; the merge train had not selected that suite for the docs-only #2613).SPONSORS.mdjoinsknown_filesnext toSECURITY.mdandSUPPORT.md; like them it selects no suite of its own.Type
fix— bug fixbuild/ci— tooling / infraChecklist
git commit -s; fix a branch withgit rebase --signoff origin/master). See DCO sign-off.make format && make lintis green locally. — commit hooks pass; the JSON loads with a duplicate-refusing reader.python3 scripts/ci/run_meson_test.py -- -C build. — no C change;pytest scripts/ci/tests/test_ci_impact.py: 45 passed (1 failed before the change)./cross-backend-diffand the worst ULP is ≤ 2. — not applicable..c/.cpp/.cu/.h/.hpp, it has the appropriate license header (seeCONTRIBUTING.md). — no new file.!orBREAKING CHANGE:and the migration path is documented below. — not breaking.docs/adr/_index_fragments/<NNNN-slug>.mdand nothing else is touched for the index. — no ADR.Bug-status hygiene (ADR-0165)
docs/state.mdupdated in this PR — T-CI-IMPACT-SPONSORS-UNKNOWN-2026-10-08 under Recently closed.Netflix golden-data gate (ADR-0024)
assertAlmostEqual(...)score in the Netflix golden Python tests, except by porting Netflix's own updated assertion verbatim from upstream (value and places as upstream has them, measured against the fork's CPU build first; ADR-1828).No C code changed; the golden gate is unaffected.
Cross-backend numerical results
Not applicable.
Deep-dive deliverables (ADR-0108)
AGENTS.mdinvariant note — no rebase-sensitive invariants.Reproducer
python3 -m pytest -q scripts/ci/tests/test_ci_impact.py # 45 passed; without the entry 1 failedKnown follow-ups
None.