Skip to content

Add OWASP AISVS 1.0 mapping across all three source lists (25 → 26 frameworks) - #94

Merged
emmanuelgjr merged 2 commits into
mainfrom
feat/aisvs-1.0-mapping
Sep 14, 2026
Merged

emmanuelgjr merged 2 commits into
mainfrom
feat/aisvs-1.0-mapping

Conversation

@emmanuelgjr

@emmanuelgjr emmanuelgjr commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Summary

This adds OWASP AISVS 1.0 as a mapped framework, taking the count from 25 to 26.

Registry data/frameworks/owasp-aisvs.json: all 191 AISVS 1.0 requirements, one control each, inventory complete
Agentic Top 10 agentic-top10/Agentic_AISVS.md: 83 mappings, ASI01–ASI10
DSGAI 2026 dsgai-2026/DSGAI_AISVS.md: 141 mappings, DSGAI01–DSGAI21
LLM Top 10 2026 llm-top10/LLM_AISVS.md: 82 mappings, LLM01–LLM10. The source's 74 rows were re-keyed to 2026, and 8 rows were added; see below

That's 306 mappings over 41 entries.

The totals move from 3,497 to 3,803 mappings, 74 to 77 mapping files, 25 to 26 frameworks (both mapped and registered), 1,372 to 1,563 controls, and 2 to 3 "current" in the freshness count.

Compatibility findings

  • LLM Top 10: re-keyed to 2026. LLM_AISVS.md was written against the 2025 list. It was moved to the 2026 list using the MIGRATION.md map in a single pass:

    • Sections were renumbered and renamed (LLM03 Excessive Agency, LLM04 Supply Chain, LLM08 Hidden Context Exposure, LLM10 Improper Output Handling, and so on).

    • Cross-references were renumbered.

    • Severities follow the 2026 re-baselining (LLM03 Critical, LLM06 and LLM07 High).

    • Otto's 74 rows are otherwise unchanged. The 2026 scope changes add 8 AISVS requirements, each marked (2026 scope) in its row:

      Entry 2026 scope change Added
      LLM01 Cross-modal injection 2.2.3, 2.2.4
      LLM04 Artifact provenance / namespace reuse 3.1.3, 3.1.1
      LLM05 Fine-tuning subversion (adapters, fine-tunes) 6.1.2, 3.5.1
      LLM08 Hidden context incl. tool/function schemas 10.2.4
      LLM10 Insecure generated code 9.3.7. AISVS has no requirement that scans generated code itself, and the section says so

    @ottosulin, a review of the 8 added rows would be welcome.

  • ASI and DSGAI: IDs and names match exactly (all 31 checked). Header block, H1, source-list links and footer now match the sibling files.

  • LLM cross-references inside the ASI/DSGAI files were renumbered from 2025 to 2026 using the MIGRATION.md map (91 IDs). generate.js merges these into crossrefs.llm_top10, so leaving them as they were would have attached the wrong LLM IDs to ASI and DSGAI entries.

  • The registry format has changed since the source was written. framework-schema.json now requires kind on every control and stats.js throws without it. kind: control was added to all 191 items, plus an inventory_completeness block. The file validates with ajv against the schema and with ingest-framework.mjs --validate.

  • Checked against upstream: requirement IDs, text and levels match OWASP/AISVS 1.0/en on 2026-09-14 for all 191.

  • markdownlint: prose is wrapped to 120 columns and blank lines were added before lists. The mapping rows themselves are unchanged. The generated AISVS rows match the monorepo output field for field (control_id, control_name, tier, scope, notes).

Registration (following 2338d1a)

  • FRAMEWORK_FILES in generate.js
  • framework-sources.json entry
  • COMPLETE_BY_DEFINITION in inventory-completeness.js, so npm run inventory doesn't downgrade AISVS to unknown
  • REPORT_FRAMEWORKS and FW_META in compliance-report.js
  • README: coverage matrix (now ✅ for all three lists), file tables and repository tree
  • Framework counts in docs/index.html, the agentic landing page, ai-standards-crosswalk (new table row, and its stale 23 / 3,211 figures corrected) and llms.txt
  • package.json description, FRESHNESS_SLA, CHANGELOG

