Skip to the content.

Policy Commitment Attestation — Specification

Version: 0.1 (draft) Status: Pre-AAIF project proposal Date: 2026-04-24

This is a working draft. Section placeholders marked (TBD) will be populated in subsequent revisions. Normative language (MUST / SHOULD / MAY) is used per RFC 2119.

1. Introduction

1.1 Purpose

Policy Commitment Attestation (PCA) specifies a credential format for verifiable commitments from AI agents to governance statements. A PCA credential binds a specific agent identity to a specific statement version, at a declared maturity tier, with linked evidence artifacts, under a signed envelope.

1.2 Scope

PCA defines:

PCA does not define:

1.3 Relationship to existing standards

PCA is a composition, not a greenfield design. See README for the stack. Implementers familiar with W3C VC, in-toto attestations, OSCAL, and MCP Auth will find PCA natural.

2. Terminology

3. Data model

3.1 Credential type

PCA defines a W3C Verifiable Credentials credential type PolicyCommitmentCredential. All PCA credentials MUST include this type in the type array.

{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://policycommitment.dictiva.com/contexts/policy-commitment/v1"
  ],
  "type": ["VerifiableCredential", "PolicyCommitmentCredential"],
  "issuer": "did:web:example.com",
  "validFrom": "2026-04-24T00:00:00Z",
  "validUntil": "2026-07-24T00:00:00Z",
  "credentialSubject": {
    "id": "did:web:example.com:agents:code-reviewer",
    "commitment": { ... }
  },
  "credentialStatus": { ... },
  "proof": { ... }
}

3.2 Commitment payload (TBD: finalize JSON-LD context in v0.1.1)

{
  "statementRef": {
    "uri": "https://example.com/statements/stmt-001",
    "version": 3,
    "hash": "sha256:abc..."
  },
  "commitmentTier": "T4",
  "targetTier": "T4",
  "scope": {
    "tenants": ["tenant-a"],
    "entityTypes": ["process", "assembly"],
    "actionClasses": ["read", "propose_edit"],
    "refusalRules": [
      { "type": "https://www.w3.org/ns/odrl/2/prohibition", "action": "deploy", "constraint": { "env": "production" } }
    ]
  },
  "evidence": [
    {
      "type": "https://in-toto.io/Statement/v1",
      "predicateType": "https://policycommitment.dictiva.com/predicates/policy-commitment-evidence/v1",
      "subject": [{"uri": "memory/feedback_x.md", "digest": {"sha256": "abc..."}}],
      "predicate": {"evidenceKind": "memory_file", "description": "..."}
    }
  ],
  "chainOfAuthority": {
    "assemblyId": "ass-001",
    "issuedBy": "did:web:example.com:users:founder-a",
    "approvedBy": ["did:web:example.com:users:compliance-officer"]
  },
  "revalidationInterval": "P90D"
}

3.3 Canonical statement hash

The statementRef.hash field MUST be computed by:

  1. Canonicalizing the referenced statement’s content via JCS (RFC 8785).
  2. Computing SHA-256 of the canonical form.
  3. Encoding as sha256:<hex>.

Statement authors MUST publish the canonical form at a resolvable URI so verifiers can recompute the hash.

3.4 Proof

PCA credentials MUST carry a proof per W3C Data Integrity. The default cryptosuite is eddsa-rdfc-2022 (Ed25519). Implementations MAY support additional cryptosuites.

3.5 Revocation

Revocation MUST use W3C VC Status List 2021. The credentialStatus field references a status list URI + index.

4. Commitment Maturity Ladder

See README §The Commitment Maturity Ladder for the tier table.

Per-tier evidence floors (normative):

Tiers are cumulative. A credential claiming tier N MUST also satisfy the floors of all tiers < N.

5. Evidence types

Each evidence entry in the commitment.evidence array MUST carry a recognized evidenceKind. The registry below is extensible: implementations MAY introduce new kinds by registering them at https://policycommitment.dictiva.com/registry/evidence-kinds/ (or, post-AAIF adoption, the corresponding aaif.io URL). Unrecognized kinds MUST NOT cause verification to fail; verifiers SHOULD treat them as opaque carriers whose validity is determined by the associated in-toto Statement + content digest.

5.1 Canonical format

Every evidence entry MUST be expressible as an in-toto Statement v1 with:

A conformant credential’s inline evidence payload MAY be a shorthand — the registry row’s Reference format — when the full in-toto Statement is materialized on request by the issuer.

5.2 Registry (v0.1)

evidenceKind Tier floors Description Reference format
memory_file T3+ Agent-persistent memory artifact (markdown / YAML / JSON) Path + SHA-256
agents_md T3+ Section of an AGENTS.md file Path + section anchor + SHA-256
system_prompt_fragment T3+ Identifiable system-prompt injection SHA-256 + length
adr T4+ Architecture Decision Record ADR id + canonical URI
skill T4+ Agent skill / capability definition Skill name + path + SHA-256
pr_commit T4+ Merged pull-request commit carrying the commitment artifact Repo URI + commit SHA + branch
bounded_context T5+ Declarative scope JSON fragment (DDD-style bounded context) SHA-256 of canonical form
refusal_rule T5+ ODRL prohibition or obligation expression Inline JSON-LD or URI
tool_allowlist T6+ MCP / tool allowlist bound to the agent Allowlist SHA-256 + issuer
hook T6+ Automation hook config (pre/post tool use, CI guard, webhook) Config file path + selector + SHA-256
middleware T6+ HTTP / RPC middleware reference Module id + routing rule
preflight T6+ Preflight check reference bound to the runtime Check id + engine + version
policy_assembly_ref T1+ Source policy assembly (provides chain-of-authority) Assembly id + issuer URI
semantic_similarity_report T2+ Cosine / semantic similarity score against statement body Score + evaluator + transcript digest

Tier floors indicate the minimum tier at which a given evidence kind is valid. memory_file can satisfy the T3 floor but also appears in T4, T5, T6 credentials. tool_allowlist cannot appear at T5 or below.

5.3 Evidence resolution

Verifiers MUST be able to recompute any SHA-256 digest referenced by an evidence entry by fetching the artifact at the declared reference URI. Evidence whose digest no longer matches — for example, because the underlying file was edited after the credential was issued — invalidates the credential at the reported tier. Issuers SHOULD revalidate periodically (see §3.5 Revalidation) and emit a new credential when evidence integrity drifts.

6. Conformance

A PCA implementation MAY claim one or more of the following conformance levels.

6.1 Level 1 — Minimal

A Minimal implementation:

6.2 Level 2 — OSCAL-exporting

An OSCAL-exporting implementation additionally:

6.3 Level 3 — SCITT-publishing

A SCITT-publishing implementation additionally:

Implementations MAY claim higher levels only when they also satisfy all lower levels.

7. Interop profiles

7.1 OSCAL export

For NIST OSCAL (FedRAMP / NIST-aligned reporting), each PolicyCommitmentCredential maps to one OSCAL observation under an assessment-results document. The mapping is as follows:

PCA field OSCAL assessment-results field
credentialSubject.id (agent DID) observation.subject.subject-uuid
credential.issuer observation.origin.actor-uuid
commitment.statementRef.uri observation.collected.target (control-id or statement-id reference)
commitment.commitmentTier observation.props[{name=pca-tier}]
commitment.evidence[] observation.relevant-evidence[]
credential.proof observation.origin.related-tasks[] (as attestation reference)
validFrom / validUntil observation.collected / observation.expires
credentialStatus observation.props[{name=pca-revocation-status-list}]

An OSCAL-exporting implementation MUST produce assessment-results that validate against the NIST OSCAL JSON schema at the profile level declared by the implementation.

7.2 SCITT publishing

SCITT publication per IETF SCRAPI wraps the issued PCA credential into a signed SCITT Statement submitted to a Transparency Service. The Transparency Service’s receipt MAY be retained on the PCA credential as an additional proof entry with type = "TransparencyReceipt" and receipt = "<COSE_Sign1 bytes, base64url>".

When SCITT Architecture reaches publication as an RFC, this section will be updated with normative references and the receipt schema.

7.3 AGENTS.md evidence profile

When evidenceKind = agents_md, the reference format is:

This profile aligns with the Linux Foundation AAIF-hosted AGENTS.md convention.

7.4 MCP Authorization profile

Agents authenticated via the MCP Authorization Specification (OAuth 2.1 + PKCE) MAY use the identity-token claim set to populate the credential’s credentialSubject.id with the authenticated DID. In this profile, the issuer MUST verify the MCP identity token before issuance.

8. Security considerations

8.1 Threat model

A PCA credential asserts a commitment; it does not guarantee behavior. Verifiers MUST distinguish between:

8.2 Key management

8.3 Replay + freshness

8.4 Evidence tampering

8.5 Scope escalation

8.6 Issuer impersonation

8.7 Correlation + tracking

9. Privacy considerations

9.1 Agent subjects

PCA’s primary subject is a non-human agent identity. Recording that such an identity has committed to a specific policy statement does not implicate personal data.

9.2 Operator linkage

The chainOfAuthority.issuedBy and approvedBy fields carry DIDs, which may resolve to identifiers for human operators. Implementations MUST evaluate their jurisdiction’s privacy requirements (e.g., GDPR, CCPA) before:

Where necessary, operator DIDs MAY be pseudonymous (e.g., did:key: with no off-chain binding to a personal name) while still providing non-repudiation within a tenant.

9.3 Evidence artifact content

Evidence artifacts (e.g., memory_file content) MAY carry tenant-confidential material. References in PCA credentials MUST therefore be:

9.4 Revocation privacy

VC Status List 2021 encodes revocation as bit positions in a single published list, which minimizes the metadata leaked per revocation event. Implementations SHOULD prefer Status List 2021 over per-credential revocation endpoints.

10. IANA considerations

10.1 URI registrations

This specification requests registration of:

On Linux Foundation AAIF adoption, these URIs will migrate to aaif.io/contexts/policy-commitment/v1#PolicyCommitmentCredential (etc.), with the original URIs retaining valid historical references.

10.2 Media types

No new media types are registered. PCA credentials are served as existing application/ld+json (JSON-LD), application/vc+ld+json (VC), or application/oscal-ap+json (OSCAL).

11. References

Normative

Informative


Appendix A — Change log

See CHANGELOG.md.