OpenSSF OSPS Baseline mapping¶
Evidentia ships the first publicly-distributed NIST OSCAL Catalog 1.2.1 serialization of the OpenSSF Open Source Project Security Baseline. This page covers what's included, where the upstream lives, and how to use it.
What's bundled (v0.10.6)¶
-
3 per-maturity YAML catalogs at
packages/evidentia-core/src/evidentia_core/catalogs/data/international/osps-baseline-m{1,2,3}.yaml. Maturity 1 = 25 assessment-requirements (17 top-level controls); Maturity 2 = 42 assessment-requirements (32 top-level controls); Maturity 3 = 63 assessment-requirements (40 top-level controls). Total 41 unique top-level controls across all 3 maturity levels. -
1 OSCAL Catalog 1.2.1 serialization at
osps-baseline.oscal.json. Top-level-control granularity (41 controls). Validates againstcompliance-trestle 4.0.3Pydantic models. -
5 inter-framework crosswalks at
mappings/osps-baseline_to_{nist-ssdf-800-218,nist-csf-2.0,eu-cra,pci-dss-4.0,nist-800-161}.json. Row counts: 115 / 52 / 107 / 200 / 200. All carryprovenance: upstream-osps-guidelinesandverification: self-attested-via-upstream(auto-extracted from upstream OSPS Baselineguidelines[]array at the pinned commit; not independently hand-verified — see verification posture below). -
16 GitHub OSPS collector helpers at
packages/evidentia-collectors/src/evidentia_collectors/github/osps.py. Cover AC + BR + DO + GV + LE + QA + VM family assessment-requirements via GitHub REST API. Each helper emits aSecurityFindingwithcompliance_statusmapped from the GitHub API observation.
Upstream pinning¶
- Source:
ossf/security-baselineat commitac6bbec8aecf51dce41f62712745f7949ab6bdeb(May 12, 2026). - Catalog version string:
osps-baseline-2026.02.19. - License: Apache-2.0 (Evidentia ships verbatim under upstream's Apache-2.0 license per Tier-A redistribution rules).
Verification posture¶
Per the v0.10.6 cycle's brainstorm decision (see docs/v0.10.6-plan.md §4.5 + §12.1), the 5 OSPS crosswalks ship raw with explicit upstream-attested disclaimer. The CrosswalkDefinition schema was extended additively in v0.10.6 with 3 optional fields:
provenance: str | None— e.g.,"upstream-osps-guidelines"verification: Literal["self-attested-via-upstream", "hand-checked"] | None— currently"self-attested-via-upstream"for all 5 OSPS crosswalksverification_note: str | None— free-form documentation of the verification posture
Translation for consumers: the 5 OSPS crosswalks are mechanical extracts of upstream OSPS Baseline guidelines[] references to other frameworks. They are NOT independently SME-verified against (e.g.) the actual text of NIST SSDF SP 800-218 control PO.1.1. Consumers requiring independent verification should plan a hand-check pass. The v0.10.7+ roadmap targets converting "self-attested-via-upstream" → "hand-checked" once SME review is complete.
Evidentia's own OSPS Baseline conformance¶
Evidentia self-attests against the OSPS Baseline at OSPS-CONFORMANCE.md. The conformance claim is Maturity 2 + partial Maturity 3 as of v0.10.6. The verify-osps-conformance.yml GitHub Actions workflow re-validates every evidence link in the conformance doc on every push, PR, and weekly cron — ensuring the claim stays honest as the codebase evolves.
How to use the OSPS crosswalks¶
from evidentia_core.catalogs.crosswalk import load_crosswalk
cw = load_crosswalk("osps-baseline_to_nist-ssdf-800-218")
print(f"{cw.source_framework} → {cw.target_framework}")
print(f"Verification: {cw.verification}")
print(f"Mappings: {len(cw.mappings)}")
for m in cw.mappings[:3]:
print(f" {m.source_control_id} → {m.target_control_id} ({m.relationship})")
Output:
osps-baseline-2026.02.19 → nist-ssdf-800-218
Verification: self-attested-via-upstream
Mappings: 115
OSPS-AC-03.01 → PO.1.1 (related)
OSPS-AC-03.01 → PW.1.1 (related)
OSPS-BR-06.01 → PS.2.1 (related)
Running GitHub OSPS conformance checks¶
from evidentia_collectors.github import GitHubClient
from evidentia_collectors.github.osps import (
populate_osps_ac_03_01, # branch protection on default branch
populate_osps_le_02_01, # OSI/FSF-recognized SPDX license
populate_osps_vm_05_03, # Dependabot enabled
# ... 13 more
)
with GitHubClient(token="ghp_...") as gh:
finding = populate_osps_ac_03_01(gh, owner="myorg", repo="myrepo")
print(f"{finding.title}: {finding.compliance_status.value}")
Full list of 16 helpers: see evidentia_collectors.github.osps (api reference).
OSCAL upstream contribution¶
The OSPS Baseline OSCAL conversion was proposed for inclusion in the canonical awesome-oscal list maintained by the OSCAL Club community group: oscal-club/awesome-oscal#59.
What's next (v0.10.7+)¶
- Hand-verification pass on the 5 OSPS crosswalks (upgrade
"self-attested-via-upstream"→"hand-checked"where SME review confirms accuracy). scripts/catalogs/gen_osps_crosswalks.pydeterministic regeneration script (reduces sweep burden on next upstream OSPS bump).- Workflow-permissions audit promoted to blocking CI gate with
JUSTIFIEDannotation support. - New SHA-pinning check on
verify-osps-conformance.ymlitself (closes the v0.10.6 Step 7.D Scorecard alert #123).
See docs/wiki/6-project/roadmap.md for the full v0.10.7 backlog.