Uh oh!
There was an error while loading. Please reload this page.
feat(skills): add security scanning to cicd - #23
Merged
Conversation
The pipeline this skill composes validates build, test and docs and never scans. Adds the four classes, scoped to what the diff touches and disclosed either way, so a scan that could not run is not read as one that found nothing — the scanner-level form of skipped-job-reports-success. delivery-review's security lens now names the scans that backed it, so it can meet the evidence bar that skill already sets.
Resolves the overlap with #22, which landed first: - cicd/SKILL.md — keep main's "Use when…" description house form, carry this branch's "add security scanning" / "scan for vulnerabilities" triggers, and take 0.4.0 (a new guidance facet, not the 0.3.4 wording bump). - delivery-review/SKILL.md — main moved the seven lenses out to references/lenses.md, so this branch's inline lens-6 edit had no target left. Re-applied it there instead: the security lens still has to name the scans that backed it and the classes that did not run. Taking either side of that conflict verbatim would have dropped the change silently. - conventions.md — main's rewritten version roster, with cmk:cicd moved from the 0.3.x band to 0.4.x so it stays named exactly once. - docs/ai/skills/delivery-review.md — record references/lenses.md and the new Red Flags / Rationalizations sections, which the lens extraction left out. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 30, 2026
harrymove-ctrl
commented
Aug 30, 2026
Contributor
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 freeto 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's missing today
cmk:cicdframes itself as "three concerns that stay separated: what validates every change, whatships a specific commit somewhere, and what gates or authenticates either one." The pipeline it
composes validates build, test and docs — and never scans. No SAST, no dependency advisories, no
secret detection, no IaC scanning. "Security" appears in the skill only as where secrets are stored
and OIDC federation. Supply-chain coverage exists only inside
cmk:rust; secrets are addressed asstorage, never as detection.
So a design can declare a control —
cmk:designalready requires a security section withassumptions, gaps, and controls — and the pipeline has nowhere to enforce it.
The idea
Adds
references/security-scanning.md: four classes (code, dependencies, secrets, infrastructure),each a question rather than a product, satisfied by a scanner of that category or equivalent in
the
cargo-denystylecmk:rustalready uses.Classes are scoped to the effort rather than run wholesale — running everything on every change
trains people to ignore the result. Selection reuses
cmk:delivery-review's existing triad, appliedto classes rather than lenses:
reason.
Deliberately not coupled to Quick/Targeted/Full. Depth measures how expensive a wrong answer is;
class selection follows which artifacts changed. Coupling them is wrong in both directions — a
Quick review of a lockfile bump still needs a full dependency scan, and a Full review of a
docs-only diff needs no SAST.
Secrets is the one class that always runs: a committed credential is not proportional to the size of
the change that carried it.
The load-bearing distinction
A findings list renders these identically, and they must not be reported the same way:
intact.
Coverage has a hole.
Collapsing the second into the first is how a gate stops gating with nobody noticing. This is the
scanner-level form of a trap this skill already names: under
skipped-job-reports-successthe jobnever ran; here it ran and checked nothing. Added to the traps list as
empty-scan-reads-as-clean, and separated by exit code —3for incomplete coverage, distinctfrom
0.Two smaller pieces
ci-structure.mdgains the one place security departs from the surrounding convention: areagating assumes blast radius matches file paths, which breaks here. A lockfile bump touches one file
and can alter the whole dependency graph; a credential lands in fixtures a
src/**filter neversees. Gate dependencies on manifests and lockfiles; run secrets unconditionally.
delivery-reviewlens 6 is "think like a bad actor with the diff in hand" — pure reasoning —in a skill whose bar two sections later is "commands executed with output" and "a review with
zero findings and a thin evidence section is a failed review." The lens now names the scans that
backed it and the classes that did not run, so it can meet the standard that file already sets.
That file sits at exactly 150 lines, so the two added lines are paid for by reflowing the
Boundary reviewparagraph, which leftlens.alone on a line. No words changed — the diffthere is pure rewrap.
Suppressions
cmk:designrequires stating security gaps. A suppression is that same accepted gap expressed whereit is enforced, so it carries the same obligation: a reason and an expiry, with an expired one
failing the gate. Accepted must not decay into forgotten.
Checks
bash scripts/skill-lint.sh— OKcmk:cicd0.3.3 → 0.4.0 (new guidance),cmk:delivery-review0.1.3 → 0.1.4;conventions.mdroster updated