diff --git a/architecture.html b/architecture.html
index 78fc85a..4c15dbc 100644
--- a/architecture.html
+++ b/architecture.html
@@ -102,7 +102,8 @@
Architecture
Scoring
Schema
- GitHub
+ Guide
+ GitHub
@@ -371,7 +372,7 @@
Output: how AVE travels
Build your own implementation
-
The schema, records, rules, and fixtures are all open under Apache 2.0. Honor the declares-vs-assigns contract and the SARIF convention, and your tool’s findings will interoperate with every other AVE implementation. See the schema reference and the repository .
+
The schema, records, rules, and fixtures are all open under Apache 2.0. Honor the declares-vs-assigns contract and the SARIF convention, and your tool’s findings will interoperate with every other AVE implementation. See the schema reference and the repository .
@@ -391,7 +392,8 @@ Output: how AVE travels
Architecture
Scoring
Schema v1.0.0
- GitHub repo
+ Implementer Guide
+ GitHub repo
Implementations
diff --git a/crosswalks.html b/crosswalks.html
index 0ebc90e..37e4a65 100644
--- a/crosswalks.html
+++ b/crosswalks.html
@@ -102,7 +102,8 @@
Architecture
Scoring
Schema
-
GitHub
+
Guide
+
GitHub
@@ -151,7 +152,8 @@ AVE → OWASP · MITRE ATLAS
Architecture
Scoring
Schema v1.0.0
- GitHub repo
+ Implementer Guide
+ GitHub repo
Implementations
diff --git a/implementer-guide.html b/implementer-guide.html
index e9deb29..8b142e2 100644
--- a/implementer-guide.html
+++ b/implementer-guide.html
@@ -100,6 +100,7 @@
Architecture
Scoring
Schema
+
Guide
GitHub
@@ -133,7 +134,10 @@ Pattern 1: Runtime API lookup
indicators_of_compromise, remediation,
owasp_mcp, mitre_atlas, aivss.
- import httpx
+
+
+
+ import httpx
def enrich_finding(ave_id: str) -> dict:
resp = httpx.get(f"https://api.aveproject.org/records/{ave_id}", timeout=5)
@@ -146,7 +150,7 @@
Pattern 1: Runtime API lookup
"severity": "HIGH",
# optional: enrich at scan time
"ave_record": enrich_finding("AVE-2026-00002"),
-}
+}
When to use: developer machines, cloud CI/CD
pipelines, SaaS tools with outbound internet.
@@ -172,7 +176,10 @@
Pattern 2: Bundled offline record set
point when one is cut, not the only one.
Format: JSON array of all active records (59 as of schema v1.1.0).
- import json
+
+
+
+ import json
from pathlib import Path
# Load at startup
@@ -182,7 +189,7 @@
Pattern 2: Bundled offline record set
}
def lookup_ave(ave_id: str) -> dict | None:
- return AVE_RECORDS.get(ave_id)
+ return AVE_RECORDS.get(ave_id)
Sync strategy: track ave-records-latest.json
if you always want current data, or pin to a specific
@@ -203,7 +210,10 @@
Pattern 3: ID-only emission
Example SARIF output (the correct way to carry
ave_id in SARIF):
- {
+
+
+
+ {
"runs": [{
"results": [{
"ruleId": "your-rule-id",
@@ -214,7 +224,7 @@
Pattern 3: ID-only emission
}
}]
}]
-}
+}
Full SARIF convention: docs/specs/ave-in-sarif.md
When to use: any environment. Especially useful when
@@ -241,11 +251,14 @@
The mapping step
Minimum viable integration
The smallest possible integration is adding one field:
- finding = {
+
+
+
+ finding = {
"rule_id": "prompt-injection/tool-description",
"severity": "HIGH",
"ave_id": "AVE-2026-00002", # add this
-}
+}
That is it. The ID is stable and permanent. No other changes required.
Your users get cross-tool deduplication and links to the full behavioral
@@ -274,6 +287,7 @@
Contact
Architecture
Scoring
Schema v1.1.0
+ Implementer Guide
GitHub repo
@@ -290,5 +304,19 @@
Contact
+
+