Skip to content

EU AI Act — what Kyvern's evidence supports

Source: Regulation (EU) 2024/1689, Official Journal of the European Union, 12 July 2024

Article 12 — Record-keeping

Article 12(2) — General logging requirements for high-risk AI systems

Article 12(2) requires that high-risk AI systems automatically generate logs sufficient to enable three specific accountability purposes:

  • (a) ensuring the system can be used for the purpose of identifying risks at national level under Article 79(1)
  • (b) ensuring post-market monitoring under Article 72
  • (c) ensuring the monitoring under Article 26(5) (deployer operational obligations)

What Kyvern records for Article 12(2):

Requirement Kyvern mechanism Report check
Art.12(2)(a) — Risk identification (Art.79(1)) Each decision records threat_level, roe_reference and guardrails_triggered risk_fields
Art.12(2)(b) — Post-market monitoring (Art.72) Each decision records policy_version_id (SHA-256 of the policy file it was made under) policy_recorded
Art.12(2)(c) — Operation monitoring (Art.26(5)) Each decision records action, timestamp_iso, requires_operator_approval and guardrail_reasoning operation_fields
Tamper-evident records (Art.12(1)) Ed25519 signature + SHA-256 hash link per entry; kyvern-verify detects any change, and RFC 3161 anchors (kyvern-anchor) detect a rewrite even by the key holder integrity
Timestamps ISO 8601 in UTC timestamps
Automatic recording run_graph() appends each decision before returning it, and raises if it cannot. Whether every decision of a system goes through Kyvern depends on the integration, so the report cannot show it automatic (NOT ASSESSED)

Retention. Article 19(1) (providers) and Article 26(6) (deployers) require automatically generated logs to be kept for a period appropriate to the system's purpose, of at least six months, unless other Union or national law says otherwise. (The ten-year period in Article 18 is for technical and quality documentation, not logs.) Keeping the chain files is the provider's and deployer's storage policy; Kyvern does not manage storage lifetime. The report shows the earliest entry in the chain and its age (retention, INFO).

Article 12(3) — Remote biometric identification (out of scope for Kyvern, included for reference)

Article 12(3) imposes additional logging requirements that apply only to remote biometric identification systems listed in Annex III, paragraph 1(a). Kyvern is a decision-provenance layer for autonomous systems (robots, vehicles, effectors) — not a remote biometric identification system. Article 12(3) is reproduced here for reference only and is not part of Kyvern's compliance scope.

The Article 12(3) requirements (biometric ID systems only) are:

  • the period of use of the system
  • the reference database against which input data has been checked
  • the input data that led to a given output, where practicable
  • the identity of the natural persons involved in the verification

Article 14 — Human Oversight

Article 14 requires that high-risk AI systems be designed to allow natural persons to effectively oversee operation, including the ability to:

  • understand the system's capabilities and limitations
  • monitor operation and detect anomalies
  • override or interrupt the system
  • take informed decisions based on system output

What the chain can show for Article 14. Human oversight is mostly a property of the deployed system: who can see its output, stop it or override it. The chain shows only what was recorded:

Aspect What Kyvern records Report check
Approval before high-risk actions Each decision records requires_operator_approval; ENGAGE decisions always set it. Enforcing the approval is the integration's job: Kyvern records that approval was required, not that it was given approval_flag
Human interventions Decisions an operator made, if the integration records them with source=operator operator_decisions (INFO, or NOT ASSESSED if none)
Override or stop Not visible in a chain override (NOT ASSESSED)
Automated safety downgrades guardrails_triggered and guardrail_reasoning; guardrails only lower an action (see the threat model). These are automated checks, not human oversight guardrails (INFO)
Policy transparency Policies are human-authored YAML; each decision records the SHA-256 of the policy it was made under, and --policy checks it policy

What the report's results mean

Every row in the report's Article 12 and 14 tables is a check run on the chain:

  • PASS / FAIL — the check ran on the chain, with the counts as evidence.
  • NOT ASSESSED — the chain cannot show it; the row says why.
  • N/A — nothing to check (for example, no ENGAGE decisions).
  • INFO — a figure, not a pass/fail claim.

If the chain fails integrity, the checks computed from its records are NOT ASSESSED: unverified records are not evidence. A PASS supports an assessment under the Article named; it does not establish conformity, which is assessed under Article 43.

When to use kyvern-report

Scenario Action
Scheduled audit Run monthly, store PDFs alongside chain files
Incident investigation Run against the chain segment covering the incident window using --period
Regulator request Generate report from the requested chain, provide PDF + chain file + public key
Pre-deployment review Run against a test chain to see which checks pass for the policy version you plan to deploy

Example

# Generate demo data
python scripts/generate_demo_chain.py

# Produce the evidence report
kyvern-report /tmp/kyvern-demo/chain.jsonl \
    --policy config/policies/default.yaml \
    --pubkey /tmp/kyvern-demo/signing.pub \
    --output evidence_report.pdf \
    --system-id "AMR-Fleet-A" \
    --operator "Operations Team" \
    --period "2026-05-16/2026-05-16"

Disclaimer

This report establishes audit evidence based on observable, cryptographically verifiable properties of the decision chain. It does not constitute third-party certification (SOC 2, ISO 27001, or equivalent). Formal certification requires an accredited conformity assessment body under Article 43 of the EU AI Act.