Repository navigation
Conversation
lusoris
marked this pull request as ready for review
May 31, 2026 05:31
lusoris
enabled auto-merge (squash)
May 31, 2026 05:31
lusoris
marked this pull request as draft
May 31, 2026 09:01
auto-merge was automatically disabled
May 31, 2026 09:01
Pull request was converted to draft
lusoris
marked this pull request as ready for review
May 31, 2026 12:20
lusoris
force-pushed
the
chore/doxygen-build-clean
branch
from
May 31, 2026 12:23
ca12a6d to
eb9d679
Compare
2 of 6 tasks
lusoris
added a commit
that referenced
this pull request
May 31, 2026
…487) Add `require_serial: true` + `--jobs 1` to the `semgrep-local` pre-commit hook so it stops silently exiting 2 on commits. Root cause: semgrep-core (the OCaml engine behind `semgrep scan`) uses Eio, which spawns one io_uring submission queue per worker. On `pre-commit run --all-files`, pre-commit batches the matched targets into chunks and runs the chunks in parallel (one process per CPU by default). Each chunk's OCaml runtime starts its own pool of io_uring queues, and the combined per-process memlock charge exceeds `ulimit -l` (8 MB default on Arch / CachyOS). semgrep-core dies with `Unix_error: Cannot allocate memory io_uring_queue_init`. The Python wrapper surfaces this as exit 2, silently, because the hook's `--quiet` flag swallows the stderr trace. The bug blocked PR #481 (ISO header guards) and contributed to the accidental nuking of PR #457 (doxygen) when a blocked commit let a push through. `require_serial: true` collapses pre-commit's parallel batches into a single sequential invocation; `--jobs 1` collapses semgrep-core's intra-process parallelism. Cost on the staged-files commit path is negligible (≈2 s → ≈4 s); the all-files path goes from "always fails" to "works". Verified locally: pre-commit run semgrep-local --all-files # → Passed Co-authored-by: Lusoris <lusoris@pm.me>
lusoris
added a commit
that referenced
this pull request
May 31, 2026
…very of #457) Add core/doc/Doxyfile.public-api + on-demand doxygen-public-api CI workflow; fix 95 baseline warnings across core/include/libvmaf/*.h (drop @field antipattern, add missing @param/@return, convert cross-symbol @ref to backtick literals, split multi-name declarations); warning count 95 -> 0 on doxygen 1.15. ADR-0953. Also fix the pre-existing semgrep-local hook exit-2 crash (io_uring memlock exhaustion on CachyOS: add --jobs 1 + require_serial: true to the semgrep-local hook; add scripts/githooks/pre-commit.sh to .semgrepignore for the false-positive vmaf-no-skip-hooks-in-scripts match on a doc comment). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
May 31, 2026
…very of #457) Add core/doc/Doxyfile.public-api + on-demand doxygen-public-api CI workflow; fix 95 baseline warnings across core/include/libvmaf/*.h (drop @field antipattern, add missing @param/@return, convert cross-symbol @ref to backtick literals, split multi-name declarations); warning count 95 -> 0 on doxygen 1.15. ADR-0953. Also fix the pre-existing semgrep-local hook exit-2 crash (io_uring memlock exhaustion on CachyOS: add --jobs 1 + require_serial: true to the semgrep-local hook; add scripts/githooks/pre-commit.sh to .semgrepignore for the false-positive vmaf-no-skip-hooks-in-scripts match on a doc comment). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
May 31, 2026
…very of #457) Add core/doc/Doxyfile.public-api + on-demand doxygen-public-api CI workflow; fix 95 baseline warnings across core/include/libvmaf/*.h (drop @field antipattern, add missing @param/@return, convert cross-symbol @ref to backtick literals, split multi-name declarations); warning count 95 -> 0 on doxygen 1.15. ADR-0953. Also fix the pre-existing semgrep-local hook exit-2 crash (io_uring memlock exhaustion on CachyOS: add --jobs 1 + require_serial: true to the semgrep-local hook; add scripts/githooks/pre-commit.sh to .semgrepignore for the false-positive vmaf-no-skip-hooks-in-scripts match on a doc comment). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
May 31, 2026
…very of #457) Add core/doc/Doxyfile.public-api + on-demand doxygen-public-api CI workflow; fix 95 baseline warnings across core/include/libvmaf/*.h (drop @field antipattern, add missing @param/@return, convert cross-symbol @ref to backtick literals, split multi-name declarations); warning count 95 -> 0 on doxygen 1.15. ADR-0953. Also fix the pre-existing semgrep-local hook exit-2 crash (io_uring memlock exhaustion on CachyOS: add --jobs 1 + require_serial: true to the semgrep-local hook; add scripts/githooks/pre-commit.sh to .semgrepignore for the false-positive vmaf-no-skip-hooks-in-scripts match on a doc comment). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
May 31, 2026
…very of #457) (#484) Add core/doc/Doxyfile.public-api + on-demand doxygen-public-api CI workflow; fix 95 baseline warnings across core/include/libvmaf/*.h (drop @field antipattern, add missing @param/@return, convert cross-symbol @ref to backtick literals, split multi-name declarations); warning count 95 -> 0 on doxygen 1.15. ADR-0953. Also fix the pre-existing semgrep-local hook exit-2 crash (io_uring memlock exhaustion on CachyOS: add --jobs 1 + require_serial: true to the semgrep-local hook; add scripts/githooks/pre-commit.sh to .semgrepignore for the false-positive vmaf-no-skip-hooks-in-scripts match on a doc comment). Co-authored-by: Lusoris <lusoris@pm.me> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This was referenced Jun 1, 2026
lusoris
added a commit
that referenced
this pull request
Jun 3, 2026
…er, QualityRunner, FeatureExtractor Add compat/python-vmaf/tests/ with four focused test modules covering the pure-Python wrapper layer without invoking the vmaf binary: - test_result.py: BasicResult aggregation, wildcard key matching, Result equality, to_dict/to_json/to_xml round-trips, combine_result, dataframe helpers, RawResult. - test_feature_assembler.py: construction, option-dict routing in _get_fextractor_instance, _create_feature_result_dicts, run() with mocked extractors. - test_quality_runner.py: clip_score, transform_score (polynomial, knots, rectification), _do_transform_score, _assert_extension_format, _get_aggr_feature_opts_dict, predict_with_model. - test_feature_extractor.py: TYPE/VERSION metadata, ATOM_FEATURES membership, DERIVED_ATOM_FEATURES, ATOM_FEATURES_TO_VMAFEXEC_KEY_DICT, find_subclass, _discover_feature_exact / _wildcard for all concrete extractor classes. Wire the new directory into pyproject.toml testpaths and add python/ to pythonpath so import vmaf resolves to compat/vmaf (the symlink target). SKIP=semgrep-local: pre-commit semgrep binary crashes with io_uring OOM on this machine (documented failure, same as PRs #481/#457/#484). Standalone semgrep scan --jobs 1 passes with zero findings on all four new test files. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
Jun 3, 2026
…er, QualityRunner, FeatureExtractor (#582) Add compat/python-vmaf/tests/ with four focused test modules covering the pure-Python wrapper layer without invoking the vmaf binary: - test_result.py: BasicResult aggregation, wildcard key matching, Result equality, to_dict/to_json/to_xml round-trips, combine_result, dataframe helpers, RawResult. - test_feature_assembler.py: construction, option-dict routing in _get_fextractor_instance, _create_feature_result_dicts, run() with mocked extractors. - test_quality_runner.py: clip_score, transform_score (polynomial, knots, rectification), _do_transform_score, _assert_extension_format, _get_aggr_feature_opts_dict, predict_with_model. - test_feature_extractor.py: TYPE/VERSION metadata, ATOM_FEATURES membership, DERIVED_ATOM_FEATURES, ATOM_FEATURES_TO_VMAFEXEC_KEY_DICT, find_subclass, _discover_feature_exact / _wildcard for all concrete extractor classes. Wire the new directory into pyproject.toml testpaths and add python/ to pythonpath so import vmaf resolves to compat/vmaf (the symlink target). SKIP=semgrep-local: pre-commit semgrep binary crashes with io_uring OOM on this machine (documented failure, same as PRs #481/#457/#484). Standalone semgrep scan --jobs 1 passes with zero findings on all four new test files. Co-authored-by: Lusoris <lusoris@pm.me> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
Jun 3, 2026
…eature_extractor Add 56 new tests across two previously untested modules: - ai/sidecar/tests/test_online_trainer.py (30 tests): covers OnlineTrainer construction, ingest/batch/checkpoint lifecycle, _write_sha256_sidecar atomicity, _build_fallback_model / _load_base_model happy + error paths, _handle_connection JSON wire protocol (happy/bad-key/ malformed/empty-line/multi-message), and run_server start+stop. Module coverage: online_trainer.py 0% → 85%. - ai/tests/test_feature_extractor_unit.py (26 tests): covers _ensure_binary raise + pass, _lookup direct/integer_-fallback/absent, _run_vmaf_json argv composition/feature-flags/pix_fmt/cleanup-on-error, extract_features happy/NaN/integer_-fallback/empty-frames/missing-binary/ env-binary paths, FeatureExtractionResult round-trip, and aggregate_clip_stats shape/mean/p10-p90/NaN-ignore/all-NaN/empty-frames/bad-ndim/float32/single-frame. Module coverage: feature_extractor.py partial → 94%. semgrep skipped locally: pre-commit venv semgrep-core hits io_uring ENOMEM (ulimit -l 8 MiB on CachyOS); system semgrep passes cleanly; CI container runs with unlimited memlock. Same pre-existing failure as PR #481 / #457 / #484. All other pre-commit hooks pass. Tests: 56/56 green. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> # Conflicts: # CONTRIBUTING.md # README.md # ai/scripts/train_konvid.py # core/src/dnn/AGENTS.md # core/src/dnn/ort_backend.c # core/src/dnn/ort_backend_internal.h # core/src/feature/feature_extractor.cpp # docs/adr/0761-cpp23-wave8-opt-read-json-model.md # docs/adr/0763-cuda-adm-decouple-ldg.md # docs/adr/0771-simd-twin-inventory.md # docs/adr/0772-feature-extractor-cpp-rename.md # docs/adr/0777-thread-safety-audit-gpu-backends.md # docs/adr/0779-ebpf-fuse-bypass.md # docs/adr/0780-nolint-cluster-refactor.md # docs/adr/0793-nightly-workflow-audit.md # docs/adr/0802-ci-runner-image-standardization.md # docs/adr/0809-cli-cpp23-conversion.md # docs/adr/0812-renovate-go-rust-scheduling.md # docs/adr/0815-operator-node-distroless-dockerfiles.md # docs/adr/0844-float-adm-avx2-512-f2-f3.md # docs/adr/0852-hip-speed-extractor-wiring.md # docs/adr/0858-cpp23-gpu-dispatch-env.md # docs/adr/0865-ansnr-sunset-pre-vmaf-metric-drop.md # docs/adr/0879-python-dep-freshness-2026-05-30.md # docs/adr/0881-coverage-overrides-audit-2026-05-30.md # docs/adr/0888-pyright-strict-audit.md # docs/adr/0946-sycl-kernel-coverage-round3.md # docs/adr/0957-sycl-kernel-coverage-round4.md # docs/adr/README.md # docs/ai/models/learned_filter_v1.md # docs/backends/operator.md # docs/development/ebpf-fuse-bypass.md # docs/k8s/integration-tests.md # docs/rebase-notes.md # docs/research/0763-cuda-adm-decouple-ldg-f3-fix.md # docs/research/0881-coverage-overrides-audit-2026-05-30.md # docs/research/0946-sycl-kernel-coverage-round3-2026-05-31.md # docs/research/0957-sycl-kernel-coverage-round4-2026-05-31.md # docs/research/dependency-audit-2026-05-30.md # docs/research/nolint-cluster-audit-2026-05-29.md # docs/research/pyright-strict-audit-2026-05-30.md # docs/research/python-dep-freshness-2026-05-30.md # docs/research/python-type-annotations-audit-20260530.md # docs/research/research-0787-libvmaf-api-error-path-audit.md # docs/research/simd-twin-inventory-2026-05-29.md # docs/research/thread-safety-audit-backends-2026-05-29.md # docs/state.md # mkdocs.yml # pyproject.toml
lusoris
added a commit
that referenced
this pull request
Jun 3, 2026
…eature_extractor (#578) Add 56 new tests across two previously untested modules: - ai/sidecar/tests/test_online_trainer.py (30 tests): covers OnlineTrainer construction, ingest/batch/checkpoint lifecycle, _write_sha256_sidecar atomicity, _build_fallback_model / _load_base_model happy + error paths, _handle_connection JSON wire protocol (happy/bad-key/ malformed/empty-line/multi-message), and run_server start+stop. Module coverage: online_trainer.py 0% → 85%. - ai/tests/test_feature_extractor_unit.py (26 tests): covers _ensure_binary raise + pass, _lookup direct/integer_-fallback/absent, _run_vmaf_json argv composition/feature-flags/pix_fmt/cleanup-on-error, extract_features happy/NaN/integer_-fallback/empty-frames/missing-binary/ env-binary paths, FeatureExtractionResult round-trip, and aggregate_clip_stats shape/mean/p10-p90/NaN-ignore/all-NaN/empty-frames/bad-ndim/float32/single-frame. Module coverage: feature_extractor.py partial → 94%. semgrep skipped locally: pre-commit venv semgrep-core hits io_uring ENOMEM (ulimit -l 8 MiB on CachyOS); system semgrep passes cleanly; CI container runs with unlimited memlock. Same pre-existing failure as PR #481 / #457 / #484. All other pre-commit hooks pass. Tests: 56/56 green. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> # Conflicts: # CONTRIBUTING.md # README.md # ai/scripts/train_konvid.py # core/src/dnn/AGENTS.md # core/src/dnn/ort_backend.c # core/src/dnn/ort_backend_internal.h # core/src/feature/feature_extractor.cpp # docs/adr/0761-cpp23-wave8-opt-read-json-model.md # docs/adr/0763-cuda-adm-decouple-ldg.md # docs/adr/0771-simd-twin-inventory.md # docs/adr/0772-feature-extractor-cpp-rename.md # docs/adr/0777-thread-safety-audit-gpu-backends.md # docs/adr/0779-ebpf-fuse-bypass.md # docs/adr/0780-nolint-cluster-refactor.md # docs/adr/0793-nightly-workflow-audit.md # docs/adr/0802-ci-runner-image-standardization.md # docs/adr/0809-cli-cpp23-conversion.md # docs/adr/0812-renovate-go-rust-scheduling.md # docs/adr/0815-operator-node-distroless-dockerfiles.md # docs/adr/0844-float-adm-avx2-512-f2-f3.md # docs/adr/0852-hip-speed-extractor-wiring.md # docs/adr/0858-cpp23-gpu-dispatch-env.md # docs/adr/0865-ansnr-sunset-pre-vmaf-metric-drop.md # docs/adr/0879-python-dep-freshness-2026-05-30.md # docs/adr/0881-coverage-overrides-audit-2026-05-30.md # docs/adr/0888-pyright-strict-audit.md # docs/adr/0946-sycl-kernel-coverage-round3.md # docs/adr/0957-sycl-kernel-coverage-round4.md # docs/adr/README.md # docs/ai/models/learned_filter_v1.md # docs/backends/operator.md # docs/development/ebpf-fuse-bypass.md # docs/k8s/integration-tests.md # docs/rebase-notes.md # docs/research/0763-cuda-adm-decouple-ldg-f3-fix.md # docs/research/0881-coverage-overrides-audit-2026-05-30.md # docs/research/0946-sycl-kernel-coverage-round3-2026-05-31.md # docs/research/0957-sycl-kernel-coverage-round4-2026-05-31.md # docs/research/dependency-audit-2026-05-30.md # docs/research/nolint-cluster-audit-2026-05-29.md # docs/research/pyright-strict-audit-2026-05-30.md # docs/research/python-dep-freshness-2026-05-30.md # docs/research/python-type-annotations-audit-20260530.md # docs/research/research-0787-libvmaf-api-error-path-audit.md # docs/research/simd-twin-inventory-2026-05-29.md # docs/research/thread-safety-audit-backends-2026-05-29.md # docs/state.md # mkdocs.yml # pyproject.toml Co-authored-by: Lusoris <lusoris@pm.me>
This was referenced Jun 3, 2026
Merged
lusoris
added a commit
that referenced
this pull request
Jun 4, 2026
…aining_discovery + cross_backend_parity_gate Add 95 new pure-Python tests (no GPU, no corpus, no model downloads) across three previously-untested or under-tested utility scripts: - scripts/dev/test_training_discovery_report.py (31 tests, new file): Covers _extract_metric_table_value, _extract_bold_field, _float_or_none, _fmt, _markdown_table, PredictorCard.family, load_predictor_cards (including synthetic-stub rejection), _predictor_rows sort order, _qsv_nvenc_delta_rows, render_report sections and data, and main() CLI (stdout + file output + parent-dir creation). - scripts/ci/test_cross_backend_parity_gate.py (46 tests, new file): Covers build_matrix combinatorics, feature_extractor_name (CPU/CUDA/SYCL/ Vulkan suffixes, ADR-0586 adm alias, ADR-0662 motion alias, LCS pseudo- feature), build_command device-flag injection, diff_frames (zero-diff, tolerance detection, accumulation, mismatched-length raises), resolve_cell_tolerance (fp16 override, calibrated/placeholder/no-match), emit_json (schema, fields, status, newline), emit_md (header, table rows, failure section, tolerance_source), and registry consistency checks. - scripts/dev/test_project_modernization_audit.py (18 new tests, extending existing 28): adds dedupe_findings (duplicate removal, sort order), summarize_findings (counter aggregation, empty case), _area_for (all major AREA_RULES prefixes + exact-match + unknown fallback), render_markdown (clusters section, blocked section, by-area table), _skip_path include_archives=True branch, and main() stdout path. Note: semgrep-local skipped via SKIP= due to io_uring resource exhaustion in the worktree sandbox (same crash documented in .pre-commit-config.yaml at the semgrep-local hook comment, PR #481 / #457 / #484); semgrep finds no violations on these files when invoked correctly in CI. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
Jun 4, 2026
… sweep) Audit result: one file with suppressions found — core/src/feature/vif.c. Ten bare `cppcheck-suppress invalidPointerCast` annotations on char*→float* slab-partition casts had no inline citation, violating CLAUDE.md §12 r12. All 10 suppressions now carry: [MISRA-C:2012-11.3/EXP36-C: see block comment above] The block comment above the cast block has been expanded to explain why aligned_malloc(MAX_ALIGN=32) + ALIGN_CEIL(buf_sz_one) together guarantee that every sub-region base address satisfies float's alignment requirement, and why cppcheck cannot verify this statically. No logic changed. All other hooks pass; semgrep skipped due to pre-existing io_uring memlock sandbox limit (RLIMIT_MEMLOCK hard limit = 8 MB, cannot be raised; see .pre-commit-config.yaml semgrep-local comment and PR #481/#457). ADR-0108 deliverables: - Research digest: no digest needed: trivial comment-only audit - Decision matrix: no alternatives: only-one-way fix (add citation) - AGENTS.md note: no rebase-sensitive invariants - Reproducer: grep -rn "cppcheck-suppress" core/ --include="*.{c,h}" -> 10 cited hits - Changelog: changelog.d/chore/cppcheck-suppress-cite-audit.md - Rebase notes: docs/rebase-notes.md (no rebase impact) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
Jun 4, 2026
…aining_discovery + cross_backend_parity_gate (#598) Add 95 new pure-Python tests (no GPU, no corpus, no model downloads) across three previously-untested or under-tested utility scripts: - scripts/dev/test_training_discovery_report.py (31 tests, new file): Covers _extract_metric_table_value, _extract_bold_field, _float_or_none, _fmt, _markdown_table, PredictorCard.family, load_predictor_cards (including synthetic-stub rejection), _predictor_rows sort order, _qsv_nvenc_delta_rows, render_report sections and data, and main() CLI (stdout + file output + parent-dir creation). - scripts/ci/test_cross_backend_parity_gate.py (46 tests, new file): Covers build_matrix combinatorics, feature_extractor_name (CPU/CUDA/SYCL/ Vulkan suffixes, ADR-0586 adm alias, ADR-0662 motion alias, LCS pseudo- feature), build_command device-flag injection, diff_frames (zero-diff, tolerance detection, accumulation, mismatched-length raises), resolve_cell_tolerance (fp16 override, calibrated/placeholder/no-match), emit_json (schema, fields, status, newline), emit_md (header, table rows, failure section, tolerance_source), and registry consistency checks. - scripts/dev/test_project_modernization_audit.py (18 new tests, extending existing 28): adds dedupe_findings (duplicate removal, sort order), summarize_findings (counter aggregation, empty case), _area_for (all major AREA_RULES prefixes + exact-match + unknown fallback), render_markdown (clusters section, blocked section, by-area table), _skip_path include_archives=True branch, and main() stdout path. Note: semgrep-local skipped via SKIP= due to io_uring resource exhaustion in the worktree sandbox (same crash documented in .pre-commit-config.yaml at the semgrep-local hook comment, PR #481 / #457 / #484); semgrep finds no violations on these files when invoked correctly in CI. Co-authored-by: Lusoris <lusoris@pm.me> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
Jun 4, 2026
…(ADR-1001) Adds test_sycl_cambi_parity.c: the first genuine numerical-correctness parity gate for cambi_sycl. The pre-existing test_integer_cambi_sycl.c was a smoke test only (its own header says so); ADR-0957 incorrectly counted it as a parity gate, leaving cambi_sycl as the sole registered SYCL extractor without a CPU-vs-SYCL delta assertion. Fixture: 256x256 quantised-gradient (8-step/32-px bands), above the CAMBI_MIN_WIDTH_HEIGHT=216 threshold, non-trivial banding score. Tolerance: 1e-4 (ADR-0214 places=4 default for integer kernels). Skip: [skip: no SYCL device] when no oneAPI runtime present. Active SYCL parity coverage corrects to 17/18 registered extractors (2 dormant SpEED twins activate automatically once their build wiring lands per ADR-0957). semgrep skipped: pre-existing io_uring/RLIMIT_MEMLOCK environment failure documented in .pre-commit-config.yaml (PR #481/#457). ADR-0108 deliverables: - research digest: no digest needed: trivial parity gap-fill - decision matrix: ADR-1001 Alternatives considered - AGENTS.md invariant: core/test/AGENTS.md (smoke vs. parity distinction) - reproducer: meson test -C build test_sycl_cambi_parity (suite fast/gpu) - changelog: changelog.d/added/sycl-cambi-parity.md - rebase-notes: docs/rebase-notes.md (no rebase impact) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
Jun 4, 2026
… sweep) Audit result: one file with suppressions found — core/src/feature/vif.c. Ten bare `cppcheck-suppress invalidPointerCast` annotations on char*→float* slab-partition casts had no inline citation, violating CLAUDE.md §12 r12. All 10 suppressions now carry: [MISRA-C:2012-11.3/EXP36-C: see block comment above] The block comment above the cast block has been expanded to explain why aligned_malloc(MAX_ALIGN=32) + ALIGN_CEIL(buf_sz_one) together guarantee that every sub-region base address satisfies float's alignment requirement, and why cppcheck cannot verify this statically. No logic changed. All other hooks pass; semgrep skipped due to pre-existing io_uring memlock sandbox limit (RLIMIT_MEMLOCK hard limit = 8 MB, cannot be raised; see .pre-commit-config.yaml semgrep-local comment and PR #481/#457). ADR-0108 deliverables: - Research digest: no digest needed: trivial comment-only audit - Decision matrix: no alternatives: only-one-way fix (add citation) - AGENTS.md note: no rebase-sensitive invariants - Reproducer: grep -rn "cppcheck-suppress" core/ --include="*.{c,h}" -> 10 cited hits - Changelog: changelog.d/chore/cppcheck-suppress-cite-audit.md - Rebase notes: docs/rebase-notes.md (no rebase impact) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
Jun 4, 2026
… sweep) (#602) Audit result: one file with suppressions found — core/src/feature/vif.c. Ten bare `cppcheck-suppress invalidPointerCast` annotations on char*→float* slab-partition casts had no inline citation, violating CLAUDE.md §12 r12. All 10 suppressions now carry: [MISRA-C:2012-11.3/EXP36-C: see block comment above] The block comment above the cast block has been expanded to explain why aligned_malloc(MAX_ALIGN=32) + ALIGN_CEIL(buf_sz_one) together guarantee that every sub-region base address satisfies float's alignment requirement, and why cppcheck cannot verify this statically. No logic changed. All other hooks pass; semgrep skipped due to pre-existing io_uring memlock sandbox limit (RLIMIT_MEMLOCK hard limit = 8 MB, cannot be raised; see .pre-commit-config.yaml semgrep-local comment and PR #481/#457). ADR-0108 deliverables: - Research digest: no digest needed: trivial comment-only audit - Decision matrix: no alternatives: only-one-way fix (add citation) - AGENTS.md note: no rebase-sensitive invariants - Reproducer: grep -rn "cppcheck-suppress" core/ --include="*.{c,h}" -> 10 cited hits - Changelog: changelog.d/chore/cppcheck-suppress-cite-audit.md - Rebase notes: docs/rebase-notes.md (no rebase impact) Co-authored-by: Lusoris <lusoris@pm.me> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
Jun 4, 2026
…(ADR-1001) Adds test_sycl_cambi_parity.c: the first genuine numerical-correctness parity gate for cambi_sycl. The pre-existing test_integer_cambi_sycl.c was a smoke test only (its own header says so); ADR-0957 incorrectly counted it as a parity gate, leaving cambi_sycl as the sole registered SYCL extractor without a CPU-vs-SYCL delta assertion. Fixture: 256x256 quantised-gradient (8-step/32-px bands), above the CAMBI_MIN_WIDTH_HEIGHT=216 threshold, non-trivial banding score. Tolerance: 1e-4 (ADR-0214 places=4 default for integer kernels). Skip: [skip: no SYCL device] when no oneAPI runtime present. Active SYCL parity coverage corrects to 17/18 registered extractors (2 dormant SpEED twins activate automatically once their build wiring lands per ADR-0957). semgrep skipped: pre-existing io_uring/RLIMIT_MEMLOCK environment failure documented in .pre-commit-config.yaml (PR #481/#457). ADR-0108 deliverables: - research digest: no digest needed: trivial parity gap-fill - decision matrix: ADR-1001 Alternatives considered - AGENTS.md invariant: core/test/AGENTS.md (smoke vs. parity distinction) - reproducer: meson test -C build test_sycl_cambi_parity (suite fast/gpu) - changelog: changelog.d/added/sycl-cambi-parity.md - rebase-notes: docs/rebase-notes.md (no rebase impact) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
lusoris
added a commit
that referenced
this pull request
Jun 4, 2026
…(ADR-1001) (#604) Adds test_sycl_cambi_parity.c: the first genuine numerical-correctness parity gate for cambi_sycl. The pre-existing test_integer_cambi_sycl.c was a smoke test only (its own header says so); ADR-0957 incorrectly counted it as a parity gate, leaving cambi_sycl as the sole registered SYCL extractor without a CPU-vs-SYCL delta assertion. Fixture: 256x256 quantised-gradient (8-step/32-px bands), above the CAMBI_MIN_WIDTH_HEIGHT=216 threshold, non-trivial banding score. Tolerance: 1e-4 (ADR-0214 places=4 default for integer kernels). Skip: [skip: no SYCL device] when no oneAPI runtime present. Active SYCL parity coverage corrects to 17/18 registered extractors (2 dormant SpEED twins activate automatically once their build wiring lands per ADR-0957). semgrep skipped: pre-existing io_uring/RLIMIT_MEMLOCK environment failure documented in .pre-commit-config.yaml (PR #481/#457). ADR-0108 deliverables: - research digest: no digest needed: trivial parity gap-fill - decision matrix: ADR-1001 Alternatives considered - AGENTS.md invariant: core/test/AGENTS.md (smoke vs. parity distinction) - reproducer: meson test -C build test_sycl_cambi_parity (suite fast/gpu) - changelog: changelog.d/added/sycl-cambi-parity.md - rebase-notes: docs/rebase-notes.md (no rebase impact) Co-authored-by: Lusoris <lusoris@pm.me> Co-authored-by: Claude Sonnet 4.6 <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
core/doc/Doxyfile.public-api— a standalone Doxyfile that targets only the installable public headers undercore/include/libvmaf/..github/workflows/doxygen-public-api.yml— on-demand CI job that builds the doxygen tree and publishes the rendered HTML + warning log as build artifacts.@fieldantipattern, adding missing@param/@returnblocks, documenting previously-undocumented compounds, and converting cross-symbol@refto backtick literals.The workflow is informational only; promotion to a required gate is tracked in ADR-0953.
Warnings before / after
libvmaf_mcp.hdnn.hlibvmaf_metal.hpicture.hlibvmaf_hip.hlibvmaf.hmodel.hlibvmaf_sycl.hlibvmaf_cuda.hWarning classes in the baseline: 44 undocumented struct members, 21 missing
@param, 11 missing@return, 8 undocumented compounds, 11 misc (unknown@fieldcommand, unresolved cross-symbol@ref).ADR-0108 deliverables
docs/research/doxygen-public-api-clean-2026-05-31.mddocs/adr/0953-doxygen-public-api-clean.md(Alternatives considered section)AGENTS.mdinvariant note —core/include/libvmaf/AGENTS.md(new "Doxygen-clean public API" rebase-sensitive invariant)changelog.d/added/doxygen-build-clean.mddocs/rebase-notes.md("Doxygen public-API clean (ADR-0953, 2026-05-31)")Test plan
doxygen --version— verified against 1.15.0 invmaf-dev-mcp.doxygen core/doc/Doxyfile.public-api wc -l build/doxygen-public-api/warnings.log # 0pre-commit run --files <all touched>) — green.doxygen-public-apiworkflow — runs on this PR via thepull_requestpath-filter oncore/include/libvmaf/**, publishesdoxygen-public-api-warnings+doxygen-public-api-htmlartifacts.🤖 Generated with Claude Code