fix(ci): unbreak Validate and Security, and stop a 429 masking a dead link - #8
Closed
napetrov wants to merge 1 commit into
Closed
fix(ci): unbreak Validate and Security, and stop a 429 masking a dead link#8napetrov wants to merge 1 commit into
napetrov wants to merge 1 commit into
Conversation
napetrov
force-pushed
the
fix/ci-link-check-imports-and-pages-audit
branch
from
September 3, 2026 16:00
a23bac4 to
f54bbb7
Compare
`main` is red on Validate, and every open pull request inherits it:
FAIL skills/vllm-xpu-run/SKILL.md: link
https://docs.vllm.ai/en/latest/getting_started/xpu-installation.html is gone (HTTP 404)
The link really is dead — docs.vllm.ai dropped the `.html` URL scheme, so it now
redirects to a path that 404s. But `skills/vllm-xpu-run/` is an import pinned to
intel/gpu-ai-skills, so editing the URL here would only move the failure one step
down the job, to `sync_external.py --check`, which byte-compares the copy against
its pin. There is no edit to this repository that both satisfies the link check and
keeps the import intact.
Check 8 already resolves exactly this tension. A file a skill ships but never
mentions fails when the skill was written here and warns when it was imported,
because "the only way to satisfy it would be to edit another team's body, and an
edited import no longer matches the text their measurements describe". A dead link
in an imported body is the same shape of finding, so it gets the same treatment,
and the warning says where the repair has to land:
WARN skills/vllm-xpu-run/SKILL.md: link ... is gone (HTTP 404)
(imported: upstream's body is kept as it is — fix it upstream, then move
external-commit)
What still fails: a dead link in a body this repository wrote, and a pinned commit
that has gone missing. The second one shares the mechanism but not the ownership —
`external-commit` is our claim about upstream, not upstream's text, so a SHA
rewritten out of history is our defect to fix and stays an error.
link_targets() now returns a third element saying which origin a URL came from,
rather than check_links() re-deriving it, because the pinned-commit target is
synthesised from .source.json and would otherwise be indistinguishable from a URL
found in the body it sits next to.
MAINTAINERS.md documents the route the warning asks for, and says the thing worth
saying out loud: a warning that outlives a release means the pin is the wrong pin.
Verified locally: the gate passes with the warning, and both error paths were
checked directly — a dead link attributed to a body written here still errors, and
a rewritten external-commit still errors.
The stale docs.vllm.ai URLs themselves are fixed in intel/gpu-ai-skills#12; the pin
move lands here once that merges.
Signed-off-by: Nikolay Petrov <nikolay.a.petrov@intel.com>
Contributor
Author
|
Superseded — split into five single-purpose pull requests, since the combined change mixed a policy decision, a determinism fix, a step-ordering bug, a workflow-permissions audit and a dependabot config gap under one review.
#10 through #13 are stacked on #9 only so their Validate runs are green while Closing this one. |
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 this changes
mainis red on two jobs and every open pull request inherits the first of them. Thisfixes both, plus the dependabot config gap that makes CodeQL unpassable on PRs #5 and #6.
Validate / Link check.
skills/vllm-xpu-run/SKILL.mdpoints atdocs.vllm.ai/en/latest/getting_started/xpu-installation.html. docs.vllm.ai dropped the.htmlURL scheme, so it now redirects to a path that 404s. The link really is dead — butthe file is an import pinned to
intel/gpu-ai-skills, and editing it here would move thefailure one step down to
sync_external.py --check, which byte-compares the copy againstits pin. Check 8 already resolves this exact tension by warning on an imported body rather
than failing it; the link check now does the same, and the warning says where the fix has
to land. A link this repository wrote still fails, and so does a pinned commit that has
gone missing — that one is our claim, not upstream's.
Link check, second defect. The same tree passed and failed three seconds apart this
morning: PR #3's run got
HTTP 429from docs.vllm.ai and went green, PR #4's got the real404and went red.Rate limiting maps to
unknown, which warns. That is right for someone else's outage andwrong here, because 429 is the one answer a host gives instead of the real one — eight
workers over ~100 URLs concentrated on a few hosts is enough to trigger it. It is now
retried with backoff, honouring
Retry-Afterwhen it is in seconds, before it may becomea warning. A throttled run can no longer report a dead link as reachable.
Validate step order.
Imported skills match their pinned upstreamruns after the linkcheck with no
if: always(), so it has never executed on a commit with a dead link — thestate of the imports was unknown for as long as
mainwas red. It now always runs, and itpasses.
Security / zizmor — 5 high, all from the Pages workflow added in #7:
pages: write,id-token: writeat workflow leveldeployjob.buildis where third-party code runs (npm ci,npm run build) and is the job that should not hold a token that can publish the site or mint an OIDC identityactions/configure-pages@v5unpinned@983d7736(v5.0.0)actions/upload-pages-artifact@v3unpinned@56afc609(v3.0.1)actions/deploy-pages@v5unpinned@368f8252(v5.0.1)Each SHA is the one behind the tag that was already resolving, so nothing about what runs
changes. Newer majors exist (configure-pages v6, upload-pages-artifact v5) and are
deliberately left to dependabot, which will propose them with a CI run attached.
CodeQL on dependabot PRs #5 and #6.
codeql-action/initandcodeql-action/analyzeare two entry points into one action, and it refuses a version split between its halves:
Ungrouped, dependabot opens one pull request per path, so each bumps half the pair and
neither can pass its own CI.
.github/dependabot.ymlnow groupsgithub/codeql-action*.#5 and #6 need closing so the grouped pull request can replace them.
Verified locally
All four gates, plus both linters from the same digest-pinned images
security.ymluses:The imported-body path was unit-checked in both directions: a dead link in a body this
repository wrote still errors, and a rewritten
external-commitstill errors. The 429path was checked against a stubbed opener —
429 → 429 → … → warn, and critically429 → 404 → dead, which is the case that used to buy a green run.Not in this change
The three stale docs.vllm.ai URLs themselves. They live in imported bodies, so they need a
pull request against
intel/gpu-ai-skillsand then a pin move here, which is a follow-upPR. Two of the three are worse than the one CI caught:
vllm-xpu-run/SKILL.mdgetting_started/xpu-installation.htmlvllm-xpu-profile/SKILL.mdcontributing/profiling/profiling_index.html…/contributing/, the parent pagevllm-xpu-bench/SKILL.md#offline-batched-inference-benchmarksRead-the-Docs fuzzy-redirects the latter two, so they answer 200 while pointing an agent at
the wrong page. No status-based link check can see that; it took reading the redirect
chain. Correct targets are
getting_started/installation/gpu.html?device=xpuandcontributing/profiling/.One more thing this change cannot fix: #7 merged with Validate, Security and DCO all
failing, which is how
maingot here. Worth requiringvalidate,install,zizmor,actionlintandsigned-offas status checks onmain— otherwise every tool above isadvisory.
Checklist
descriptionagainst requests a user would really type — see CONTRIBUTING.md. (no skill text changed)python3 tools/validate_skills.pypasses locally.git commit -s(DCO).