Repository navigation
fix(ci): repair two master-CI reds — orphaned Metal registry entries + MCP smoke path allowlist - #1090
Closed
lusoris wants to merge 2 commits into
Closed
fix(ci): repair two master-CI reds — orphaned Metal registry entries + MCP smoke path allowlist#1090lusoris wants to merge 2 commits into
lusoris wants to merge 2 commits into
Conversation
lusoris
force-pushed
the
fix/master-ci-repair-aug
branch
from
August 30, 2026 08:58
a39bbd0 to
4768637
Compare
…gistry parity) PR #875 split core/src/feature/feature_extractor.c into .cpp but carried over only 8 of the 17 *_metal externs; PR #1004 then deleted the dead .c twin where the remaining 9 lived. The .mm kernel TUs, the g_metal_features[] dispatch rows and the parity tests all stayed in place — only the registry entries were lost, so vmaf_get_feature_extractor_by_name() returned NULL and --feature <name> could not select them on macOS Metal builds. Restores the externs and feature_extractor_list[] entries for integer_ssim_metal, float_vif_metal, float_adm_metal, integer_vif_metal, integer_adm_metal, integer_ciede_metal, integer_psnr_hvs_metal, integer_cambi_metal and ssimulacra2_metal, bringing the registry back to the 17/17 contract asserted by test_metal_kernel_coverage_audit (ADR-0959). This was the single failing test on both macOS CI build legs (131 OK / 1 FAIL). All additions sit inside #if HAVE_METAL, so non-Metal builds are unaffected. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ke CI red) test_mcp_smoke's compute_vmaf 10-bit case writes its yuv420p10le fixtures to /tmp at run time. PR #1054 added validate_path() to core/src/mcp/compute_vmaf.c, which canonicalises every caller-supplied YUV path and admits only <repo>/testdata, <repo>/model, <repo>/python/test/resource, /workspace/python/test/resource and $VMAF_MCP_ALLOW. /tmp is deliberately not a default root, so score_yuv_pair() returned -EACCES, the response carried no score field, and the assertion tripped. Fixed in the test rather than the allowlist: the case extends the allow-set through the documented VMAF_MCP_ALLOW escape hatch for its own duration and unsetenv()s it afterwards, so the remaining cases still exercise the default roots. The allowlist is unchanged; its rejection behaviour stays covered by core/test/test_mcp_compute_vmaf_allowlist.c. Reproduced and verified locally with the exact CI meson configuration: 17 tests run / 1 failed before, 18 tests run / 18 passed after. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
lusoris
force-pushed
the
fix/master-ci-repair-aug
branch
from
August 30, 2026 09:17
bcfddce to
c15811b
Compare
lusoris
enabled auto-merge (squash)
August 30, 2026 09:54
Contributor
Author
|
Superseded by a rebuilt branch — the original had an orphan-root history that made rebase report both-added conflicts on files it never touched. Same two fixes, clean base. |
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.
What
Two independent failures keeping CI red on every open PR. Both root-caused to
registry/contract drift introduced by earlier merged PRs, both verified locally.
1. Metal registry orphan
Re-registers the nine round-3/round-4 Metal feature extractors that were silently
dropped from the compiled registry, restoring the 17/17 contract asserted by
test_metal_kernel_coverage_audit(ADR-0959).Why
PR #875splitcore/src/feature/feature_extractor.cinto.cppbut carried overonly 8 of the 17
*_metalexterns.PR #1004then deleted the now-dead.ctwin — which is where the other 9 lived. The
.mmkernel TUs, theg_metal_features[]dispatch rows and the parity tests all stayed in place, sonothing failed to build; only the registry entries vanished. Net effect on macOS
Metal builds:
vmaf_get_feature_extractor_by_name("<name>_metal")returnedNULLand
--feature <name>could not select these kernels at all.Affected:
integer_ssim_metal,float_vif_metal,float_adm_metal,integer_vif_metal,integer_adm_metal,integer_ciede_metal,integer_psnr_hvs_metal,integer_cambi_metal,ssimulacra2_metal.This is the same registry-split orphan class
PR #1004fixed for the GPU SpEEDtwins, and it is the single failing test on both macOS CI build legs
(131 OK / 1 FAIL).
All additions sit inside
#if HAVE_METAL; non-Metal builds are byte-unaffected.2. MCP Smoke —
compute_vmaf10-bit case rejected by its own path allowlisttest_mcp_smoke's 10-bit case writesyuv420p10lefixtures to/tmpat runtime.
PR #1054addedvalidate_path()tocore/src/mcp/compute_vmaf.c, whichcanonicalises every caller-supplied YUV path and admits only
<repo>/testdata,<repo>/model,<repo>/python/test/resource,/workspace/python/test/resourceand
$VMAF_MCP_ALLOW./tmpis deliberately not a default root, soscore_yuv_pair()returned-EACCES, the response carried noscorefield, andthe assertion tripped. This was the single failing test in the
MCP Smoke (Embedded C + Python Server) job.
Fixed in the test, not the allowlist: the case extends the allow-set via the
documented
VMAF_MCP_ALLOWescape hatch for its own duration andunsetenv()sit afterwards, so the remaining cases still run against the default roots. The
allowlist is unchanged and its rejection behaviour stays covered by
core/test/test_mcp_compute_vmaf_allowlist.c.Reproduced and verified locally with the exact CI meson configuration:
Deep-dive deliverables
changelog.d/fixed/metal-registry-orphan.mdReproducer / smoke-test command
Registry parity (any platform, no Metal device needed):
The failing gate itself (macOS):
Audit #1 (
test_every_kernel_basename_is_registered) is CPU-side and needs noMetal device; audits #2/#3 skip with
-ENODEVoff-device.Bug status hygiene
docs/state.mdupdated —T-METAL-REGISTRY-ORPHAN-2026-08-30added under Recently closed.