Skip to content

Commit ccacfdf

Browse files
spoorccclaude
andauthored
docs: clean up and enrich security model documentation (#1285)
* docs: remove duplicated compliance content from security model The three-tier traceability diagram, compliance-only controls listing, OSCAL artifact links, and control register reference were repeated verbatim in security.rst despite being the authoritative content of the auto-generated compliance_track.rst. Replace with a single forwarding sentence pointing readers to the compliance_track page. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E1Kh1r5dX7VEP6AScUtgrN * docs: add winget as a distribution channel in the security model Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E1Kh1r5dX7VEP6AScUtgrN * docs: hyperlink each distribution channel in the security model Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E1Kh1r5dX7VEP6AScUtgrN * docs: add hyperlinks throughout security model text Link MIT licence, Article 13 CRA reference, GitHub Actions / GitLab CI / Jenkins CI examples, and OJEU mention to their respective pages. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E1Kh1r5dX7VEP6AScUtgrN * fix: render gap analysis titles as rubrics so :ref: links resolve correctly RST does not support nesting inline roles inside **bold** markup, causing the :ref: role to be emitted as literal text. Switch to .. rubric:: which renders as a bold heading and correctly processes inline markup. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E1Kh1r5dX7VEP6AScUtgrN * docs: expand OSCAL Artifacts section with context, purpose, and direct links Explain what OSCAL is, what problem it solves for downstream integrators, and link directly to both artifact files in the repository. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E1Kh1r5dX7VEP6AScUtgrN * docs: add glossary term refs and links throughout security pages Add three new glossary terms: SDLC, CVE, ECR. Add :term: cross-references in security.rst: replace named external links for CRA/EN 40000/STRIDE with :term: refs; add refs for SDLC, Archive, Manifest, Metadata, Destination, Vendoring, Superproject, OSCAL throughout the body; add a seealso box linking to the glossary. Add :term: refs in security_pipeline.rst for STRIDE, OSCAL, SBOM, SLSA Build/Source Provenance, Sigstore, Attestation, VSA, ECR, Vendoring; add seealso box. Update compliance.py generator to use :term:`OSCAL` in the OSCAL Artifacts section and intro; regenerate compliance_track.rst. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E1Kh1r5dX7VEP6AScUtgrN * fix: correct RST pluralisation escape after :term:`ECR` `:term:`ECR`\s` is malformed — the backslash escape sequence needs a trailing space: `:term:`ECR`\ s`. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E1Kh1r5dX7VEP6AScUtgrN --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent ea7d0bd commit ccacfdf

5 files changed

Lines changed: 121 additions & 81 deletions

File tree

doc/explanation/compliance_track.rst

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ concrete dfetch controls or documented gaps::
2525
2626
dfetch control (C-001 … C-046) or documented gap
2727

28-
Machine-readable artifacts are kept alongside the source, encoded in OSCAL 1.2.2:
28+
Machine-readable artifacts are kept alongside the source, encoded in :term:`OSCAL` 1.2.2:
2929

3030
- `security/cra_pren_4000014_oscal_catalog.json <https://github.com/dfetch-org/dfetch/blob/main/security/cra_pren_4000014_oscal_catalog.json>`_ — prEN 40000-1-4 catalog (includes parties, roles, and responsible-parties)
3131
- `security/dfetch.component-definition.json <https://github.com/dfetch-org/dfetch/blob/main/security/dfetch.component-definition.json>`_ — dfetch Component Definition (includes supplier party, purpose, evidence links per implemented-requirement)
@@ -392,15 +392,15 @@ Gap Analysis — Compliance-Only Controls
392392

393393
3 compliance-only controls address CRA requirements not independently covered by the Track A risk models.
394394

395-
**:ref:`C-043 <c-043>` — Release-gate CVE check (ECR-a, SO.VulnerabilityManagementProcess → GEC-1)**
395+
.. rubric:: :ref:`C-043 <c-043>` — Release-gate CVE check (ECR-a, SO.VulnerabilityManagementProcess → GEC-1)
396396

397397
dfetch's CI detects vulnerabilities at commit time (:ref:`C-015 <c-015>`, :ref:`C-016 <c-016>`, :ref:`C-017 <c-017>`). :ref:`C-043 <c-043>` completes the coverage: the publish workflow runs ``pip-audit`` against the project's runtime dependencies via the OSV database and blocks the release if any known vulnerability is found.
398398

399-
**:ref:`C-044 <c-044>` — Data minimisation policy (ECR-g, SO.DataMinimization → DTM-1)**
399+
.. rubric:: :ref:`C-044 <c-044>` — Data minimisation policy (ECR-g, SO.DataMinimization → DTM-1)
400400

401401
dfetch processes dependency metadata only. The ``.dfetch_data.yaml`` file stores: ``remote_url`` (credentials stripped by :ref:`C-036 <c-036>`), ``revision``, optional ``integrity.hash``, and ``last_fetch`` timestamp. Each field is functionally necessary for ``dfetch check`` and ``dfetch freeze``. No personal data is collected; no telemetry is sent. :ref:`C-044 <c-044>` formalises this assertion as a documented policy.
402402

403-
**:ref:`C-046 <c-046>` — Exploit mitigation inventory (ECR-k, SO.ReduceImpactOfIncident → GEC-11)**
403+
.. rubric:: :ref:`C-046 <c-046>` — Exploit mitigation inventory (ECR-k, SO.ReduceImpactOfIncident → GEC-11)
404404

405405
prEN 40000-1-4 ECR-k requires documenting applicable exploit mitigation techniques. For dfetch (pure Python):
406406

@@ -417,8 +417,20 @@ prEN 40000-1-4 ECR-k requires documenting applicable exploit mitigation techniqu
417417
OSCAL Artifacts
418418
---------------
419419

420-
The OSCAL 1.2.2 Component Definition references the catalog file and can be
421-
regenerated with:
420+
:term:`OSCAL` (Open Security Controls Assessment Language) is a
421+
NIST-published JSON/XML schema set for machine-readable security
422+
documentation. It lets GRC tools, conformity-assessment toolchains, and
423+
downstream integrators ingest dfetch's control evidence programmatically —
424+
rather than reading prose — and map it to their own compliance frameworks.
425+
426+
dfetch ships two OSCAL 1.2.2 artifacts alongside the source:
427+
428+
- `security/cra_pren_4000014_oscal_catalog.json <https://github.com/dfetch-org/dfetch/blob/main/security/cra_pren_4000014_oscal_catalog.json>`_ — the prEN 40000-1-4 Security Objectives expressed as a structured catalog;
429+
import this into your GRC tool to obtain the requirement definitions.
430+
- `security/dfetch.component-definition.json <https://github.com/dfetch-org/dfetch/blob/main/security/dfetch.component-definition.json>`_ — the dfetch Component Definition; maps each implemented control back to
431+
the catalog objectives with evidence links.
432+
433+
Both files are regenerated with:
422434

423435
.. code-block:: bash
424436

doc/explanation/security.rst

Lines changed: 37 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,14 @@ Security Model
1313
and dfetch itself critically, and provide feedback or contributions to enhance its accuracy and completeness.
1414

1515
This page documents the security design of *dfetch* across its full software
16-
development lifecycle (SDLC): from source contribution through CI/CD,
16+
development lifecycle (:term:`SDLC`): from source contribution through CI/CD,
1717
PyPI distribution, and runtime execution in developer and build
1818
environments.
1919

20-
The model is aligned with the `Cyber Resilience Act (CRA)`_ and the
21-
`EN 40000`_ series of cybersecurity standards, using `STRIDE`_ as the threat
20+
The model is aligned with the :term:`CRA` (Cyber Resilience Act) and the
21+
:term:`EN 40000` series of cybersecurity standards, using :term:`STRIDE` as the threat
2222
classification methodology. It is inspired by the `ENISA Security by Design and Default Playbook`_.
2323

24-
.. _`Cyber Resilience Act (CRA)`: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R2847
25-
.. _`EN 40000`: https://www.cencenelec.eu/areas-of-work/cen-cenelec-topics/cybersecurity/
26-
.. _`STRIDE`: https://learn.microsoft.com/en-us/azure/security/develop/threat-modeling-tool-threats
2724
.. _`ENISA Security by Design and Default Playbook`: https://www.enisa.europa.eu/sites/default/files/2026-03/ENISA_Secure_By_Design_and_Default_Playbook_v0.4_draft_for_consultation.pdf
2825

2926
The threat model is split into two focused modules:
@@ -55,34 +52,36 @@ Product and manufacturer identification
5552
* - Maintainer
5653
- Ben Spoor
5754
* - Distribution channel
58-
- PyPI (``pip install dfetch``); GitHub Releases (stand-alone binary)
55+
- `PyPI <https://pypi.org/project/dfetch/>`_ (``pip install dfetch``);
56+
`GitHub Releases <https://github.com/dfetch-org/dfetch/releases>`_ (stand-alone binary);
57+
`winget <https://winstall.app/apps/DFetch-org.DFetch>`_ (``winget install dfetch``)
5958
* - Source repository
6059
- https://github.com/dfetch-org/dfetch
6160
* - License
62-
- MIT
61+
- `MIT <https://github.com/dfetch-org/dfetch/blob/main/LICENSE>`_
6362
* - CRA applicability
6463
- dfetch is developed and distributed as a non-commercial open-source project.
65-
Under the Cyber Resilience Act, applicability depends on whether software
64+
Under the :term:`CRA`, applicability depends on whether software
6665
is placed on the market in the context of a commercial activity.
6766
As of 2026-05-02, dfetch is not monetized and is not offered as part
68-
of a commercial service. However, CRA obligations may become applicable
67+
of a commercial service. However, :term:`CRA` obligations may become applicable
6968
in downstream contexts where third parties integrate dfetch into commercial
70-
products, in which case those manufacturers bear their own Article 13
69+
products, in which case those manufacturers bear their own `Article 13 <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R2847>`_
7170
obligations to assess and document the security of components they integrate,
7271
including open-source dependencies.
7372

7473
Intended purpose, foreseeable use, and reasonably foreseeable misuse (IPFRU)
7574
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7675

77-
*Intended purpose*: fetch and vendor external source-code dependencies (from
78-
Git repositories, SVN repositories, or plain archive URLs) as plain files into
79-
a project repository. dfetch reads a declarative manifest (``dfetch.yaml``),
76+
*Intended purpose*: fetch and :term:`vendor <Vendoring>` external source-code dependencies (from
77+
Git repositories, SVN repositories, or plain :term:`Archive` URLs) as plain files into
78+
a project repository. dfetch reads a declarative :term:`Manifest` (``dfetch.yaml``),
8079
resolves each declared dependency to the requested revision, copies the source
81-
tree to the declared destination path, and records metadata for subsequent
80+
tree to the declared :term:`destination <Destination>` path, and records :term:`Metadata` for subsequent
8281
up-to-date checks.
8382

8483
*Foreseeable use*: invoked interactively on a developer workstation, or
85-
non-interactively inside CI/CD pipelines (GitHub Actions, GitLab CI, Jenkins, etc.)
84+
non-interactively inside CI/CD pipelines (`GitHub Actions <https://github.com/features/actions>`_, `GitLab CI <https://docs.gitlab.com/ee/ci/>`_, `Jenkins <https://www.jenkins.io/>`_, etc.)
8685
to reproduce a deterministic dependency state.
8786

8887
*Reasonably foreseeable misuse*: the following are the principal harms *dfetch*
@@ -94,16 +93,16 @@ threat models below.
9493
non-interactively in a pipeline holding registry tokens, signing keys, or cloud
9594
credentials, a compromised or intentionally malicious upstream source could read
9695
and exfiltrate those secrets.
97-
- **Resource exhaustion from hostile archives.** A crafted archive (for example a
96+
- **Resource exhaustion from hostile archives.** A crafted :term:`Archive` (for example a
9897
decompression bomb) can expand to an extreme size or member count on extraction,
9998
exhausting disk or memory and denying service to the developer or build host.
10099
- **Introduction of vulnerable or malicious code into the superproject.** More
101100
subtle than denial of service: an attacker-controlled upstream may ship source
102-
carrying latent vulnerabilities or backdoors that are vendored into the consuming
103-
project and propagated into downstream products.
101+
carrying latent vulnerabilities or backdoors that are :term:`vendored <Vendoring>` into the consuming
102+
:term:`Superproject` and propagated into downstream products.
104103
- **Destruction or overwrite of files outside the destination folder.** A malicious
105-
manifest destination path, or hostile archive entries, could write, overwrite, or
106-
delete files outside the intended vendoring directory on the end-user machine.
104+
:term:`Manifest` destination path, or hostile :term:`Archive` entries, could write, overwrite, or
105+
delete files outside the intended :term:`Vendoring` directory on the end-user machine.
107106

108107
.. _risk-rating-methodology:
109108

@@ -177,34 +176,13 @@ for regeneration instructions.
177176
CRA Compliance
178177
--------------
179178

180-
The :doc:`compliance_track` page maps all 13 CRA Annex I Part I essential
181-
requirements (ECR-a through ECR-m) through prEN 40000-1-4 Security Objectives
182-
to dfetch's implemented controls. It also covers the seven Part II
183-
vulnerability-handling requirements via prEN 40000-1-3.
184-
185-
The three-tier traceability model is::
186-
187-
CRA Annex I Essential Requirement (ECR-a … ECR-m)
188-
189-
prEN 40000-1-4 Security Objective (SO.*)
190-
191-
dfetch control (C-001 … C-046) or documented gap
192-
193-
Three compliance-only controls address CRA requirements not independently
194-
surfaced by the risk models:
195-
196-
- :ref:`C-043 <c-043>` (release-gate CVE check) — ECR-a / SO.VulnerabilityManagementProcess → GEC-1
197-
- :ref:`C-044 <c-044>` (data minimisation policy) — ECR-g / SO.DataMinimization → DTM-1
198-
- :ref:`C-046 <c-046>` (exploit mitigation inventory) — ECR-k / SO.ReduceImpactOfIncident → GEC-11
199-
200-
Machine-readable artifacts are kept alongside the source, encoded in OSCAL 1.1.2
201-
(pinned version; NIST released 1.2.2 in April 2026 — migration not yet performed):
202-
203-
- `security/cra_pren_4000014_oscal_catalog.json <https://github.com/dfetch-org/dfetch/blob/main/security/cra_pren_4000014_oscal_catalog.json>`_ — prEN 40000-1-4 catalog
204-
(derived from the CEN/CLC/JTC 13 WG 9 deep-dive session, March 2026)
205-
- `security/dfetch.component-definition.json <https://github.com/dfetch-org/dfetch/blob/main/security/dfetch.component-definition.json>`_ — dfetch Component Definition
206-
207-
The complete list of all controls is on the :doc:`control_register` page.
179+
The :doc:`compliance_track` page provides full three-tier traceability from all
180+
13 CRA Annex I Part I essential requirements (ECR-a through ECR-m) through
181+
prEN 40000-1-4 Security Objectives to dfetch's implemented controls, including
182+
machine-readable :term:`OSCAL` artifacts and the gap analysis for compliance-only
183+
controls. It also covers the seven Part II vulnerability-handling requirements
184+
via prEN 40000-1-3. The complete list of all controls is on the
185+
:doc:`control_register` page.
208186

209187
.. toctree::
210188
:maxdepth: 1
@@ -232,7 +210,7 @@ EN 40000 harmonised standards
232210
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
233211

234212
The EN 40000 family is being developed by CEN/CLC/JTC 13 to provide harmonised
235-
standards under the CRA. Once published in the OJEU, compliance with them confers a
213+
standards under the :term:`CRA`. Once published in the `OJEU <https://eur-lex.europa.eu/oj/direct-access.html>`_, compliance with them confers a
236214
presumption of conformity with the corresponding CRA essential requirements.
237215

238216
- `CEN/CENELEC cybersecurity standards page <https://www.cencenelec.eu/areas-of-work/cen-cenelec-topics/cybersecurity/>`_ —
@@ -255,8 +233,8 @@ Threat modelling
255233
OSCAL
256234
~~~~~
257235

258-
`OSCAL (Open Security Controls Assessment Language) <https://pages.nist.gov/OSCAL/>`_ is a
259-
set of NIST-published JSON/XML schemas for machine-readable security documentation.
236+
:term:`OSCAL` (Open Security Controls Assessment Language) is a set of
237+
NIST-published JSON/XML schemas for machine-readable security documentation.
260238
dfetch uses OSCAL 1.1.2 for two artifacts:
261239

262240
- `OSCAL Catalog model <https://pages.nist.gov/OSCAL/reference/latest/catalog/>`_ —
@@ -273,6 +251,13 @@ For an overview of how this documentation set is produced — the threat-model
273251
pipeline, compliance pipeline, release attestations, and the full artifact
274252
inventory — see :doc:`security_pipeline`.
275253

254+
.. seealso::
255+
256+
:doc:`/reference/glossary`
257+
Definitions for :term:`CRA`, :term:`EN 40000`, :term:`STRIDE`,
258+
:term:`OSCAL`, :term:`SLSA`, :term:`SBOM`, :term:`Sigstore`,
259+
:term:`SDLC`, :term:`ECR`, and other terms used on this page.
260+
276261
.. toctree::
277262
:hidden:
278263

doc/explanation/security_pipeline.rst

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,21 @@ a documented gap or compliance artefact.
2121

2222
.. uml:: /static/uml/security_doc_flow.puml
2323

24+
.. seealso::
25+
26+
:doc:`/reference/glossary`
27+
Definitions for :term:`STRIDE`, :term:`OSCAL`, :term:`SBOM`,
28+
:term:`SLSA`, :term:`Sigstore`, :term:`Attestation`, :term:`VSA`,
29+
:term:`SARIF`, and other terms used on this page.
30+
2431
**Threat model pipeline** —
2532
`security/tm_supply_chain.py <https://github.com/dfetch-org/dfetch/blob/main/security/tm_supply_chain.py>`_
2633
and
2734
`security/tm_usage.py <https://github.com/dfetch-org/dfetch/blob/main/security/tm_usage.py>`_
2835
define the model elements (actors, data flows, trust boundaries) using the
2936
*pytm* library.
3037
`security/threats.json <https://github.com/dfetch-org/dfetch/blob/main/security/threats.json>`_
31-
provides a catalog of 60+ STRIDE-classified threats.
38+
provides a catalog of 60+ :term:`STRIDE`-classified threats.
3239
`security/tm_render.py <https://github.com/dfetch-org/dfetch/blob/main/security/tm_render.py>`_
3340
drives *pytm*, matches threats against model elements, and combines the output
3441
with
@@ -43,27 +50,27 @@ defines all dfetch controls (Track A: risk-driven; Track B: compliance-only cont
4350
in ``compliance_data.py``) and their mapping to CRA essential requirements
4451
and prEN 40000-1-4 security objectives.
4552
`security/compliance.py <https://github.com/dfetch-org/dfetch/blob/main/security/compliance.py>`_
46-
reads those definitions together with the static OSCAL catalog and generates
53+
reads those definitions together with the static :term:`OSCAL` catalog and generates
4754
:doc:`compliance_track` (human-readable RST mapping tables),
4855
:doc:`control_register` (the full control register with GitHub references), and
4956
`security/dfetch.component-definition.json <https://github.com/dfetch-org/dfetch/blob/main/security/dfetch.component-definition.json>`_
50-
(machine-readable OSCAL 1.2.2 Component Definition). The Component Definition
57+
(machine-readable :term:`OSCAL` 1.2.2 Component Definition). The Component Definition
5158
includes the supplier party, component purpose, and ``evidence`` links on each
5259
implemented-requirement pointing to the concrete code or CI file that implements
5360
the control — making the mapping machine-verifiable.
5461

55-
**Release attestations** — GitHub Actions generates five cryptographic attestation
56-
types *about dfetch itself* during every release, signed by Sigstore and verifiable
57-
by consumers with ``gh attestation verify`` (see :ref:`verify-integrity`):
58-
CycloneDX SBOM (composition of the published package), SLSA Build Provenance
59-
(source-to-binary traceability), SLSA Source Provenance (governance controls on
60-
``main``), Verification Summary Attestation (VSA), and in-toto Test Results
61-
(CI test suite passed before any binary was produced). These are required by
62-
supply-chain controls :ref:`C-026 <c-026>`, :ref:`C-037 <c-037>`,
63-
:ref:`C-039 <c-039>`, and :ref:`C-040 <c-040>`.
62+
**Release attestations** — GitHub Actions generates five cryptographic
63+
:term:`Attestation` types *about dfetch itself* during every release, signed by
64+
:term:`Sigstore` and verifiable by consumers with ``gh attestation verify``
65+
(see :ref:`verify-integrity`): CycloneDX :term:`SBOM` (composition of the
66+
published package), :term:`Build Provenance` (source-to-binary traceability),
67+
:term:`Source Provenance` (governance controls on ``main``), :term:`VSA`, and
68+
in-toto Test Results (CI test suite passed before any binary was produced).
69+
These are required by supply-chain controls :ref:`C-026 <c-026>`,
70+
:ref:`C-037 <c-037>`, :ref:`C-039 <c-039>`, and :ref:`C-040 <c-040>`.
6471

6572
**Dependency-scanning outputs** — When users run ``dfetch check``, the reporting
66-
layer emits findings about outdated or missing vendored dependencies in the format
73+
layer emits findings about outdated or missing :term:`vendored <Vendoring>` dependencies in the format
6774
of their choice:
6875
:ref:`SARIF <check-ci-github>` (for GitHub code scanning),
6976
:ref:`Code Climate JSON <check-ci-gitlab>` (GitLab merge-request quality reports), or
@@ -81,7 +88,7 @@ of their choice:
8188

8289
* - :doc:`threat_model_supply_chain`
8390
- RST (generated)
84-
- Supply-chain threat model: DFD, sequence diagram, STRIDE tables, controls
91+
- Supply-chain threat model: DFD, sequence diagram, :term:`STRIDE` tables, controls
8592

8693
* - :doc:`threat_model_usage`
8794
- RST (generated)
@@ -96,18 +103,19 @@ of their choice:
96103
- All dfetch controls with type, references, and status
97104

98105
* - `security/dfetch.component-definition.json <https://github.com/dfetch-org/dfetch/blob/main/security/dfetch.component-definition.json>`_
99-
- OSCAL 1.2.2 JSON (generated)
100-
- Machine-readable Component Definition; maps dfetch controls to CRA ECRs;
106+
- :term:`OSCAL` 1.2.2 JSON (generated)
107+
- Machine-readable Component Definition; maps dfetch controls to CRA :term:`ECR`\ s;
101108
includes supplier party, component purpose, and evidence links to code
102109

103110
* - `security/cra_pren_4000014_oscal_catalog.json <https://github.com/dfetch-org/dfetch/blob/main/security/cra_pren_4000014_oscal_catalog.json>`_
104-
- OSCAL 1.2.2 JSON (static)
111+
- :term:`OSCAL` 1.2.2 JSON (static)
105112
- Static prEN 40000-1-4 catalog; includes parties, roles, and responsible-parties
106113

107114
* - :ref:`Release attestations <verify-integrity>`
108115
- Sigstore-signed (GitHub Actions)
109-
- Five attestation types generated *about dfetch* on every release: CycloneDX
110-
SBOM, SLSA Build Provenance, SLSA Source Provenance, VSA, in-toto Test Results.
116+
- Five :term:`Attestation` types generated *about dfetch* on every release:
117+
CycloneDX :term:`SBOM`, :term:`Build Provenance`, :term:`Source Provenance`,
118+
:term:`VSA`, in-toto Test Results.
111119
Required by controls :ref:`C-026 <c-026>`, :ref:`C-037 <c-037>`,
112120
:ref:`C-039 <c-039>`, :ref:`C-040 <c-040>`;
113121
verifiable with ``gh attestation verify``.

0 commit comments

Comments
 (0)