chore(compliance): add skill cards for sourced skills via compliance.d overlay - #25
Merged
Conversation
…d overlay Sourced skills are rsynced with --delete, so a skill-card.md committed into a catalog dir is deleted on the next nightly sync (this is what happened to the KERMT evals, per docs/sync-findings.md). Cards for the 14 sourced skills therefore live in compliance.d/<catalog_path>/, outside every rsync target and prune root, and are copied in after the rsync by a new workflow step. Upstream always wins: the backfill copies a card only where the rsync left none, so a source repo shipping its own card supersedes the overlay automatically with no flag to flip. The sync PR body reports both the outstanding debt (backfilled) and entries that upstream has since made redundant (retirable). skill.oms.sig is deliberately NOT backfilled — a signature attests to specific bytes, and copying one over content it was not generated from publishes an artifact that fails verification. Signing stays a per-source-repo nvskills-ci task. The same 14 cards are opened as PRs against KERMT, Proteina-Complexa, and nvMolKit so the overlay is retired as those merge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Timur Rvachov <trvachov@nvidia.com>
ohadmo
self-requested a review
August 4, 2026 22:08
ohadmo
approved these changes
Aug 4, 2026
…repo Signed-off-by: Ohad Mosafi <omosafi@nvidia.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.
Adds
skill-card.mdfor all 14 sourced skills, in a way that survives the nightly sync and retires itself once upstream ships its own cards.Companion to the three upstream PRs carrying the same card content:
KERMT#26 · Proteina-Complexa#60 · nvMolKit#248
The problem
sync-skills.ymlrunsrsync -a --delete "$src/" "$catalog_dir/". Askill-card.mdcommitted into a sourced catalog dir is deleted on the next nightly run — not overwritten, deleted. Verified:This is exactly what happened to the KERMT evals, recorded in
docs/sync-findings.md. But we can't wait for three upstream PRs to merge before the catalog has cards.The fix: overlay + backfill
Cards for sourced skills live in
compliance.d/<catalog_path>/, outside every rsync target and every prune root. A new workflow step copies them in after the rsync, and only where the rsync left no card:skill.oms.sigis deliberately NOT backfilledA signature attests to specific bytes. Copying one over content it wasn't generated from publishes an artifact that fails verification — and NVIDIA/skills' sync has a dedicated defense that hash-checks exactly this case and reverts the skill. Signing stays a per-source-repo
nvskills-citask. Same reasoning for evals (SRC-10).Scope
open-models-skills/kermt/*NVIDIA-BioNeMo/KERMTopen-models-skills/proteina-complexa/*NVIDIA-BioNeMo/Proteina-Complexalibrary-skills/nvMolKitNVIDIA-BioNeMo/nvMolKitThe other 17 skills are native and take cards directly in-tree — not in this PR.
Validation
No CI will run on this PR — neither
plugin-sync.ymlnorskill-security.ymlhas a path filter matchingcompliance.d/**or.github/workflows/sync-skills.yml, andsync-skills.ymlitself only runs on schedule/dispatch. So the riskiest part of this change first executes unattended at 07:00 UTC. Verified by hand instead:bash -non everyrun:block in the workflow → all passpython3 scripts/plugin_sync.py --check→ OK, 31 skills, payload matches sourceThat gap is worth closing separately — either extend
plugin-sync.yml's path filter to cover the sync workflow, or add a small job that exercises the backfill against a fixture. Happy to follow up.Heads-up on conflicts
.github/workflows/sync-skills.yml, which #15 also modifies. Worth sequencing with @ohadmo rather than merging blind.Also noted while writing the Complexa cards:
.gitignorein Proteina-Complexa ignores.claude/wholesale while the skills inside are tracked, so new files added to a Complexa skill dir are silently dropped unless force-added. Fixed as a separable commit in Proteina-Complexa#60.🤖 Generated with Claude Code