100%
27 of the 27 checks that were answered passed. A check with no answer is not one of them.
87.1%
27 of the 31 checks in scope for this listing were answered. Of the 54 standard checks, 13 are marked out of scope for this repository and 10 do not appear in this record at all — see the table.
clears the 75% floorThe grade is not provisional — but the evidence sources did not agree. What the merge found → · How coverage is scored →
The standard set, grouped by phase. Each chip carries this listing's verdict; a chip with no verdict is a check this record holds no row for.
Commit integrity
13 checks belong to this phase 8 answered 1 no answer 2 out of scope 2 not in this record.
committed build files
Are build steps pinned to an exact version, with narrow permissions?
Maintainer’s machine only
the maintainer's machine
Are commits on protected branches signed by a person?
the maintainer's machine
Do AI agents sign their commits with their own key?
the maintainer's machine
Is signing set up the same way in every environment?
the maintainer's machine
Do commits record which AI tool and model helped write them?
the maintainer's machine
Do AI commits that add dependencies get extra review?
the maintainer's machine
Is there a signed receipt linking a commit to its AI tool?
Dependencies
10 checks belong to this phase 5 answered 2 no answer 1 out of scope 2 not in this record.
committed files
Are base images, lockfiles and downloads pinned to exact contents?
committed files
Are dependency updates automated and pinned to exact versions?
committed build files
Does the build install its dependencies behind that block?
Maintainer’s machine only
the maintainer's machine
Is a new dependency checked before anyone installs it?
the maintainer's machine
Are installed tools and extensions checked against known compromises?
the maintainer's machine
Is that parts list itself scanned for known vulnerabilities?
the maintainer's machine
Are malicious packages blocked at the moment of install?
Build receipts
10 checks belong to this phase 8 answered 2 out of scope.
committed files
Does the build use short-lived credentials instead of stored tokens?
committed build files
Is each build job watched for unexpected network traffic?
Maintainer’s machine only
the maintainer's machine
Are the build steps themselves recorded and checked against a policy?
Code & build hardening
7 checks belong to this phase 3 answered 4 out of scope.
committed files
Is the code checked for known-dangerous patterns before merging?
Maintainer’s machine only
the maintainer's machine
Is that check also run locally, before a commit lands?
Ongoing posture
8 checks belong to this phase 3 answered 1 no answer 4 out of scope.
committed files
Does the project publish a machine-readable security summary?
about the tool
Are the checks mapped to the frameworks an auditor asks about?
Maintainer’s machine only
the maintainer's machine
Are receipts and parts lists linked into one searchable graph?
the maintainer's machine
Does the project say which vulnerabilities actually apply to it?
the maintainer's machine
Are parts lists and receipts stored where anyone can fetch them?
Distribution & publishing
6 checks belong to this phase 6 not in this record.
committed build files
Does publishing use short-lived identity instead of a stored token?
committed build files
Are publishing credentials kept out of the repository and short-lived?
live settings
Can anyone check that a published package came from this project?
committed files
Do the packaging files pin a checksum for what they install?
Maintainer’s machine only
the maintainer's machine
Is the account that can publish protected by strong two-factor?
Defences found, by attack group
This lists defences the scan found, not weaknesses it found. A missing defence is not a break-in, and a full set of checks is not safety: nine groups and 54 checks do not cover everything. What the nine groups are →
-
A1 Poisoned commit
All answered checks passed
Every answered check passed — 5 of 5. 2 more produced no answer.
No answer
signing-model,scorecard— 1 of these only a maintainer's own machine can answer Every sscsb check here that produced an answer passed. That is not the same as being safe from this group. -
A2 Stolen publisher identity
All answered checks passed
Every answered check passed — 6 of 6. 1 more produced no answer.
No answer
signing-model— all of these only a maintainer's own machine can answer Every sscsb check here that produced an answer passed. That is not the same as being safe from this group. - A3 Look-alike or invented package All answered checks passed Every check passed — 2 of 2. Every sscsb check here that produced an answer passed. That is not the same as being safe from this group.
-
A4 A real dependency turns hostile, or stays broken
All answered checks passed
Every answered check passed — 8 of 8. 3 more produced no answer.
No answer
scorecard,bumblebee,openvex— 2 of these only a maintainer's own machine can answer Every sscsb check here that produced an answer passed. That is not the same as being safe from this group. -
A5 Hijacked build pipeline
All answered checks passed
Every answered check passed — 9 of 9. 1 more produced no answer.
No answer
scorecardEvery sscsb check here that produced an answer passed. That is not the same as being safe from this group. -
A6 Compromised developer environment
All answered checks passed
Every answered check passed — 4 of 4. 2 more produced no answer.
No answer
signing-model,bumblebee— all of these only a maintainer's own machine can answer Every sscsb check here that produced an answer passed. That is not the same as being safe from this group. - A7 Leaked credential All answered checks passed Every check passed — 5 of 5. Every sscsb check here that produced an answer passed. That is not the same as being safe from this group.
- A8 A flaw in the code you wrote All answered checks passed Every check passed — 3 of 3. Every sscsb check here that produced an answer passed. That is not the same as being safe from this group.
- A9 Untrustworthy delivery All answered checks passed Every check passed — 7 of 7. Every sscsb check here that produced an answer passed. That is not the same as being safe from this group.
These checks do not stop an attack. They let an outsider tell what a project already does, and where to report a problem. They are not in the list above:
best-practices-badge, compliance-map, osps-baseline, publish-targets, secure-repo, security-insights.
Authenticated scan — signature verified
Produced in the repository's own CI and keyless-signed
there. Before listing it, the directory verified the Sigstore bundle against the certificate
identity https://github.com/p4gs/sscsb-action/.github/workflows/sscsb-scan.yml@refs/heads/main bound to commit c7deeef08747 on 2026-09-03. The repository, the
workflow path and the default branch are burned into that certificate by GitHub's OIDC
issuer. The record does not assert them.
Re-verify it yourself: scan-record.json · signature bundle
Local scan — signature verified
A maintainer ran sscsb on their own machine and signed the record with
their git signing key. The directory verified that detached SSH signature with
ssh-keygen -Y verify against .sscsb/policy/allowed_signers
fetched from this repository at commit
f37f780cb0f2 — committed content the submitter
does not supply. Verifying principal 10093271+p4gs@users.noreply.github.com (SHA256:prXatGO56nl8Or4JdDSzIIcj8hZE1jBxnFaXZOnAPDQ) on 2026-09-11.
What that proves, exactly: a holder of a key this repository commits as an approved signer asserts this result at that commit. Nothing more. It is weaker than an authenticated scan, which proves the repository's own CI produced the record.
It contributed 6 controls: commit-signing, ai-trailers, ai-dep-gate, ai-receipts, package-trust, grype. Every other class comes from the repository-observable record. A local scan never
overturns one, and never widens the scope it is measured against.
Re-verify it yourself: scan-record.local.json · detached signature
The signed bytes are republished verbatim, and contain the workstation paths this page redacts.
ssh-keygen -Y verify -f allowed_signers \
-I "10093271+p4gs@users.noreply.github.com" -n sscsb-scan-record \
-s scan-record.local.json.sig < scan-record.local.json
What the evidence merge found
The local record describes commit f37f780cb0f2, while the repository scan on this listing describes c7deeef08747. Its local-environment rows may predate the code above them.
Two scores are on this page and only one of them is ours. The grade and coverage shown here — A+, 100%, coverage 87.1% — are the DIRECTORY's, computed from every evidence source it holds under the published methodology. The signed local record linked below carries its own score block (A+, 100%, coverage 86.1%): that is the SUBMITTER's self-report, computed on their machine over the controls that machine had in scope. It is republished byte-identically because the signature covers those exact bytes, not because the directory endorses the number.
All controls
Raw sscsb verdicts and every reclassification are shown. Being transparent about what was and was not verifiable is the product. The checks run in 6 phases, named on the band above each group.
Key pass did not pass gap no answer out of scope not in this record
no answer — no lane available here could answer it, which is not the same as failing it.
13 out-of-scope checks are greyed, and 10 of the 54 appear in no row of this record at all.
| Control | Verdict | Detail |
|---|---|---|
| Phase 1 — Commit integrity11 checks · 2 not in this record | ||
secrets |
pass raw: degraded | runner-tool availability is the scanner's environment, not the repository's; all registered artifacts pre-existevidence (3)
|
commit-signing |
passlocal raw: pass | resolved by a signed local scan: this control lives in the development environment, so a workstation record signed by a key this repository commits in .sscsb/policy/allowed_signers is the only evidence that can exist for itevidence (6)
|
agent-signing |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
signing-model |
no answer raw: degraded | requires the local development environment; not observable in a repository scanevidence (7)
|
branch-protection |
pass | evidence (8)
|
actions-audit |
pass | evidence (1)
|
gittuf |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
ai-trailers |
passlocal raw: pass | resolved by a signed local scan: this control lives in the development environment, so a workstation record signed by a key this repository commits in .sscsb/policy/allowed_signers is the only evidence that can exist for itevidence (2)
|
ai-dep-gate |
passlocal raw: pass | resolved by a signed local scan: this control lives in the development environment, so a workstation record signed by a key this repository commits in .sscsb/policy/allowed_signers is the only evidence that can exist for itevidence (2)
|
pr-template |
pass | evidence (1)
|
ai-receipts |
passlocal raw: pass | resolved by a signed local scan: this control lives in the development environment, so a workstation record signed by a key this repository commits in .sscsb/policy/allowed_signers is the only evidence that can exist for itevidence (2)
|
| Not in this record2 of the 54 | ||
binary-artifacts |
not in this record | The record holds no row for this check, and says nothing about it either way. |
webhooks |
not in this record | The record holds no row for this check, and says nothing about it either way. |
| Phase 2 — Dependencies8 checks · 2 not in this record | ||
sbom |
pass raw: degraded | runner-tool availability is the scanner's environment, not the repository's; all registered artifacts pre-existevidence (1)
|
vuln-scan |
pass raw: degraded | runner-tool availability is the scanner's environment, not the repository's; all registered artifacts pre-existevidence (2)
|
scorecard |
no answer raw: degraded | no lane produced a verdict for this control — an unperformed check is never a verdictevidence (2)
|
renovate |
pass | evidence (1)
|
package-trust |
passlocal raw: pass | resolved by a signed local scan: this control lives in the development environment, so a workstation record signed by a key this repository commits in .sscsb/policy/allowed_signers is the only evidence that can exist for itevidence (5)
|
bumblebee |
no answer raw: degraded | requires the local development environment; not observable in a repository scanevidence (1)
|
grype |
passlocal raw: pass | resolved by a signed local scan: this control lives in the development environment, so a workstation record signed by a key this repository commits in .sscsb/policy/allowed_signers is the only evidence that can exist for itevidence (1)
|
socket-firewall |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
| Not in this record2 of the 54 | ||
dependency-pinning |
not in this record | The record holds no row for this check, and says nothing about it either way. |
socket-firewall-ci |
not in this record | The record holds no row for this check, and says nothing about it either way. |
| Phase 3 — Build receipts10 checks | ||
sigstore-signing |
pass | evidence (2)
|
slsa-provenance |
pass | evidence (2)
|
github-attestations |
pass | evidence (2)
|
sbom-attestation |
pass | evidence (2)
|
model-signing |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
provenance-verify |
pass raw: degraded | runner-tool availability is the scanner's environment, not the repository's; all registered artifacts pre-existevidence (5)
|
release-immutability |
pass | evidence (1)
|
octo-sts |
pass | evidence (2)
|
harden-runner |
pass | evidence (8)
|
witness |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
| Phase 4 — Code & build hardening7 checks | ||
sast |
pass raw: degraded | runner-tool availability is the scanner's environment, not the repository's; all registered artifacts pre-existevidence (3)
|
sighthound |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
codeql |
pass | evidence (1)
|
fuzzing |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
workflow-audit-extended |
pass | evidence (1)
|
secure-repo |
out of scope | informational control — excluded from scoring |
wait-for-secrets |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
| Phase 5 — Ongoing posture8 checks | ||
dependency-track |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
guac |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
openvex |
no answer raw: info | requires the local development environment; not observable in a repository scanevidence (3)
|
oras |
out of scope raw: disabled | optional control not enabled by this repositoryevidence (1)
|
security-insights |
pass | evidence (1)
|
best-practices-badge |
pass | evidence (1)
|
osps-baseline |
pass | evidence (1)
|
compliance-map |
out of scope raw: pass | informational control — excluded from scoring |
| Phase 6 — Distribution & publishing6 not in this record | ||
| Not in this record6 of the 54 | ||
publish-targets |
not in this record | The record holds no row for this check, and says nothing about it either way. |
trusted-publishing |
not in this record | The record holds no row for this check, and says nothing about it either way. |
maintainer-mfa |
not in this record | The record holds no row for this check, and says nothing about it either way. |
publish-tokens |
not in this record | The record holds no row for this check, and says nothing about it either way. |
publish-provenance |
not in this record | The record holds no row for this check, and says nothing about it either way. |
dist-manifests |
not in this record | The record holds no row for this check, and says nothing about it either way. |