OpenSSF Best Practices Badge — Silver submission#
Step-by-step submission pack for the OpenSSF Best Practices Badge program. Designed so the maintainer can paste each answer verbatim into the web form at https://www.bestpractices.dev/projects/new and reach Silver in one sitting.
Three projects file separately (one badge per repo); the answers overlap substantially.
Projects to submit#
camt053— https://github.com/sebastienrousseau/camt053camt053-mcp— https://github.com/sebastienrousseau/camt053-mcpcamt053-lsp— https://github.com/sebastienrousseau/camt053-lsp
Submit each as a separate badge. The Bronze + Silver criteria shared across the three are below; project-specific notes follow.
Identity (every project)#
Field |
Value |
|---|---|
Name |
|
Description |
See the project’s |
Project home URL |
the GitHub repo page |
Repository URL |
the GitHub repo page |
What programming language(s) does the project use? |
Python |
Bronze answers (every project)#
Every Bronze answer has Met-tier evidence and a single short URL
to point at.
Basics#
Criterion |
Answer |
Evidence |
|---|---|---|
|
Met |
|
|
Met |
|
|
Met |
|
|
Met |
|
|
Met |
|
|
Met |
Apache-2.0 is OSI-approved |
|
Met |
|
Change Control#
Criterion |
Answer |
Evidence |
|---|---|---|
|
Met |
The repo is on github.com and public |
|
Met |
git history available since first commit |
|
Met |
git is a distributed VCS |
|
Met |
every release has a unique signed git tag |
|
Met |
|
|
Met |
|
|
Met |
every security fix is announced in the GitHub Security Advisory and cross-referenced in |
Reporting#
Criterion |
Answer |
Evidence |
|---|---|---|
|
Met |
|
|
Met |
GitHub Issues |
|
Met |
last-quarter response rate visible in the repo’s issue history |
|
Met |
every feature request gets a maintainer response within 7 days (see closed-issue history) |
|
Met |
GitHub Issues are public + archived |
|
Met |
|
|
Met |
“Please do not report security vulnerabilities through public GitHub issues” line + private channels |
|
Met |
3-day acknowledgement target documented in |
Quality#
Criterion |
Answer |
Evidence |
|---|---|---|
|
Met |
|
|
Met |
Poetry (universally available via |
|
Met |
Poetry is Apache-2.0 |
|
Met |
|
|
Met |
|
|
Met |
100% line + branch coverage enforced via |
|
Met |
|
|
Met |
every PR in the recent history adds the corresponding tests |
|
Met |
|
|
Met |
ruff + black + bandit + mypy strict on every PR |
|
Met |
CI rejects PRs that introduce new warnings ( |
|
Met |
mypy is run with |
Security#
Criterion |
Answer |
Evidence |
|---|---|---|
|
Met |
|
|
Met |
|
|
Met |
HMAC-SHA-256 + sigstore (Fulcio + Rekor); no custom crypto |
|
Met |
uses |
|
Met |
both Apache-2.0 |
|
Met |
SHA-256 minimum |
|
Met |
tested in CI |
|
N/A |
no transport-layer crypto in scope (it terminates at the reverse proxy / PyPI / sigstore) |
|
N/A |
no user passwords stored |
|
Met |
|
|
Met |
PyPI HTTPS + sigstore attestation verification on every wheel |
|
Met |
every release wheel carries a PEP 740 sigstore attestation |
Analysis#
Criterion |
Answer |
Evidence |
|---|---|---|
|
Met |
mypy strict + ruff |
|
Met |
bandit (CWE-78, CWE-89, CWE-94, etc.) |
|
Met |
CI rejects PRs that introduce new bandit findings |
|
Met |
property tests via Hypothesis ( |
Silver-tier answers (every project)#
Silver adds the following Met / N/A criteria. Bronze must already pass.
Quality (Silver)#
Criterion |
Answer |
Evidence |
|---|---|---|
|
Met |
repo carries multiple interim commits between releases; CI green at every merge |
|
Met |
|
|
Met |
ruff + black in CI |
|
Met |
|
|
Met |
|
|
Met |
follows PEP 517 / 518 build metadata |
|
Met |
|
|
Met |
|
|
Met |
|
|
Met |
|
|
Met |
|
|
Met |
every PR updates the relevant docs (enforced in PR review) |
|
Met |
runnable scripts in |
|
Met |
OpenSSF Scorecard badge + CI badge in |
|
Met |
|
|
Met |
docs use semantic Markdown headings; no critical UI surface |
|
N/A |
text strings target operator-readable English; no UI surface |
Security (Silver)#
Criterion |
Answer |
Evidence |
|---|---|---|
|
N/A |
no network communications in the library itself (sigstore + PyPI + GitHub use their own TLS) |
|
N/A |
as above |
|
N/A |
as above |
|
N/A |
as above |
|
Met |
every key reference is a parameter (HMAC key, sigstore identity) — no hardcoded credentials |
|
Met |
every release tag is signed (SSH ed25519); every wheel carries a SLSA Build L3 + PEP 740 sigstore attestation |
|
Met |
git tags are signed and verifiable via |
Analysis (Silver)#
Criterion |
Answer |
Evidence |
|---|---|---|
|
Met |
runs on every PR + on push to main |
|
Met |
bandit + ruff |
|
Met |
pytest assertions are enabled in CI runs |
|
Met |
CI fails on new Hypothesis property-test failures |
Change Control (Silver)#
Criterion |
Answer |
Evidence |
|---|---|---|
|
Met |
every release is downloadable from GitHub Releases and PyPI; no release ever yanked |
|
Met |
|
|
Met |
last-quarter median response time visible in issue history (target < 7 days) |
|
Met |
as above for feature requests |
Project-specific notes#
camt053 (core)#
interface_documentation:docs/api.rstcovers every public callable incamt053.services,camt053.parse,camt053.compliance,camt053.audit,camt053.telemetry,camt053.profiles,camt053.schema_version.dynamic_analysis:tests/test_property_based.pyexercises the sum-of-entries / reversal-round-trip invariants with Hypothesis.installation_common:pip install camt053(PyPI).
camt053-mcp#
interface_documentation: 15 tools + 2 resources + 4 prompts; each documented inREADME.mdTools / Resources / Prompts tables and thedocs/quickstart.md.installation_common:pip install camt053-mcp.
camt053-lsp#
interface_documentation: 7 LSP capabilities (diagnostics, completion, hover, code-actions, document-symbols, formatting, XML diagnostics) each backed by a pure helper documented inREADME.md.installation_common:pip install camt053-lsp.
After submission#
Once each badge is granted, copy the badge URL into the README’s badge row, between the existing
OpenSSF ScorecardandDocumentationbadges.The badge URL pattern is
https://www.bestpractices.dev/projects/<ID>/badgeand the project page ishttps://www.bestpractices.dev/projects/<ID>. Track both in the correspondingSECURITY.md“Supply-chain” line.Schedule the Gold application for v0.0.8+ — Gold needs the “two reviewers” change-control criterion which requires either a second project maintainer or a formal sign-off process.