ADRs tagged fork-local¶
Auto-generated by scripts/docs/generate-adr-by-tag.sh. Edit ADR Tags: lines to update.
658 ADR(s) carry this tag.
| ID | Title |
|---|---|
| ADR-0164 | SSIMULACRA 2 snapshot-JSON regression gate (T3-3) |
| ADR-0165 | Tracked docs/state.md for bug-status hygiene (T7-1) |
| ADR-0168 | Tiny-AI Wave 1 baselines C2 + C3 — KoNViD-1k training (T6-1) |
| ADR-0170 | vmaf_pre extended to 10/12-bit and optional chroma (T6-4) |
| ADR-0172 | MCP describe_worst_frames tool with VLM fallback (T6-6) |
| ADR-0173 | PTQ int8 audit implementation — registry schema + scripts + CI gate (T5-3) |
| ADR-0174 | First per-model PTQ — learned_filter_v1 dynamic int8 (T5-3b) |
| ADR-0175 | Vulkan compute backend — scaffold-only audit-first PR (T5-1) |
| ADR-0179 | float_moment SIMD parity (AVX2 + NEON) |
| ADR-0180 | CPU coverage matrix audit — close 5 stale gaps |
| ADR-0181 | Global feature-characteristics registry + per-backend dispatch strategy |
| ADR-0182 | GPU long-tail batch 1 — psnr + ciede + moment on CUDA / SYCL / Vulkan |
| ADR-0183 | libvmaf_sycl FFmpeg filter — zero-copy QSV / VAAPI import |
| ADR-0184 | Vulkan VkImage import C-API scaffold (T7-29 part 1 of 2) |
| ADR-0185 | Hide volk / Vulkan-loader symbols from libvmaf's public ABI |
| ADR-0186 | Vulkan VkImage import + filter (T7-29 parts 2 + 3) |
| ADR-0187 | ciede2000 Vulkan kernel — float-precision per-pixel ΔE |
| ADR-0188 | GPU long-tail batch 2 — psnr_hvs / ssim / ms_ssim across CUDA / SYCL / Vulkan |
| ADR-0189 | float_ssim Vulkan kernel — host decimation, 2-dispatch GPU |
| ADR-0190 | float_ms_ssim Vulkan kernel — 5-level pyramid + Wang product on host |
| ADR-0191 | float_psnr_hvs Vulkan kernel — overlapping 8×8 DCT blocks + per-plane log transform |
| ADR-0192 | GPU long-tail batch 3 — closing every remaining metric gap (motion_v2 / float_ansnr / ssimulacra2 / cambi + float twins) |
| ADR-0193 | motion_v2 Vulkan kernel — single-dispatch SAD via convolution linearity |
| ADR-0194 | float_ansnr GPU kernels — single-dispatch 3x3 + 5x5 filters with per-WG float partials |
| ADR-0195 | float_psnr GPU kernels — single-dispatch diff² with float partials, bit-exact vs CPU |
| ADR-0196 | float_motion GPU kernels — float twin of integer_motion blur+SAD |
| ADR-0197 | float_vif GPU kernels — 4-scale pyramid with mirror-asymmetry fix |
| ADR-0198 | Rename volk's vk* symbols to vmaf_priv_vk* for static-archive builds |
| ADR-0199 | float_adm Vulkan kernel — sixth Group B float twin |
| ADR-0200 | Move volk -include flag off of volk_dep.compile_args (libvmaf.pc leak fix) |
| ADR-0202 | float_adm CUDA + SYCL twins — sixth Group B float kernel finishes |
| ADR-0203 | Tiny-AI training prep — implementation decisions |
| ADR-0205 | cambi GPU feasibility spike |
| ADR-0207 | Tiny-AI Quantization-Aware Training (QAT) — design |
| ADR-0208 | First per-model QAT — learned_filter_v1 int8 (T5-4) |
| ADR-0209 | Embedded MCP server — scaffold-only audit-first PR (T5-2) |
| ADR-0210 | cambi Vulkan integration (Strategy II hybrid) |
| ADR-0211 | Tiny-model registry schema + Sigstore --tiny-model-verify |
| ADR-0212 | HIP (AMD ROCm) compute backend — scaffold-only audit-first PR (T7-10) |
| ADR-0214 | GPU-parity CI gate (T6-8) — cross-device variance matrix |
| ADR-0217 | SYCL toolchain cleanup — multi-version recipe + icpx-aware clang-tidy wrapper |
| ADR-0218 | MobileSal saliency feature extractor (T6-2a) |
| ADR-0219 | motion3 GPU coverage on Vulkan + CUDA + SYCL (3-frame window) |
| ADR-0221 | CHANGELOG + ADR-index fragment-file pattern |
| ADR-0222 | vmaf-perShot per-shot CRF predictor sidecar |
| ADR-0223 | 0223-transnet-v2-shot-detector.md |
| ADR-0234 | GPU-generation-aware ULP calibration head |
| ADR-0235 | Codec-aware FR regressor (fr_regressor_v2) |
| ADR-0236 | 0236-dists-extractor.md |
| ADR-0237 | Quality-aware encode automation surface (vmaf-tune) |
| ADR-0238 | Vulkan VmafPicture preallocation surface (API parity with CUDA / SYCL) |
| ADR-0239 | Backend-agnostic GPU picture pool (gpu_picture_pool.{h,c}) |
| ADR-0240 | GPU backend public-header pattern doc (PR3 of GPU dedup, doc-only) |
| ADR-0241 | HIP first-consumer kernel — integer_psnr_hip via mirrored kernel-template |
| ADR-0242 | Tiny-AI training on the original Netflix VMAF training corpus |
| ADR-0243 | enable_lcs MS-SSIM extras on CUDA + Vulkan |
| ADR-0244 | vmaf_tiny_v2 — canonical-6 + StandardScaler tiny VMAF MLP |
| ADR-0245 | SIMD bit-exact test harness shared header |
| ADR-0246 | Per-backend GPU kernel scaffolding templates (CUDA + Vulkan) |
| ADR-0248 | nr_metric_v1 joins dynamic-PTQ family (T5-3d) |
| ADR-0249 | Tiny-AI Wave 1 baseline C1 — fr_regressor_v1 on Netflix Public |
| ADR-0250 | Tiny-AI extractor template — shared scaffolding header |
| ADR-0251 | Vulkan VkImage import — v2 async pending-fence model (T7-29 part 4) |
| ADR-0254 | HIP second-consumer kernel — float_psnr_hip via mirrored kernel-template |
| ADR-0257 | MobileSal real-weights swap deferred (T6-2a-followup blocker) |
| ADR-0259 | HIP third-consumer kernel — ciede_hip via mirrored kernel-template |
| ADR-0260 | HIP fourth-consumer kernel — float_moment_hip via mirrored kernel-template |
| ADR-0261 | TransNet V2 shot-boundary detector — real upstream weights via NTCHW adapter (T6-3a-followup) |
| ADR-0264 | Vulkan 1.4 API-version bump blocked on shader FP-contraction audit |
| ADR-0265 | U-2-Net u2netp saliency replacement blocked on weights distribution + op allowlist |
| ADR-0269 | precise decoration audit on vif.comp + ciede.comp — Step A of the Vulkan 1.4 bump path |
| ADR-0271 | Wire integer_ms_ssim_cuda through the CUDA fence-batching helper |
| ADR-0273 | HIP seventh kernel-template consumer — float_motion_hip |
| ADR-0274 | HIP eighth kernel-template consumer — float_ssim_hip |
| ADR-0275 | vmaf_tiny_v3 and vmaf_tiny_v4 join dynamic-PTQ family (T5-3d follow-up) |
| ADR-0276 | vmaf-tune fast — proxy-based recommend (Phase A.5) |
| ADR-0277 | ffmpeg-patches refresh against n8.1 — 2026-05-04 (no drift) |
| ADR-0281 | vmaf-tune Intel QSV codec adapters (h264_qsv, hevc_qsv, av1_qsv) |
| ADR-0282 | vmaf-tune AMD AMF codec adapters (h264 / hevc / av1) |
| ADR-0283 | vmaf-tune Apple VideoToolbox codec adapters |
| ADR-0285 | vmaf-tune libvvenc adapter — VVC / H.266 with optional NN-VC tools |
| ADR-0286 | Fork-trained saliency student saliency_student_v1 on DUTS-TR |
| ADR-0287 | vmaf_tiny_v5 — corpus expansion (4-corpus + YouTube UGC vp9 subset) |
| ADR-0288 | vmaf-tune libx265 codec adapter |
| ADR-0289 | vmaf-tune resolution-aware model selection + CRF offsets |
| ADR-0290 | NVENC codec adapters for vmaf-tune (h264 / hevc / av1) |
| ADR-0293 | vmaf-tune saliency-aware ROI tuning (Bucket #2) |
| ADR-0294 | vmaf-tune codec adapter for SVT-AV1 |
| ADR-0295 | vmaf-tune Phase E — per-title bitrate-ladder generator |
| ADR-0296 | Region-of-interest VMAF scoring (vmaf-roi-score) — saliency-weighted scaffold |
| ADR-0297 | vmaf-tune — codec-agnostic encode dispatcher |
| ADR-0298 | vmaf-tune content-addressed encode/score cache |
| ADR-0299 | GPU scoring backend for vmaf-tune (--score-backend) |
| ADR-0300 | vmaf-tune HDR-aware encoding + scoring |
| ADR-0301 | vmaf-tune --sample-clip-seconds (sample-clip mode) |
| ADR-0303 | fr_regressor_v2 ensemble — production flip trainer + CI gate |
| ADR-0304 | vmaf-tune fast — production wiring (Optuna TPE + v2 proxy + GPU verify) |
| ADR-0305 | Encoder knob-space Pareto-frontier analysis stratified per (source, codec, rc_mode) |
| ADR-0307 | vmaf-tune ladder default sampler — wire Phase B/E gap |
| ADR-0308 | Encoder knob-sweep recipe-regression revision policy |
| ADR-0309 | fr_regressor_v2 ensemble — real-corpus retrain harness + flip workflow |
| ADR-0310 | BVI-DVC corpus ingestion for fr_regressor_v2 |
| ADR-0311 | libFuzzer harness expansion — fuzz_yuv_input + fuzz_cli_parse |
| ADR-0314 | vmaf-tune --score-backend=vulkan (vendor-neutral GPU scoring) |
| ADR-0315 | Vendor-neutral VVC encode strategy — tiered Tier-1-now / Tier-2-backlog / Tier-3-revisit |
| ADR-0316 | cli_parse — handle long-only options in error() |
| ADR-0318 | fr_regressor_v2 ensemble retrain harness — wrapper-trainer interface fix + Phase A pre-step doc |
| ADR-0319 | fr_regressor_v2 ensemble LOSO trainer — real loader + per-fold training |
| ADR-0320 | fr_regressor_v2 ensemble seeds — production flip (smoke → false) |
| ADR-0323 | fr_regressor_v3 — train + register on ENCODER_VOCAB v3 (16-slot) |
| ADR-0324 | Ensemble training kit — portable Phase-A + LOSO retrain bundle |
| ADR-0325 | KonViD-150k corpus ingestion |
| ADR-0326 | vmaf-tune Phase B — target-VMAF bisect |
| ADR-0331 | Skip CI on draft pull requests |
| ADR-0332 | Agent worktree-drift hard guard |
| ADR-0333 | vmaf-tune Phase F — multi-pass encoding (libx265 first) |
| ADR-0334 | state.md-touch-check CI gate (ADR-0165 enforcement) |
| ADR-0336 | KonViD MOS head v1 (ADR-0325 Phase 3) |
| ADR-0337 | motion_v2 inherits motion v1's public option surface (duplicate registration) |
| ADR-0339 | av1_videotoolbox placeholder adapter + upstream watcher |
| ADR-0340 | Multi-corpus aggregation for the FR-regressor / predictor v2 trainer |
| ADR-0341 | paths-ignore filter on heavy CI workflows for doc-only PRs |
| ADR-0345 | cambi × {CUDA, SYCL, HIP} GPU port strategy |
| ADR-0346 | FR-features-from-NR-corpus adapter pattern |
| ADR-0347 | Sanitizer matrix — concrete test-set scope per sanitizer |
| ADR-0348 | Globally suppress CodeQL cpp/poorly-documented-function |
| ADR-0350 | psnr_hvs AVX-512 — re-bench confirms AVX2 ceiling (T3-9 (a)) |
| ADR-0353 | Vulkan submit-pool migration PR-B — six secondary kernels |
| ADR-0354 | Vulkan submit-pool migration PR-C — cambi, ssimulacra2, float_ansnr, moment |
| ADR-0355 | Symphony-inspired agent-dispatch infrastructure |
| ADR-0359 | 0359-arc-runners-pilot.md |
| ADR-0360 | CAMBI CUDA port (Strategy II hybrid, T3-15a) |
| ADR-0361 | Metal compute backend — scaffold-only audit-first PR (T8-1) |
| ADR-0362 | 0362-k150k-corpus-integration.md |
| ADR-0363 | Mend Renovate replaces Dependabot as the dependency-update bot |
| ADR-0364 | saliency_student_v2 — Resize-decoder ablation on the v1 recipe |
| ADR-0365 | Wire the CoreML execution provider into tiny-AI ORT dispatch |
| ADR-0367 | LSVQ corpus ingestion for nr_metric_v1 |
| ADR-0368 | External-competitor benchmark harness — wrapper-only architecture |
| ADR-0369 | Waterloo IVC 4K-VQA corpus ingestion for nr_metric_v1 |
| ADR-0370 | 0370-live-vqc-corpus-ingestion.md |
| ADR-0374 | Build-time-optional public APIs return -ENOSYS when disabled |
| ADR-0375 | HIP batch-3 — float_moment_hip and float_ssim_hip real kernels |
| ADR-0376 | Fix silent error-swallow in Vulkan buffer-invalidate readback functions |
| ADR-0377 | HIP batch-4 — ciede_hip and integer_motion_v2_hip real kernels |
| ADR-0378 | Per-picture CUDA streams must use CU_STREAM_NON_BLOCKING |
| ADR-0379 | libvmaf Symbol Visibility — Hide Internal Symbols with -fvisibility=hidden |
| ADR-0382 | Y4M header parser — reject non-positive width or height before allocation |
| ADR-0383 | K150K corpus scoring driver — parallel CPU worker redesign |
| ADR-0384 | Switch shfmt pre-commit hook from binary download to Go-source build |
| ADR-0385 | Feature-extractor deduplication by provided-feature names |
| ADR-0387 | Migrate Renovate from self-hosted workflow to GitHub App |
| ADR-0389 | vmaf_tiny_v3 — wider/deeper mlp_medium tiny VMAF MLP |
| ADR-0391 | ciede2000 Vulkan NVIDIA places=4 fork debt is a structural f32/f64 precision gap |
| ADR-0392 | vmaf-tune Phase D — per-shot CRF tuning |
| ADR-0393 | fr_regressor_v2 probabilistic head — deep-ensemble + conformal scaffold |
| ADR-0394 | Local sidecar training — on-host bias-correction model |
| ADR-0395 | predictor stub-models policy |
| ADR-0396 | Video-temporal saliency extension to saliency_student_v1 |
| ADR-0397 | vmaf-tune Phase F — auto adaptive recipe-aware tuning |
| ADR-0399 | vmaf-tune codec-adapter contract becomes a runtime contract (HP-1) |
| ADR-0401 | libvmaf WebAssembly target — phased EXPERIMENT then GO |
| ADR-0402 | MCP runtime v2 — UDS transport + real compute_vmaf binding |
| ADR-0403 | mkdocs --strict validation policy — actionable carve-outs |
| ADR-0405 | Wire OpenVINO NPU execution provider into the tiny-AI dispatch layer |
| ADR-0406 | Defer SYCL ADM DWT group_load rewrite — divisibility blocker |
| ADR-0407 | AdaptiveCpp as a second SYCL toolchain |
| ADR-0410 | ssimulacra2_cuda GPU module leak + per-scale malloc removal |
| ADR-0412 | Fork-local release-artefact mirror scaffold for u2netp.pth (Apache-2.0) |
| ADR-0413 | YouTube UGC corpus ingestion for nr_metric_v1 |
| ADR-0414 | Saliency-aware ROI for x265 / SVT-AV1 / libvvenc adapters |
| ADR-0415 | CAMBI SYCL port — closes last CUDA-to-SYCL parity gap |
| ADR-0416 | VIF on-the-fly filter sync from Netflix upstream |
| ADR-0417 | Tiny-AI Netflix corpus training scaffold — draft PR registration |
| ADR-0418 | Full upstream ADM + VIF-prescale sync (companion to PR #758 / ADR-0416) |
| ADR-0420 | Metal backend runtime (T8-1b) |
| ADR-0421 | Metal first kernel — integer_motion_v2 (T8-1c) |
| ADR-0422 | CLI HIP and Metal Backend Selectors |
| ADR-0425 | vmaf-roi-score saliency materialiser |
| ADR-0430 | Saliency RGB ingest and SSIMULACRA2 public docs |
| ADR-0431 | Split CUDA and CPU Feature Passes for FR-from-NR Extraction |
| ADR-0432 | High-Bit-Depth ROI-Score Mask Materialisation |
| ADR-0433 | CHUG Content Splits And HDR Audit |
| ADR-0434 | CHUG Parquet Metadata Enrichment |
| ADR-0436 | MCP server backend-selector parity |
| ADR-0437 | Metal public-header install and vmaf_metal_import_state declaration |
| ADR-0444 | Promote saliency_student_v2 to production default |
| ADR-0445 | Persistent VkPipelineCache for Vulkan compute backend |
| ADR-0446 | K150K/CHUG extractor passes HDR and HFR per-feature options |
| ADR-0447 | Motion features under-report on HFR / 50p content |
| ADR-0448 | Active upstream monitoring (no silent "wait" deferrals) |
| ADR-0451 | Local dev-MCP container for live probing |
| ADR-0454 | VIF CUDA shared-memory staging for horizontal and vertical filter passes |
| ADR-0455 | KonViD-150k k150ka/k150kb split promotion into the MOS-head trainer |
| ADR-0457 | model/tiny/*.onnx blobs ≥1MB live in GitHub Releases, not git |
| ADR-0458 | SYCL CAMBI queue-sync collapse + SSIM horizontal SLM staging |
| ADR-0459 | vmaf-tune panel/display-aware recommendation workstream |
| ADR-0463 | ADM p-norm fast-path split and VIF scalar-fallback malloc hoist |
| ADR-0464 | CAMBI CUDA spatial-mask shared-memory tile |
| ADR-0471 | Add enable_chroma to integer_psnr_hip (chroma parity with CUDA/SYCL/Vulkan twins) |
| ADR-0484 | Extend kernel-scaffolding.md with HIP and Metal lifecycle contract |
| ADR-0486 | Codify the three-function GPU backend context-API contract in docs |
| ADR-0488 | Shared once-snapshot helper for GPU dispatch env variables |
| ADR-0489 | CAMBI SYCL — Replace GPU-to-GPU q.wait() Calls with Event Chains (SY-1) |
| ADR-0490 | float_ms_ssim Metal port |
| ADR-0491 | Add dedicated docs/metrics/motion.md reference page |
| ADR-0496 | Default to the vmaf-dev-mcp container for all vmaf / vmaf-tune / ai / MCP work |
| ADR-0502 | ADM decouple gather prefetch (Approach B) |
| ADR-0514 | dev-MCP container exposes every host GPU backend (CUDA + SYCL + Vulkan + HIP) |
| ADR-0515 | Portable temp-path setup for test_public_api_score on MinGW64 |
| ADR-0517 | Repair MCP run_benchmark tool — drop per-call args, inject VMAF_BIN, guard set -u in bench_all.sh |
| ADR-0521 | MSVC portability gating — vif_avx512.c noinline/noclone + yuv_input.c S_ISREG/fstat |
| ADR-0523 | Register vmaf_fex_integer_motion_hip in the extractor list |
| ADR-0525 | Extract run_cmd subprocess helper into aiutils |
| ADR-0528 | test_cli_parse_long_only_args stderr-pipe drain + error() non-fatal fallback |
| ADR-0533 | Full HIP feature-extractor registration sweep |
| ADR-0540 | dev-MCP container FFmpeg ships AV1 (SVT/aom) + VVenC + hardware encoders (NVENC, oneVPL/QSV, AMF) |
| ADR-0547 | VMAF_<NAME>_DIR env-var overrides for ai/scripts corpus paths + drop cli.py.bak |
| ADR-0549 | Audit cleanup bundle 2 |
| ADR-0551 | VCQ-223 LocalExplainer CI timeout — root cause and fix path |
| ADR-0552 | Deterministic wavefront reduction for integer_vif_hip horizontal kernels |
| ADR-0559 | Feature Coverage Audit — Add speed_chroma + speed_temporal to Extraction Scripts (HDR-model prep) |
| ADR-0561 | 0561-hip-gfx-targets-fallback-widening.md |
| ADR-0562 | VCQ-223 LocalExplainer hang fix — cap neighbor_samples in test runner |
| ADR-0563 | HIP extractor audit — verification of 9 remaining scaffold claims |
| ADR-0564 | Real integer_ssim GPU kernels (CUDA, HIP, SYCL) — replace silent float_ssim substitution |
| ADR-0565 | Continuous Feature-Mix Evaluation Pipeline (predictor-bench) |
| ADR-0566 | 0566-hip-vif-per-feature-places4-gate.md |
| ADR-0567 | Real On-Device GPU Kernels for speed_chroma and speed_temporal (4 Backends) |
| ADR-0568 | Default sycl_icpx_aot_targets to full Intel arch list |
| ADR-0569 | SDK / Tool Version Bumps — 2026-05-18 |
| ADR-0575 | Fix yuv_input.c stat compat — include-order and _MSC_VER guard |
| ADR-0577 | vmaf-tune bisect decode concurrency cap and aggressive workdir cleanup |
| ADR-0579 | vmaf-tune auto --execute — Phase F real encode/score execution mode |
| ADR-0583 | Add enable_chroma option to the float_ms_ssim extractor |
| ADR-0585 | Add enable_chroma option to psnr_hvs_vulkan |
| ADR-0588 | vmaf-tune executor — per-shot and saliency execution modes |
| ADR-0589 | Metal float_ssim option parity — enable_lcs, enable_db, clip_db, scale |
| ADR-0590 | Wire enable_db / clip_db into the CUDA and SYCL MS-SSIM twins |
| ADR-0601 | vmaf-tune QSV/AMF hardware-device init + encoder probe size fix |
| ADR-0602 | macOS SIGSEGV in vmaf_write_output — pic_cnt underflow + missing vmaf NULL guard |
| ADR-0606 | macOS SIGSEGV deep-fix in output.c writers (PR #1403 follow-up) |
| ADR-0620 | Scaffold audit P0 — three silent-correctness fixes |
| ADR-0621 | Scaffold Audit P3 — six cleanup items + state drift |
| ADR-0624 | Fast NR Pre-Scoring Implementation (ADR-0615 impl) |
| ADR-0626 | SSH-into-runner debug session on macOS CI failure via tmate |
| ADR-0628 | Remote-aware ADR number allocator — cross-worktree collision prevention |
| ADR-0634 | MCP P0 fixes — isError spec bug, probe_backend, vmaf_version, vmaf_score_encoded |
| ADR-0637 | Fix 5 master CI failures — MCP smoke syntax, coverage floor, and job timeouts |
| ADR-0641 | Harden dev-container encoder probes and compare reports |
| ADR-0642 | AI refresh defaults use current fork full-feature extractors |
| ADR-0644 | Add vmaf-tune codec runtime variants |
| ADR-0647 | Refresh fr_regressor_v1 from the 2026-05-20 Netflix feature table |
| ADR-0656 | External-bench wrappers emit registry competitor keys |
| ADR-0659 | Modernization audit false-positive filter |
| ADR-0667 | vmaf-tune score backend native priority |
| ADR-0671 | U2NetP Mirror Exporter |
| ADR-0672 | Saliency Materializer Temporal Controls |
| ADR-0673 | Saliency Materializer Batch Manifest |
| ADR-0674 | Second-Opinion Materializer Batch Manifest |
| ADR-0675 | MOS Label Materializer Batch Manifest |
| ADR-0676 | MOS Corpus Adapter Manifests |
| ADR-0677 | AI Dataset Fetch Manifests |
| ADR-0679 | CI Draft Auto-Merge Gate |
| ADR-0682 | Tiny-AI Netflix corpus training scaffold — 2026-05-22 prep scope |
| ADR-0683 | Replace banned functions in vendored MCP cJSON |
| ADR-0684 | Pre-rebase worktree-drift guard |
| ADR-0685 | Tiny-AI Netflix corpus training scaffold — 2026-05-27 prep scope |
| ADR-0687 | CHUG HDR MOS head — held-out test partition validator |
| ADR-0688 | HIP wave32 carry-preserving int64 reduction for VIF and motion kernels |
| ADR-0692 | Bump C standard to C23 (VMAFX rebrand Phase 1D) |
| ADR-0694 | Tighten clang-tidy enforcement + confirm sanitizers as required CI gates |
| ADR-0696 | --netflix-compat flag for restoring legacy defaults |
| ADR-0698 | VMAFX Production Dockerfile — Multi-Arch, Image Signing, SBOM |
| ADR-0699 | VMAFX Helm Chart and Kubernetes Manifests with 3-Vendor GPU Device-Plugin Support |
| ADR-0702 | VMAFX Phase 4 — Multi-Language Modernization Foundation |
| ADR-0705 | vmafx-tune Go port — Stage 1 (compare subcommand) |
| ADR-0707 | TAD — Temporal Absolute Difference Feature Extractor Implemented in Rust (cbindgen Pilot) |
| ADR-0708 | C++23 Internals Pilot — metadata_handler.c conversion |
| ADR-0709 | VMAFX Phase 4b — Distributed Video-Quality, Encoding, and ML Platform |
| ADR-0711 | vmafx-controller Phase 4b.1 — Job Queue, Node Registry, and Scheduler |
| ADR-0713 | vmafx-node Go Worker Binary |
| ADR-0714 | vmafx-operator kubebuilder skeleton + CRDs |
| ADR-0717 | vmafx-node — ffmpeg latest-tag pinning + ffmpeg-patches bundled into Dockerfile |
| ADR-0719 | vmafx-node rclone Integration — Remote-Asset Streaming Without Disk Materialisation |
| ADR-0720 | C++23 Wave-1 Pilot — mem.c conversion |
| ADR-0721 | C++23 Pilot Wave 1 — opt.c conversion |
| ADR-0723 | C++23 Pilot — fex_ctx_vector.c Conversion (Wave 2) |
| ADR-0725 | C++23 Pilot — log.c conversion (real C++23, supersedes ADR-0722) |
| ADR-0726 | Drop Vulkan backend |
| ADR-0727 | C++23 Wave 2 — project-wide cpp_std=c++23 bump and dict.c → dict.cpp |
| ADR-0730 | vmafx-tune Go port — Stage 2 (ladder subcommand) |
| ADR-0733 | C++23 Wave 4 — output writers (XML, JSON, CSV, subtitle) |
| ADR-0735 | C++23 Wave 5 — cpu, ref, thread_locale |
| ADR-0754 | 0754-cuda-ssim-vert-combine-ldg-pinned-leak.md |
| ADR-0755 | C++23 Wave 7 — drop orphan cpu.c, activate cpu.cpp |
| ADR-0757 | 0757-cuda-ms-ssim-vert-lcs-horiz-ldg.md |
| ADR-0759 | HIP ADM — AdmBufferHip passed by pointer (F3 fix) |
| ADR-0761 | C++23 Wave 8 — opt.cpp activation + read_json_model.cpp |
| ADR-0762 | CUDA CIEDE2000 8bpc/16bpc — __ldg() read-only cache routing (F3 fix) |
| ADR-0763 | 0763-cuda-adm-decouple-ldg.md |
| ADR-0764 | psnr_hvs CUDA kernel — __ldg() + __restrict__ + __launch_bounds__(64) |
| ADR-0767 | Phase 4b.8 — libvmaf C ABI Break for VMAFx v4.0.0 |
| ADR-0768 | C++23 Wave 9 — picture_pool + gpu_picture_pool |
| ADR-0770 | vmafx-tune Go port — Stage 4 (report subcommand) |
| ADR-0772 | Rename feature_extractor.c to feature_extractor.cpp |
| ADR-0773 | CUDA ADM decouple-inline — __ldg() F3 fix on active path |
| ADR-0774 | MCP server audit — path rename, subsample drop, schema drift, dead code |
| ADR-0775 | DNN ORT Backend Audit Findings |
| ADR-0777 | Thread-Safety Audit — CUDA / SYCL / HIP Backends |
| ADR-0779 | eBPF FUSE read-path bypass for vmafx-node rclone mounts |
| ADR-0781 | Sidecar online training — SGD + EMA + replay buffer |
| ADR-0784 | AVX2 SIMD path for integer SSIM horizontal moment accumulation |
| ADR-0786 | vmafx-operator Stage 2 — reconciler loops, webhook validation, per-controller RBAC |
| ADR-0790 | Containerfile layer optimization — merge apt layer, strip build artifacts, no-cache-dir pip |
| ADR-0793 | Nightly Workflow Audit — TSan, Artifact Retention, Python Version |
| ADR-0804 | Add vmaf_context_get_backend — additive ABI introspection |
| ADR-0809 | C++23 Wave 8 — CLI conversion (cli_parse.c → .cpp, vmaf.c → .cpp) |
| ADR-0815 | Distroless Dockerfiles for vmafx-operator and vmafx-node |
| ADR-0839 | C++23 wave — shadow-identifier and implicit-cast cleanup |
| ADR-0845 | CUDA motion — multi-frame SAD batching to reduce per-launch overhead |
| ADR-0848 | Per-Surface Documentation Compliance Audit — Session 2026-05-29 |
| ADR-0852 | Wire speed_chroma_hip and speed_temporal_hip into HIP Build and Dispatch |
| ADR-0853 | Remove dead debug-print macros from motion_avx2.c |
| ADR-0858 | C++23 conversion of gpu_dispatch_env.c |
| ADR-0865 | Sunset ANSNR — drop ansnr / float_ansnr feature extractors |
| ADR-0879 | Python dependency freshness sweep (2026-05-30) |
| ADR-0884 | SYCL kernel coverage round 2 — five additional CPU-vs-SYCL parity gates |
| ADR-0889 | Vendored libsvm 3.24 audit — close header-row-ordering oob, document upstream-version policy |
| ADR-0892 | Conventional-Commits coverage + Changelog-fragment section hygiene |
| ADR-0902 | Signing and attestation audit — close residual gaps (2026-05-30) |
| ADR-0903 | Wire Codecov upload into the existing Coverage Gate jobs |
| ADR-0907 | Wall-clock perf regression gate over the multi-resolution baseline |
| ADR-0910 | Project-wide codespell config + sweep policy |
| ADR-0912 | Pixel-format edge coverage at the libvmaf unit-test layer |
| ADR-0918 | LLVM IR diff harness for bit-exact SIMD paths |
| ADR-0922 | Aggressive coverage ratchet + per-PR coverage-delta gate |
| ADR-0924 | Native bash pre-commit hook as opt-in alternative to the pre-commit framework |
| ADR-0928 | VmafPicture v2 — explicit per-backend GPU state |
| ADR-0929 | Rust vmafx safe binding crate — Phase 1 scaffold |
| ADR-0930 | Ship NetworkPolicy default-deny + Pod Security Standards "restricted" in the VMAFX Helm chart |
| ADR-0933 | gRPC streaming for multi-frame scoring (ScoreStream) |
| ADR-0937 | mkdocs ADR nav — per-hundred bucket layout + auto by-tag indexes |
| ADR-0939 | Skills library expansion — MCP, k8s, audit, bisect consolidation |
| ADR-0945 | HIP kernel parity-test coverage round 3 |
| ADR-0947 | CUDA kernel parity coverage — round 3 (float-path twins + ssimulacra2) |
| ADR-0949 | HIP motion3 parity test skips cleanly when HIPCC kernels are not built |
| ADR-0950 | Fix symmetric "adm" vs "adm_hip" feature-name bug in test_hip_adm_parity and add ENOSYS skip |
| ADR-0956 | CUDA kernel parity coverage — round 4 (last 5 uncovered kernels) |
| ADR-0958 | HIP kernel parity-test coverage round 4 |
| ADR-0960 | GPU runtime error-path leak fixes — round 25 (A.1 + A.2 + A.3) |
| ADR-0961 | Controller queue — roll back PullWork on post-update Get failure (round-25 audit B.1) |
| ADR-0962 | Controller fixes — implement StreamJobs snapshot and add reaper stop signal (round-25 audit B.3 + B.4) |
| ADR-0965 | CUDA SpEED TU repair — align with current CudaFunctions table (closes T-CUDA-SPEED-TU-REPAIR-2026-05-31) |
| ADR-0966 | Fix dev/Containerfile post-ADR-0700 libvmaf → core paths (Round 26 audit C.1) |
| ADR-0967 | MCP HTTP transport security — add auth + body limit + safer bind default (Round 26 audit A.1) |
| ADR-0970 | test_gpu_picture_pool.c: remove unused malloc + dead code (Round 27 audit D.3 + D.4) |
| ADR-0971 | Test suite: NULL-check malloc in 3 test files (Round 27 audit D.1) |
| ADR-0980 | Markdown-lint full-ruleset discharge — content fixes + per-file scoped disables |
| ADR-0986 | Add PR trigger to docs.yml CI workflow |
| ADR-0987 | AVX-512 path for float_moment feature extractor |
| ADR-0991 | Second-Opinion Batch Materializer — Smoke-Run Scaffold and Test Fix |
| ADR-0992 | MOS-label batch-run manifests for KonViD and CHUG |
| ADR-0993 | KoNViD / UGC / BVI-DVC Saliency Batch Manifests and Run Scaffolding |
| ADR-0999 | Guard <stdatomic.h> includes in C++ translation units (GCC 14 + Clang-18 fix) |
| ADR-1001 | SYCL parity round 5 — CAMBI CPU vs. SYCL parity gate |
| ADR-1003 | Bump project-wide C++ standard from c++11 to c++23 |
| ADR-1004 | HIP kernel parity-test coverage round 5 |
| ADR-1040 | Promote integer_ssim_moments_t to shared header (macOS / Windows arm64 build fix) |
| ADR-1060 | Round 10 C++23 wave error-path cleanup |
| ADR-1061 | Fix depth-limit, integer-overflow, and banned-function bugs in vendored pdjson and cJSON |
| ADR-1073 | Fix vmaf_score_at_index EAGAIN-guard misapplication for model output slots |
| ADR-1075 | MCP HTTP transport POST /v1/score body-validation edge cases |
| ADR-1083 | y4m_input_fetch_frame signed-integer overflow + fread(NULL) UB fixes |
| ADR-1089 | Block non-standard ONNX operator domains in the DNN wire scanner |
| ADR-1092 | framesync producer-death deadlock — abort flag + shutdown broadcast |
| ADR-1093 | Disable two recurring-failure tests via should_fail while root cause is under investigation |
| ADR-1094 | Helm chart rolling-update correctness — node strategy, PDB default, probe fix, grace period |
| ADR-1100 | Skip GPU-flagged extractors when flags == 0 in vmaf_get_feature_extractor_by_feature_name |
| ADR-1102 | Container-only canonical artifact publishing (Phase 4b.9) |
| ADR-1103 | 1103-hip-vif-mirror2-boundary.md |
| ADR-1106 | HIP motion_v2 mirror is reflect-101 (-2), correcting ADR-0377's -1 parity claim |
| ADR-1107 | Per-extractor prev_ref in the threaded batch path (multi-PREV_REF starvation fix) |
| ADR-1109 | vmafx-node Serve() registers the VmafxScoring gRPC service |
| ADR-1110 | Add ΔE-ITP (Delta E ITP) — PQ-only HDR colour-difference CPU extractor |
| ADR-1111 | Add PU21 HDR perceptual metric (PU-PSNR + PU-SSIM, PQ input only) |
| ADR-1112 | NIQE no-reference CPU feature extractor (fork-pkl parity) |
| ADR-1113 | Vendor the Pelorus interop ABI as a pinned read-only mirror |
| ADR-1114 | Y-FUNQUE+ wavelet-domain atom features (atoms-only, fused SVR deferred) |
| ADR-1115 | BRISQUE no-reference CPU feature extractor (bundled LIVE model) |
| ADR-1116 | vmaf-tune autotune prefilter control plane (Pelorus deband) |
| ADR-1117 | MCP vmaf_score tiny-AI / feature / CTC parameter coverage |
| ADR-1118 | Pelorus perceptual side-data weights VMAF spatial pooling, golden-isolated and opt-in |
| ADR-1119 | Adopt the golusoris fx framework across all vmafx Go binaries |
| ADR-1120 | Re-pin the vendored Pelorus interop ABI to minor-3 and consume PEL_SEC_COMPLEXITY in perceptual weighting |
| ADR-1123 | Raise the Required-Checks-Aggregator deadline to 240 minutes and batch Docker digest updates |
| ADR-1125 | Reconciling seven independent vmafx-tune Go ports into one tree |
| ADR-1134 | Build vmafx-ort-runner in-tree as a cgo shim over libvmaf's DNN session API |
| ADR-1135 | CI twin-drift + stale-source-reference gate |
| ADR-1137 | One implementation per shared Go package — folding the vmafx-tune shadow packages |
| ADR-1140 | Route required CI work by measured impact instead of pre-declared path filters |
| ADR-1153 | Resolution of Dead .c/.cpp Twin Sides (model.cpp, test_dict.c, test_feature.c) |
| ADR-1176 | Metal motion_v2 mirror closeout and reflect-101 parity contract |
| ADR-1178 | Dev container image publication and release artifact container enforcement |
| ADR-1225 | Migrate the HIP backend to ROCm 10.0.0, installed from digest-pinned container images |
| ADR-1226 | Size the CUDA AIM CM launch by SM count, not by a fixed rows-per-thread |
| ADR-1227 | Workflow display names are short labels; the axis list lives in the file |
| ADR-1228 | A recurring "faster than upstream, and still exact" milestone |
| ADR-1229 | The MCP server is the Go binary; the Python package is deprecated |
| ADR-1230 | The CI gcc moves forward with clang and meson, and the ratchet records it |
| ADR-1243 | Allow measured scoped tightening of the lint baseline |
| ADR-1244 | Guard merge-train ownership and exact-head validation |
| ADR-1251 | Renovate opens automerge-eligible and security bumps ready for review |
| ADR-1252 | Declare the single maintainer's bypass actor |
| ADR-1256 | Dispatch CAMBI's spatial-mask row SIMD kernels only where they measurably beat scalar |
| ADR-1258 | Keep the fork 64-bit only; retire the resurrected i686 lane |
| ADR-1259 | Record the CI build matrix as it actually runs |
| ADR-1260 | Windows on ARM64 CPU build-and-test lane |
| ADR-1261 | The local type-check hook fails on findings a branch introduces, not on ones it inherits |
| ADR-1262 | A failed input read exits 102; a legitimately shorter stream stays exit 0 |
| ADR-1263 | __HIP_PLATFORM_AMD__ is declared once by the build, not by each source |
| ADR-1264 | The HIP scaffold posture reports -ENOSYS, and its tests check both sites |
| ADR-1265 | The clang-tidy header filter matches absolute paths, so headers count |
| ADR-1270 | Bound repository subprocess execution behind one validated API |
| ADR-1271 | Pass NEO GitHub credentials through optional BuildKit secrets |
| ADR-1273 | Select language standards through warning-clean Meson preference lists |
| ADR-1276 | Re-pin the Pelorus mirror for released parser safety fixes |
| ADR-1282 | mypy's python_version follows requires-python |
| ADR-1283 | The whole-tree clang-tidy ratchet gets an arm64 cross lane |
| ADR-1285 | CUDA is a coordinated pin — group it in Renovate, gate the rest |
| ADR-1301 | A non-finite SpEED score fails the frame instead of being published |
| ADR-1302 | A non-finite feature score fails the frame, everywhere |
| ADR-1319 | Admit self-hosted GPU jobs through a live fail-closed probe |
| ADR-1321 | Pre-RC1 CI flake remediation and contract alignment |
| ADR-1322 | Restore enable_chroma option parity on integer_psnr_metal |
| ADR-1335 | Bind research-digest debt to the trusted merge base |
| ADR-1337 | C++ Placement New Visibility — Hide Inline Run-time Symbols |
| ADR-1346 | Build native release artifacts on a hosted runner inside the build-deps container stage |
| ADR-1354 | Build the native Linux bundle on the Debian 13 release track |
| ADR-1356 | Release provenance from GitHub build-provenance attestations, not slsa-github-generator |
| ADR-1357 | Run the SYCL CAMBI extractor entirely on the device |
| ADR-1358 | The SYCL SpEED twins are device-resident, with the 25x25 linear algebra on the device and exact fp32 arithmetic |
| ADR-1359 | The CLI maps --feature <cpu-name> to the explicit --backend's twin |
| ADR-1360 | Generate SYCL AOT images at compile time and fail the build when they are missing |
| ADR-1361 | Scale the psnr_hvs cross-backend tolerance with the CPU's float-sum length |
| ADR-1362 | The SYCL integer ADM twin computes AIM on the device and finalises every ADM output in the CPU's float arithmetic |
| ADR-1363 | The SYCL ssimulacra2 twin is device-resident, and float_ms_ssim_sycl waits once per frame |
| ADR-1364 | Register the SYCL device images of a Windows MSVC build through one explicit device link |
| ADR-1365 | SYCL PSNR, SSIM and float-motion twins take the CPU option tables |
| ADR-1366 | The vmaf CLI reads each input on its own thread, a bounded number of frames ahead |
| ADR-1367 | Every SYCL feature TU compiles with contraction off and correctly rounded fp32 division and square root |
| ADR-1368 | Build and run the oneAPI release image on Debian 13 with pinned Intel packages |
| ADR-1369 | SYCL twins read the planes the state uploads once per frame; opt-in shared chroma planes and a device-side slot fence |
| ADR-1370 | float_ssim_sycl decimates on the device, bit-identical to the CPU |
| ADR-1371 | SYCL motion differences the frames before the blur, in one shared kernel |
| ADR-1372 | CUDA motion differences the frames before the blur, in the kernel motion_v2 already had |
| ADR-1373 | CUDA PSNR, SSIM and motion twins take the CPU option tables and the CPU's arithmetic |
| ADR-1374 | CUDA integer ADM and VIF guard tiny frames like their SYCL twins |
| ADR-1377 | HIP motion differences the frames before the blur, in one shared kernel, and waits only in collect |
| ADR-1378 | Run the HIP CAMBI extractor entirely on the device |
| ADR-1379 | Run the CUDA CAMBI extractor entirely on the device |
| ADR-1380 | The CUDA SpEED twins are device-resident, with the 25x25 linear algebra on the device and CPU-exact fp32 arithmetic |
| ADR-1381 | HIP tile loads and the ADM vertical DWT clamp their rows; vif_hip hands frames below 16 pixels to the CPU |
| ADR-1382 | HIP PSNR, SSIM and float-motion twins take the CPU option tables |
| ADR-1383 | Resolve docs/state.md rebase conflicts three-way, keyed by bug id |
| ADR-1384 | Run the HIP SpEED twins entirely on the device, in the CPU's fp32 arithmetic |
| ADR-1386 | One script runs the home GPU box's RC3 verify commands, row by row, under per-device locks |
| ADR-1388 | Exempt PAT-mode release PRs from authoring-discipline gates via verified release-only diff |
| ADR-1389 | Run CodeQL (Actions) unconditionally on every pull request for universal SAST coverage |
| ADR-1390 | The HIP ssimulacra2 twin is device-resident with tiled row-pass Gaussian blur |
| ADR-1391 | The CUDA ssimulacra2 twin is device-resident |
| ADR-1392 | CUDA motion, PSNR and moment kernels add one atomic per block, the motion SAD filters separably, and PSNR selects its plane with constant indices |
| ADR-1393 | CAMBI's c-values walks clip the window to the frame at every edge |
| ADR-1395 | SYCL kernels use no scratch memory on Intel GPUs |
| ADR-1396 | vmaf_init() treats its handle as output-only again |
| ADR-1397 | GPU psnr_hvs twins reproduce the CPU's running float sum bit for bit |
| ADR-1399 | float_ssim_cuda decimates and convolves on the device with the CPU's arithmetic |
| ADR-1400 | integer_ssim_hip sums small frames in the CPU's raster order |
| ADR-1401 | psnr_hvs_sycl and psnr_hvs_hip return the CPU's scores bit for bit; the fp64-free masking threshold is an integer square root |
| ADR-1402 | Integer ADM keeps the scale-0 masking centre tap in int32 and clamps the excess in int64 |
| ADR-1403 | Every CUDA feature kernel compiles without FMA contraction, and a twin spells the fused operations its reference performs |
| ADR-1404 | float_motion_hip emits motion3 and implements every CPU float_motion option on the device |
| ADR-1405 | float_ssim_hip decimates on the device, bit-identical to the CPU |
| ADR-1407 | Every HIP kernel compiles with contraction off and correctly rounded fp32 division and square root |
| ADR-1408 | A VmafContext uploads each plane of a frame once and every HIP twin reads that copy |
| ADR-1409 | float_motion_cuda adds its SAD in the CPU's order and returns the CPU's scores bit for bit |
| ADR-1410 | SYCL CLI picture pool allocates pinned host USM to bypass staging upload |
| ADR-1411 | float_motion_sycl adds its SAD in the CPU's order and returns the CPU's scores bit for bit |
| ADR-1412 | float_vif_cuda computes the CPU's arithmetic, adds in the CPU's order and returns its scores bit for bit |
| ADR-1413 | Every integer ADM implementation bounds the enhancement gain with the scalar's truncated double product |
| ADR-1414 | float_ms_ssim_sycl computes the CPU's arithmetic and returns its per-scale means bit for bit |
| ADR-1415 | every x86 SIMD library is built without FP contraction |
| ADR-1416 | adm_cuda takes its CSF weights, its rounding shifts and its score conclusion from the CPU's routines and folds the denominator once per row |
| ADR-1417 | Integer AIM stays the unclipped ratio upstream defines; float AIM stays clipped at 1 |
| ADR-1419 | float_motion_hip stores its differences transposed and adds each row in the CPU's order |
| ADR-1420 | float_adm_cuda computes the CPU's arithmetic, divides through the host's reciprocal estimate and returns the CPU's scores bit for bit |
| ADR-1422 | float_vif_sycl computes the CPU's arithmetic without an fp64 type and returns its scores bit for bit |
| ADR-1423 | adm_hip takes its weights, shifts and score conclusion from the CPU, folds the denominator once per row and clears its accumulators after the upload |
| ADR-1424 | integer_ssim_cuda adds its terms in the CPU's raster order, on the host, and returns the CPU's score bit for bit |
| ADR-1426 | ciede_cuda computes the CPU's arithmetic and adds in the CPU's order; what remains is the math library, and the gate bounds it |
| ADR-1427 | A HIP frame queues its accumulator clears after its upload |
| ADR-1428 | Exact GPU twins are declared by one fragment file each, not by a shared literal |
| ADR-1429 | vmaf_read_pictures() accepts an index that skips values and documents what the motion scores do |
| ADR-1430 | speed_chroma_cuda keeps its correctly rounded log2; the gate bounds what glibc's log2f adds |
| ADR-1431 | vmaf_read_pictures() owns the pictures it is given on every return |
| ADR-1432 | vif_sycl computes the gain terms of the integer VIF in exact integer arithmetic and returns the CPU's scores bit for bit |
| ADR-1433 | ssimulacra2_cuda returns the sums of the CPU's loops, formed on the device from integer increments per binade |
| ADR-1434 | float_adm_sycl computes the CPU's arithmetic without an fp64 type, adds in the CPU's order and returns the CPU's scores bit for bit |
| ADR-1435 | vif_hip reads the CPU's log2 table instead of evaluating log2f() on the device, and returns the CPU's scores bit for bit |
| ADR-1436 | ciede_sycl runs the CPU's statements on fp32 pairs and adds in the CPU's order; it lands where the CUDA twin does, 1.4e-11 from the CPU |
| ADR-1437 | motion_hip, motion_v2_hip, psnr_hip, integer_ms_ssim_hip and cambi_hip are declared exact twins; float_psnr_hip and float_moment_hip are not |
| ADR-1438 | integer_ssim_hip adds its terms in the CPU's raster order at every frame size and returns the CPU's score bit for bit |
| ADR-1440 | float_psnr_hip adds its squared differences as integers and returns the CPU's score bit for bit |
| ADR-1441 | float_ssim_hip forms its window sums through the arithmetic float_ms_ssim_hip shares with the CPU and returns the CPU's score bit for bit |
| ADR-1442 | float ADM divides; the processor's reciprocal estimate leaves the reference and the CUDA twin |
| ADR-1443 | integer_ssim_sycl computes the CPU's fp64 term in 64-bit integers and adds in the CPU's order; it returns the CPU's ssim bit for bit |
| ADR-1444 | float_vif_hip runs the arithmetic of the CUDA twin from one shared header and returns the CPU's scores bit for bit |
| ADR-1445 | ssimulacra2_hip evaluates the CPU's fp64 terms and returns the sums of the CPU's loops |
| ADR-1446 | ssimulacra2_sycl forms the CPU's fp64 terms in 64-bit integers and returns the sums of the CPU's loops; it returns the CPU's score bit for bit |
| ADR-1447 | float_moment_hip adds the float squares the CPU adds, and is bit-identical while the CPU's own sum is exact |
| ADR-1448 | ciede_hip runs the CPU's arithmetic in fp32 pairs, from the header the SYCL twin runs; what remains is glibc's powf and the last bits of a pair |
| ADR-1449 | float_moment_sycl adds the float squares the CPU adds, and is bit-identical while the CPU's own sum is exact |
| ADR-1450 | float_psnr_sycl adds its squared differences as integers, and is bit-identical to the CPU |
| ADR-1451 | adm_sycl, motion_sycl, motion_v2_sycl, psnr_sycl, float_ssim_sycl and cambi_sycl are declared exact twins; speed_chroma_sycl is not |
| ADR-1452 | the gate bounds speed_chroma_hip against the CPU by what glibc's log2f adds, as it does for the CUDA twin |
| ADR-1453 | float_moment_cuda adds the float squares the CPU adds, and is bit-identical while the CPU's own sum is exact |
| ADR-1454 | A large subtree AGENTS.md is a generated index over one page per topic |
| ADR-1455 | float_psnr_cuda adds its squared differences as integers, and is bit-identical to the CPU |
| ADR-1456 | vif_cuda keeps its device log2f(), proven equal to the CPU's log2 table on every entry, and is declared an exact twin |
| ADR-1457 | motion_cuda, motion_v2_cuda, psnr_cuda, float_ssim_cuda, float_ms_ssim_cuda and cambi_cuda are declared exact twins |
| ADR-1458 | float_adm_hip runs the CPU's arithmetic from the header the CUDA twin runs and returns the CPU's scores bit for bit |
| ADR-1459 | SpEED's covariance kernels return the scalar kernel's bits; they vectorise across sums, not within one |
| ADR-1460 | speed_temporal becomes a parity-gate feature with a derived bound, and every registered twin of a gated backend has to be a gate cell |
| ADR-1461 | no C or C++ translation unit is built with floating-point contraction; the strict policy is a project argument |
| ADR-1462 | vif_cuda reads the CPU's log2 table instead of evaluating log2f() on the device |
| ADR-1463 | float_ssim_sycl forms the CPU's fp64 terms in 64-bit integers and adds them on the host in the CPU's raster order |
| ADR-1464 | float_ssim_cuda adds its frame sums in the CPU's raster order, on the host |
| ADR-1465 | float_ms_ssim_cuda adds the terms of every scale in the CPU's raster order, on the host |
| ADR-1466 | float_ms_ssim_sycl stores every window's l, c and s of every scale and adds them on the host in the CPU's raster order |
| ADR-1467 | ciede.c writes its squares as products, so ciede2000 no longer depends on the compiler or on the C library's powf for them; a GCC build moves by up to 2e-11 |
| ADR-1468 | A SYCL kernel requires only a sub-group size every default AOT target accepts (16 or 32); the six kernels that required 8 move to 16 |
| ADR-1469 | the psnr_hvs SIMD butterfly is two functions, cut at the same statement in the AVX2 and the NEON twin |
| ADR-1470 | An enum that C and C++ translation units both see has one size: no C++-only underlying type other than int's width |
| ADR-1471 | The clang-tidy lanes are measured in the dev container, with the device toolchains |
| ADR-1472 | The integer ADM weight limits follow from the contrast-masking cube and the largest wavelet coefficient of a scale |
| ADR-1473 | The x86 float ADM wavelet and CSF kernels return the scalar bits and are dispatched; the two reduction kernels are removed |
| ADR-1474 | A fork-created header that replays upstream arithmetic is EUPL-1.2 AND the licences of exactly that code, and the relicensing check becomes a required CI job |
| ADR-1475 | The quantisation step of integer ADM is Netflix's expression again, so vmaf_v0.6.1 returns Netflix master's bits |
| ADR-1476 | ciede2000() forms its two products in float, as Netflix's source does; the double casts of PR #552 are removed and the three GPU twins follow |
| ADR-1477 | SpEED evaluates Netflix's fp64 expressions again, and its GPU twins form the entropies and the score on the host with the same statements, so every twin returns the CPU's scores bit for bit on any C library |
| ADR-1479 | ciede upsamples 4:2:2 chroma with the horizontal flag for columns and the vertical flag for rows; upstream has the two swapped, and ciede2000 differs by up to 0.153 on 4:2:2 input |
| ADR-1480 | speed_temporal sizes its frame buffers for the prescaled height; upstream sizes them for the source height and reads past them when speed_prescale is above 1 |
| ADR-1481 | an extractor that fails on a worker thread fails the run; upstream drops the worker's error and returns success without the metric |
| ADR-1482 | integer adm on frames of 17 to 32 pixels reads inside the frame and rounds a zero shift with 0; upstream reads index -1 there, and scale 3 differs by up to 0.23 |
| ADR-1483 | a subsampled chroma plane of an odd-sized picture is rounded up; upstream rounds down, and chroma metrics on odd sizes differ by up to 0.83 dB |
| ADR-1484 | float_ms_ssim takes the magnitude of a scale's terms before pow(); upstream raises a negative structure term to a fractional power and returns NaN on anti-correlated frames |
| ADR-1485 | the aggregate PSNR of a plane without error is the per-frame cap; upstream publishes a ceiling 54 dB above it on the 1080p checkerboard chroma |
| ADR-1486 | float_motion scales its scale-1 planes with the stride it was called with; upstream recomputes the stride from the plane width, and motion_add_scale1 with motion_add_uv differs by up to 25 |
| ADR-1487 | code inherited from Netflix/vmaf evaluates as Netflix's source does, a difference needs an ADR, and a guard compares every emitted value against the recorded upstream head |
| ADR-1488 | the psnr_hvs masking threshold is the double root of a float product, as Netflix's source writes it; the double product of PR #552 is removed and the AVX2, NEON, CUDA, HIP and SYCL forms follow, bit for bit |
| ADR-1489 | The CSF weights of float ADM are Netflix's float arithmetic again, so float_adm differs from Netflix by the division alone |
| ADR-1492 | Tester image with one report command, hardware reports as tracked files |
| ADR-1493 | macOS tester bundle, an exception to container-only publishing |
| ADR-1494 | adm and float_adm refuse frames below 17x17; upstream's integer ADM crashes there and its float ADM returns values that at 8x8 and 12x9 depend on the heap |
| ADR-1495 | icx and icpx builds link glibc's libm, not Intel's libimf |
| ADR-1496 | The macOS tester bundle runs the parity gate's Metal cells and reports per state row what it measured |
| ADR-1497 | The float_moment twins form the CPU's rounded second-moment sum past 2^53 units, and return the CPU's bits on every frame |
| ADR-1498 | Metal twins take the exact designs of their CUDA, HIP and SYCL twins, on a strict FP kernel policy |
| ADR-1499 | The float_psnr twins add each row's exact sum in the CPU's order, and return the CPU's bits on every frame |
| ADR-1500 | The NEON and SVE2 float_moment kernels add in the scalar's order and return its bits on every input and vector length |
| ADR-1501 | The float_adm_sycl term kernel takes the large register file and leaves the sub-group size to the compiler, so it uses no scratch memory on Xe2 |
| ADR-1502 | Tests that assert an exact result compare floats by their bits through one helper, core/test/float_bits.h, which treats a NaN as identical to nothing |
| ADR-1503 | Every published tester artifact carries its licence texts, an attested SPDX SBOM and the source its copyleft parts require, and a gate refuses a file with no recorded licence |
| ADR-1504 | Decline praetor's branch ruleset; the policy file is the only declaration |
| ADR-1505 | An Intel GPU tester image with a backend-neutral GPU section in the report |
| ADR-1507 | The bundled BRISQUE model is used and redistributed under the LIVE release notice as written, not as a research-only exception |
| ADR-1508 | Documentation site generator, charts, diagrams and typography for the redesign |
| ADR-1509 | An NVIDIA GPU tester image that ships no NVIDIA file and measures every CUDA twin on a tester's GPU |
| ADR-1510 | Collapse the ADR navigation behind the index and tag pages |
| ADR-1511 | An AMD GPU tester image that ships only the ROCm runtime files the HIP build loads, with the source of its LGPL parts |
| ADR-1512 | Site search covers user pages only; record bodies leave the index |
| ADR-1513 | The production images, release assets and Python packages follow the tester licensing rules, checked by the same tool |
| ADR-1514 | The Go service images record every linked module's licence from the binary, and the node image ships a redistributable FFmpeg, a source-built rclone and the records of the libraries it copies |
| ADR-1515 | A native Windows tester zip for x64 and Arm64, built by the hosted runners with MSVC and a static C runtime |
| ADR-1516 | A Windows CUDA tester zip that ships no NVIDIA file and measures every CUDA twin on a tester's Windows PC |
| ADR-1517 | The production GPU images are built on Debian 13, ship only the vendor files libvmaf loads, and share the tester images' licence records |
| ADR-1518 | The controller authorises every gRPC call against one per-method role table, and a method without an entry is refused |
| ADR-1519 | The controller reads its tenants from VmafxTenant resources (or a file of them), verifies each token against its own tenant's provider, and refuses what it cannot verify |
| ADR-1520 | Feature-vector tiny models request their inputs, score at flush, and fail on a missing input |
| ADR-1521 | vmafx-mcp names the Go server; the Python wheel's script of that name is a one-release alias |
| ADR-1522 | Every job read of the controller is scoped to the caller's tenant in the query, and a node session belongs to the tenant that registered it |
| ADR-1523 | HIP twins run on the device of the imported state |
| ADR-1524 | vmafx-node pulls work from the controller, advertises exactly the backend it runs, and refuses to start when it cannot honour its configuration |
| ADR-1525 | adm_hip computes AIM on the device and is dispatched |
| ADR-1526 | vmafx-node reads job sources through pkg/storage and streams http-served inputs into the vmaf CLI through pipes |
| ADR-1527 | TransNet V2 runs upstream's 100-frame windows on 0..255 thumbnails and binds its output by position |
| ADR-1528 | Every test file belongs to a suite that a required check runs |
| ADR-1539 | vmafx-node starts the eBPF descriptor tracker on request, fails closed when the host cannot run it, and ships the compiled BPF object |
| ADR-1540 | The mobilesal extractor pads frames to a multiple of 8 for the saliency students |
| ADR-1546 | The registry validator holds tiny-model metadata to the shipped graphs |
| ADR-1547 | The Helm chart derives the GPU resource name from the vendor and the Intel kernel driver, with an explicit override |
| ADR-1558 | A codec-aware sidecar declares how its codec block's scalar slots are normalised |
| ADR-1559 | the node's eBPF program stays EUPL-1.2 and declares "GPL" to the kernel under EUPL-1.2's compatibility clause |
| ADR-1560 | A Python package declares the licences of every file its sdist and wheel carry, its compiled extension included |
| ADR-1561 | integer VIF converts its residual variance through vif_sv_sq(), which returns x86's value without the undefined double to int32_t conversion |
| ADR-1562 | Every vmaf-tune command returns the lowest-bitrate encode that meets the target |
| ADR-1563 | a dedicated vmafx:node role is the only role that reaches the controller's node API |
| ADR-1564 | The dev container is pushed only into a private package, checked before every push |
| ADR-1565 | A libx265 two-pass cell at a CRF is pass 1 at the CRF, then ABR at pass 1's bitrate |
| ADR-1566 | A Windows SYCL tester zip built with /MD that carries its runtime beside every program and measures every SYCL twin on a tester's Intel GPU |
| ADR-1567 | a cancelled running job reaches its node through the heartbeat answer, and the node stops the vmaf process |
| ADR-1568 | A test runs once in CI |
| ADR-1569 | the operator presents a bearer token to the controller from a file it reads on every call, through credentials shared with the node |
| ADR-1570 | Tiny models trained on restricted data stay, their cards quote the data's terms, and RC9 retrains them on cleared data |
| ADR-1571 | a GPU dispatch variable is documented only when library code reads it; VMAF_CUDA_DISPATCH is read at extractor init, VMAF_HIP_DISPATCH and its predicate are removed |
| ADR-1577 | each tenant scores only inputs under its own scoring roots, denied by default, checked by the controller and again by the node |
| ADR-1578 | The rc.1 and rc.2 ROCm and node images are withdrawn; every other published rc image gets notices and a source companion |
| ADR-1589 | the Helm chart deploys vmafx-controller as its own one-replica workload, and the release publishes a licence-gated controller image |
| ADR-1590 | Every build stores its GPU device code compressed at the toolchain's strongest setting, and the build refuses raw device code |
| ADR-1591 | Publish every archive and image at the strongest compression its documented consumers open |
| ADR-1592 | the controller runs under its own service account, the only one that may read VmafxTenants |
| ADR-1593 | the node image carries FUSE mount tools, and the Helm chart grants FUSE and the eBPF tracker per value |
| ADR-1594 | zstd image layers with a Docker Engine 23.0 floor, and zopfli for the Windows zips |
| ADR-1601 | integer VIF forms the denominator log argument sigma_nsq + sigma1_sq in uint32_t |
| ADR-1622 | the node's eBPF object is generated at build time with a pinned clang and no object is committed |
| ADR-1673 | A push to master never cancels the runs of an earlier master commit; the concurrency group carries the SHA there |
| ADR-1679 | The Metal IOSurface import reads NV12 and P010 surfaces itself, and the FFmpeg filter imports whole frames |
| ADR-1686 | a Scorecard master run whose master moved on to a descendant ends cancelled |
| ADR-1688 | The SYCL zero-copy path admits only extractors that compute from the shared luma, and names every other one |
| ADR-1699 | The root licence files state ADR-1250's terms, and every package manifest declares the licences of the files it ships |
| ADR-1707 | Cut v1.0.0-rc.3 without waiting for outside-hardware reports |
| ADR-1755 | The feature collector owns the models it mounts |
| ADR-1761 | The libvmaf_sycl filter retries a failed VA import, then stops naming the frame; each input is imported with its own VA display |
| ADR-1762 | Every translation unit is read by a clang-tidy lane or excepted by name |
| ADR-1768 | The FFmpeg libvmaf and libvmaf_cuda filters print no pooled score after a mid-run error |
| ADR-1794 | Bilinear column tables without a width limit |
| ADR-1806 | Run Metal kernel files on the host through a Metal Shading Language shim in tests |
| ADR-1822 | vmaf_picture_convert ships additively, with the source colour as an argument |
| ADR-1828 | Netflix's own golden-assertion updates are ported verbatim from upstream |
| ADR-1830 | vif_sycl runs at SIMD-16 only; the SIMD-32 kernels and VMAF_SYCL_VIF_SUBGROUP_SIZE are removed |
| ADR-1836 | vif_cuda names its scores after enable_chroma when the caller sets it |
| ADR-1874 | The vmaf CLI reports its usable backends; the score-backend selectors read that report |
| ADR-1886 | torch only where training runs |
| ADR-1898 | A resumable stage runner and a mini retrain that exercises the retrain tooling in CI |
| ADR-1899 | govulncheck at symbol level, OpenVEX for what is not called |
| ADR-1917 | The integer ADM scale-0 horizontal and vertical weight limit is 43900, set by the CSF stage's 16-bit magnitude |
| ADR-1918 | Samples above 2^bpc - 1 are invalid input; an opt-in check refuses them |
| ADR-1930 | sycl_device_asan puts the device sanitizer on every SYCL compile and the link |
| ADR-2093 | HDR-VMAF groundwork from upstream, with the input colorimetry on the context |
| ADR-2349 | One metric definition drives the services, the generated dashboards and the observability package |
| ADR-2383 | macOS and Windows package channels are fed by the verified native release pipelines |
| ADR-2399 | SLO objectives, burn-rate windows and alert thresholds are chart values, rendered from one rule builder |
| ADR-2647 | the operator records events in every namespace through a write-only ClusterRole |
| ADR-2673 | the Helm chart declares EUPL-1.2 AND Apache-2.0 because its values schema embeds Kubernetes type schemas |
| ADR-2689 | sponsorship is recognition only, in four monthly tiers, with one source file for the list |
| ADR-2705 | formulas are TeX rendered by self-hosted KaTeX, checked at build time |
| ADR-2817 | Re-pin the Pelorus mirror to v0.3.0, its EUPL-1.2 release, and check the licence on every sync |
| ADR-2949 | vmaf_picture_wrap ships with upstream's signature, on vmafx_frame_wrap_host, with the fork's plane rules |