Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ jobs:
- name: Mutation-ThM trail soft warning
run: python scripts/check_mutation_thm_trail.py

- name: framework_sources present for every mapped framework (hard failure)
run: python scripts/check_framework_sources.py --strict

- name: docs/terms.md matches the live schema (hard failure)
run: python scripts/check_terms_sync.py

Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,19 @@ Format: [Semantic Versioning](https://semver.org). Schema versions and record se
## [Unreleased]

### Changed
- `framework_sources` backfill completed and `scripts/check_framework_sources.py
--strict` now runs corpus-wide in CI, no longer deferred (#245, #260,
#264 were the earlier passes). The 61 records still missing a pin
entry (56 for `nist_ai_rmf`, 10 for `mitre_atlas`) now carry an
`unknown` declaration each, since no citable version or commit
exists for any of the 66: every `mitre_atlas` gap was checked back
to the commit that added it and each confirmed the technique against
MITRE's own current data at the time without citing a dated
snapshot, and a repo-wide history search found no dated verification
event for `nist_ai_rmf` at all. `docs/terms-relationships.md`'s
coverage numbers are recomputed from live data; one of its prior
clauses is corrected along the way, not just its numbers (see that
file's own note).
- New standing check, `scripts/check_mutation_thm_trail.py`: soft-warns
on records where `mutation_count` is 1 or higher but `aivss.notes`
has no discoverable mention of the ThM decision made when that
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ python scripts/check_vulnerability_taxonomy.py # soft-warns on records missing
python scripts/check_vulnerability_taxonomy.py --strict --only AVE-2026-NNNNN # your new record must carry all three taxonomy fields
python scripts/check_mutation_thm_trail.py # soft-warns on records with mutation_count >= 1 and no ThM-decision trail in aivss.notes
python scripts/check_mutation_thm_trail.py --strict --only AVE-2026-NNNNN # if your edit raises mutation_count, aivss.notes must state the ThM decision (raised or unchanged, either way)
python scripts/check_framework_sources.py --strict --only AVE-2026-NNNNN # if your record carries owasp_mcp/owasp_asi/mitre_atlas/nist_ai_rmf, each needs a framework_sources entry
python scripts/check_framework_sources.py --strict --only AVE-2026-NNNNN # CI enforces this for every record now; run it scoped to yours before pushing, same check either way
python scripts/generate_terms.py # regenerate docs/terms.md after any schema field or description change
python scripts/check_terms_sync.py # hard failure if docs/terms.md disagrees with the live schema -- run before opening a PR
pytest tests/ -x -q # full suite: schema, AIVSS arithmetic, mitigation enums
Expand Down
26 changes: 19 additions & 7 deletions docs/terms-relationships.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,25 @@ framework_sources**: the first four are the mapping itself — which
category a record corresponds to in an external framework.
framework_sources is provenance for that mapping — which version or
commit of the referenced framework the mapping was made against. A
record can carry the mapping without the provenance; as of the last
corpus-wide backfill pass, `owasp_mcp` (required on every record) and
`owasp_asi` have full coverage (80 of 80, and 69 of 69 tagged records
respectively), `mitre_atlas` is partially backfilled (40 of 50 tagged
records, covering exactly the ones a dated, citable audit event actually
verified), and `nist_ai_rmf` has none yet — no audit trail for it was
ever found in this project's history. framework_sources exists
record can carry the mapping without the provenance; as of the
2026-10-15 backfill, `owasp_mcp` and `owasp_asi` have full, real-pin
coverage (87 of 87, and 74 of 74 tagged records respectively, every
entry a real version or commit). `mitre_atlas` has a real, citable
version/commit pin on 4 of its 54 tagged records (AVE-2026-00082,
-00084, -00086, -00087, all pinned against ATLAS v5.6.0); the other 50
carry an `unknown` declaration dated 2026-08-09, from the original
backfill pass. Correcting this document's own prior claim here rather
than carrying it forward: that prior sentence said those 50 covered
"the ones a dated, citable audit event actually verified," which,
checked directly against the live records, is not what they are --
every one of them has `pin_status: "unknown"`, not a verified pin.
`nist_ai_rmf` now carries an `unknown` declaration on all 56 tagged
records, added in the same 2026-10-15 pass; it previously had none,
and no dated verification event for it was ever found anywhere in
this project's history, confirmed again before this backfill. An
`unknown` entry means the mapping predates framework_sources tracking
and the version it was actually read against is not recoverable; it
records an honest gap, not a lower-confidence pin. framework_sources exists
specifically because an unversioned or unratified framework's category
meaning can shift under an unpinned mapping: see
OWASP/www-project-mcp-top-10#52, the live case (not a hypothetical) that
Expand Down
26 changes: 19 additions & 7 deletions docs/terms.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,25 @@ framework_sources**: the first four are the mapping itself — which
category a record corresponds to in an external framework.
framework_sources is provenance for that mapping — which version or
commit of the referenced framework the mapping was made against. A
record can carry the mapping without the provenance; as of the last
corpus-wide backfill pass, `owasp_mcp` (required on every record) and
`owasp_asi` have full coverage (80 of 80, and 69 of 69 tagged records
respectively), `mitre_atlas` is partially backfilled (40 of 50 tagged
records, covering exactly the ones a dated, citable audit event actually
verified), and `nist_ai_rmf` has none yet — no audit trail for it was
ever found in this project's history. framework_sources exists
record can carry the mapping without the provenance; as of the
2026-10-15 backfill, `owasp_mcp` and `owasp_asi` have full, real-pin
coverage (87 of 87, and 74 of 74 tagged records respectively, every
entry a real version or commit). `mitre_atlas` has a real, citable
version/commit pin on 4 of its 54 tagged records (AVE-2026-00082,
-00084, -00086, -00087, all pinned against ATLAS v5.6.0); the other 50
carry an `unknown` declaration dated 2026-08-09, from the original
backfill pass. Correcting this document's own prior claim here rather
than carrying it forward: that prior sentence said those 50 covered
"the ones a dated, citable audit event actually verified," which,
checked directly against the live records, is not what they are --
every one of them has `pin_status: "unknown"`, not a verified pin.
`nist_ai_rmf` now carries an `unknown` declaration on all 56 tagged
records, added in the same 2026-10-15 pass; it previously had none,
and no dated verification event for it was ever found anywhere in
this project's history, confirmed again before this backfill. An
`unknown` entry means the mapping predates framework_sources tracking
and the version it was actually read against is not recoverable; it
records an honest gap, not a lower-confidence pin. framework_sources exists
specifically because an unversioned or unratified framework's category
meaning can shift under an unpinned mapping: see
OWASP/www-project-mcp-top-10#52, the live case (not a hypothetical) that
Expand Down
4 changes: 4 additions & 0 deletions records/AVE-2026-00001.json
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00002.json
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00003.json
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00004.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00005.json
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00006.json
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00007.json
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00008.json
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00009.json
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00010.json
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00011.json
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00012.json
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00013.json
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00014.json
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00015.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00016.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00017.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00018.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00019.json
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00020.json
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00021.json
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00022.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00023.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
8 changes: 8 additions & 0 deletions records/AVE-2026-00024.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,14 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"mitre_atlas": {
"pin_status": "unknown",
"read_date": "2026-10-15"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00025.json
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
4 changes: 4 additions & 0 deletions records/AVE-2026-00026.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,10 @@
"owasp_asi": {
"version": "2026",
"read_date": "2026-08-23"
},
"nist_ai_rmf": {
"pin_status": "unknown",
"read_date": "2026-10-15"
}
}
}
Loading
Loading