Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

OpenSSF Best Practices Badge — self-assessment

noyalib holds the passing-level badge: project 13057, 100% of the 65 passing criteria, achieved 2026-05-31. The badge is embedded in the workspace README.md header. This file is the maintenance record: each criterion mapped to the artefact that satisfies it, so answers can be re-verified when the project changes and the Silver application can start from it.

Passing-level criteria — prefilled answers

The 65 criteria are organised under six headings on the badge site. Each row below maps the criterion → the noyalib artefact that satisfies it.

Basics

CriterionSatisfied by
Project website / repository URLhttps://github.com/sebastienrousseau/noyalib
Description / what the project doesRepository description + README.md headline
Stable URL for the projectThe GitHub repo URL above
Discussion mechanismGitHub Issues + Discussions enabled
License is OSI-approvedMIT OR Apache-2.0 — see LICENSE-MIT, LICENSE-APACHE
Project provides documentationREADME.md, docs/USER-GUIDE.md, docs/ARCHITECTURE.md, docs/POLICIES.md, docs/BENCHMARKS.md
Documentation includes “Quick Start”README.md §“Quick Start”, crates/noyalib/README.md, docs/GETTING_STARTED.md
Documentation has a security policySECURITY.md
Maintainer-direct contactsebastian.rousseau@gmail.com (per SECURITY.md)
Public bug trackerGitHub Issues
Acknowledgement of contributionsCONTRIBUTING.md, GitHub PR / issue author attribution

Change control

CriterionSatisfied by
Source under version controlGit, GitHub-hosted
Unique version identifier per releaseSemVer tags v0.0.x
Release notes per versiondocs/release-notes/v0.0.X.md for each tagged release, indexed by docs/release-notes/README.md
Standardised file structureCargo workspace conventions; crates/, doc/, pkg/
Changelog keptCHANGELOG.md (Keep-a-Changelog format)

Reporting

CriterionSatisfied by
Bug reports trackedGitHub Issues, with templates in .github/ISSUE_TEMPLATE/
Bug report responses ≤ 14 daysIssue-response SLA documented in SECURITY.md (48 h initial response)
Vulnerability report channelSECURITY.md — disclosure via sebastian.rousseau@gmail.com, 48 h response
Security audit logAudit reports tracked in docs/POLICIES.md § “Audit pipeline”

Quality

CriterionSatisfied by
Working build systemcargo build --workspace --all-features
Working test systemcargo test --workspace --all-features (~5 400 tests)
Tests run on every change.github/workflows/ci.yml triggers on push + pull_request
Code-coverage measurement.github/workflows/ci.yml § Coverage gate (≥96%) — cargo llvm-cov
Coverage tool integrationSame
New features include testsRequired by review process; enforced by cargo-machete, strict-doc gate
Documented coding styleWorkspace-level lints in crates/noyalib/Cargo.toml; cargo fmt enforced by CI
Code review of every changemain ruleset requires PR + 1 approving review + code-owner review + last-push approval (post-this-commit)

Security

CriterionSatisfied by
Cryptographic best practicesReleases signed via cosign keyless + SLSA Build L2 provenance attestations on every artefact
Inputs validated before useParser enforces ParserConfig limits (max_depth, max_document_length, max_alias_expansions, …)
Hardened against vulnerabilities#![forbid(unsafe_code)] workspace-wide, fuzz suite (10 targets) + Miri soak runs in .github/workflows/security.yml
Vulnerability disclosure testedOne historical CVE-equivalent (issue #46 RecursionLimitExceeded false-positive) — patched in v0.0.6 within the same release cycle
Security expertise consultedAudit pipeline: cargo-deny, cargo-vet, cargo-audit, cargo-machete, CodeQL — see docs/POLICIES.md

Analysis

CriterionSatisfied by
Static analysis appliedcargo clippy --workspace --all-features -- -D warnings on every PR; CodeQL on .github/workflows/security.yml
Dynamic analysis appliedDifferential fuzz (10 s smoke per PR) + soak fuzz (1 h per target weekly); Miri (focused per PR + full weekly)
Coverage-guided fuzzingcargo-fuzz with libFuzzer, 10 targets: fuzz_borrowed_alias, fuzz_diff, fuzz_double_quoted, fuzz_from_value, fuzz_multi_doc, fuzz_no_span_loader, fuzz_parse, fuzz_roundtrip, fuzz_strict, fuzz_yaml_v1_1
Memory-safety analysis#![forbid(unsafe_code)] (the strongest possible static guarantee) + Miri runs to verify transitive unsafe blocks in dev-deps

Silver / Gold level (future)

The “Silver” badge adds 30+ more criteria around release process maturity and “Gold” 30 more around supply-chain transparency. The passing entry is complete; tracking Silver for the v0.1.0 milestone via https://www.bestpractices.dev/en/projects/13057/silver/edit.