Draft WG Issue: Framework-mapping registry and governance-report projection
Suggested title: Governance: framework-mapping registry + generate_governance_report projection (AIGP / EU AI Act / GDPR / NIST AI RMF)
Suggested labels: governance, rfc-track, discussion
Background
A question raised in conversations with IAPP that doesn't have a clean answer in the spec today: how does a privacy/compliance professional verify an AdCP campaign against the frameworks they already use (AIGP, EU AI Act, GDPR, NIST AI RMF, ISO 42001, MRC, TAG, …)?
The audit trail exists today via get_plan_audit_logs (campaign governance, 3.0 experimental). What's missing is the projection from raw audit entries into per-requirement evidence checklists that an external compliance reviewer can act on.
This issue proposes:
- A new sibling registry —
static/registry/frameworks/ — for framework-mapping specs
- An SDK helper
generateGovernanceReport() that joins audit logs to a framework spec
- A gap analysis of where the protocol does not yet carry the data a full AIGP/NIST projection would require
This is intentionally not an RFC. The mechanical pieces (framework registry, projection helper) are straightforward. The architectural pieces (agent self-declaration, consent context, lawful basis, incident hooks) need WG discussion before anyone commits to a spec.
What we have today
| Framework requirement |
AdCP surface |
| Audit logging (AI Act Art. 12, GDPR Art. 30) |
get_plan_audit_logs.entries[], plan_hash (JCS-canonicalized) |
| Human oversight (AI Act Art. 14, GDPR Art. 22) |
human_review_required, escalations[], drift_metrics |
| Special-category data (GDPR Art. 9, AI Act Art. 10) |
10 restricted_attributes + signal declarations |
| Annex III high-risk verticals |
eu_ai_act_annex_iii.json registry policy + 13 sibling regulations |
| Data subject contestation (Art. 13/22) |
brand.data_subject_contestation |
| Oversight-erosion detection |
drift_metrics (escalation rate, auto-approval rate, human override rate) |
This is enough surface to support EU AI Act Annex III and GDPR Articles 9, 12, 13, 14, 22, 30 projections today.
Proposed: framework-mapping registry
static/registry/
policies/ (existing — runtime enforcement)
policy-categories/
attributes/
frameworks/ (new — post-hoc reporting checklists)
eu_ai_act.json
gdpr.json
aigp.json (IAPP partnership candidate)
nist_ai_rmf.json
iso_42001.json
colorado_ai_act.json
mrc.json
tag.json
dbcfm.json
Tier 1 frameworks (initial registry): EU AI Act, GDPR, AIGP, NIST AI RMF, ISO/IEC 42001, Colorado AI Act, MRC, TAG, DBCFM.
Tier 2 (defer to v2): CCPA/CPRA + state privacy bundle, WFA Global Media Charter, OECD AI Principles, UK GDPR, LGPD.
Each framework file declares versioned requirements:
Same publication bar as policies/ (versioned, sourced, exemplars required, CI-checked).
Bidirectional linking — framework_references[] on PolicyEntry
Today policy entries reference frameworks only in prose (eu_ai_act_annex_iii.json mentions Art. 10/12/13/14/22 in the policy body; us_fha_targeting.json cites 42 U.S.C. 3604(c) the same way). The PolicyEntry schema has no structured field for this.
If we add frameworks/ without back-references, the mapping drifts. Proposed addition to PolicyEntry:
CI gate: every framework_references entry resolves against an actual frameworks/*.json requirement; every framework requirement's evidence_sources resolves against an actual policies/*.json. The two registries cross-validate.
Side benefit: enables "what policies satisfy AIGP §4.2.1?" queries without grepping prose.
Proposed: generate_governance_report (SDK helper, not a protocol task)
Lives in @adcp/sdk and adcp Python. Takes (auditLog, frameworkId), returns:
Why not a protocol task: the buyer already has the audit log, the framework spec is a static published artifact, and the join is local. Making it a task would force every governance agent to ship projection logic and re-deploy when frameworks version. SDK-side projection lets framework registry updates flow without agent redeploys.
Optional: AAO hosts the same code behind adcontextprotocol.org/governance-report for buyers who don't import the SDK.
Gap analysis — what we'd need to add for full AIGP/NIST coverage
The gaps below are blockers for AIGP §4 and NIST AI RMF Govern/Map/Measure/Manage projections, not for EU AI Act / GDPR.
Easy fixes (field additions)
| Gap |
Fix |
Framework relevance |
| Lawful basis declaration |
Add lawful_basis enum to sync_plans |
GDPR Art. 6, AIGP §3 |
| Consent context pass-through |
Add consent_context block (TCF / GPP / GPC) to plan + check_governance |
GDPR, ePrivacy, AIGP §3 |
| Cross-border transfer declaration |
Add data_transfers[] to plan or agent declaration |
GDPR Ch. V, AIGP §4 |
Architectural (WG discussion needed)
| Gap |
Why it's architectural |
| Governance-agent self-declaration — model identity, training data, red-team artifacts, accountable contact |
AIGP §4 and NIST AI RMF Govern/Map require the AI system to declare what it is. adagents.json says who an agent represents, not what it is. Same gap David Porzelt's DBCFM analysis hit from a different angle (German law: who's accountable). Probably needs a new agent.json or extension to adagents.json. |
| Incident / breach notification hook |
No protocol event for "something went wrong, notify these parties." Required by GDPR Art. 33, NIST Manage. Would need a new event type and notification flow. |
| Bias / fairness testing artifacts |
NIST AI RMF wants pointers to bias-testing results. Currently nothing. Probably stays out-of-protocol-scope but needs a declarative pointer field. |
| Lifecycle decommissioning |
"Agent retired, what happens to plans?" — not in spec. |
Two-track proposal
Track 1 — ship now (3.1 / 3.2):
framework_references[] field on PolicyEntry + CI cross-validator
static/registry/frameworks/: EU AI Act, GDPR, MRC, TAG, DBCFM (we already have most of the source material)
generateGovernanceReport() SDK helper in @adcp/sdk and adcp Python
- Optional hosted renderer at AAO
Track 2 — spec work (3.2 / 3.3):
Asks for WG
- Concept ack: is
frameworks/ the right home, or should this fold into policies/? (My read: separate — different lifecycle, many-to-many to policies, includes out-of-scope items.)
- Agent self-declaration: appetite for adding this as a 3.2 item? Where does it live — extension to
adagents.json, new agent.json, or a new task?
- External partnerships: AIGP is IAPP's IP — joint authorship is an AAO-side decision, not WG, but flagging here so the WG sees the path. MRC and TAG mappings are similar (their checklists, our projection).
Related
Draft WG Issue: Framework-mapping registry and governance-report projection
Suggested title:
Governance: framework-mapping registry + generate_governance_report projection (AIGP / EU AI Act / GDPR / NIST AI RMF)Suggested labels:
governance,rfc-track,discussionBackground
A question raised in conversations with IAPP that doesn't have a clean answer in the spec today: how does a privacy/compliance professional verify an AdCP campaign against the frameworks they already use (AIGP, EU AI Act, GDPR, NIST AI RMF, ISO 42001, MRC, TAG, …)?
The audit trail exists today via
get_plan_audit_logs(campaign governance, 3.0 experimental). What's missing is the projection from raw audit entries into per-requirement evidence checklists that an external compliance reviewer can act on.This issue proposes:
static/registry/frameworks/— for framework-mapping specsgenerateGovernanceReport()that joins audit logs to a framework specThis is intentionally not an RFC. The mechanical pieces (framework registry, projection helper) are straightforward. The architectural pieces (agent self-declaration, consent context, lawful basis, incident hooks) need WG discussion before anyone commits to a spec.
What we have today
get_plan_audit_logs.entries[],plan_hash(JCS-canonicalized)human_review_required,escalations[],drift_metricsrestricted_attributes+ signal declarationseu_ai_act_annex_iii.jsonregistry policy + 13 sibling regulationsbrand.data_subject_contestationdrift_metrics(escalation rate, auto-approval rate, human override rate)This is enough surface to support EU AI Act Annex III and GDPR Articles 9, 12, 13, 14, 22, 30 projections today.
Proposed: framework-mapping registry
Tier 1 frameworks (initial registry): EU AI Act, GDPR, AIGP, NIST AI RMF, ISO/IEC 42001, Colorado AI Act, MRC, TAG, DBCFM.
Tier 2 (defer to v2): CCPA/CPRA + state privacy bundle, WFA Global Media Charter, OECD AI Principles, UK GDPR, LGPD.
Each framework file declares versioned requirements:
{ "framework_id": "eu_ai_act", "version": "1.0.0", "name": "EU AI Act (Regulation (EU) 2024/1689)", "requirements": [ { "requirement_id": "art_14_human_oversight", "framework_section": "Art. 14", "requirement_text": "...", "protocol_scope": "in", "evidence_sources": [ {"kind": "policy_evaluated", "policy_id": "eu_ai_act_annex_iii"}, {"kind": "audit_entry", "query": {"type": "check", "mode": "advisory_with_human_review"}} ], "classifier": {"satisfied_when": "evidence.length > 0 AND drift_metrics.escalation_rate >= thresholds.escalation_rate_min"} } ] }Same publication bar as
policies/(versioned, sourced, exemplars required, CI-checked).Bidirectional linking —
framework_references[]onPolicyEntryToday policy entries reference frameworks only in prose (
eu_ai_act_annex_iii.jsonmentions Art. 10/12/13/14/22 in thepolicybody;us_fha_targeting.jsoncites42 U.S.C. 3604(c)the same way). ThePolicyEntryschema has no structured field for this.If we add
frameworks/without back-references, the mapping drifts. Proposed addition toPolicyEntry:{ "policy_id": "eu_ai_act_annex_iii", // ... "framework_references": [ {"framework_id": "eu_ai_act", "requirement_ids": ["art_10_data_governance", "art_12_logging", "art_14_human_oversight"]}, {"framework_id": "gdpr", "requirement_ids": ["art_9_special_category", "art_22_automated_decisions"]} ] }CI gate: every
framework_referencesentry resolves against an actualframeworks/*.jsonrequirement; every framework requirement'sevidence_sourcesresolves against an actualpolicies/*.json. The two registries cross-validate.Side benefit: enables "what policies satisfy AIGP §4.2.1?" queries without grepping prose.
Proposed: generate_governance_report (SDK helper, not a protocol task)
Lives in
@adcp/sdkandadcpPython. Takes(auditLog, frameworkId), returns:{ "framework": "eu_ai_act", "framework_version": "1.0.0", "plan_id": "...", "plan_hash": "...", "results": [ { "requirement_id": "art_14_human_oversight", "status": "satisfied" | "partial" | "gap" | "not_applicable" | "out_of_protocol_scope", "evidence": [...], "narrative": "..." } ] }Why not a protocol task: the buyer already has the audit log, the framework spec is a static published artifact, and the join is local. Making it a task would force every governance agent to ship projection logic and re-deploy when frameworks version. SDK-side projection lets framework registry updates flow without agent redeploys.
Optional: AAO hosts the same code behind
adcontextprotocol.org/governance-reportfor buyers who don't import the SDK.Gap analysis — what we'd need to add for full AIGP/NIST coverage
The gaps below are blockers for AIGP §4 and NIST AI RMF Govern/Map/Measure/Manage projections, not for EU AI Act / GDPR.
Easy fixes (field additions)
lawful_basisenum tosync_plansconsent_contextblock (TCF / GPP / GPC) to plan + check_governancedata_transfers[]to plan or agent declarationArchitectural (WG discussion needed)
adagents.jsonsays who an agent represents, not what it is. Same gap David Porzelt's DBCFM analysis hit from a different angle (German law: who's accountable). Probably needs a newagent.jsonor extension toadagents.json.Two-track proposal
Track 1 — ship now (3.1 / 3.2):
framework_references[]field onPolicyEntry+ CI cross-validatorstatic/registry/frameworks/: EU AI Act, GDPR, MRC, TAG, DBCFM (we already have most of the source material)generateGovernanceReport()SDK helper in@adcp/sdkandadcpPythonTrack 2 — spec work (3.2 / 3.3):
lawful_basis,consent_context,data_transfers[]aigp.json,nist_ai_rmf.json,iso_42001.json,colorado_ai_act.jsonframework entries (AIGP partnership candidate)Asks for WG
frameworks/the right home, or should this fold intopolicies/? (My read: separate — different lifecycle, many-to-many to policies, includes out-of-scope items.)adagents.json, newagent.json, or a new task?Related
static/registry/policies/eu_ai_act_annex_iii.json— already covers most of the runtime enforcement sideskills/adcp-governance/SKILL.md— current campaign-governance task surface