The gap
registry scan is not a required status check. Branch protection on main requires exactly three: test, ci-secure, python floor.
So a critical finding from the registry scanner has never been able to block a merge. It goes red, and someone has to notice and choose not to proceed. Nothing enforces it. This predates the scanner outage described below — it was true on every day the scanner worked correctly.
The project's own maintainer notes already state the rule this violates, in maintainers/skills-registry-security/references/audit-pipeline.md:
And make it a required status check — a gate that can be merged past is advisory.
Why it cannot be promoted today
Since 2026-08-18 the scanner returns HTTP 200 with an empty finding set on everything, including a control skill that instructs an agent to read ~/.aws/credentials and post them to a remote endpoint. Verified against the live API: not the token (/self and /orgs answer 200), not the free tier's daily cap (no 429, quota remaining), not the deprecated API version pin (the other supported version returns an empty risk set too), and no incident on the vendor status page.
Because the workflow refuses to show green over a control that proves nothing, registry scan fails on every run. Making it required in that state would block every merge in the repository.
The trigger
The check going green is the signal, and it needs no probing: the workflow's own control step is what fails today, so the moment the scanner detects again, the check passes by itself.
registry-scan.yml emits the two states under distinct annotation titles, so they are distinguishable without reading a log:
REGISTRY SCAN COVERAGE GAP — NOT A FINDING— the current state, nothing verifiedREGISTRY SCAN FINDING — AND THE CONTROL WAS BLIND— a real finding on a run that verified nothing else
What to do when it goes green
- Confirm the control genuinely passed rather than the workflow being edited — the
Prove the gate can go redstep reports the anchor finding and the job'sReport the coverage gapstep exits 0. - Add
registry scanto the required status checks formain. - Decide what the fork-PR path should do: fork pull requests cannot reach
SNYK_TOKEN, so they get theregistry scan NOT RUN (fork PR — no scan coverage)job instead. A required check that fork PRs cannot satisfy would block every external contribution, so the promotion needs the fork job's name included, or an equivalent arrangement.
Compensating control in the meantime
The offline shape guard in tests/test_no_ioc_shaped_literals.py runs inside pytest — a required check — and covers credential exfiltration, obfuscated execution, reverse shells, credential paths named in a shipped SKILL.md, and hidden characters. It depends on no vendor. It covers mechanical shapes only; judging whether English prose subverts a skill's stated purpose is not covered by it or by anything else here.
Activity
0No activity yet.