The i18n READMEs are older snapshots (they don't list CoSAI either), so I left them alone.

Verification

Re-run after merging main (#91, #92) and adding the LLM file: validate.js passes, stats:check is current, unit tests pass 50/50, a second generator run leaves no drift, and markdownlint is clean on the changed files.

  • node scripts/generate.js: 10/10 and 21/21 entries extracted, 0 WARN. A second run leaves no diff in data/entries, docs/data.js or docs/incidents.js.
  • npm run stats:check passes, and git diff --exit-code -- README.md data/stats.json is clean.
  • node scripts/validate.js: 0 errors. The warning set is identical to main (84), with 312 → 320 checks passed.
  • npm run test:scripts: 50/50, and the tree is clean afterwards. One earlier run hit a parallel-run race: exports.test read an entry file while generate.test was rewriting it. It passed on re-run and with --test-concurrency=1.
  • markdownlint-cli2 0.13: 0 errors.
  • inventory-completeness --check passes.
  • Commit is signed.

Merge notes

Ported from GenAI-Security-Project/GenAI-Data-Security-Initiative#64 by @ottosulin (that copy of crosswalk/ has since been removed)

🤖 Generated with Claude Code

https://claude.ai/code/session_01KJVKF6raJCNKBWjTkDSqR4

emmanuelgjr and others added 2 commits September 14, 2026 15:27
Ports the AISVS 1.0 mapping authored by Otto Sulin (AISVS co-lead) in
GenAI-Security-Project/GenAI-Data-Security-Initiative#64 (squash
d0c4ff5) into this repo. Only the hand-authored sources were carried
over; every generated file was regenerated here.

Ported:
  agentic-top10/Agentic_AISVS.md    83 rows, ASI01–ASI10
  dsgai-2026/DSGAI_AISVS.md        141 rows, DSGAI01–DSGAI21
  data/frameworks/owasp-aisvs.json  191 requirements

Not ported: llm-top10/LLM_AISVS.md (74 rows). It maps the LLM Top 10
2025; this repo targets the 2026 list, where eight entries changed
number and LLM08/LLM10 were re-scoped (MIGRATION.md). Re-keying it is
an SME call, not a mechanical port, so it is left for follow-up.

Adaptations, mapping rows unchanged:
- "LLM Top 10:" cross-references in both files renumbered 2025 → 2026
  with the MIGRATION.md map (91 ids). generate.js unions these into
  entries' crossrefs.llm_top10, so leaving them would have attached
  wrong LLM ids to ASI and DSGAI entries.
- Header block, H1, source-list links and footer aligned with sibling
  files; prose wrapped to 120 columns and blank lines added before
  lists for markdownlint; changelog row added.
- Registry: `kind: control` on all 191 items and an
  inventory_completeness block (status complete, 191/191), required by
  framework-schema.json and stats.js. Requirement ids, text and levels
  re-verified against OWASP/AISVS 1.0/en today: 191/191 identical.

Registration, mirroring 2338d1a: FRAMEWORK_FILES in generate.js;
framework-sources.json (checked 2026-09-14, current 1.0); AISVS in
inventory-completeness COMPLETE_BY_DEFINITION so `npm run inventory`
does not downgrade it; REPORT_FRAMEWORKS/FW_META in
compliance-report.js; README matrix, file tables and tree; webapp,
agentic landing, standards-crosswalk page and llms.txt framework
counts; package.json description; FRESHNESS_SLA; CHANGELOG.

Regenerated: data/entries (31), backlinks, docs bundles, stats.json
and README markers. Counts: 3,497 → 3,721 mappings, 74 → 76 mapping
files, 25 → 26 frameworks mapped and registered, 1,372 → 1,563
controls, freshness 2 → 3 current. validate.js: 0 errors, warning set
identical to main. Tests 50/50.

Co-authored-by: Otto Sulin <ottosulin@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KJVKF6raJCNKBWjTkDSqR4
Re-key Otto Sulin's LLM Top 10 x AISVS mapping from the 2025 list to the
2026 list per MIGRATION.md: sections renumbered and renamed, cross-
references renumbered, severities re-baselined. Add eight requirements
for the 2026 scope changes: LLM01 cross-modal (2.2.3, 2.2.4), LLM04
artifact provenance (3.1.1, 3.1.3), LLM05 fine-tuning subversion (6.1.2,
3.5.1), LLM08 hidden context (10.2.4), LLM10 generated code (9.3.7).

Merge main (#91, #92) and regenerate entries, backlinks, bundles and
stats: 3,803 mappings, 77 mapping files, 26 frameworks.

Co-authored-by: Otto Sulin <ottosulin@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KJVKF6raJCNKBWjTkDSqR4
@emmanuelgjr emmanuelgjr changed the title Add OWASP AISVS 1.0 mapping (25 → 26 frameworks) Add OWASP AISVS 1.0 mapping across all three source lists (25 → 26 frameworks) Sep 14, 2026
@emmanuelgjr
emmanuelgjr merged commit a23d816 into main Sep 14, 2026
6 checks passed
@emmanuelgjr
emmanuelgjr deleted the feat/aisvs-1.0-mapping branch September 14, 2026 19:49
emmanuelgjr added a commit that referenced this pull request Sep 14, 2026
Conflicts only in docs/backlinks.js and docs/frameworks-registry.js, both
generated: #94 regenerated them with a `// Generated:` date header that
this branch removes. Resolved by re-running scripts/generate.js on the
merged sources; the CI generated-output assertion passes locally.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr added a commit that referenced this pull request Sep 14, 2026
#37 landed as a squash, so this branch's copies of its commits resolve as identical content. Generated files re-run on the merged sources; a second generation is byte-identical.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr added a commit that referenced this pull request Sep 14, 2026
#37 landed as a squash, so this branch's copies of its commits resolve as identical content. Generated files re-run on the merged sources; a second generation is byte-identical.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr added a commit that referenced this pull request Sep 14, 2026
#37 landed as a squash, so this branch's copies of its commits resolve as identical content. Generated files re-run on the merged sources; a second generation is byte-identical.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr added a commit that referenced this pull request Sep 14, 2026
#37 landed as a squash, so this branch's copies of its commits resolve as identical content. Generated files re-run on the merged sources; a second generation is byte-identical.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr added a commit that referenced this pull request Sep 15, 2026
One hand-resolved conflict, docs/index.html: #94 changed the About
paragraph to "26 industry frameworks with 3,803 individual control
mappings" while this branch had changed the same sentence to 3,475.
Kept #94's sentence and set the count to the merged data's own total,
3,781 (= 3,803 minus the 22 junk rows this branch removes, all on
DSGAI21; 0 rows added). Generated files re-run on the merged sources;
a second generation is byte-identical. validate 0 errors; stats current.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr added a commit that referenced this pull request Sep 15, 2026
…uracy

Generated files re-run on the merged sources; a second generation is byte-identical.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr added a commit that referenced this pull request Sep 15, 2026
Generated files re-run on the merged sources; a second generation is byte-identical.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr added a commit that referenced this pull request Sep 15, 2026
No conflicts. The one intermittent local test failure seen during verification is the pre-existing data/entries read/write race (Unexpected end of JSON input), fixed by #87; captured and confirmed, not caused by this merge.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr added a commit that referenced this pull request Sep 15, 2026
No conflicts. The one intermittent local test failure seen during verification is the pre-existing data/entries read/write race (Unexpected end of JSON input), fixed by #87; captured and confirmed, not caused by this merge.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant