GateFrame DPR Specification
v0.1 · Apache 2.0

Decision Provenance Record
Specification v0.1

StatusProduction
LicenseApache 2.0 (spec only)
AuthorGateFrame Inc.
Priority DateApril 22, 2026
Reference Impl.Live API

Abstract

This specification defines two interoperable data structures for cryptographically verifiable AI decision evidence: the Decision Provenance Record (DPR v0.1) — a signed, tamper-evident record of a single AI-driven consequential decision — and the EvidenceChain v1 — a hash-linked, append-only sequence of agent action records.

These structures satisfy the evidentiary requirements of ECOA / Regulation B §1002.9, US Treasury AI Risk Management Framework (March 2026), DORA Article 8(1), EU AI Act Article 12, Colorado AI Act SB 24-205 §6, and DIFC Regulation 10.

For counsel and examiners: A GateFrame DPR is not a log file. It is a signed record — produced at the exact moment of decision, cryptographically sealed, tamper-evident by construction. Any modification to any field after signing is cryptographically detectable. Verification is independent: the examiner calls GET /dpr/{id}/verify without trusting GateFrame's servers.

Priority Date
April 22, 2026
DPR v0.1 · EvidenceChain v1 · GateFrame Inc. · Apache 2.0
A2A Extension Proposal drafted · MCP SEP drafted

1. Cryptographic Primitives

Algorithms

All signatures use Ed25519 (RFC 8032). All hashes use SHA-256 (FIPS 180-4). All hash chains use binary Merkle tree construction. All binary encodings use lowercase hexadecimal.

Canonical Serialization

Before signing or hashing, a record MUST be serialized as UTF-8 encoded JSON with keys sorted lexicographically, no whitespace, and these fields excluded: signature, record_hash, merkle_position.

canonical = json.dumps(
    {k: v for k, v in record.items()
     if k not in ("signature", "record_hash", "merkle_position")},
    sort_keys=True,
    separators=(",", ":"),
    default=str
).encode("utf-8")

Record Hash

record_hash = SHA-256(canonical_bytes).hex()  # 64-char hex string

Signature

signature = Ed25519_Sign(private_key, bytes.fromhex(record_hash)).hex()  # 128-char hex

Chain Link

First record: prev_hash = null. Subsequent records: prev_hash = record_hash of previous record.

2. Decision Provenance Record (DPR v0.1)

Schema

FieldTypeDescription
decision_idstring (UUID v4)Unique identifier for this decision record
dpr_version"0.1"Specification version. Embedded in every record.
created_atISO 8601 UTCTimestamp at moment of decision, not post-hoc
decisiondeny | approve | approve_with_conditions | referThe AI decision
decision_confidencefloat [0,1]Model confidence score
model_idstringIdentifier of the AI model that produced the decision
model_versionstringModel version at time of decision
algorithm_typestringAlgorithm family (e.g. GradientBoostedTree)
authorized_bystringRole or identifier who authorized the model deployment
authorized_atISO 8601 UTCWhen the model deployment was authorized
policy_versionstringVersion of the reason code library applied
model_operator_idstringIdentifier of the model operator (may differ from lender)
executing_institution_idstringInstitution that issued the adverse action
delegation_presentbooleanTrue when model operator ≠ executing institution
adverse_action_reasonsarrayRanked Reg B reason codes (see §2.2)
application_idstringApplicant's application reference
input_hashSHA-256 hexHash of the input SHAP values and applicant context
reg_b_compliantbooleanWhether reason codes satisfy §1002.9(b)(2)
record_hashSHA-256 hex (64 chars)Hash of the canonical DPR content
signatureEd25519 hex (128 chars)Signature over record_hash bytes

Adverse Action Reason Object

FieldTypeDescription
rankinteger 1–4Ranking by SHAP weight (1 = highest adverse impact)
reg_b_codestringOfficial Reg B Appendix C reason code number
gateframe_code_idstring (GF-XXX)GateFrame internal code identifier
consumer_textstringRequired consumer-facing reason text (§1002.9(b)(2))
examiner_descriptionstringTechnical description for examiner review
reg_b_citationstringFull regulatory citation
shap_featurestringSHAP feature name that mapped to this reason code
shap_weightfloatSHAP feature importance weight

3. EvidenceChain v1

An EvidenceChain is an ordered, hash-linked sequence of AgentAction records. Each record includes the SHA-256 hash of the previous record, creating a chain where tampering with any record invalidates every subsequent record.

Chain Verification

For each record at index i, a verifier MUST assert:

  1. Hash integrity: SHA-256(canonical(record)) == record.record_hash
  2. Chain link: if i > 0, then record.prev_hash == records[i-1].record_hash
  3. Signature: Ed25519_Verify(public_key, record.record_hash, record.signature) == True

The chain is valid if and only if all three assertions pass for every record.

4. Regulatory Mapping

FrameworkKey DPR FieldsRequirement Satisfied
ECOA / Reg Badverse_action_reasons, authorized_by, delegation_present§1002.9(b)(2) specific reason codes, authority chain
US Treasury AI RMFrecord_hash, signature, model_idControl 4.2 — tamper-evident AI decision records
DORA Art. 8(1)prev_hash, chain verification, authorized_byICT risk documentation, independent verifiability
EU AI Act Art. 12dpr_version, created_at, model_idHigh-risk AI system record-keeping
Colorado AI Act §6adverse_action_reasons, decision, reg_b_compliantAlgorithmic decision disclosure
DIFC Reg 10Full DPR + chain verification endpointAI governance documentation for DFSA examination

5. Verification Protocol

Online Verification (Recommended for Examiners)

Two endpoints available. Use the DPR registry for individual decisions; use the chain endpoint for ExaminerPack bundles.

GET https://gateframe-api.netlify.app/dpr/{decision_id}/verify

Response:
{
  "valid": true,
  "hash_verified": true,
  "signature_present": true,
  "decision_id": "...",
  "record_hash": "...",
  "regulatory_basis": ["US Treasury AI RMF Control 4.2", "Reg B §1002.9", "DORA Art. 8(1)"]
}

Chain verification (ExaminerPack)

POST https://gateframe-api.netlify.app/agentseal/chain/verify · /sign/batch
X-API-Key: gf-demo-key-2026
Content-Type: application/json

{ "chain_export": <ExaminerPack JSON from export.py or /evidence-pack> }

Response:
{
  "valid": true,
  "action_count": 3,
  "verified_at": "2026-04-24T10:00:00Z",
  "broken_at": null,
  "signer_key_fingerprint": "a3f9c2e1b4d80012",
  "chain_hash_root": "e3b0c44298fc1c14...",
  "verification_log": [
    {"seq": 0, "hash_valid": true, "sig_valid": true, "link_valid": true},
    {"seq": 1, "hash_valid": true, "sig_valid": true, "link_valid": true},
    {"seq": 2, "hash_valid": true, "sig_valid": true, "link_valid": true}
  ]
}

Offline Verification (No GateFrame Server Trust Required)

Obtain the public key from GET /agentseal/health. Then:

1. Reconstruct canonical JSON (sort keys, no whitespace, exclude signature/record_hash)
2. derived_hash = SHA-256(canonical_bytes).hex()
3. Assert derived_hash == record.record_hash
4. Assert Ed25519_Verify(public_key, bytes.fromhex(record_hash), bytes.fromhex(signature))

Trust model: GateFrame is the notary, not the author. The institution's General Counsel authors the reason code library. GateFrame signs the application of that library to a specific decision. Liability for the reason text remains with counsel — GateFrame provides the signing infrastructure and independent verifiability.

6. API Authentication

Authentication Scheme

All API endpoints (except /, /health, /agentseal/health) require an X-API-Key header.

curl -H "X-API-Key: gf-demo-key-2026" \
     https://gateframe-api.netlify.app/validate/
Key TypeAccessRate Limit
Demo key: gf-demo-key-2026All endpoints, evaluation only100 req/day per IP
Pilot key (per institution)Full access, audit loggingNegotiated per pilot SLA

Pilot keys: contact shankar@gateframe.io. Keys are institution-scoped and logged for audit purposes.

7. Security & Data Handling

Data Processing

Uptime & SLA (Pilot)

Note on SQLite in Lambda: The current DPR registry uses SQLite in /tmp — ephemeral storage that resets on cold starts. For production pilots, DPR persistence will be migrated to a managed PostgreSQL instance. This migration is scheduled for Month 2 of the funded sprint.

8. Reference Implementation

ResourceURL
Live APIgateframe-api.netlify.app/docs
SDKpip install agentseal
Tamper proof demogateframe-demo.netlify.app/tamper
Evidence pack previewgateframe-demo.netlify.app/evidence-pack
Verification portalgateframe-verification.netlify.app
Chain verify endpointPOST https://gateframe-api.netlify.app/agentseal/chain/verify · /sign/batch — accepts full ExaminerPack JSON, returns per-record verification log
Spec (this page)dpr-spec.netlify.app

9. Conformance

An implementation is conformant with this specification if:

  1. Records produced by the implementation pass the verification protocol in §5
  2. The canonical serialization in §1 is followed exactly
  3. The dpr_version field is present and set to "0.1" in every record
  4. Every record includes record_hash (SHA-256, 64-char hex) and signature (Ed25519, 128-char hex)

GateFrame Inc. · shankar@gateframe.io · gateframe.io
Apache 2.0 License — specification only. Reference implementation is proprietary.
Priority date: April 22, 2026 · Version: DPR v0.1 · EvidenceChain v1